diff --git a/dc b/dc index f679cf0..60623f3 100644 --- a/dc +++ b/dc @@ -20,6 +20,10 @@ "url": "https://ghproxy.cn/https://raw.githubusercontent.com/ls125781003/xyqonlinerule/main/XYQTVBox.json", "name": "香雅情演示线路" }, + { + "url": "https://ghproxy.cn/https://raw.githubusercontent.com/ls125781003/tvboxtg/main/drpy_t3/api.json", + "name": "drpy_t3精选" + }, { "url": "https://ghproxy.cn/https://raw.githubusercontent.com/ls125781003/tvboxtg/main/南风/api.json", "name": "南风" diff --git a/dc1 b/dc1 index 16bb092..a69aeab 100644 --- a/dc1 +++ b/dc1 @@ -20,6 +20,10 @@ "url": "https://ghproxy.cc/https://raw.githubusercontent.com/ls125781003/xyqonlinerule/main/XYQTVBox.json", "name": "香雅情演示线路" }, + { + "url": "https://ghproxy.cc/https://raw.githubusercontent.com/ls125781003/tvboxtg/main/drpy_t3/api.json", + "name": "drpy_t3精选" + }, { "url": "https://ghproxy.cc/https://raw.githubusercontent.com/ls125781003/tvboxtg/main/南风/api.json", "name": "南风" diff --git a/dc2 b/dc2 index 66eeacf..f7f2307 100644 --- a/dc2 +++ b/dc2 @@ -20,6 +20,10 @@ "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/ls125781003/xyqonlinerule/main/XYQTVBox.json", "name": "香雅情演示线路" }, + { + "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/ls125781003/tvboxtg/main/drpy_t3/api.json", + "name": "drpy_t3精选" + }, { "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/ls125781003/tvboxtg/main/南风/api.json", "name": "南风" diff --git a/drpy_t3/api.json b/drpy_t3/api.json new file mode 100644 index 0000000..d598f59 --- /dev/null +++ b/drpy_t3/api.json @@ -0,0 +1,1078 @@ +{ + "wallpaper": "https://tuapi.eees.cc/api.php?category=fengjing&type=302", + "homepage": "https://github.com/hjdhnx/hipy-server", + "homeLogo": "./img/logo500x200-1.png", + "spider": "./jar/pg.jar?md5=7633f8ea346c082b7aa163be58aed023", + "sites": [ + { + "key": "hipy_js_360影视[官]", + "name": "360影视[官](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/360影视[官].js" + }, + { + "key": "hipy_js_58动漫[漫]", + "name": "58动漫[漫](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/58动漫[漫].js" + }, + { + "key": "hipy_js_88看球[球]", + "name": "88看球[球](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/88看球[球].js" + }, + { + "key": "88Pan", + "name": "88网盘|网盘搜索", + "type": 3, + "api": "csp_EightEight", + "timeout": 60, + "ext": "./json/tokenm.json$$$https://662688.xyz$$$", + "style": { + "type": "list", + "ratio": 1.1 + }, + "order_num": 9999 + }, + { + "key": "hipy_js_阿里土豆[盘]", + "name": "阿里土豆[盘](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/阿里土豆[盘].js" + }, + { + "key": "hipy_js_老白故事[box]", + "name": "老白故事[box](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/老白故事[box].js" + }, + { + "key": "hipy_js_爱看机器人[虫]", + "name": "爱看机器人[虫](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/爱看机器人[虫].js" + }, + { + "key": "hipy_js_爱看农民[优]", + "name": "爱看农民[优](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/爱看农民[优].js" + }, + + { + "key": "hipy_js_爱上你听书网[听]", + "name": "爱上你听书网[听](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/爱上你听书网[听].js" + }, + { + "key": "hipy_js_贝乐虎[儿]", + "name": "贝乐虎[儿](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/贝乐虎[儿].js" + }, + { + "key": "Local", + "name": "本地", + "type": 3, + "api": "csp_Local", + "order_num": 9999 + }, + { + "key": "DaPanSo", + "name": "大盘搜|网盘搜索", + "type": 3, + "api": "csp_DaPanSo", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./json/tokenm.json$$$https://dapanso.com$$$proxy$$$1", + "order_num": 9999 + }, + { + "key": "hipy_js_豆瓣[官]", + "name": "豆瓣[官](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/豆瓣[官].js" + }, + { + "key": "hipy_js_好趣网[播]", + "name": "好趣网[播](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/好趣网[播].js" + }, + { + "key": "hipy_js_黑木耳资源[资]", + "name": "黑木耳资源[资](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/黑木耳资源[资].js" + }, + + { + "key": "hipy_js_剧圈圈", + "name": "剧圈圈(drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/剧圈圈.js" + }, + { + "key": "hipy_js_咖啡影视", + "name": "咖啡影视(drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/咖啡影视.js" + }, + { + "key": "hipy_js_可可影视[优]", + "name": "可可影视[优](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/可可影视[优].js" + }, + { + "key": "酷狗", + "name": "酷狗", + "type": 3, + "api": "csp_Kugou", + "searchable": 1, + "changeable": 0, + "order_num": 9999 + }, + + { + "key": "QuarkPanso", + "name": "夸克盘搜|夸克搜索", + "type": 3, + "api": "csp_QuarkPanso", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./json/tokenm.json", + "style": { + "type": "list", + "ratio": 1.1 + }, + "order_num": 9999 + }, + + { + "key": "hipy_js_六月听书[听]", + "name": "六月听书[听](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/六月听书[听].js" + }, + + + { + "key": "秒搜", + "name": "秒搜|网盘搜索", + "type": 3, + "api": "csp_MiaoSou", + "timeout": 60, + "ext": "./json/tokenm.json", + "style": { + "type": "list", + "ratio": 1.1 + }, + "order_num": 9999 + }, + + { + "key": "hipy_js_南瓜影视[优]", + "name": "南瓜影视[优](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/南瓜影视[优].js" + }, + + { + "key": "盘友圈", + "name": "盘友圈|网盘搜索", + "type": 3, + "api": "csp_Panyq", + "timeout": 60, + "ext": "./json/tokenm.json$$$site$$$proxy", + "order_num": 9999 + }, + { + "key": "PikaSo", + "name": "皮卡搜|网盘搜索", + "type": 3, + "api": "csp_PikaSo", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./json/tokenm.json$$$https://www.pikaso.top/$$$None", + "style": { + "type": "list", + "ratio": 1.1 + }, + "order_num": 9999 + }, + { + "key": "Ppxzy", + "name": "皮皮虾|网盘", + "type": 3, + "api": "csp_Ppxzy", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./json/tokenm.json$$$https://ppxzy.ink$$$proxy$$$1", + "order_num": 9999 + }, + + { + "key": "hipy_js_七色番[漫]", + "name": "七色番[漫](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/七色番[漫].js" + }, + + { + "key": "Funletu", + "name": "趣盘搜|夸克搜索", + "type": 3, + "api": "csp_Funletu", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./json/tokenm.json", + "style": { + "type": "list", + "ratio": 1.1 + }, + "order_num": 9999 + }, + + { + "key": "hipy_js_360吧[球]", + "name": "360吧[球](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/360吧[球].js" + }, + + { + "key": "hipy_js_童趣[儿]", + "name": "童趣[儿](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/童趣[儿].js" + }, + + { + "key": "hipy_js_素白白[优]", + "name": "素白白[优](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/素白白[优].js" + }, + + { + "key": "hipy_js_兔小贝[儿]", + "name": "兔小贝[儿](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/兔小贝[儿].js" + }, + { + "key": "push_agent", + "name": "推送", + "type": 3, + "api": "csp_Push", + "changeable": 0, + "timeout": 30, + "ext": "./json/tokenm.json", + "order_num": 9999 + }, + { + "key": "yydsys", + "name": "玩你老哥|网盘", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./json/tokenm.json$$$https://tv.yydsys.top/$$$proxy$$$1$$$./json/wogg.json", + "order_num": 9999 + }, + + { + "key": "Wobg", + "name": "玩偶表哥|网盘", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./json/tokenm.json$$$https://wobge.run.goorm.io$$$proxy$$$1$$$./json/wogg.json", + "order_num": 9999 + }, + { + "key": "hipy_js_玩偶哥哥[盘]", + "name": "玩偶哥哥[盘](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/玩偶哥哥[盘].js" + }, + { + "key": "Wogg", + "name": "玩偶哥哥|网盘", + "type": 3, + "api": "csp_Wogg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./json/tokenm.json$$$https://wogg.link/$$$proxy$$$1$$$./json/wogg.json", + "order_num": 9999 + }, + + { + "key": "hipy_js_网飞猫[优]", + "name": "网飞猫[优](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/网飞猫[优].js" + }, + { + "key": "网盘配置", + "name": "网盘及彈幕配置", + "type": 3, + "api": "csp_Config", + "searchable": 0, + "changeable": 0, + "ext": "./json/tokenm.json", + "order_num": 9999 + }, + + + { + "key": "YunSo", + "name": "小云搜索|网盘搜索", + "type": 3, + "api": "csp_YunSo", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./json/tokenm.json$$$https://www.yunso.net$$$None$$$1", + "style": { + "type": "list", + "ratio": 1.1 + }, + "order_num": 9999 + }, + + + { + "key": "hipy_js_一起看[优]", + "name": "一起看[优](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/一起看[优].js" + }, + + { + "key": "Yinyuetai", + "name": "音悦台", + "type": 3, + "api": "csp_Yinyuetai", + "searchable": 1, + "changeable": 0, + "order_num": 9999 + }, + { + "key": "hipy_js_樱花动漫[漫]", + "name": "樱花动漫[漫](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/樱花动漫[漫].js" + }, + + { + "key": "hipy_js_有声绘本网[听]", + "name": "有声绘本网[听](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/有声绘本网[听].js" + }, + { + "key": "hipy_js_有声小说吧[听]", + "name": "有声小说吧[听](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/有声小说吧[听].js" + }, + { + "key": "YunPan", + "name": "云盘资源|网盘", + "type": 3, + "api": "csp_YunPan", + "timeout": 60, + "ext": "./json/tokenm.json$$$None$$$proxy$$$1", + "order_num": 9999 + }, + { + "key": "YunPanOne", + "name": "云盘One|网盘搜索", + "type": 3, + "api": "csp_YunPanOne", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./json/tokenm.json$$$None$$$proxy$$$1", + "order_num": 9999 + }, + + { + "key": "hipy_js_闪雷电", + "name": "闪雷电(drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/闪雷电.js" + }, + + { + "key": "hipy_js_i275听书[听]", + "name": "i275听书[听](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/i275听书[听].js" + }, + + { + "key": "Iktv", + "name": "KTV", + "type": 3, + "api": "csp_Iktv", + "searchable": 1, + "changeable": 0, + "order_num": 9999 + }, + + { + "key": "hipy_js_MuteFun[漫]", + "name": "MuteFun[漫](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/MuteFun[漫].js" + }, + { + "key": "hipy_js_NT动漫[漫]", + "name": "NT动漫[漫](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/NT动漫[漫].js" + }, + + { + "key": "hipy_js_路漫漫[漫]", + "name": "路漫漫[漫](drpy_t3)", + "type": 3, + "api": "./drpy_libs/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./drpy_js/路漫漫[漫].js" + } + + ], + "parses": [ + { + "name": "777", + "url": "https://jx.777jiexi.com/player/?url=", + "type": 0, + "ext": { + "flag": [ + "qiyi", + "imgo", + "爱奇艺", + "奇艺", + "qq", + "qq 预告及花絮", + "腾讯", + "youku", + "优酷", + "pptv", + "PPTV", + "letv", + "乐视", + "leshi", + "mgtv", + "芒果", + "sohu", + "xigua", + "fun", + "风行" + ] + }, + "header": { + "User-Agent": "Mozilla/5.0" + } + }, + { + "name": "8090g", + "url": "https://www.8090g.cn/jiexi/?url=", + "type": 0, + "ext": { + "flag": [ + "qiyi", + "imgo", + "爱奇艺", + "奇艺", + "qq", + "qq 预告及花絮", + "腾讯", + "youku", + "优酷", + "pptv", + "PPTV", + "letv", + "乐视", + "leshi", + "mgtv", + "芒果", + "sohu", + "xigua", + "fun", + "风行" + ] + }, + "header": { + "User-Agent": "Mozilla/5.0" + } + }, + { + "name": "ik9", + "url": "https://yparse.ik9.cc/index.php?url=", + "type": 0, + "ext": { + "flag": [ + "qiyi", + "imgo", + "爱奇艺", + "奇艺", + "qq", + "qq 预告及花絮", + "腾讯", + "youku", + "优酷", + "pptv", + "PPTV", + "letv", + "乐视", + "leshi", + "mgtv", + "芒果", + "sohu", + "xigua", + "fun", + "风行" + ] + }, + "header": { + "User-Agent": "Mozilla/5.0" + } + }, + { + "name": "杰森", + "url": "https://jx.jsonplayer.com/player/?url=", + "type": 0, + "ext": { + "flag": [ + "qiyi", + "imgo", + "爱奇艺", + "奇艺", + "qq", + "qq 预告及花絮", + "腾讯", + "youku", + "优酷", + "pptv", + "PPTV", + "letv", + "乐视", + "leshi", + "mgtv", + "芒果", + "sohu", + "xigua", + "fun", + "风行" + ] + }, + "header": { + "User-Agent": "Mozilla/5.0" + } + }, + { + "name": "阳途", + "url": "https://jx.yangtu.top/?url=", + "type": 0, + "ext": { + "flag": [ + "qiyi", + "imgo", + "爱奇艺", + "奇艺", + "qq", + "qq 预告及花絮", + "腾讯", + "youku", + "优酷", + "pptv", + "PPTV", + "letv", + "乐视", + "leshi", + "mgtv", + "芒果", + "sohu", + "xigua", + "fun", + "风行" + ] + }, + "header": { + "User-Agent": "Mozilla/5.0" + } + }, + { + "name": "冰豆", + "url": "https://bd.jx.cn/?url=", + "type": 0, + "ext": { + "flag": [ + "qiyi", + "imgo", + "爱奇艺", + "奇艺", + "qq", + "qq 预告及花絮", + "腾讯", + "youku", + "优酷", + "pptv", + "PPTV", + "letv", + "乐视", + "leshi", + "mgtv", + "芒果", + "sohu", + "xigua", + "fun", + "风行" + ] + }, + "header": { + "User-Agent": "Mozilla/5.0" + } + }, + { + "name": "m3u8TV", + "url": "https://jx.m3u8.tv/jiexi/?url=", + "type": 0, + "ext": { + "flag": [ + "qiyi", + "imgo", + "爱奇艺", + "奇艺", + "qq", + "qq 预告及花絮", + "腾讯", + "youku", + "优酷", + "pptv", + "PPTV", + "letv", + "乐视", + "leshi", + "mgtv", + "芒果", + "sohu", + "xigua", + "fun", + "风行" + ] + }, + "header": { + "User-Agent": "Mozilla/5.0" + } + }, + { + "name": "听乐", + "url": "https://jx.dj6u.com/?url=", + "type": 0, + "ext": { + "flag": [ + "qiyi", + "imgo", + "爱奇艺", + "奇艺", + "qq", + "qq 预告及花絮", + "腾讯", + "youku", + "优酷", + "pptv", + "PPTV", + "letv", + "乐视", + "leshi", + "mgtv", + "芒果", + "sohu", + "xigua", + "fun", + "风行" + ] + }, + "header": { + "User-Agent": "Mozilla/5.0" + } + }, + { + "name": "虾米", + "url": "https://jx.xmflv.com/?url=", + "type": 0, + "ext": { + "flag": [ + "qiyi", + "imgo", + "爱奇艺", + "奇艺", + "qq", + "qq 预告及花絮", + "腾讯", + "youku", + "优酷", + "pptv", + "PPTV", + "letv", + "乐视", + "leshi", + "mgtv", + "芒果", + "sohu", + "xigua", + "fun", + "风行" + ] + }, + "header": { + "User-Agent": "Mozilla/5.0" + } + }, + { + "name": "虾米2", + "url": "https://jx.xmflv.cc/?url=", + "type": 0, + "ext": { + "flag": [ + "qiyi", + "imgo", + "爱奇艺", + "奇艺", + "qq", + "qq 预告及花絮", + "腾讯", + "youku", + "优酷", + "pptv", + "PPTV", + "letv", + "乐视", + "leshi", + "mgtv", + "芒果", + "sohu", + "xigua", + "fun", + "风行" + ] + }, + "header": { + "User-Agent": "Mozilla/5.0" + } + }, + { + "name": "云析", + "url": "https://jx.yparse.com/index.php?url=", + "type": 0, + "ext": { + "flag": [ + "qiyi", + "imgo", + "爱奇艺", + "奇艺", + "qq", + "qq 预告及花絮", + "腾讯", + "youku", + "优酷", + "pptv", + "PPTV", + "letv", + "乐视", + "leshi", + "mgtv", + "芒果", + "sohu", + "xigua", + "fun", + "风行" + ] + }, + "header": { + "User-Agent": "Mozilla/5.0" + } + }, + { + "name": "红狐", + "url": "https://player.mrgaocloud.com/player/?url=", + "type": 0, + "ext": { + "flag": [ + "qiyi", + "imgo", + "爱奇艺", + "奇艺", + "qq", + "qq 预告及花絮", + "腾讯", + "youku", + "优酷", + "pptv", + "PPTV", + "letv", + "乐视", + "leshi", + "mgtv", + "芒果", + "sohu", + "xigua", + "fun", + "风行" + ] + }, + "header": { + "User-Agent": "Mozilla/5.0" + } + } + ], + "flags": [ + "imgo", + "youku", + "qq", + "qq 预告及花絮", + "iqiyi", + "qiyi", + "fun", + "letv", + "leshi", + "sohu", + "tudou", + "xigua", + "cntv", + "1905", + "pptv", + "mgtv", + "wasu", + "bilibili", + "renrenmi" + ], + "lives": [ + { + "name": "cntv", + "type": 0, + "url": "./lives/live_cntv.txt", + "epg": "http://epg.112114.xyz/?ch={name}&date={date}" + }, + { + "name": "南风", + "type": 0, + "url": "./lives/nanfeng.txt", + "epg": "http://epg.112114.xyz/?ch={name}&date={date}" + }, + { + "name": "飞龙", + "type": 0, + "url": "./lives/feilong.txt", + "epg": "http://epg.112114.xyz/?ch={name}&date={date}" + }, + { + "name": "开心", + "type": 0, + "url": "./lives/开心频道.txt", + "epg": "http://epg.112114.xyz/?ch={name}&date={date}" + }, + { + "name": "杭州华数", + "type": 0, + "url": "./lives/杭州华数.m3u", + "epg": "" + }, + { + "name": "华数2", + "type": 0, + "url": "./lives/华数2.m3u", + "epg": "" + } + ] +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/360吧[球].js b/drpy_t3/drpy_js/360吧[球].js new file mode 100644 index 0000000..38ed6fa --- /dev/null +++ b/drpy_t3/drpy_js/360吧[球].js @@ -0,0 +1,69 @@ +globalThis.getVideos = function (link, key) { + let html = request(link); + let json = JSON.parse(html); + let data = json.data; + data = data[key]; + let videos = data.map((n) => { + let id = n.url; + let name = n.league_name_zh + ' ' + n.home_team_zh + ' VS ' + n.away_team_zh; + let pic = n.cover; + let remarks = n.nickname; + return { + vod_id: id, + vod_name: name, + vod_pic: pic, + vod_remarks: remarks, + }; + }); + return videos +} +var rule = { + 类型: '影视',//影视|听书|漫画|小说 + title: '360吧[球]', + host: 'https://m.360ba.co/', + homeUrl: '/api/web/h5_index', + url: '/api/web/live_lists/fyclass', + searchUrl: '/api/web/search?keyword=**', + searchable: 2, + quickSearch: 0, + filterable: 0, + headers: { + 'User-Agent': 'MOBILE_UA', + }, + timeout: 5000, + class_name: '全部&足球&篮球&综合', + class_url: '1&2&3&99', + play_parse: true, + pagecount: { + "1": 1, + "2": 1, + "3": 1, + "99": 1, + }, + lazy: $js.toString(() => { + input = {parse: 0, url: input, header: rule.headers}; + }), + 预处理: $js.toString(() => { + Object.assign(rule.headers, { + 'Referer': rule.host, + 'Origin': rule.host, + }); + }), + 推荐: $js.toString(() => { + VODS = getVideos(input, 'hot_matches'); + + }), + 一级: $js.toString(() => { + VODS = []; + if (MY_PAGE <= 1) { + VODS = getVideos(input, 'data'); + } + }), + 二级: '*', + 搜索: $js.toString(() => { + VODS = []; + if (MY_PAGE <= 1) { + VODS = getVideos(input, 'ball'); + } + }), +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/360影视[官].js b/drpy_t3/drpy_js/360影视[官].js new file mode 100644 index 0000000..d668037 --- /dev/null +++ b/drpy_t3/drpy_js/360影视[官].js @@ -0,0 +1,99 @@ +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/fyfilter&size=35&pageno=fypage&callback=', + filterable: 1, + filter_url: 'filter/list?catid=fyclass&rank={{fl.排序}}&cat={{fl.类型}}&year={{fl.年代}}&area={{fl.地区}}', + filter: "H4sIAAAAAAAAA+2YS08jRxCA/4vPHGbMvrK3/IJcor1Eq4gDUqIlbLQhkVYrJINt1jYPA8vLa2MgYJtlMdhAiD1e4z8z3TP+Fxm7Xu0oGs2BQBRx81fVXV3V3VNV7XcxO/b8u3exV5NvY89jXrOjyouxsdj0xE+TJv82MfXr5HDgdCBW6eN+8nggDiA2O4bSrZLK1lCKQDov09TJNOoQeF7u2O2WaB4A6fTcqk5soQ6BbdbWVLtDNgHYZrYm6yHwvNy51z2heQA8r/JebCKwL5kd18mSLwCsmz/1ttZIB2DE5210JL4B8Lyt937WoXkA7Kdzorqb5CcA6dwv+/5ZA3UIbLO+5GfKZBOAfckf+Ye8LwCsW1lQ+QvSAbDNZE7PfySbAOJL1VtdYF+GwDbT126Hzg9h9uVACxdOlRpqyZELxxzpwi2kg/Fk/KjWL8jCbquuit1+taBb5zgCYXSEyjd0+4Y3ZAgc9GUjGEFBA/Dh3KyIDoF0/b1PokNgm9sVXTolmwCy3qa53qY5z19sig6B9+HmT9EhsG65oZwq6QAiH077yu0cGodDHOVw4lb8EcqGPw35uMjHTXlc5HFTbovcNuWWyC1Dbn/F8uCnIX8m8mem/KnIn5ryJyJ/Ysofi/yxKZd4bTNeW+K1zXhtidc247UlLtuMy5K4LDMuS+KyzLgsicuSuHTxSm9/Qs3UzPdvJyfejJy6XllXTl5OnXn01HUp4ffWvGRd7+yjtTcT069+eD0jSw2HuK3c6JCpiZnJX0ZGqfy2qnT985Qx6ufXP07PDBx7ORaL31aJ8o8TUhYQopSM0BQXUvbCykI/2VWtecoSAGxz7lol82QTIFIKXyi6ziLpADj2elUtUdlDiJL6Va6pettcvobAWbBS9s93KQsC8HqN5aBI0noAHPvuut6pUOxDMLdNnV0rp05LDmFEHdYwJNO6QBkfQQpj1b2hm4gQqZm4uyIGcFdFLKwYhRWxsOIXVqj0VkPl9tXuATc8xA9l56Hs/OfKzvitlZ1UU+UPvVqCPgtm/qJKe67jyAhh9ne17J1yKQHgbzWRlakIkrw+q2VuAAHYr7Oe38iQUwBmIk3tGYk0APZ2Y09fcbIE4HmFj+4XfikASE65dNurnFOGwL7MLakSvYQQjHzTPyRfECSHXasGrwfAulZLZ6iMIvC+NNZUqkf7AsBZtfvBn6dyiGC+ys7odYVgFBG9WZAiMgD5AC6Mlx5AlBebf/W716EYEHhes+t36WwRWLde1zkqsQj/j1dZ2AvqtBZcD9IB3EuSGeaPR7eVPwJP/ANODQBRGpdBaQ5uduXSKNXA/EXWN2Q2As/u5FW6RVMBojSFYV+WWljvF6gMIETJcHrlWBpwBNbNLXqZJukAWHfR0SnKcAjsS7ujk7Q1CDxv/0AVqQNFMNpPL8sxAMi1cKTpReCr7VyoOmU/BLaZ6gXfPdkE4AzQWw1WoQwAEOWBoRMn4icC60L+y/KKOV2gTIUQ0rjLvM8V4zEAILqyzvENBojSzntHN1JNEOQhtGg82AD+Vk+zdPTCUsP+UN2mMYKZRnzz4mtRI5Du2xeigt9Gj+ttnoz85zcikjfOktf5MPrfoCm6k3wclkv/scl/aNPvvU2XeG0z3n+3fQ9A4rXMeC2J1zLjtSReS+IdeQYg3FeBnv0LfL9z7fwYAAA=", + filter_def: {}, + 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.toString(() => { + 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 = 50; + let vod_play = {}; + let sites = data.playlink_sites; + sites.forEach(function (site) { + let playList = ""; + let vodItems = []; + print(data) + if (data.allupinfo) { + let total = parseInt(data.allupinfo[site]); + print(total) + for (let j = 1; j < total; j += delta) { + let end = Math.min(total, j + delta - 1); + print(end) + let url2 = buildUrl(input, { start: j, end: end, site: site }); + let vod_data = JSON.parse(fetch(url2), fetch_params).data; + if (vod_data != null) { + if (vod_data.allepidetail) { + vod_data = vod_data.allepidetail[site]; + vod_data.forEach(function (item, index) { + vodItems.push((item.playlink_num || "") + "$" + urlDeal(item.url || "")) + }) + } else { + vod_data = vod_data.defaultepisode; + vod_data.forEach(function (item, index) { + vodItems.push((item.period || "") + (item.name || "") + "$" + urlDeal(item.url) || "") + }) + } + } + } + } else { + let item = data.playlinksdetail[site]; + vodItems.push((item.sort || "") + "$" + urlDeal(item.default_url || "")) + } if (vodItems.length > 0) { + 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/drpy_t3/drpy_js/58动漫[漫].js b/drpy_t3/drpy_js/58动漫[漫].js new file mode 100644 index 0000000..a0b842d --- /dev/null +++ b/drpy_t3/drpy_js/58动漫[漫].js @@ -0,0 +1,25 @@ +muban.vfed.二级.title = 'h1&&Text;.fed-col-md3:eq(0)&&Text'; +muban.vfed.二级.desc = '.fed-col-md3:eq(3)&&Text;;;.fed-col-md6--span:eq(0)&&Text;.fed-col-md6--span:eq(1)&&Text'; +muban.vfed.二级.tabs = '.nav-tabs&&li'; +muban.vfed.二级.lists = '.myui-content__list:eq(#id)&&li'; +var rule = { + title: '58动漫[漫]', + 模板: 'vfed', + host: 'http://www.ting38.com', + url: '/search.php?page=fypage&searchtype=5&tid=fyclassfyfilter', + class_parse: '.fed-pops-navbar&&li;a&&Text;a&&href;.*/(.*?).html', + play_parse: true, + lazy: "js:var html=JSON.parse(request(input).match(/r player_.*?=(.*?) { + if (/embed=/.test(input)) { + let url = input.match(/embed=(.*?)&/)[1]; + url = base64Decode(url); + input = { + jx: 0, + url: url.split('#')[0], + parse: 0 + } + } else if (/\?url=/.test(input)) { + input = { + jx: 0, + url: input.split('?url=')[1].split('#')[0], + parse: 0 + } + } else { + input + } + }), + 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: "js:TABS=['道长在线']", + lists: $js.toString(() => { + LISTS = []; + let html = request(input.replace('play', 'play-url')); + let pdata = JSON.parse(html).data; + pdata = pdata.slice(6); + pdata = pdata.slice(0, -2); + pdata = base64Decode(pdata); + // log(pdata); + let jo = JSON.parse(pdata).links; + let d = jo.map(function (it) { + return it.name + '$' + urlencode(it.url) + }); + LISTS.push(d) + }), + }, + 搜索: "", +}; \ No newline at end of file diff --git a/drpy_t3/drpy_js/MuteFun[漫].js b/drpy_t3/drpy_js/MuteFun[漫].js new file mode 100644 index 0000000..865f718 --- /dev/null +++ b/drpy_t3/drpy_js/MuteFun[漫].js @@ -0,0 +1,6 @@ +var rule = { + 模板: 'mxpro', + title: 'MuteFun[漫]', + host: 'https://www.mutedm.com/', + class_parse: '.navbar-items li;a&&Text;a&&href;/(\\d+).html', +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/NT动漫[漫].js b/drpy_t3/drpy_js/NT动漫[漫].js new file mode 100644 index 0000000..a369ba0 --- /dev/null +++ b/drpy_t3/drpy_js/NT动漫[漫].js @@ -0,0 +1,41 @@ +var rule = { + 类型: '影视',//影视|听书|漫画|小说 + title: 'NT动漫[漫]', + host: 'http://www.ntdm9.com/', + url: '/type/fyclass-fypage.html', + class_name: '日本&中国&欧美', + class_url: 'riben&zhongguo&omei', + searchUrl: '/search/**----------fypage---.html', + searchable: 2, + quickSearch: 0, + filterable: 1, + filter: '', + filter_url: '', + filter_def: {}, + headers: { + 'User-Agent': 'MOBILE_UA', + }, + timeout: 5000, + class_parse: '#side-menu li;a&&Text;a&&href;/(.*?)\.html', + cate_exclude: '', + play_parse: true, + lazy: $js.toString(() => { + input = {parse: 1, url: input, js: ''}; + }), + double: true, + 推荐: '.blockcontent;ul.ul_li_a5&&li;.anime_icon1_name&&Text;*;.anime_icon1_name1&&Text;*', + 一级: '.blockdif2;.cell_imform_name&&Text;img&&src;.newname&&Text;a&&href;.cell_imform_desc&&Text', + 二级: { + title: 'h4&&Text;.baseblock2&&li:eq(-1)&&Text', + img: 'img&&src', + desc: '.baseblock2&&li&&Text;.baseblock2&&li:eq(-2)&&Text;.baseblock2&&li:eq(2)&&Text;;', + content: '.detail_imform_desc_pre&&p&&Text', + tabs: 'ul.title&&li', + lists: '.movurl:eq(#id)&&a', + tab_text: 'body&&Text', + list_text: 'body&&Text', + list_url: 'a&&href', + list_url_prefix: '', + }, + 搜索: '*', +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/i275听书[听].js b/drpy_t3/drpy_js/i275听书[听].js new file mode 100644 index 0000000..bd87fef --- /dev/null +++ b/drpy_t3/drpy_js/i275听书[听].js @@ -0,0 +1,61 @@ +var rule = { + 类型: '听书', + title: 'i275听书', + host: 'https://m.ting275.com', + // url: '/category/fyclass/2.html?page=fypage', + url: '/category/fyclass/fyfilter/fypage.html', + filterable: 1,//是否启用分类筛选, + filter_url: '{{fl.by}}', + filter: { + "6": [{"key": "by", "name": "排序", "value": [{"n": "更新", "v": "2"}, {"n": "人气", "v": "3"}]}], + "7": [{"key": "by", "name": "排序", "value": [{"n": "更新", "v": "2"}, {"n": "人气", "v": "3"}]}], + "8": [{"key": "by", "name": "排序", "value": [{"n": "更新", "v": "2"}, {"n": "人气", "v": "3"}]}], + "9": [{"key": "by", "name": "排序", "value": [{"n": "更新", "v": "2"}, {"n": "人气", "v": "3"}]}], + "10": [{"key": "by", "name": "排序", "value": [{"n": "更新", "v": "2"}, {"n": "人气", "v": "3"}]}], + "11": [{"key": "by", "name": "排序", "value": [{"n": "更新", "v": "2"}, {"n": "人气", "v": "3"}]}], + "12": [{"key": "by", "name": "排序", "value": [{"n": "更新", "v": "2"}, {"n": "人气", "v": "3"}]}], + "13": [{"key": "by", "name": "排序", "value": [{"n": "更新", "v": "2"}, {"n": "人气", "v": "3"}]}], + "14": [{"key": "by", "name": "排序", "value": [{"n": "更新", "v": "2"}, {"n": "人气", "v": "3"}]}], + "15": [{"key": "by", "name": "排序", "value": [{"n": "更新", "v": "2"}, {"n": "人气", "v": "3"}]}], + "49": [{"key": "by", "name": "排序", "value": [{"n": "更新", "v": "2"}, {"n": "人气", "v": "3"}]}], + "50": [{"key": "by", "name": "排序", "value": [{"n": "更新", "v": "2"}, {"n": "人气", "v": "3"}]}], + "51": [{"key": "by", "name": "排序", "value": [{"n": "更新", "v": "2"}, {"n": "人气", "v": "3"}]}] + }, + filter_def: { + 6: {by: '2'}, + 7: {by: '2'}, + 8: {by: '2'}, + 9: {by: '2'}, + 10: {by: '2'}, + 11: {by: '2'}, + 12: {by: '2'}, + 13: {by: '2'}, + 14: {by: '2'}, + 15: {by: '2'}, + 49: {by: '2'}, + 50: {by: '2'}, + 51: {by: '2'} + }, + searchUrl: '/pc/index/search.html?keyword=**&page=fypage', + searchable: 2, + quickSearch: 0, + headers: {'User-Agent': 'MOBILE_UA'}, + class_name: '玄幻奇幻&都市言情&宫斗女频&官场商战&武侠仙侠&刑侦推理&探险科幻&重生穿越&恐怖惊悚&文学历史&两性情感&网游竞技&相声评书', + class_url: '6&7&8&9&10&11&12&13&14&15&49&50&51', + play_parse: true, + lazy: '', + limit: 6, + 推荐: '*', + // 一级:'.list-wrapper&&.item-link;h2--span&&Text;img&&data-cfsrc;.status&&Text;a&&href', + 一级: '.list-wrapper&&.item-link;h2--span&&Text;img&&src;.status&&Text;a&&href', + 二级: { + "title": ".book-title&&Text;.text:eq(0)&&Text", + // "img":".img&&data-cfsrc", + "img": ".img&&src", + "desc": ".update-time&&Text;;;.text:eq(1)&&Text;.text:eq(2)&&Text", + "content": ".book-intro&&Text", + "tabs": ".operate-bar&&.total-num", + "lists": ".book-list:eq(#id)&&.list-item" + }, + 搜索: '*', +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/一起看[优].js b/drpy_t3/drpy_js/一起看[优].js new file mode 100644 index 0000000..5631e66 --- /dev/null +++ b/drpy_t3/drpy_js/一起看[优].js @@ -0,0 +1,113 @@ +function verifyLogin(key) { + let cnt = 0; + let cookie = ''; + let content = ''; + let yzm_url = 'https://www.cpldq.com/include/vdimgck.php'; + log(`验证码链接:${yzm_url}`); + let submit_url = 'https://www.cpldq.com/search.php?scheckAC=check&page=1&searchtype=&order=&tid=&area=&year=&letter=&yuyan=&state=&money=&ver=&jq='; + log(`post登录链接:${submit_url}`); + while (cnt < OCR_RETRY) { + try { + let {cookie, html} = reqCookie(yzm_url + '?t=' + new Date().getTime(), {toBase64: true}); + let code = OcrApi.classification(html); + let code1 = eval(code.slice(0, -1)); + log(`第${cnt + 1}次验证码识别结果:${code}->${code1}`); + html = post(submit_url, { + headers: {Cookie: cookie}, + body: 'validate=' + code1 + '&searchword=' + key, + }); + if (/相关搜索结果/.test(html)) { + content = html; + return {cookie, html: content} // 需要返回cookie + } else if (!/相关搜索结果/.test(html) && cnt + 1 >= OCR_RETRY) { + cookie = ''; // 需要清空返回cookie + } + } catch (e) { + log(`第${cnt + 1}次验证码提交失败:${e.message}`); + if (cnt + 1 >= OCR_RETRY) { + cookie = ''; + } + } + cnt += 1 + } + return {cookie, html: content} +} + +globalThis.verifyLogin = verifyLogin; + +var rule = { + title: '一起看[优]', + host: 'http://www.cpldq.com', + url: '/cptype/fyclass-fypage.html', + searchUrl: '/search.php?page=fypage&searchword=**&searchtype=', + searchable: 0, + quickSearch: 0, + filterable: 1, + filter: '', + filter_url: '', + headers: { + 'User-Agent': 'MOBILE_UA', + }, + timeout: 5000, + class_parse: '.sb_login_alert_box&&li;a&&Text;a&&href;/(\\d+)\.html', + cate_exclude: '', + play_parse: true, + lazy: $js.toString(() => { + input = {parse: 1, url: input, js: ''}; + }), + double: true, + 推荐: '.main&&.bgte1130;ul&&.sb-film-one;*;*;*;*', + 一级: '.sb-area-index&&ul&&.qcontainer;i&&Text;.lazy&&data-original;.other&&Text;a&&href', + 二级: { + title: '.name&&Text;.ct&&dd&&Text', + img: '.lazy&&data-original', + desc: '.ct&&dd:eq(1)&&Text;.ct&&dd:eq(2)&&Text;.ct&&dt:eq(2)&&Text;.ct&&dt&&Text;', + content: 'div.ee&&Text', + tabs: '.playfrom&&li', + lists: '.playlist:eq(#id)&&ul&&li:not(:contains(滈凊))', + tab_text: 'body--sup&&Text', + list_text: 'body&&Text', + list_url: 'a&&href' + }, + //搜索: '*', + 搜索: $js.toString(() => { + let cookie = getItem(RULE_CK, '') + ';ssea2_search=ok'; + log('储存的cookie:' + cookie); + let ret = request(MY_URL, { + headers: { + Cookie: cookie, + } + }); + if (/系统安全验证/.test(ret)) { + let login = verifyLogin(KEY); + cookie = login.cookie; + if (cookie) { + log(`本次成功过验证,cookie:${cookie}`); + setItem(RULE_CK, cookie); + } else { + log(`本次自动过搜索验证失败,cookie:${cookie}`); + } + ret = login.html; + // ret = request(MY_URL, { + // headers: { + // Cookie: cookie, + // } + // }); + } + let d = []; + let p = rule.一级.split(';'); + let arr = pdfa(ret, p[0]); + arr.forEach(it => { + d.push({ + title: pdfh(it, p[1]), + pic_url: pdfh(it, p[2]), + desc: pdfh(it, p[3]), + + url: pdfh(it, p[4]), + content: '', + }); + + }); + setResult(d); + }), +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/七色番[漫].js b/drpy_t3/drpy_js/七色番[漫].js new file mode 100644 index 0000000..90bd406 --- /dev/null +++ b/drpy_t3/drpy_js/七色番[漫].js @@ -0,0 +1,37 @@ +var rule = { + title: "七色番[漫]", + host: "https://www.7sefun.top", + url: "/vodshow/fyclassfyfilter", + searchUrl: "/vodsearch/**----------fypage---.html", + searchable: 2, + quickSearch: 0, + filterable: 1, + filter: "H4sIAAAAAAAAAO2WS08TURTHv8usWdxb+riw4/2Wh7wNC2JqJCImgkZDMAiI5SEUAlQEUTTEItaCENIH6pfpTNtv4ZQ595xTywJdsZjd/H//c2fm1860d9KQRuWdSeNB8LlRaWRP0ubeklFmjA0/DPL8dHj0SfBycMzG5qtofjZawHYwpsqAXsxkElvZzWUoKOuJ7PYvMxyCGgKuDq+Y34/0UifgutlYbn9ar3MCdoe/c+eLunMCnvPgtZlM63M6QXdW6K21FYEOAnbhvey3Nd05AbvIgZlI6M4JeC9f1uh6EHDdj7Q1p90hYPdx39yJ6c4J2L1cyoZOdOcE9Jtfz28faj8n4LqVaDY8r9c5AbvdlG2sOyfoLv/hNJMMQweB7iVsTW/hvVwG7GYXrZl3unMCdqf7+fefsptfdY0ZJxIJK7RqbST1BGZ0PV7Nxc9ogjKe4+Iou5Fm58CsJ24FJ+6NjjyDXifdeoSn3EyeCWnt6u+pCP095y2d8141FyidC1wxJ0XJnIPYnLf0/ghNDRUmnRc5F4/lotP0ImO+zotsP9X2PD3ihYBfw85P6iDwC9t3k0l/pgtjvs6FCzrMrOgTYp8M5x7iHs4lccm5IC4YlxXI7UPGFXHFeYB4gHM/cT/nPuI+zslXcl9JvpL7SvKV3FeSr+S+knwl9xXkK7ivIF/BfQX5Cu4ryFdwX0G+gvsK8hXcV5Cv4L6CfAX3FeQruK8gX0G+sqJC+14eMq6IK84DxAOc+4n7OfcR93HuJe7lvJx4Oece4h7OJXHJuSDOfRX5Ku6ryFdxX0W+ivsq8lXcV5Gv4r6KfBX3VeSruK8iX8V9Ffkq7qvI1z4s+uGJRaz4G/bDo/N1fniqAFQhqQZSjaQGSA2SWiC1SOqA1CGpB1KPpAFIA5JGII1ImoA0IWkG0oykBUgLklYgrUjagLTRX6D+80PSDqQdSQeQDiSdQDqRdAHpQnIbyG0k3UC6kfQA6UHSC6QXSR+QPiT9QPqRDAAZQDIIZBCJeKHfgcIRf1SslXUztUqPCubiR8VaXrAi5/nIGZxmYsSexv/I5YVMKmUdb0B5f2RinJe5+JwZ0tuv8buPHgcLtzBUZnhuxnbb3VL/x5b6X7fN7obM3ZC5GzJ3Q+ZuyAx3Q+ZuyG7ihmzqDw1f3+kBFQAA", + filter_url: "--{{fl.排序}}-{{fl.类型}}-{{fl.语言}}-{{fl.字母}}---fypage---{{fl.年代}}.html", + filter_def: "", + headers: { + "User-Agent": "PC_UA" + }, + timeout: 5000, + class_parse: ".side-menu&&a;a&&Text;a&&href;/(\\d+)\\.html", + cate_exclude: "", + play_parse: true, + lazy: $js.toString(() => { + input = {parse: 1, url: input, js: '', header: rule.headers, parse_extra: '&is_pc=1'}; + }), + double: false, + 推荐: "*;.video-name&&Text;*;.video-time&&Text;*", + 一级: ".video.anim;.video-name&&Text;.videoimg&&src;.video-view&&Text;a&&href", + 二级: { + title: ".video-p-name&&Text;.video-p-sub1:eq(0)&&Text", + img: ".author-img&&src", + desc: ";;;.video-p-sub1:eq(1)&&Text;.video-p-sub1:eq(3)&&Text", + content: ".video-p-subtitle&&Text", + tabs: ".chat-stream-bfqs", + lists: ".vod-play-list-container:eq(#id) a", + tab_text: "body&&Text", + list_text: "body&&Text", + list_url: "a&&href" + }, + 搜索: ".video.anim;.video-by&&Text;*;.video-time&&Text;a&&href;" +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/兔小贝[儿].js b/drpy_t3/drpy_js/兔小贝[儿].js new file mode 100644 index 0000000..116cae5 --- /dev/null +++ b/drpy_t3/drpy_js/兔小贝[儿].js @@ -0,0 +1,26 @@ +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/drpy_t3/drpy_js/六月听书[听].js b/drpy_t3/drpy_js/六月听书[听].js new file mode 100644 index 0000000..836565d --- /dev/null +++ b/drpy_t3/drpy_js/六月听书[听].js @@ -0,0 +1,28 @@ +var rule = { + 类型: '听书', + title: '六月听书', + host: 'http://m.6yueting.com', + url: '/ys/fyclass/o2/pfypage', + searchUrl: '/search/index/search?content=**&type=1&pageNum=fypage&pageSize=40', + searchable: 2, + quickSearch: 0, + filterable: 0,//是否启用分类筛选, + headers: {'User-Agent': 'MOBILE_UA'}, + class_name: '全部分类&玄幻奇幻&修真武侠&恐怖灵异&古今言情&都市言情&穿越重生&粤语古仔&网游小说&通俗文学&历史纪实&军事&悬疑推理&ebc5系列&官场商战&儿童读物&广播剧&外文原版&评书大全&相声小品&百家讲坛&健康养生&教材&期刊头条&戏曲&脱口秀', + class_url: 't0&t1&t2&t3&t4&t28&t5&t6&t7&t11&t12&t13&t14&t18&t15&t16&t17&t22&t8&t9&t10&t20&t21&t23&t24&t27', + play_parse: true, + lazy: '', + limit: 6, + 图片来源: '@Referer=http://m.6yueting.com/@User-Agent=MOBILE_UA', + 推荐: '*', + 一级: '.list-wrapper&&.item-link;h2--span&&Text;img&&src;.status&&Text;a&&href', + 二级: { + "title": ".book-title&&Text;.text:eq(0)&&Text", + "img": ".img&&src", + "desc": ".text:eq(3)&&Text;;;.text:eq(1)&&Text;.text:eq(2)&&Text", + "content": ".book-intro&&Text", + "tabs": ".operate-bar&&.total-num", + "lists": ".book-list:eq(#id)&&.list-item" + }, + 搜索: 'js:let d=[];let MY_HOME="http://m.6yueting.com";let html=request(input);html=JSON.parse(html);let list=html.data.content;list.forEach(function(it){d.push({title:it.name.replace(/<.*?>/g,""),img:"http://img.6yueting.com:20001/"+it.coverUrlLocal,url:MY_HOME+"/list/"+it.code,desc:it.cdate,content:it.descXx.replace(/ /g,"")})});setResult(d);', +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/剧圈圈.js b/drpy_t3/drpy_js/剧圈圈.js new file mode 100644 index 0000000..c424471 --- /dev/null +++ b/drpy_t3/drpy_js/剧圈圈.js @@ -0,0 +1,12 @@ +Object.assign(muban.mxpro.二级, { + tab_text: 'div--small&&Text', +}); +var rule = { + 模板: 'mxpro', + title: '剧圈圈', + host: 'https://www.jqqzx.cc/', + url: '/vodshow/id/fyclass/page/fypage.html', + searchUrl: '/vodsearch**/page/fypage.html', + class_parse: '.navbar-items li:gt(1):lt(8);a&&Text;a&&href;.*/(.*?)\.html', + cate_exclude: '今日更新|热榜', +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/南瓜影视[优].js b/drpy_t3/drpy_js/南瓜影视[优].js new file mode 100644 index 0000000..71f75c3 --- /dev/null +++ b/drpy_t3/drpy_js/南瓜影视[优].js @@ -0,0 +1,189 @@ +// 注入全局方法 (仅支持tvbox的js1以及c#版drpy的js0,暂不支持drpy官方py版的js0) +// 注入全局方法 (仅支持tvbox的js1以及c#版drpy的js0,暂不支持drpy官方py版的js0) +// 注入全局方法 (仅支持tvbox的js1以及c#版drpy的js0,暂不支持drpy官方py版的js0) +globalThis.getHeaders= function(input){ + let t = new Date().getTime().toString(); + let headers = { + 'version_name': '1.0.6', + 'version_code': '6', + 'package_name': 'com.app.nanguatv', + 'sign': md5('c431ea542cee9679#uBFszdEM0oL0JRn@' + t).toUpperCase(), + 'imei': 'c431ea542cee9679', + 'timeMillis': t, + 'User-Agent': 'okhttp/4.6.0' + }; + return headers +} + +var rule = { + title:'南瓜影视[优]', + host:'http://ys.changmengyun.com', + homeUrl:'/api.php/provide/vod_rank?app=ylys&sort_type=month&imei=c431ea542cee9679&id=2&page=1', + url:'/api.php/provide/vod_list?app=ylys&id=fyclassfyfilter&page=fypage&imei=c431ea542cee9679', + detailUrl:'/api.php/provide/vod_detail?app=ylys&imei=c431ea542cee9679&id=fyid', + searchUrl:'/api.php/provide/search_result_more?app=ylys&video_name=**&pageSize=20&tid=0&imei=c431ea542cee9679&page=fypage', + searchable:2, + quickSearch:0, + filterable:1, + filter_url:'&area={{fl.area}}&year={{fl.year}}&type={{fl.class}}&total={{fl.total or "状态"}}&order={{fl.by or "新上线"}}', + filter:{ + "2":[{"key":"class","name":"类型","value":[{"n":"全部","v":"类型"},{"n":"国产剧","v":"国产剧"},{"n":"港台剧","v":"港台剧"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"地区"},{"n":"内地","v":"内地"},{"n":"香港地区","v":"香港地区"},{"n":"台湾地区","v":"台湾地区"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"年份"},{"n":"2024","v":"2024"},{"n":"2023","v":"2023"},{"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":"10年代","v":"10年代"},{"n":"00年代","v":"00年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"}]},{"key":"by","name":"排序","value":[{"n":"热播榜","v":"热播榜"},{"n":"好评榜","v":"好评榜"},{"n":"新上线","v":"新上线"}]}], + "1":[{"key":"class","name":"类型","value":[{"n":"全部","v":"类型"},{"n":"动作片","v":"动作片"},{"n":"喜剧片","v":"喜剧片"},{"n":"爱情片","v":"爱情片"},{"n":"科幻片","v":"科幻片"},{"n":"恐怖片","v":"恐怖片"},{"n":"剧情片","v":"剧情片"},{"n":"战争片","v":"战争片"},{"n":"惊悚片","v":"惊悚片"}]},{"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":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"年份"},{"n":"2024","v":"2024"},{"n":"2023","v":"2023"},{"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":"10年代","v":"10年代"},{"n":"00年代","v":"00年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"}]},{"key":"by","name":"排序","value":[{"n":"热播榜","v":"热播榜"},{"n":"好评榜","v":"好评榜"},{"n":"新上线","v":"新上线"}]}], + "4":[{"key":"class","name":"类型","value":[{"n":"全部","v":"类型"},{"n":"国产漫","v":"国产漫"},{"n":"欧美漫","v":"欧美漫"},{"n":"日韩漫","v":"日韩漫"},{"n":"港台漫","v":"港台漫"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"地区"},{"n":"中国大陆","v":"中国大陆"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"欧美","v":"欧美"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"年份"},{"n":"2024","v":"2024"},{"n":"2023","v":"2023"},{"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":"10年代","v":"10年代"},{"n":"00年代","v":"00年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"}]},{"key":"by","name":"排序","value":[{"n":"热播榜","v":"热播榜"},{"n":"新上线","v":"新上线"}]},{"key":"total","name":"状态","value":[{"n":"全部","v":"状态"},{"n":"连载","v":"连载"},{"n":"完结","v":"完结"}]}], + "3":[{"key":"class","name":"类型","value":[{"n":"全部","v":"类型"},{"n":"大陆","v":"大陆"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"地区"},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"年份"},{"n":"2024","v":"2024"},{"n":"2023","v":"2023"},{"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":"10年代","v":"10年代"},{"n":"00年代","v":"00年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"}]},{"key":"by","name":"排序","value":[{"n":"热播榜","v":"热播榜"},{"n":"新上线","v":"新上线"}]}], + "46":[{"key":"class","name":"类型","value":[{"n":"全部","v":"类型"},{"n":"日韩剧","v":"日韩剧"},{"n":"欧美剧","v":"欧美剧"},{"n":"海外剧","v":"海外剧"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"地区"},{"n":"韩国","v":"韩国"},{"n":"美剧","v":"美剧"},{"n":"日本","v":"日本"},{"n":"泰国","v":"泰国"},{"n":"英国","v":"英国"},{"n":"新加坡","v":"新加坡"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"年份"},{"n":"2024","v":"2024"},{"n":"2023","v":"2023"},{"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":"10年代","v":"10年代"},{"n":"00年代","v":"00年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"}]},{"key":"by","name":"排序","value":[{"n":"热播榜","v":"热播榜"},{"n":"好评榜","v":"好评榜"},{"n":"新上线","v":"新上线"}]}] + }, + headers:{ + "User-Agent":"okhttp/4.6.0" + }, + timeout:5000, + class_name:'电视剧&电影&动漫&综艺&海外精选', // /api.php/provide/home_nav + class_url:'2&1&4&3&46', + limit:20, + play_parse:true, + lazy:`js: + try { + function getvideo(url) { + let jData = JSON.parse(request(url, { + headers: getHeaders(url) + })); + if (jData.code == 1) { + return jData.data.url + } else { + return 'http://43.154.104.152:1234/jhapi/cs.php?url=' + url.split('=')[1] + } + } + if (/,/.test(input)) { + let mjurl = input.split(',')[1] + let videoUrl = getvideo(mjurl); + input = { + jx: 0, + url: videoUrl, + parse: 0, + header: JSON.stringify({ + 'user-agent': 'Lavf/58.12.100' + }) + } + } else { + let videoUrl = getvideo(input); + if (/jhapi/.test(videoUrl)) { + videoUrl = getvideo(videoUrl); + input = { + jx: 0, + url: videoUrl, + parse: 0, + header: JSON.stringify({ + 'user-agent': 'Lavf/58.12.100' + }) + } + } else { + input = { + jx: 0, + url: videoUrl, + parse: 0 + } + } + } + } catch (e) { + log(e.toString()) + } + `, + 推荐:`js: + var d = []; + let html = request(input, { + headers: getHeaders(input) + }); + html = JSON.parse(html); + html.forEach(function(it) { + d.push({ + title: it.name, + img: it.img, + desc: it.remarks, + url: it.id + }) + }); + setResult(d); + `, + 一级:`js: + var d = []; + let html = request(input, { + headers: getHeaders(input) + }); + html = JSON.parse(html); + html.list.forEach(function(it) { + d.push({ + title: it.name, + img: it.img, + desc: it.msg, + url: it.id + }) + }); + setResult(d); + `, + 二级:`js: + var d = []; + VOD = { + vod_id: input.split('id=')[1] + }; + try { + let html = request(input, { + headers: getHeaders(input) + }); + html = JSON.parse(html); + let node = html.data; + VOD = { + vod_name: node['name'], + vod_pic: node['img'], + type_name: node['type'], + vod_year: node['year'], + vod_remarks: '更新至: ' + node['msg'] + ' / 评分: ' + node['score'], + vod_content: node['info'].strip() + }; + let episodes = node.player_info; + let playMap = {}; + if (typeof play_url === 'undefined') { + var play_url = '' + } + episodes.forEach(function(ep) { + let playurls = ep['video_info']; + playurls.forEach(function(playurl) { + let source = ep['show']; + if (!playMap.hasOwnProperty(source)) { + playMap[source] = [] + } + playMap[source].append(playurl['name'].strip() + '$' + play_url + urlencode(playurl['url'])) + }) + }); + 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) + } + `, + 搜索:`js: + var d = []; + let html = request(input, { + headers: getHeaders(input) + }); + html = JSON.parse(html); + html.data.forEach(function(it) { + d.push({ + title: it.video_name, + img: it.img, + desc: it.qingxidu + '/' + it.category, + url: it.id, + content: it.blurb + }) + }); + setResult(d); + `, +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/可可影视[优].js b/drpy_t3/drpy_js/可可影视[优].js new file mode 100644 index 0000000..6855c32 --- /dev/null +++ b/drpy_t3/drpy_js/可可影视[优].js @@ -0,0 +1,102 @@ +var rule = { + title: '可可影视[优]', + host: 'https://www.keke8.app', + //host: 'https://keke5.app', + // url: '/show/fyclass-----2-fypage.html', + url: '/show/fyclass-fyfilter-fypage.html', + filter_url: '{{fl.类型}}-{{fl.地区}}-{{fl.语言}}-{{fl.年份}}-{{fl.排序}}', + searchUrl: '/search?k=**&page=fypage', + searchable: 2, + quickSearch: 0, + filterable: 1, + headers: { + 'User-Agent': 'MOBILE_UA', + }, + class_parse: '#nav-swiper&&.nav-swiper-slide;a&&Text;a&&href;/(\\w+).html', + cate_exclude: 'Netflix|今日更新|专题列表|排行榜', + tab_order: ['超清', '蓝光', '极速蓝光'], + play_parse: true, + lazy: '', + limit: 20, + 推荐: '.section-box:eq(2)&&.module-box-inner&&.module-item;*;*;*;*', + double: false, + 一级: '.module-box-inner&&.module-item;.v-item-title:eq(-1)&&Text;img&&data-original;.v-item-bottom&&span&&Text;a&&href', + 二级: { + title: '.detail-title&&Text;.detail-tags&&a:eq(-2)&&Text', + img: '.detail-pic&&img&&data-original', + desc: '.detail-info-row-main:eq(-2)&&Text;.detail-tags&&a&&Text;.detail-tags&&a:eq(1)&&Text;.detail-info-row-main:eq(1)&&Text;.detail-info-row-main&&Text', + content: '.detail-desc&&Text', + tabs: '.source-item-label', + lists: '.episode-list:eq(#id) a', + }, + 搜索: '.search-result-list&&a;.title&&Text;*;.search-result-item-header&&Text;a&&href;.desc&&Text', + // 图片替换:$js.toString(()=>{ + // log(input); + // input = input.replace(rule.host,'https://vres.a357899.cn'); + // }), + //图片替换: 'https://keke5.app=>https://vres.a357899.cn', + 预处理: $js.toString(() => { + let html = request(rule.host); + let scripts = pdfa(html, 'script'); + let img_script = scripts.find(it => pdfh(it, 'script&&src').includes('rdul.js')); + if (img_script) { + let img_url = img_script.match(/src="(.*?)"/)[1]; + //console.log(img_url); + let img_html = request(img_url); + let img_host = img_html.match(/'(.*?)'/)[1]; + log(img_host); + rule.图片替换 = rule.host + '=>' + img_host; + } + }), + filter: 'H4sIAAAAAAAAA+2Zz08bRxTH/xefOdgGtTi3HlqpUpVLe6hURREHV4qa0kN/qFWEZLANxhBsEDFx7AIpGEyCf0CQY9bY/md2Ztf/RWf95r0ZR+3LtqGRqviC+LzvzOzs7Nt531k/isQid755FPku+VvkTsS76In9jchMZHHh+6TNvyw8/Dk5briowiJbH6XrQVhBZGkGoneTP3378MGvOnz3068+++Lzr0kV66cyndWiBtJKVRVBDYC0fN3tV1EDQM3LXZgxNaAml4syVdKaBtLSebnyDDUAGjPf8vovcEwA0k63xXUPNQAac+XcK23jmAB0D7U1008Daas7o/IZagA0Zu6p66zjmADUb2tVFC6xHwBphWP/iNYagLRmRzgN1ABQc28O/WZbaxpoLo0Td3CIcwEw2qaf2ydtDLRmBw1vfQ3XDMB6tt5uzzzbAEjLDL2XNdQAUPOXN0XV0ZqGpXuBCmksqm2x6Zg0Jg6TxuL4dFRexUXoNkSlr0PYYnRSlt3WRAsdMg+gLa8Hk2NAiJZlsKWCuCwAtJx7NVk9x+UEoGsfnJl+GmhZNi6MpoHGfPXEaBpotoPXRtNA2uO2cE5QAzBjtu0x23Y/t3s9on4a6N6390W2i/cOQNd7feXXhng9AJMuh3JjqB4GZQwyXXWY8fp7skQPh5jmnCmoDiKHb5xhatHaVSj3OtiC2Np2RHtXZPFNMUxPojb0CirVy/gwiOkqg1dwXdehjcgO0T1nO24PtzENdqr7rYZfT5lUJw6V6pW+ao+DA9BNXh4bTYOVaEbTYCWv0TRYyWs0DVaCWv0Awi6CuL5ye33rfUcOswjxaHxOx8b/WvFZE5+143ETj9vxmInH7HjUxKMUj0XH0zwiLRa9r/4kqEH0zQbRoEHUNEhMNoglEtH76o9pMP9mg/mgwbxpICtXcg9fhUD7ODGxsHJrRzgFs7DEkwvr9W5EMYdXMaNXU7KEL0ncDntpfNJmXf1WRuRw350LpnFvRvX6b8yJpjDmhDMZnHHhjARrFrjizZghrrBzhoczJ0FhovvTEMYMceaEMzVBQaPraQhjQNSWZ56RhjBGkDNfo3RfdFdwLgC3bUAoHLllA8LZhH9rPTgLwVkP1l681ShxJoMzJ9PCOS2cH3DhnH1PhTNfl6llefNy4hxnQqFO/9wpkPsywGzebKHkCh5X1JgTqSzue+dU0AFCGQimaHMnZ5UH/vMUagCkVfKyjFVFQxjj4fUK1rEMgPodPhcV2mQAUPtk8YFKK5Dgf8rMYVGtPW53AHRUcy5Fo4g7PwBtd7/vyKe40hpMOd9Qa0jlfAxhLMJfWqDb+mbAlc23l/N3+1rwbmZg+s1g+s1gan1snlqf/7n1mbst6+M5L0T/CaYzAGnVA9dxvFOqwcQ0t2bb9NZAWuZCFI5Mb8OhDBP36Z8xTNznfa/SFUe0OQHQbPMrXqWJUwUwJffvP/1zBo2zBl8mF378YVFrGmie3M8zjGHiDJosP3NvaEcFmP6cMC0j0zLyIZeRj/55GTFh+ymPUqv+H5R6AJTqu1XRxBOLBppVuajON5jqANTvbOh38tgPgK639tjbPcDrAYQpK+yv28zJij3fMudw9tdt7myf7Yhm2rySAbz3zFEpsvQnK+G0IDwhAAA=', + 一级f: `js: + let urls = [ + 'https://keke5.app/show/1-----1-1.html', + 'https://keke5.app/show/2-----1-1.html', + 'https://keke5.app/show/3-----1-1.html', + 'https://keke5.app/show/4-----1-1.html', + 'https://keke5.app/show/6-----1-1.html', + ]; + let filters = {}; + pdfa = jsp.pdfa; + pdfh = jsp.pdfh; + for(let url of urls){ + let fclass = url.match(/show\\/(\\d+)-/)[1]; + console.log(fclass); + let html = request(url); + let tabs = pdfa(html, '.filter-row'); + let data = []; + for (let tab of tabs) { + let title = pdfh(tab, 'strong&&Text').replace(':',''); + let lis = pdfa(tab, 'a'); + let _map = {key: title, name: title}; + let value = []; + for (let li of lis) { + let n = pdfh(li, 'a&&Text').trim(); + let v=n; + if(/全部|地区|类型/.test(n)){ + v = ''; + }else if(/综合/.test(n)){ + v = '1'; + }else{ + v = pdfh(li,'a&&href'); + try { + v = v.match(/-(.*?)1-1\.html/)[1].replace(/-/g,''); + }catch (e) { + v = v.match(/-(.*?)-1\.html/)[1].replace(/-/g,''); + } + v = decodeURIComponent(v); + } + value.push({ + 'n': n, 'v': v + }); + } + _map['value'] = value; + data.push(_map); + } + filters[fclass] = data; + } + VODS = [filters]; + console.log(gzip(JSON.stringify(filters))); + `, +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/咖啡影视.js b/drpy_t3/drpy_js/咖啡影视.js new file mode 100644 index 0000000..f9d0e78 --- /dev/null +++ b/drpy_t3/drpy_js/咖啡影视.js @@ -0,0 +1,17 @@ +var rule = { + 模板: "mxpro", + title: "咖啡影视", + host: "https://cdnbeijin-aliyun-ys1.cfys.xyz", + url: "/vodshow/fyclassfyfilter.html", + filterable: 1, + filter: "H4sIAAAAAAAAAO2Z208bRxTG/xc/U2lNmkvzlvv9fk+Vh6hCatQ2lZq0UhUhAcaOIYANIjiuza3hForBXEphqeGf8eza/0XXnnO+c1w1K0uhedo3/76zszPfzC7zMfsq1unETn79KvZd16+xkzEzsOglkrGO2POnP3Rp/uXp9z93NS983pCTS/XEUkMOINbdYVWvN+v1TJBKwDUzuFStFKlGwDV/cdTs7lGNAO0wAAH0l35XdQe4Pwtcq5UWzNAy1QjQ3+CaX+EaAfqbKAa9cH8W0C69LmMhUP788T3x1wDU5l+LPwJ4KC1U92fYgwW0S43V8x+4nQW0m1oOHHM7C+2sg9e34k+Mcs0CaolBr+83rlmA972MSe6wdwtcq0+Oee/mqUaAe068rg24fE8L8Le/6o//aSrrbBGMKzJztfdYfQuojaRMZoNrFrD6B9lgDXj1LcisFr3JUcxqE1DrP/D/YCcEmIHKqL9XbBlwi9T9pHElvUbFshly1WvE3M5rZOYW6/kUD8ICpnoh7+2s8VRbkMkqe7v7mKwmYPD7I6ZQ4WFbwBJtvpUaASbyzbrUCNAuN+8VV7idBYxz+oO0I5Bl/0tqBDKWsh5LuaXdcNm4C9zOAtr1Z4KZMml+W4ThZP7Az5T8gTybAcsrPOO9OQia4S1mxhXJ7eoev1gEetlra6XaUo8sO7itZS9Uguv55hbUMkiNAEu7MSc1AixDrmKGc1IWVgulyhbUAkuNQD00qmZBLbByYkFNoVlNyBQ2oOXN2d2q7lXUm8PczhR2Op1fktb8qfQjoh/ReqfonVqPix7XuiO6o/T4V9CDn0o/IfoJrR8X/bjWj4l+TOtHRT+qdfEb137j4jeu/cbFb1z7jYvfuPYbF79x7dcRv47264hfR/t1xK+j/Tri19F+HfHraL+O+HW0X0f8OtqvI34d7dcRv47264jf4GfLg1nKeWvD6sFk/teDCVk/mKdIOAXlNCmnoZwh5QyUs6SchXKOlHNQzpNyHsoFUi5AuUjKRSiXSLkE5TIpl6FcIeUKlKukXIVyjZRrUK6Tch3KDVJuQLlJyk0ot0i5BeU2Kbeh3CHlDpS7pNyFco+Ue1Duk3IfygNSHkB5SMpDKI9IeQTlMSmPoThf8DvQ+KUfFW9kzLgZeVTArY+Kl9uu57akGEgvnwUNuIOq63rl8Zb6t89evpBNYa3fpFMt9Rff/PhTV2MsTzpiwd+tQ8r1YSksLIPbKGh6t02CB9gitZO5zeq2cbGXWGgrx4f8vxGWx8P+3whLnGH5uLo7K4mTQDJ30stzoCNAf29TkvEJVBqVOSNoN6Z8WjpNJYPrEZ+b0E5yDUugYWkxLGWGpcXQ5DpRDsKdmZzlpuBPzdlRQoySXpT0oqQXJb0o6X2+pNd5WEmv3jPgL/bw33oLOqn0T6ukEgAGuHpQK6d597GAdmMlb5DP1Ahk/0h6O5yaCGTf2azuZrHvNEGFifp7HgsBau6yWZ3imgX0V9hQp5EW0G582tvCKbQFtNvZ8dKZqjsmp4otEuZh6/cg+/E8WMA91vtqvUPc2sJnSWVBdglSCobdBLWBB1u6bOANQG1lMZharlmIskyUZfhnlGWiLBNlmViUZQ41yxw5tK/RIXkl7IuznyjVZjkDEeCeI0t+lg84CFDLTvkr+LJqQbbnj3/JrWUnayN8gkaAe87MmgL2JAu4Z8gJl1d01ddhC+gv5Nto2GmeKQfTtMX9WdC1+U1VCwDzObdf/Zu/KhOg3ci0SRe4nQV5kDZMifMfAe5ZGPTynOMIZF7WzUEO89IEtY//jydjhUrVxTGmBRUuPn6K9V85q80BRxksymBRBosyWJTBogx2SBms+x8YQNSAEygAAA==", + filter_url: "{{fl.类型}}-{{fl.地区}}-{{fl.排序}}-{{fl.剧情}}-{{fl.语言}}-{{fl.字母}}---fypage---{{fl.年份}}", + timeout: 5000, + class_parse: ".navbar-items li;a&&Text;a&&href;/(\\d+).html", + lazy: $js.toString(() => { + input = {parse: 1, url: input, js: ''}; + }), + double: false, + 推荐: "a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href", + 一级: "a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href" +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/多多追剧[优].js b/drpy_t3/drpy_js/多多追剧[优].js new file mode 100644 index 0000000..14e7438 --- /dev/null +++ b/drpy_t3/drpy_js/多多追剧[优].js @@ -0,0 +1,24 @@ +var rule = { + title: '多多追剧[优]', + 模板: '首图', + host: 'https://www.ddkk.tv', + url: '/channel/fyclass-fypage.html', + //searchUrl: '/search/-------------.html?wd=**', + detailUrl: '/detail/fyid.html', + searchUrl: '/index.php/ajax/suggest?mid=1&wd=**', + 搜索: 'json:list;name;pic;en;id', + searchable: 1, + headers: { + 'User-Agent': 'PC_UA', + }, + class_parse: '.myui-header__menu li;a&&Text;a&&href;/(\\d+).html', + lazy: $js.toString(() => { + input = { + parse: 1, + url: input, + header: { + 'User-Agent': PC_UA + } + } + }), +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/天龙影院.js b/drpy_t3/drpy_js/天龙影院.js new file mode 100644 index 0000000..59f422f --- /dev/null +++ b/drpy_t3/drpy_js/天龙影院.js @@ -0,0 +1,68 @@ +var rule = { + author: '小可乐/240701/第一版', + title: '天龙影院', + 类型: '影视', + host: 'https://m.82mao.com', + hostJs: '', + headers: {'User-Agent': 'MOBILE_UA'}, + 编码: 'utf-8', + timeout: 5000, + homeUrl: '/', + url: '/List/fyfilter.html', + filter_url: '{{fl.cateId}}-{{fl.area}}-{{fl.by}}-{{fl.class}}--{{fl.letter}}---fypage---{{fl.year}}', + detailUrl: '', + searchUrl: '/Search/**----------fypage---.html', + searchable: 1, + quickSearch: 0, + filterable: 1, + + class_name: '电影&剧集&综艺&动漫', + class_url: '17&18&20&48', + filter_def: { + 17: {cateId: '17'}, + 18: {cateId: '18'}, + 20: {cateId: '20'}, + 48: {cateId: '48'} + }, + + play_parse: true, + parse_url: 'http://cdn.113276.xyz/cs1/?id=', + lazy: `js: +var kcode = JSON.parse(request(input).match(/var player_.*?=(.*?)"+list);LISTS=[list];' + }, + 搜索: 'div.list-box.J-medal&&li;a&&Text;;;a&&href', +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/有声小说吧[听].js b/drpy_t3/drpy_js/有声小说吧[听].js new file mode 100644 index 0000000..b6366d4 --- /dev/null +++ b/drpy_t3/drpy_js/有声小说吧[听].js @@ -0,0 +1,38 @@ +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, + // homeUrl:'/fenlei/', + // class_parse: '.pd-class:eq(0) dd;a&&Text;a&&href;.*/(.*?).html', + 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 .list-li;.list-name&&Text;*;.module-slide-author&&Text;*', + 一级: '.book-ol&&li;h4&&Text;img&&data-original;.book-meta&&Text;a&&href', + 二级: { + // title:'h2&&Text;.book-cell .book-rand-a:eq(2)&&Text', + title: 'h1&&Text;.book-cell .book-rand-a:eq(0)&&a&&Text', + img: '.book img&&src', + // desc:';;;;.book-des p&&Text', + desc: ';;;.book-rand-a:eq(2)&&Text;.book-des p&&Text', + content: '.book-des--p&&Text', + tabs: '.playlist-top&&h2', + // 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', + lists: '#playlist ul li', + }, + 搜索: '*', +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/有声绘本网[听].js b/drpy_t3/drpy_js/有声绘本网[听].js new file mode 100644 index 0000000..e22cb9a --- /dev/null +++ b/drpy_t3/drpy_js/有声绘本网[听].js @@ -0,0 +1,21 @@ +var rule = { + 类型: '听书', + title: '有声绘本网', + host: 'https://www.youshenghuiben.com', + url: '/fyclass/fypage', + searchUrl: '/search.php?&q=**&page=fypage', + searchable: 2, + quickSearch: 0, + filterable: 0, + headers: { + 'User-Agent': 'MOBILE_UA' + }, + timeout: 5000,//网站的全局请求超时,默认是3000毫秒 + class_parse: '#menu-main&&li:gt(0):lt(7);a&&Text;a&&href;com/(\\w+)', + play_parse: true, + limit: 6, + 推荐: '*', + 一级: 'article.excerpt-c5;a&&title;img&&src;.post-like&&Text;a&&href', + 二级: '*', + 搜索: 'article.excerpt-tw;*;*;time&&Text;*', +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/樱花动漫[漫].js b/drpy_t3/drpy_js/樱花动漫[漫].js new file mode 100644 index 0000000..b90099a --- /dev/null +++ b/drpy_t3/drpy_js/樱花动漫[漫].js @@ -0,0 +1,8 @@ +var rule = { + 模板: '首图', + title: '樱花动漫[漫]', + host: 'https://katedm.com/', + url: '/list/fyclass-fypage.html', + searchUrl: '/search/**----------fypage---.html', + 搜索: '#searchList li;a&&title;.lazyload&&data-original;.pic-tag&&Text;a&&href', +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/爱上你听书网[听].js b/drpy_t3/drpy_js/爱上你听书网[听].js new file mode 100644 index 0000000..af34190 --- /dev/null +++ b/drpy_t3/drpy_js/爱上你听书网[听].js @@ -0,0 +1,28 @@ +var rule = { + 类型: '听书', + title: '爱上你听书网', + host: 'https://www.230ts.net', + url: '/sort/fyclass/fypage.html', + searchUrl: '/search.html?searchtype=name&searchword=**&page=fypage', + searchable: 2, + quickSearch: 0, + headers: { + 'User-Agent': 'PC_UA' + }, + timeout: 5000, + class_parse: '.nav-ol&&li:gt(0):lt(6);a&&Text;a&&href;.*/(\\w+).html', + play_parse: true, + lazy: 'js:input=input.replace("www","wap")', + limit: 6, + 推荐: '#myTab_Content1&&li;.tab-book-title&&Text;*;.tab-book-author&&Text;*', + 一级: 'ul.list-works&&li;.list-book-dt--span&&Text;.lazy&&data-original;.book-author:eq(2)&&a&&Text;a&&href', + 二级: { + title: '.book-cover&&alt;.book-info&&dd--span:eq(1)&&Text', + img: '.book-cover&&src', + desc: '.book-info&&dd:eq(4)&&Text;;;.book-info&&dd--span:eq(3)&&Text;.book-info&&dd--span:eq(2)&&Text', + content: '.book-des&&Text', + tabs: '.playlist-top&&h2', + lists: '#playlist:eq(#id)&&li', + }, + 搜索: '*', +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/爱看农民[优].js b/drpy_t3/drpy_js/爱看农民[优].js new file mode 100644 index 0000000..9b65653 --- /dev/null +++ b/drpy_t3/drpy_js/爱看农民[优].js @@ -0,0 +1,71 @@ +var rule = { + author: '小可乐/240527/第一版', + title: '爱看农民[优]', + host: 'https://m.emsdn.cn', + hostJs: $js.toString(() => { + print(HOST); + let html = request(HOST, {headers: {"User-Agent": PC_UA}}); + let src = jsp.pdfh(html, "body&&a:eq(0)&&href") || jsp.pdfh(html, "body&&a:eq(0)&&Text"); + if (src && src.length > 5) { + print(src); + if (!src.startsWith('http')) { + src = 'https://' + src + } + print("抓到主页:" + src); + HOST = src + } + }), + headers: {'User-Agent': 'PC_UA'}, + 编码: 'utf-8', + timeout: 5000, + homeUrl: '/', + url: '/vod-list-id-fyfilter.html', + filter_url: '{{fl.cateId}}-pg-fypage-order--by-{{fl.by or "time"}}-class-0-year-{{fl.year}}-letter-{{fl.letter}}-area-{{fl.area}}-lang-', + detailUrl: '', + searchUrl: '/vod-search-pg-fypage-wd-**.html', + searchable: 1, + quickSearch: 1, + filterable: 1, + class_name: '电影&剧集&综艺&动漫&短剧', + class_url: '1&2&3&4&26', + filter_def: { + 1: {cateId: '1'}, + 2: {cateId: '2'}, + 3: {cateId: '3'}, + 4: {cateId: '4'}, + 26: {cateId: '26'} + }, + tab_rename: { + '播放列表1:(默认)': '默认', + '播放列表1:(云播①)': '云播①', + '播放列表1:(云播③)': '云播③', + '播放列表2:(百度网盘)': '百度网盘' + }, + play_parse: true, + lazy: $js.toString(() => { + let init_js = `Object.defineProperties(navigator, {platform: {get: () => 'iPhone'}});`; + input = { + parse: 1, + url: input, + js: `try{location.href = document.querySelectorAll("iframe")[1].src;}catch(err) {}document.querySelector(".line").click()`, + parse_extra: '&init_script=' + encodeURIComponent(base64Encode(init_js)), + } + }), + limit: 12, + double: false, + 推荐: 'ul.list_06:has(li) li;*;*;*;*', + 一级: 'ul.list_01 li;a:eq(0)&&title;img&&src;font&&Text;a:eq(0)&&href', + 二级: { + "title": ".fen&&h1&&Text;.d_z_y:eq(2)&&font&&Text", + "img": ".lef:eq(-1)&&img&&src", + "desc": ".d_z_y:eq(-3)&&Text;.d_z_y:eq(-2)&&font&&Text;;.d_z_y:eq(1)&&font&&Text;.d_z_y:eq(0)&&font&&Text", + "content": ".jjie&&Text", + "tabs": "h2 span", + "tab_text": "body&&Text", + "lists": ".soyurl:eq(#id)&&a", + "list_text": "body&&Text", + "list_url": "a&&href" + }, + 搜索: '*', + filter: 'H4sIAAAAAAAAA+2YW08TQRTH3/sx9rkPMy0tLW/c7/c7hIeKm0hETKCaEEKiFoQWATXSChYviaUlgpRgiBShX6Y7pd/CrZw959QHQ4K8zVvP79+dmf90dv9nu+AypFEz7lowHprzRo0xGQqbrfcNtzETemTadfH43Pq4ZtdPQ9NPbDC+YMzY2FrOlCKZMrYLaSy6AccyhYtkMboCio+UeNKKpknxo1JcPVaRZVKqSUm/sc7OSQmgop6/Vs/ipARpnmi6YjQp6KLV94VclEm0bhWJqRc7TKLlWamVikVIe30Ti27csNCsGaLtspJZ61Xu39tFQ39Nl7ZfAoXC0Up72+rnEWhQ4HWbWXV26Vx3XeCeXW5YHy5AgwLH/LRPGhS4A4mUSh6ABgVqJ1m6DgrU4lkr9tna/eLIWOOs+wdqN3WVyhdyO87cHKGr9ayV23NcXReOdrV2TCuAgla3xVe3xTV7KWotb2+tMyzWOHIqX9w8LEa3ncGxdr5RyC8VLxIq7vwYVOMsy6fW94gzxXVRcUbmzdAsnRGVOC0lftzwjHiEpwrYn4+Me4l7OfcQ93AuiUvOBXHBuAwil0HOA8QDnFcTr+bcT9zPuY+4j3PyK7lfSX4l9yvJr+R+JfmV3K8kv5L7FeRXcL+C/AruV5Bfwf0K8iu4X0F+BfcryK/gfgX5FdyvIL+C+xXkV3C/gvzaHyvO5bQZDpvsZFqHCXW0fsOTWQugFkkdkDok9UDqkTQAaUDSCKQRSROQJiTNQJqRtABpQdIKpBVJG5A2JO1A2pF0AOlA0gmkE0kXkC4k3UC6kfQA6UHSC6QXSR+QPiT9QPqRDAAZQDIIZBDJEJAhJMNAhpGMABlBMgpkFMkYkLHKU3Fvnj2rNt5auc0bngh6sNlFeMoeAJ+huZzKvgPlwVR4jp6/R0vWqpOBc5OPZ83yYlwTbpfhuW1fQneHnQmFXNruDZwQJ8kO1nKEnmQdycv8pMopSVfR7akO0uVwJcmnuwLdFeiuQHcFuivQXYHuCu6uK/DyrkDHrI5ZHbM6ZnXM6pg1dMz+x5ituu3LN91NViyjfn1j78qBvyT253pQv0brfNf5rvNd57vOd53vd/jnul+/R+uc1Tmrc1bnrKFzVufsXeSsa/E37iRyfV8nAAA=' +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/爱看机器人[虫].js b/drpy_t3/drpy_js/爱看机器人[虫].js new file mode 100644 index 0000000..0ae3f6a --- /dev/null +++ b/drpy_t3/drpy_js/爱看机器人[虫].js @@ -0,0 +1,68 @@ +var rule = { + title:'爱看机器人[虫]', + // host:'https://v.ikanbot.com', + host:'https://v.aikanbot.com', + url:'/hot/index-fyclass-fyfilter-p-fypage.html[/hot/index-fyclass-fyfilter.html]', + //https://www.ikanbot.com/search?q=%E6%96%97%E7%BD%97%E5%A4%A7&p=2 + // searchUrl:'/search?q=**&p=fypage', + searchUrl:'/search?q=**&p=fypage[/search?q=**]', + searchable:2, + quickSearch:0, + filterable:1, + filter_url:'{{fl.tag}}', + 图片来源:'@Referer=https://v.ikanbot.com/@User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', + filter:{ + "movie":[{"key":"tag","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":"豆瓣top250","v":"豆瓣top250"}]}] + ,"tv":[{"key":"tag","name":"标签","value":[{"n":"热门","v":"热门"},{"n":"美剧","v":"美剧"},{"n":"英剧","v":"英剧"},{"n":"韩剧","v":"韩剧"},{"n":"日剧","v":"日剧"},{"n":"国产剧","v":"国产剧"},{"n":"港剧","v":"港剧"},{"n":"日本动画","v":"日本动画"},{"n":"综艺","v":"综艺"},{"n":"纪录片","v":"纪录片"}]}] + }, + filter_def:{ + movie:{tag:'热门'}, + tv:{tag:'国产剧'}, + }, + filter获取方法:` + let value = []; + $('ul').eq(2).find('li').each(function() { + // console.log($(this).text()); + let n = $(this).text().trim(); + value.push({ + 'n': n, 'v': n + }); + }); + // 电影执行: + let data = {'movie': [{'key': 'tag', 'name': '标签', 'value': value}]}; + console.log(JSON.stringify(data)); + + //剧集执行: + let data = {'tv': [{'key': 'tag', 'name': '标签', 'value': value}]}; + console.log(JSON.stringify(data)); + `, + headers:{'User-Agent':'PC_UA',}, + class_name:'电影&剧集', + class_url:'movie&tv', + play_parse:true, + double:true, + tab_remove:['wjm3u8','ikm3u8','sdm3u8','M3U8','jinyingm3u8','fsm3u8','ukm3u8'],//移除某个线路及相关的选集 + tab_order:['bfzym3u8','1080zyk','kuaikan','lzm3u8','ffm3u8','snm3u8','qhm3u8','gsm3u8','zuidam3u8','bjm3u8','wolong','xlm3u8','yhm3u8'],//线路顺序,按里面的顺序优先,没写的依次排后面 + tab_rename:{'bfzym3u8':'暴风','1080zyk':'优质','kuaikan':'快看','lzm3u8':'量子','ffm3u8':'非凡','snm3u8':'索尼','qhm3u8':'奇虎','haiwaikan':'海外看','gsm3u8':'光速','zuidam3u8':'最大','bjm3u8':'八戒','wolong':'卧龙','xlm3u8':'新浪','yhm3u8':'樱花','tkm3u8':'天空','jsm3u8':'极速','wjm3u8':'无尽','sdm3u8':'闪电','kcm3u8':'快车','jinyingm3u8':'金鹰','fsm3u8':'飞速','tpm3u8':'淘片','lem3u8':'鱼乐','dbm3u8':'百度','tomm3u8':'番茄','ukm3u8':'U酷','ikm3u8':'爱坤','hnzym3u8':'红牛资源','hnm3u8':'红牛','68zy_m3u8':'68','kdm3u8':'酷点','bdxm3u8':'北斗星','hhm3u8':'豪华','kbm3u8':'快播'},//线路名替换如:lzm3u8替换为量子资源 + 推荐:'.v-list;div.item;*;*;*;*', //这里可以为空,这样点播不会有内容 + // 一级:'.v-list&&div.item;p&&Text;img&&src;;a&&href', //一级的内容是推荐或者点播时候的一级匹配 + 一级:'.v-list&&div.item;p&&Text;img&&data-src;;a&&href', //一级的内容是推荐或者点播时候的一级匹配 + // 二级:二级, + 二级:'js:eval(unescape(base64Decode("anM6CiAgICAgICAgcGRmaCA9IGpzcC5wZGZoOwogICAgICAgIGZ1bmN0aW9uIGdldFRva2VuKGh0bWwxKSB7CiAgICAgICAgICAgIGxldCBjdXJyZW50SWQgPSBwZGZoKGh0bWwxLCAnI2N1cnJlbnRfaWQmJnZhbHVlJyk7CiAgICAgICAgICAgIGxldCBlVG9rZW4gPSBwZGZoKGh0bWwxLCAnI2VfdG9rZW4mJnZhbHVlJyk7CiAgICAgICAgICAgIGlmICghY3VycmVudElkIHx8ICFlVG9rZW4pIHJldHVybiAnJzsKICAgICAgICAgICAgbGV0IGlkTGVuZ3RoID0gY3VycmVudElkLmxlbmd0aDsKICAgICAgICAgICAgbGV0IHN1YklkID0gY3VycmVudElkLnN1YnN0cmluZyhpZExlbmd0aCAtIDQsIGlkTGVuZ3RoKTsKICAgICAgICAgICAgbGV0IGtleXMgPSBbXTsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJJZC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgbGV0IGN1ckludCA9IHBhcnNlSW50KHN1YklkW2ldKTsKICAgICAgICAgICAgICAgIGxldCBzcGxpdFBvcyA9IGN1ckludCAlIDMgKyAxOwogICAgICAgICAgICAgICAga2V5c1tpXSA9IGVUb2tlbi5zdWJzdHJpbmcoc3BsaXRQb3MsIHNwbGl0UG9zICsgOCk7CiAgICAgICAgICAgICAgICBlVG9rZW4gPSBlVG9rZW4uc3Vic3RyaW5nKHNwbGl0UG9zICsgOCwgZVRva2VuLmxlbmd0aCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGtleXMuam9pbignJyk7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFZPRD17fTsKICAgICAgICAgICAgbGV0IGh0bWwxID0gcmVxdWVzdChpbnB1dCk7CiAgICAgICAgICAgIFZPRC52b2RfaWQgPSBwZGZoKGh0bWwxLCAnI2N1cnJlbnRfaWQmJnZhbHVlJyk7CiAgICAgICAgICAgIFZPRC52b2RfbmFtZSA9IHBkZmgoaHRtbDEsICdoMiYmVGV4dCcpOwogICAgICAgICAgICBWT0Qudm9kX3BpYyA9IHBkZmgoaHRtbDEsICcuaXRlbS1yb290JiZpbWcmJmRhdGEtc3JjJyk7CiAgICAgICAgICAgIFZPRC52b2RfYWN0b3IgPSBwZGZoKGh0bWwxLCAnLm1ldGE6ZXEoNCkmJlRleHQnKTsKICAgICAgICAgICAgVk9ELnZvZF9hcmVhID0gcGRmaChodG1sMSwgJy5tZXRhOmVxKDMpJiZUZXh0Jyk7CiAgICAgICAgICAgIFZPRC52b2RfeWVhciA9IHBkZmgoaHRtbDEsICcubWV0YTplcSgyKSYmVGV4dCcpOwogICAgICAgICAgICBWT0Qudm9kX3JlbWFya3MgPSAnJzsKICAgICAgICAgICAgVk9ELnZvZF9kaXJlY3RvciA9ICcnOwogICAgICAgICAgICBWT0Qudm9kX2NvbnRlbnQgPSBwZGZoKGh0bWwxLCAnI2xpbmUtdGlwcyYmVGV4dCcpOwogICAgICAgICAgICAvLyBsb2coVk9EKTsKICAgICAgICAgICAgdmFyIHZfdGtzID0gZ2V0VG9rZW4oaHRtbDEpOwogICAgICAgICAgICBsb2coJ3ZfdGtzID09PT4gJyArIHZfdGtzKTsKICAgICAgICAgICAgaW5wdXQgPSBIT1NUICsgJy9hcGkvZ2V0UmVzTj92aWRlb0lkPScgKyBpbnB1dC5zcGxpdCgnLycpLnBvcCgpICsgJyZtdHlwZT0yJnRva2VuPScrdl90a3M7CiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChpbnB1dCwgewogICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzonTW96aWxsYS81LjAgKGlQaG9uZTsgQ1BVIGlQaG9uZSBPUyAxM18yXzMgbGlrZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvNjA1LjEuMTUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzEzLjAuMyBNb2JpbGUvMTVFMTQ4IFNhZmFyaS82MDQuMScsCiAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiBNWV9VUkwsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBwcmludChodG1sKTsKICAgICAgICAgICAgaHRtbCA9IEpTT04ucGFyc2UoaHRtbCk7CiAgICAgICAgICAgIGxldCBlcGlzb2RlcyA9IGh0bWwuZGF0YS5saXN0OwogICAgICAgICAgICBsZXQgcGxheU1hcCA9IHt9OwogICAgICAgICAgICBpZiAodHlwZW9mIHBsYXlfdXJsID09PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICAgdmFyIHBsYXlfdXJsID0gJycKICAgICAgICAgICAgfQogICAgICAgICAgICBsZXQgbWFwID0ge30KICAgICAgICAgICAgbGV0IGFyciA9IFtdCiAgICAgICAgICAgIGxldCBuYW1lID0gewogICAgICAgICAgICAgICAgJ2JmenltM3U4JzogJ+aatOmjjicsCiAgICAgICAgICAgICAgICAnMTA4MHp5ayc6ICfkvJjotKgnLAogICAgICAgICAgICAgICAgJ2t1YWlrYW4nOiAn5b+r55yLJywKICAgICAgICAgICAgICAgICdsem0zdTgnOiAn6YeP5a2QJywKICAgICAgICAgICAgICAgICdmZm0zdTgnOiAn6Z2e5YehJywKICAgICAgICAgICAgICAgICdoYWl3YWlrYW4nOiAn5rW35aSW55yLJywKICAgICAgICAgICAgICAgICdnc20zdTgnOiAn5YWJ6YCfJywKICAgICAgICAgICAgICAgICd6dWlkYW0zdTgnOiAn5pyA5aSnJywKICAgICAgICAgICAgICAgICdiam0zdTgnOiAn5YWr5oiSJywKICAgICAgICAgICAgICAgICdzbm0zdTgnOiAn57Si5bC8JywKICAgICAgICAgICAgICAgICd3b2xvbmcnOiAn5Y2n6b6ZJywKICAgICAgICAgICAgICAgICd4bG0zdTgnOiAn5paw5rWqJywKICAgICAgICAgICAgICAgICd5aG0zdTgnOiAn5qix6IqxJywKICAgICAgICAgICAgICAgICd0a20zdTgnOiAn5aSp56m6JywKICAgICAgICAgICAgICAgICdqc20zdTgnOiAn5p6B6YCfJywKICAgICAgICAgICAgICAgICd3am0zdTgnOiAn5peg5bC9JywKICAgICAgICAgICAgICAgICdzZG0zdTgnOiAn6Zeq55S1JywKICAgICAgICAgICAgICAgICdrY20zdTgnOiAn5b+r6L2mJywKICAgICAgICAgICAgICAgICdqaW55aW5nbTN1OCc6ICfph5HpubAnLAogICAgICAgICAgICAgICAgJ2ZzbTN1OCc6ICfpo57pgJ8nLAogICAgICAgICAgICAgICAgJ3RwbTN1OCc6ICfmt5jniYcnLAogICAgICAgICAgICAgICAgJ2xlbTN1OCc6ICfpsbzkuZAnLAogICAgICAgICAgICAgICAgJ2RibTN1OCc6ICfnmb7luqYnLAogICAgICAgICAgICAgICAgJ3RvbW0zdTgnOiAn55Wq6IyEJywKICAgICAgICAgICAgICAgICd1a20zdTgnOiAnVemFtycsCiAgICAgICAgICAgICAgICAnaWttM3U4JzogJ+eIseWdpCcsCiAgICAgICAgICAgICAgICAnaG56eW0zdTgnOiAn57qi54mb6LWE5rqQJywKICAgICAgICAgICAgICAgICdobm0zdTgnOiAn57qi54mbJywKICAgICAgICAgICAgICAgICc2OHp5X20zdTgnOiAnNjgnLAogICAgICAgICAgICAgICAgJ2tkbTN1OCc6ICfphbfngrknLAogICAgICAgICAgICAgICAgJ2JkeG0zdTgnOiAn5YyX5paX5pifJywKICAgICAgICAgICAgICAgICdxaG0zdTgnOiAn5aWH6JmOJywKICAgICAgICAgICAgICAgICdoaG0zdTgnOiAn6LGq5Y2OJwogICAgICAgICAgICB9OwogICAgICAgICAgICBlcGlzb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGVwKSB7CiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UoZXBbJ3Jlc0RhdGEnXSk7CiAgICAgICAgICAgICAgICBkYXRhLm1hcCh2YWwgPT4gewogICAgICAgICAgICAgICAgICAgIGlmKCFtYXBbdmFsLmZsYWddKXsKICAgICAgICAgICAgICAgICAgICAgICAgbWFwW3ZhbC5mbGFnXSA9IFt2YWwudXJsLnJlcGxhY2VBbGwoJyMjJywnIycpXQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcFt2YWwuZmxhZ10ucHVzaCh2YWwudXJsLnJlcGxhY2VBbGwoJyMjJywnIycpKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gbWFwKSB7CiAgICAgICAgICAgICAgICBpZiAoJ2JmenltM3U4JyA9PSBrZXkpIHsKICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWc6IG5hbWVba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtYXBba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogMQogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCcxMDgwenlrJyA9PSBrZXkpIHsKICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWc6IG5hbWVba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtYXBba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogMgogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdrdWFpa2FuJyA9PSBrZXkpIHsKICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWc6IG5hbWVba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtYXBba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogMwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdsem0zdTgnID09IGtleSkgewogICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZzogbmFtZVtrZXldLAogICAgICAgICAgICAgICAgICAgICAgICB1cmw6IG1hcFtrZXldLAogICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiA0CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ2ZmbTN1OCcgPT0ga2V5KSB7CiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgICBmbGFnOiBuYW1lW2tleV0sCiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbWFwW2tleV0sCiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnQ6IDUKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICgnc25tM3U4JyA9PSBrZXkpIHsKICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWc6IG5hbWVba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtYXBba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogNgogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdxaG0zdTgnID09IGtleSkgewogICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZzogbmFtZVtrZXldLAogICAgICAgICAgICAgICAgICAgICAgICB1cmw6IG1hcFtrZXldLAogICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiA3CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgICBmbGFnOiAobmFtZVtrZXldKSA/IG5hbWVba2V5XSA6IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtYXBba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogOAogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXJyLnNvcnQoKGEsIGIpID0+IGEuc29ydCAtIGIuc29ydCk7CiAgICAgICAgICAgIGxldCBwbGF5RnJvbSA9IFtdOwogICAgICAgICAgICBsZXQgcGxheUxpc3QgPSBbXTsKICAgICAgICAgICAgYXJyLm1hcCh2YWwgPT4gewogICAgICAgICAgICAgICAgaWYgKCEvdW5kZWZpbmVkLy50ZXN0KHZhbC5mbGFnKSkgewogICAgICAgICAgICAgICAgICAgIHBsYXlGcm9tLnB1c2godmFsLmZsYWcpOwogICAgICAgICAgICAgICAgICAgIHBsYXlMaXN0LnB1c2godmFsLnVybCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIGxldCB2b2RfcGxheV9mcm9tID0gcGxheUZyb20uam9pbignJCQkJyk7CiAgICAgICAgICAgIGxldCB2b2RfcGxheV91cmwgPSBwbGF5TGlzdC5qb2luKCckJCQnKTsKICAgICAgICAgICAgVk9EWyd2b2RfcGxheV9mcm9tJ10gPSB2b2RfcGxheV9mcm9tOwogICAgICAgICAgICBWT0RbJ3ZvZF9wbGF5X3VybCddID0gdm9kX3BsYXlfdXJsOwogICAgICAgICAgICAvLyBsb2coVk9EKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZygn6I635Y+W5LqM57qn6K+m5oOF6aG15Y+R55Sf6ZSZ6K+vOicgKyBlLm1lc3NhZ2UpCiAgICAgICAgfQ==")))', + // 搜索:'#search-result&&.media;h5&&a&&Text;a&&img&&data-src;.label&&Text;a&&href',//第三个是描述,一般显示更新或者完结 + 搜索:'.col-md-8&&.media;h5&&a&&Text;a&&img&&data-src;.label&&Text;a&&href',//第三个是描述,一般显示更新或者完结 + lazy:` + if(/\\.m3u8$/.test(input)){ + input = { + parse:0, + url:getProxyUrl()+'&url='+input, + jx:0 + } + } + `, + proxy_rule: `js: + let url = input.url; + let m3u8 = fixAdM3u8Ai(url); + input = [200,'application/vnd.apple.mpegurl',m3u8] + ` +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/玩偶哥哥[盘].js b/drpy_t3/drpy_js/玩偶哥哥[盘].js new file mode 100644 index 0000000..f433f49 --- /dev/null +++ b/drpy_t3/drpy_js/玩偶哥哥[盘].js @@ -0,0 +1,34 @@ +Object.assign(muban.mxone5.二级,{ + //tabs: '.module-tab-item', + lists: '.module-row-one:eq(#id)&&a.module-row-text', + list_text:'h4&&Text', + list_url:'a&&data-clipboard-text', +}); +var rule = { + title: '玩偶哥哥[盘]', + 模板: 'mxone5', + host: 'https://www.wogg.net', + //url: '/index.php/vod/show/fyclass--------fypage---.html', + url: '/index.php/vodshow/fyclass-fyfilter.html', + filter_url: '{{fl.area}}-{{fl.by or "time"}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}', + searchUrl: '/index.php/vod/search/page/fypage/wd/**.html', + filter: 'H4sIAAAAAAAAA+2a2VIbRxSG30XXTmkGjLc77/u+O+UL2VElrjhOlSGpolxUsUmWsI2AwsgEASZmDwKxhICI4GXUM9JbeKRunTnzD2WNA0kqTl/q+3+d7j7dozlHMy9CZujY1y9C30dbQ8dCjyMt0fPfhA6EnkV+iDqf7eUtMfbK+fxz5OlP0arxmYNFbLbcNVvBzgcz1Paw7QBFeBppbnYDiOSM1RX7dIBQ5dtVOpRx/IqGq5HCitUsdmJZxXMtitUsVkef1T7ktShGA/XMFgsZGEgyGmimX2xuwUCSURRaG4siGc0l8a6YT8JcJKtZStlp8Xrea1GM5tKzZBfAohhbkT245VtRhZFl6qVvRYrRdLPTxe33MF3JKEp8oDw8B1Ekoyhj884aIYpkn7FHVueCPdQPFsnI0tVjdf4CFskodVspEduA1ElWs5RHB6x3U16LYjTQ0MtSMg8DSUZ52V60B38XhWVIDWEypiZLH/DUSEaW3rhIrYBFMjo1O33O9sKpkczdqYw12o87VWVk6d6xf4OlK0YJLPTbW5ndluZR+E9A5Hk0wn4BMjnxOh/0F2Bypjwcr41TCRRWiHZretjaWPI4FHITnLM2t70xJKI1bfeKkYLHoRBt+OpbdChEG/BqGR0KUYz0lJVZ8MaQiNYyPocxFHJP1R/oUMidac4/05wnxpucyE97Y0hEMbpTTpZFYs4bhiiteWrHTmXt5LB32UTdH6P31qsd58veQYmSL7Ze3BrymiTix+lp5Nm37nEqLWVLs+1Bj9NIwfHXBqgECivEthEdCtFhWZlEh0K0jemCeJNGk0vZdvtMErEjgw6F2MH0OSRiR8a3ZolY2sVil9chEU97azTy3E27lV4vp9cCpr3BaDhYC18JE64Cpjai2sjVBlQbuGqianLVQNVgqnkUVAcw9QiqR7h6GNXDXD2E6iGuNqHaxFXMlclzZWKuTJ4rE3Nl8lyZmCuT58rEXJk8VwbmyuC5MjBXBs+VgbkyeK4MzJXBc2VgrgyeKwNzZfBcGZgrg+fKwFwZPFcG5srguTIwVw7w/EZFW1qi7HIR2bS19Cbg5XKcLsVqlPBxUk6AcoKUk6CcJOUUKKdIOQ3KaVLOgHKGlLOgnCXlHCjnSDkPynlSLoBygZSLoFwk5RIol0i5DMplUq6AcoWUq6BcJeUaKNdIuQ7KdVJugHKDlJug3CTlFii3SLkNym1S7oByh5S7oNwl5R4o90i5D8p9Uh6A8oAU46ujoFUIvwQetbK7Re+AyKd8x9+9iVTiPGoNtzxx7LUhivm8lRtk6ndPWprdG/VSt0jEmdr8+Mfn0coMHh4INeyxhW3YtxbWHs/6WljFWFFSzM/4G90qhjrX53KYtb0KvYvoWBddqd06GKV8RoMtFtdFPgsWyT6vHa3XYAdoRwM02AFapQAtYHFzwtcqKeb2mjFreAk2QzKay9u4r+9VjHVT/uMh2e5FsYrir4r30mTFY47fW3ZLFLwx2Y82rH6DFKRRq9f+BGjUhnJObyJGJ7xhiOp25S+3K7rV0K2GbjV0q6FbDd1qfBmtRuMeW43GfWs1yu1Je6Ydqn7JeNHaPe4vWh1Gi13cKeUSXotiFGUga/XAUwLF3EogZm1Aja2YW06sFjf7YLqSsXKv/AGmqxhZ8vNicQwsktFcRlb8D2skoyiD49YaPtyTjKJsbFiJVDE/4HvM4lEojWu/Oj0FpFEyirjcWep4DbEk+8cK+0pLmfI6FGI1nVPlYVFeQeRYmHE2xeuQSJfBugzWZbAug3UZrMtgXQZ/0WXwwT2WwU37VgYHqHEDvMtld2VLE1BMK0YD9c7afXEYSDKy9I3ZC/jOkmRujVb3/alS32ipF14aU4wGej8hRuBfesVooPp/wVuZvP9FLcloLvXfMwrwjpvIOcleg7lIxi1Tq37LlPuww57cLv4Jr3spRlF6x0ViBKJI5h76FZGFPkQxGmikxxqGDkIxN7vLYieN2a0yVvT93X/ky0dGnnrf+xSp/l/sn6jmd12H/ttb1/u63tf1vq73db3PFF3vf9n1ftO+1vv6YtYX8//8YtbFny7+dPEXsPj7Vx/4HtnrE19376xku5VJVp5XFt7ayZfMoG+O+uaob4765qhvjvrm+J+5ObZ9BBHdMT09QAAA', + class_parse: '.grid-box&&ul&&li;a&&Text;a&&href;.*/(.*?).html', + cate_exclude: '全部影片', + 一级: '.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href', + lazy: ` + if (/(pan.quark.cn|www.aliyundrive.com|www.alipan.com)/.test(input)){ +let type="ali"; +if (input.includes("pan.quark.cn")){ +type="quark"; +} else if (input.includes("www.aliyundrive.com") || input.includes("www.alipan.com")){ +type="ali"; +} +let confirm=""; +//let confirm="&confirm=0"; +input = getProxyUrl().replace('js',type)+'&type=push'+confirm+'&url='+encodeURIComponent(input); +//input={parse:0,url:input} +} + + `, +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/童趣[儿].js b/drpy_t3/drpy_js/童趣[儿].js new file mode 100644 index 0000000..1a4c6de --- /dev/null +++ b/drpy_t3/drpy_js/童趣[儿].js @@ -0,0 +1,81 @@ +var rule = { + 类型: '影视',//影视|听书|漫画|小说 + title: '童趣[儿]', + host: 'https://www.boosj.com', + url: '/search_res_3362__fyclass_fypage_fyfilter', + searchUrl: 'https://search.boosj.com/m_ajax?q=**&p=fypage&typeId=3362', + searchable: 2, + quickSearch: 0, + filterable: 1, + filter: '', + filter_url: '{{fl.by}}.html{{fl.age}}', + filter_def: {}, + headers: { + 'User-Agent': 'MOBILE_UA', + }, + timeout: 5000, + class_parse: $js.toString(() => { + let classes = [{type_id: '', type_name: '全部'}, {type_id: 28, type_name: '辅食'}, { + type_id: 582, + type_name: '动画' + }, {type_id: 3364, type_name: '儿童舞蹈'}, {type_id: 3366, type_name: '少儿英语'}, { + type_id: 3367, + type_name: '儿童歌曲' + }, {type_id: 3622, type_name: '才艺'}, {type_id: 3782, type_name: '播视自制'}, { + type_id: 3822, + type_name: '故事' + }, {type_id: 3842, type_name: '亲子教育'}, {type_id: 4402, type_name: '美术'}, { + type_id: 4583, + type_name: '其他' + }, {type_id: 4762, type_name: '儿童游戏'}, {type_id: 4842, type_name: '识物'}, { + type_id: 4843, + type_name: '绘本' + }, {type_id: 4844, type_name: '古诗'}, {type_id: 4845, type_name: '科普'}, { + type_id: 5102, + type_name: '儿童玩具' + }, {type_id: 5142, type_name: '播视童趣儿童玩具'}]; + homeObj.filter = {}; + let jsonData = [ + { + key: 'age', + name: '年龄段', + value: [ + {n: '全部', v: ''}, + {n: '6岁以上', v: '?p367=370'}, + {n: '3~6岁', v: '?p367=369'}, + {n: '0~3岁', v: '?p367=368'}, + ], + init: '', + }, + { + key: 'by', + name: '排序', + value: [ + {n: '全部', v: ''}, + {n: '最新发布', v: 'lately'}, + {n: '最多播放', v: 'pop'}, + {n: '最多评论', v: 'view'}, + ], + init: '', + }, + ]; + classes.forEach(it => { + homeObj.filter[it.type_id] = jsonData; + }); + input = classes + }), + cate_exclude: '', + play_parse: true, + lazy: $js.toString(() => { + input = { + parse: 1, url: input, js: "document.querySelector('video').play();", + header: { + 'User-Agent': PC_UA, + } + }; + }), + 推荐: '', + 一级: 'body div.bj-col4:has(h3);a&&title;img&&data-original;span.played&&Text;a&&href', + 二级: '*', + 搜索: 'json:body.result;resourceName;imageUrl;clickNumStr;playUrl', +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/素白白[优].js b/drpy_t3/drpy_js/素白白[优].js new file mode 100644 index 0000000..c7d6446 --- /dev/null +++ b/drpy_t3/drpy_js/素白白[优].js @@ -0,0 +1,75 @@ +// 地址发布页 https://subaibai.vip/ +// 搜索数字验证 +var rule = { + title: '素白白[优]', + // host:'https://www.subaibaiys.com', + host: 'https://subaibai.vip', + hostJs: $js.toString(() => { + print(HOST); + let html = request(HOST, {headers: {"User-Agent": PC_UA}}); + let src = jsp.pdfh(html, ".go:eq(0)&&a&&href"); + print(src); + HOST = src; + }), + url: '/fyclassfyfilter', + filterable: 1,//是否启用分类筛选, + filter_url: '{{fl.area}}{{fl.year}}{{fl.class}}{{fl.cateId}}/page/fypage', + filter: 'H4sIAAAAAAAAA5WYWVfbyBLHvwvPw4lMsKWZbzBPd97vmTOnsRtbgyw5WpJAzpwTJpiwJcCEgRD2JCxJIGxZwGxfxi3Z3+KWjKUStEvcPJDYqn91t35dXVXtJ11l66HO/+hzu37575OuAT7Y9UtXnrn810LXT10mK3P4LsZGg8Mz+P6QGR5vCc3wcXWn+WwnfAxfuv766Unrw71owD8cbuvcuVewzGKZmX964YCh28SOf/5JjG/f6VIYvOESzH0VF4e016BuFjz0eXEgalt3+RQ9K19KLm7pol7bTl1c2wUnarncNZGtx3P4C5upE9h6cnhQN9c+3DW85ZV5Yobd7eDyZeokLQecpOVw1yQuS0xxfJA6vltiieFBvHRx514ws4jjn+yL6fQpQr2bnKXlctcsBSsPr266zI78gtpHcfFvMP6cdhqCgBzUI/3ZeWO8RouT8QRbl/oOj3V4ifBF4rdobi3CiwRn06J6Er3L76F/+2wazHHwaMK5FKuTP3w0XVZ07lWsSjf8eQaz23P/9p/f/K/DjY0pyqVPt4o2q5SixdbP1xufDyh1vqQbheiUjFwFnzYpJSs8hC3xbB6pR/9pLn4gF25YbiQc3/afVclh865umZhE6hfLpNTUy/xGuklTspvjBnNnlLqkO64Vh5p4OSqmj0heluN6uIrp94139KuZrv7A091BVDffvSRXYZUthz/2mBHJZ6b8p53isr2QMsf8Nr/cOYRb0n5YCHNi7eZzcUqy6Gdl3Yiln7+J2h4ldbltW1FY+sMz/tN5Sup4ToWbToTN/3s3mJ+lxNy2XD0fSZ9VG+PkbrglWzcMHi/i2YT/9xtKXLBZmUXKsWl/iRz2UXza/LHX9do4pTMgxqIQ8yfH6yfDJFbPNOMcOLMa7JJvn2fliudE0vUNsURugAMZrxvKUHeBmfmY7d5UY2yVcikz29WZ0Q3/xXPsbdUv10lousMcNyYcDF8231ySPKyH0TKCscOUQ5+38SQHE/vBxceU2M3HReDlSErk2pwZcNa6nZL1KHJYXqvXasH2U5JgybLd7n7dKEcea3udi0xLPsBLHos2PNieTVnNj5Ww62BmxkBi8Y2RQzH9Lm3x8C+HjYz0Y6tQWqHq+cv7ZGBzJ5ZvXoXlhxq7YuHAVzOQPynloOW5pagurvzjvyYLSNlz4mPdXDuun85QymLJitfZ3D33n5Lh0Wew/EByA5tns5AvOhRlBvGRaJeXD8RU7YdrMnTd9/pKnhsHQf3kRf3klFBCbTVZLNyD9ipN2A190qPEwKEeNtQ/7XTc0KvMdNOAJHDT7/12c3E01a8EyWMA/m74XTc2hF+Bm5A+BmKH02Zti5B6AzYsKzrh9dMpUZ0U1U5NSEtte0WPDaIacqlY7pT2QrXu2IxHNbJ+tgnbLcYWKLHNHsR90EQ4bnWSlpoJ6TI1pO05jh5v69VIcLHgz1PM+jyjyOyEfEVMrIuxD/VapzLV2h3bgqoSOcByYXyIVtpBz/PE/ovRA3G0RI3NTFaIh55Y9yevIFIIcckzi5i9xNRYML4IKyfUTpgGulm/refjCV4sNFc6VaIWGMt1INpR+6YxtRO82gpqx4THA+bGZVm82BAbc+JgjtAa3mNe7rM8uxg7vPXffRbrGxREs4DMW7dSWmiZ3LklFgfnkE/pPRpgQ2yg5GDeEK/GGjM7sLsQOmKFmixvGVa5D+d6tVk/3/L35+iJoD8P011bv7zWeHosqt+oPeN2YvCNVeAZnH1JCc3Bih23JqD3v241vu/TwV/mj/W8Fenf7gAieAUqu1hl3UwEz/s3weExcIUwJTyY57h4tMTmZpjUyQCFywsf8uCoRPrtOTFaDWZXISkQLqZe5IkJDs7DXwXSzq74/kWs1dpb2vZKPursVWE2S+Q/8EjNf302G9INFANVQlm0OY/7QnEy1ahOUEpul1ncoIrL73St0qFNiTvZkWnIHzRz6I8fxvzgpaClSQ0w07IfxRz8qY9ip1NDfV3DeD7qOvwX3+ms7s9+8L8shWHXFsffCf38Ptjr5zPhkG2X5CPiJIWdr4mv2vLw559DzNBv6+iQYKHPijv3+YOwOKxQOWoIGlxM9KAOzxNZVP9klTjbQNz6y7t0O2DES1is0bsJuwMpfsBqN1KhfHmledTpun5dbCADY1b113bF2pzY79RIXoegZRdRvX7ePBoWM+M0vj5uFHUv6vsgK8LK/QUy1zGvoMO1h2HG848Wg/HT5uur8Op2TiWxfjt5uTr+lz4ZFSu5Pcdv6b2peNx2LTvOjaH4/Zvm2UsxM0LWyxLXUQ5tLlUBSky/sY4DesWtDAq3ppjI5fH1eU7pNuxktwG3PCga9IvCdcPCYxHeCY8W08/EIw5tZqSfXRXVE1Kpu0PcTi4G5O86/STUjhaGxStYvLirc6twO/qBMNh+DcFIVlxTx3Yg+Dgc1glyVLihhldI1H+abC5+E5+pjs22ykn1xULzw24qQLjeJFqw8Bdmcvf7b1wcGhO79D464ZfwTeNf1BqT041hqv3iZjE58uQhvQiTu6XrXYz2phGmc/LkQLLSKxW4W8Ty6SNxOSk+U7ekxuxGY2YEetdIH3/vrA+vyN0362GYZy+/U2gqLP4NCITB9B49dggRLqCR+tsEtMjUPtpFbrp4fwzT1PqpOKOWkUzL4Q/aJPAyFJFBDFiIJ39lM7V5BQm0kfWzeXRpf0/erwf5dXfevl+ffqmfXfy/9+vQ916P0tPbnqH1UbLeR+t92dqD1h7ZmkFrRrYqaFUka+bn2AofJauGVk22qmhVZWsOrTnZmkVrVrYiq4zMKoOsMjKrDLLKyKwyyCojs8ogq4zMSkFWisxKQVaKzEpBVorMSkFWisxKQVaKzEpBVorMSkFWisxKQVaKzEpBVorMSkFWym1WmZ9/jli1PkpWDa23WcEjFa23WcGjHFpvs4JHWbTeZgWPetF6mxU8uo/W26zgUQ9ab7OCRxm03mYFjxS0yqw0ZKXJrDRkpcmsNGSlyaw0ZKXJrDRkpcmsNGSlyaw0ZKXJrDRkpcmsNGSlyaw0ZKXJrFRkpcqsVGSlyqxUZKXKrFRkpcqsVGSlyqxUZKXKrFRkpcqsVGSlyqxUZKXKrFRkpcqscsgqJ7PKIauczCqHrHIyqxyyysmscsgqJ7PKIauczCqHrHIyqxyyysmsckgjJ9PIIo2sTCOLq8rKq8rivFl53izOm5Xn7cV5e+V5e3EXeuVd6MWRe+WR7+PI9+WRe3AX4CM0M7//9T/5epoibCMAAA==', + // searchUrl:'/search?q=**', + searchUrl: '/page/fypage?s=**', + searchable: 2,//是否启用全局搜索, + quickSearch: 0,//是否启用快速搜索, + headers: { + 'User-Agent': 'UC_UA', + }, + // class_parse:'.navlist&&li;a&&Text;a&&href;.*/(\\w+)', + class_name: '影视筛选&电影&电视剧&热门电影&高分电影&动漫电影&香港经典电影&国产剧&欧美剧&韩剧&动漫剧&漫威宇宙电影系列&速度与激情电影系列&007系列(25部正传+2部外传)',//静态分类名称拼接 + class_url: 'movie_bt&new-movie&tv-drama&hot-month&high-movie&cartoon-movie&hongkong-movie&domestic-drama&american-drama&korean-drama&anime-drama&marvel-movies&fastfurious&zero-zero-seven',//静态分类标识拼接 + play_parse: true, + lazy: $js.toString(() => { + pdfh = jsp.pdfh; + var html = request(input); + var ohtml = pdfh(html, '.videoplay&&Html'); + var url = pdfh(ohtml, "body&&iframe&&src"); + if (/Cloud/.test(url)) { + var ifrwy = request(url); + let code = ifrwy.match(/var url = '(.*?)'/)[1].split('').reverse().join(''); + let temp = ''; + for (let i = 0x0; i < code.length; i = i + 0x2) { + temp += String.fromCharCode(parseInt(code[i] + code[i + 0x1], 0x10)) + } + input = { + jx: 0, + url: temp.substring(0x0, (temp.length - 0x7) / 0x2) + temp.substring((temp.length - 0x7) / 0x2 + 0x7), + parse: 0 + } + } else if (/decrypted/.test(ohtml)) { + var phtml = pdfh(ohtml, "body&&script:not([src])&&Html"); + eval(getCryptoJS()); + var scrpt = phtml.match(/var.*?\)\);/g)[0]; + var data = []; + eval(scrpt.replace(/md5/g, 'CryptoJS').replace('eval', 'data = ')); + input = { + jx: 0, + url: data.match(/url:.*?[\'\"](.*?)[\'\"]/)[1], + parse: 0 + } + } else { + input + } + }), + lazy: '', + 推荐: 'body&&.mi_btcon;ul&&li;*;*;*;*', + double:true, // 推荐内容是否双层定位 + 一级: '.mrb&&li;img&&alt;img&&data-original;.jidi&&Text;a&&href', + 二级: { + "title": "h1&&Text;.moviedteail_list&&li:eq(0)&&Text", + "img": ".dyimg&&img&&src", + "desc": ".moviedteail_list&&li:eq(-1)&&Text;;;.moviedteail_list&&li:eq(7)&&Text;.moviedteail_list&&li:eq(5)&&Text", + "content": ".yp_context&&p&&Text", + "tabs": ".mi_paly_box .ypxingq_t", + "lists": ".paly_list_btn:eq(#id) a" + }, + 搜索: '.search_list&&li;*;*;*;*', + 图片来源: '@Referer=https://www.subaibaiys.com@User-Agent=Mozilla/5.0 (Linux; Android 11; PEHT00 Build/RKQ1.201217.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36', +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/网飞猫[优].js b/drpy_t3/drpy_js/网飞猫[优].js new file mode 100644 index 0000000..7cc5c55 --- /dev/null +++ b/drpy_t3/drpy_js/网飞猫[优].js @@ -0,0 +1,97 @@ +var rule = { + title: '网飞猫[优]', + host: 'https://www.ncat1.app', + // url: '/show/fyclass-----2-fypage.html', + url: '/show/fyclass-fyfilter-fypage.html', + filter_url: '{{fl.类型}}-{{fl.地区}}-{{fl.语言}}-{{fl.年份}}-{{fl.排序}}', + searchUrl: '/search?k=**&page=fypage', + searchable: 2, + quickSearch: 0, + filterable: 1, + headers: { + 'User-Agent': 'MOBILE_UA', + }, + class_parse: '#nav-swiper&&.nav-swiper-slide;a&&Text;a&&href;/(\\w+).html', + cate_exclude: 'Netflix|今日更新|专题列表|排行榜', + tab_order: ['超清', '蓝光', '极速蓝光'], + play_parse: true, + lazy: '', + limit: 20, + 推荐: '.section-box:eq(2)&&.module-box-inner&&.module-item;*;*;*;*', + double: false, + 一级: '.module-box-inner&&.module-item;.v-item-title:eq(-1)&&Text;img&&data-original;.v-item-bottom&&span&&Text;a&&href', + 二级: { + title: '.detail-title&&Text;.detail-tags&&a:eq(-2)&&Text', + img: '.detail-pic&&img&&data-original', + desc: '.detail-info-row-main:eq(-2)&&Text;.detail-tags&&a&&Text;.detail-tags&&a:eq(1)&&Text;.detail-info-row-main:eq(1)&&Text;.detail-info-row-main&&Text', + content: '.detail-desc&&Text', + tabs: '.source-item-label', + lists: '.episode-list:eq(#id) a', + }, + 搜索: '.search-result-list&&a;.title&&Text;*;.search-result-item-header&&Text;a&&href;.desc&&Text', + 图片替换: 'https://www.ncat1.app=>https://vres.a357899.cn', + 预处理: $js.toString(() => { + let html = request(rule.host); + let scripts = pdfa(html, 'script'); + let img_script = scripts.find(it => pdfh(it, 'script&&src').includes('rdul.js')); + if (img_script) { + let img_url = img_script.match(/src="(.*?)"/)[1]; + //console.log(img_url); + let img_html = request(img_url); + let img_host = img_html.match(/'(.*?)'/)[1]; + log(img_host); + rule.图片替换 = 'https://www.ncat1.app=>' + img_host; + } + }), + filter: 'H4sIAAAAAAAAA+2Zz08bRxTH/xefOdgGtTi3HlqpUpVLe6hURREHV4qa0kN/qFWEZLANxhBsEDFx7AIpGEyCf0CQY9bY/md2Ztf/RWf95r0ZR+3LtqGRqviC+LzvzOzs7Nt531k/isQid755FPku+VvkTsS76In9jchMZHHh+6TNvyw8/Dk5briowiJbH6XrQVhBZGkGoneTP3378MGvOnz3068+++Lzr0kV66cyndWiBtJKVRVBDYC0fN3tV1EDQM3LXZgxNaAml4syVdKaBtLSebnyDDUAGjPf8vovcEwA0k63xXUPNQAac+XcK23jmAB0D7U1008Daas7o/IZagA0Zu6p66zjmADUb2tVFC6xHwBphWP/iNYagLRmRzgN1ABQc28O/WZbaxpoLo0Td3CIcwEw2qaf2ydtDLRmBw1vfQ3XDMB6tt5uzzzbAEjLDL2XNdQAUPOXN0XV0ZqGpXuBCmksqm2x6Zg0Jg6TxuL4dFRexUXoNkSlr0PYYnRSlt3WRAsdMg+gLa8Hk2NAiJZlsKWCuCwAtJx7NVk9x+UEoGsfnJl+GmhZNi6MpoHGfPXEaBpotoPXRtNA2uO2cE5QAzBjtu0x23Y/t3s9on4a6N6390W2i/cOQNd7feXXhng9AJMuh3JjqB4GZQwyXXWY8fp7skQPh5jmnCmoDiKHb5xhatHaVSj3OtiC2Np2RHtXZPFNMUxPojb0CirVy/gwiOkqg1dwXdehjcgO0T1nO24PtzENdqr7rYZfT5lUJw6V6pW+ao+DA9BNXh4bTYOVaEbTYCWv0TRYyWs0DVaCWv0Awi6CuL5ye33rfUcOswjxaHxOx8b/WvFZE5+143ETj9vxmInH7HjUxKMUj0XH0zwiLRa9r/4kqEH0zQbRoEHUNEhMNoglEtH76o9pMP9mg/mgwbxpICtXcg9fhUD7ODGxsHJrRzgFs7DEkwvr9W5EMYdXMaNXU7KEL0ncDntpfNJmXf1WRuRw350LpnFvRvX6b8yJpjDmhDMZnHHhjARrFrjizZghrrBzhoczJ0FhovvTEMYMceaEMzVBQaPraQhjQNSWZ56RhjBGkDNfo3RfdFdwLgC3bUAoHLllA8LZhH9rPTgLwVkP1l681ShxJoMzJ9PCOS2cH3DhnH1PhTNfl6llefNy4hxnQqFO/9wpkPsywGzebKHkCh5X1JgTqSzue+dU0AFCGQimaHMnZ5UH/vMUagCkVfKyjFVFQxjj4fUK1rEMgPodPhcV2mQAUPtk8YFKK5Dgf8rMYVGtPW53AHRUcy5Fo4g7PwBtd7/vyKe40hpMOd9Qa0jlfAxhLMJfWqDb+mbAlc23l/N3+1rwbmZg+s1g+s1gan1snlqf/7n1mbst6+M5L0T/CaYzAGnVA9dxvFOqwcQ0t2bb9NZAWuZCFI5Mb8OhDBP36Z8xTNznfa/SFUe0OQHQbPMrXqWJUwUwJffvP/1zBo2zBl8mF378YVFrGmie3M8zjGHiDJosP3NvaEcFmP6cMC0j0zLyIZeRj/55GTFh+ymPUqv+H5R6AJTqu1XRxBOLBppVuajON5jqANTvbOh38tgPgK639tjbPcDrAYQpK+yv28zJij3fMudw9tdt7myf7Yhm2rySAbz3zFEpsvQnK+G0IDwhAAA=', + 一级f: `js: + let urls = [ + 'https://www.ncat1.app/show/1-----1-1.html', + 'https://www.ncat1.app/show/2-----1-1.html', + 'https://www.ncat1.app/show/3-----1-1.html', + 'https://www.ncat1.app/show/4-----1-1.html', + 'https://www.ncat1.app/show/6-----1-1.html', + ]; + let filters = {}; + pdfa = jsp.pdfa; + pdfh = jsp.pdfh; + for(let url of urls){ + let fclass = url.match(/show\\/(\\d+)-/)[1]; + console.log(fclass); + let html = request(url); + let tabs = pdfa(html, '.filter-row'); + let data = []; + for (let tab of tabs) { + let title = pdfh(tab, 'strong&&Text').replace(':',''); + let lis = pdfa(tab, 'a'); + let _map = {key: title, name: title}; + let value = []; + for (let li of lis) { + let n = pdfh(li, 'a&&Text').trim(); + let v=n; + if(/全部|地区|类型/.test(n)){ + v = ''; + }else if(/综合/.test(n)){ + v = '1'; + }else{ + v = pdfh(li,'a&&href'); + try { + v = v.match(/-(.*?)1-1\.html/)[1].replace(/-/g,''); + }catch (e) { + v = v.match(/-(.*?)-1\.html/)[1].replace(/-/g,''); + } + v = decodeURIComponent(v); + } + value.push({ + 'n': n, 'v': v + }); + } + _map['value'] = value; + data.push(_map); + } + filters[fclass] = data; + } + VODS = [filters]; + console.log(gzip(JSON.stringify(filters))); + `, +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/老白故事[box].js b/drpy_t3/drpy_js/老白故事[box].js new file mode 100644 index 0000000..b73cdb4 --- /dev/null +++ b/drpy_t3/drpy_js/老白故事[box].js @@ -0,0 +1,323 @@ +var charStr = 'abacdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789'; + +function rand(min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; +} + +function randStr(len, withNum, onlyNum) { + var _str = ''; + let containsNum = withNum === undefined ? true : withNum; + for (var i = 0; i < len; i++) { + let idx = onlyNum ? rand(charStr.length - 10, charStr.length - 1) : rand(0, containsNum ? charStr.length - 1 : charStr.length - 11); + _str += charStr[idx]; + } + return _str; +} + +function randUUID() { + return randStr(8).toLowerCase() + '-' + randStr(4).toLowerCase() + '-' + randStr(4).toLowerCase() + '-' + randStr(4).toLowerCase() + '-' + randStr(12).toLowerCase(); +} + +function randMAC() { + return randStr(2).toUpperCase() + ':' + randStr(2).toUpperCase() + ':' + randStr(2).toUpperCase() + ':' + randStr(2).toUpperCase() + ':' + randStr(2).toUpperCase() + ':' + randStr(2).toUpperCase(); +} + +const deviceBrands = ['Huawei', 'Xiaomi']; +const deviceModels = [ + ['MHA-AL00', 'HUAWEI Mate 9', 'MHA-TL00', 'HUAWEI Mate 9', 'LON-AL00', 'HUAWEI Mate 9 Pro', 'ALP-AL00', 'HUAWEI Mate 10', 'ALP-TL00', 'HUAWEI Mate 10', 'BLA-AL00', 'HUAWEI Mate 10 Pro', 'BLA-TL00', 'HUAWEI Mate 10 Pro', 'HMA-AL00', 'HUAWEI Mate 20', 'HMA-TL00', 'HUAWEI Mate 20', 'LYA-AL00', 'HUAWEI Mate 20 Pro', 'LYA-AL10', 'HUAWEI Mate 20 Pro', 'LYA-TL00', 'HUAWEI Mate 20 Pro', 'EVR-AL00', 'HUAWEI Mate 20 X', 'EVR-TL00', 'HUAWEI Mate 20 X', 'EVR-AN00', 'HUAWEI Mate 20 X', 'TAS-AL00', 'HUAWEI Mate 30', 'TAS-TL00', 'HUAWEI Mate 30', 'TAS-AN00', 'HUAWEI Mate 30', 'TAS-TN00', 'HUAWEI Mate 30', 'LIO-AL00', 'HUAWEI Mate 30 Pro', 'LIO-TL00', 'HUAWEI Mate 30 Pro', 'LIO-AN00', 'HUAWEI Mate 30 Pro', 'LIO-TN00', 'HUAWEI Mate 30 Pro', 'LIO-AN00m', 'HUAWEI Mate 30E Pro', 'OCE-AN10', 'HUAWEI Mate 40', 'OCE-AN50', 'HUAWEI Mate 40E', 'OCE-AL50', 'HUAWEI Mate 40E', 'NOH-AN00', 'HUAWEI Mate 40 Pro', 'NOH-AN01', 'HUAWEI Mate 40 Pro', 'NOH-AL00', 'HUAWEI Mate 40 Pro', 'NOH-AL10', 'HUAWEI Mate 40 Pro', 'NOH-AN50', 'HUAWEI Mate 40E Pro', 'NOP-AN00', 'HUAWEI Mate 40 Pro', 'CET-AL00', 'HUAWEI Mate 50', 'CET-AL60', 'HUAWEI Mate 50E', 'DCO-AL00', 'HUAWEI Mate 50 Pro', 'TAH-AN00', 'HUAWEI Mate X', 'TAH-AN00m', 'HUAWEI Mate Xs', 'TET-AN00', 'HUAWEI Mate X2', 'TET-AN10', 'HUAWEI Mate X2', 'TET-AN50', 'HUAWEI Mate X2', 'TET-AL00', 'HUAWEI Mate X2', 'PAL-AL00', 'HUAWEI Mate Xs 2', 'PAL-AL10', 'HUAWEI Mate Xs 2', 'EVA-AL00', 'HUAWEI P9', 'EVA-AL10', 'HUAWEI P9', 'EVA-TL00', 'HUAWEI P9', 'EVA-DL00', 'HUAWEI P9', 'EVA-CL00', 'HUAWEI P9', 'VIE-AL10', 'HUAWEI P9 Plus', 'VTR-AL00', 'HUAWEI P10', 'VTR-TL00', 'HUAWEI P10', 'VKY-AL00', 'HUAWEI P10 Plus', 'VKY-TL00', 'HUAWEI P10 Plus', 'EML-AL00', 'HUAWEI P20', 'EML-TL00', 'HUAWEI P20', 'CLT-AL00', 'HUAWEI P20 Pro', 'CLT-AL01', 'HUAWEI P20 Pro', 'CLT-AL00l', 'HUAWEI P20 Pro', 'CLT-TL00', 'HUAWEI P20 Pro', 'CLT-TL01', 'HUAWEI P20 Pro', 'ELE-AL00', 'HUAWEI P30', 'ELE-TL00', 'HUAWEI P30', 'VOG-AL00', 'HUAWEI P30 Pro', 'VOG-AL10', 'HUAWEI P30 Pro', 'VOG-TL00', 'HUAWEI P30 Pro', 'ANA-AL00', 'HUAWEI P40', 'ANA-AN00', 'HUAWEI P40', 'ANA-TN00', 'HUAWEI P40', 'ELS-AN00', 'HUAWEI P40 Pro', 'ELS-TN00', 'HUAWEI P40 Pro', 'ELS-AN10', 'HUAWEI P40 Pro', 'ELS-TN10', 'HUAWEI P40 Pro', 'ABR-AL00', 'HUAWEI P50', 'ABR-AL80', 'HUAWEI P50', 'ABR-AL60', 'HUAWEI P50E', 'ABR-AL90', 'HUAWEI P50E', 'JAD-AL00', 'HUAWEI P50 Pro', 'JAD-AL80', 'HUAWEI P50 Pro', 'JAD-AL50', 'HUAWEI P50 Pro', 'JAD-AL60', 'HUAWEI P50 Pro', 'BAL-AL00', 'HUAWEI P50 Pocket', 'BAL-AL60', 'HUAWEI Pocket S', 'PIC-AL00', 'HUAWEI nova 2', 'PIC-TL00', 'HUAWEI nova 2', 'BAC-AL00', 'HUAWEI nova 2 Plus', 'BAC-TL00', 'HUAWEI nova 2 Plus', 'HWI-AL00', 'HUAWEI nova 2s', 'HWI-TL00', 'HUAWEI nova 2s', 'ANE-AL00', 'HUAWEI nova 3e', 'ANE-TL00', 'HUAWEI nova 3e', 'PAR-AL00', 'HUAWEI nova 3', 'PAR-TL00', 'HUAWEI nova 3', 'INE-AL00', 'HUAWEI nova 3i', 'INE-TL00', 'HUAWEI nova 3i', 'VCE-AL00', 'HUAWEI nova 4', 'VCE-TL00', 'HUAWEI nova 4', 'MAR-AL00', 'HUAWEI nova 4e', 'MAR-TL00', 'HUAWEI nova 4e', 'SEA-AL00', 'HUAWEI nova 5', 'SEA-TL00', 'HUAWEI nova 5', 'SEA-AL10', 'HUAWEI nova 5 Pro', 'SEA-TL10', 'HUAWEI nova 5 Pro', 'GLK-AL00', 'HUAWEI nova 5i', 'GLK-TL00', 'HUAWEI nova 5i', 'GLK-LX1U', 'HUAWEI nova 5i', 'SPN-TL00', 'HUAWEI nova 5i Pro', 'SPN-AL00', 'HUAWEI nova 5z', 'WLZ-AL10', 'HUAWEI nova 6', 'WLZ-AN00', 'HUAWEI nova 6', 'JNY-AL10', 'HUAWEI nova 6 SE', 'JNY-TL10', 'HUAWEI nova 6 SE', 'JEF-AN00', 'HUAWEI nova 7', 'JEF-AN20', 'HUAWEI nova 7', 'JEF-TN00', 'HUAWEI nova 7', 'JEF-TN20', 'HUAWEI nova 7', 'JER-AN10', 'HUAWEI nova 7 Pro', 'JER-AN20', 'HUAWEI nova 7 Pro', 'JER-TN10', 'HUAWEI nova 7 Pro', 'JER-TN20', 'HUAWEI nova 7 Pro', 'CDY-AN00', 'HUAWEI nova 7 SE', 'CDY-AN20', 'HUAWEI nova 7 SE', 'CDY-TN00', 'HUAWEI nova 7 SE', 'CDY-TN20', 'HUAWEI nova 7 SE', 'ANG-AN00', 'HUAWEI nova 8', 'BRQ-AN00', 'HUAWEI nova 8 Pro', 'BRQ-AL00', 'HUAWEI nova 8 Pro', 'JSC-AN00', 'HUAWEI nova 8 SE', 'JSC-TN00', 'HUAWEI nova 8 SE', 'JSC-AL50', 'HUAWEI nova 8 SE', 'NAM-AL00', 'HUAWEI nova 9', 'RTE-AL00', 'HUAWEI nova 9 Pro', 'JLN-AL00', 'HUAWEI nova 9 SE', 'NCO-AL00', 'HUAWEI nova 10', 'GLA-AL00', 'HUAWEI nova 10 Pro', 'CHA-AL80', 'HUAWEI nova 10z'], + ['M2001J2C', 'Xiaomi 10', 'M2001J2G', 'Xiaomi 10', 'M2001J2I', 'Xiaomi 10', 'M2011K2C', 'Xiaomi 11', 'M2011K2G', 'Xiaomi 11', '2201123C', 'Xiaomi 12', '2201123G', 'Xiaomi 12', '2112123AC', 'Xiaomi 12X', '2112123AG', 'Xiaomi 12X', '2201122C', 'Xiaomi 12 Pro', '2201122G', 'Xiaomi 12 Pro'], +]; + +function randDevice() { + let brandIdx = rand(0, deviceBrands.length - 1); + let brand = deviceBrands[brandIdx]; + let modelIdx = rand(0, deviceModels[brandIdx].length / 2 - 1); + let model = deviceModels[brandIdx][modelIdx * 2 + 1]; + let release = rand(8, 13); + let buildId = randStr(3, false).toUpperCase() + rand(11, 99) + randStr(1, false).toUpperCase(); + return { + brand: brand, + model: model, + release: release, + buildId: buildId, + }; +} + +function randDeviceWithId(len) { + let device = randDevice(); + device['id'] = randStr(len); + return device; +} + +function formatPlayUrl(src, name) { + if (src.trim() == name.trim()) { + return name; + } + return name + .trim() + .replaceAll(src, '') + .replace(/<|>|《|》/g, '') + .replace(/\$|#/g, ' ') + .trim(); +} + +globalThis.randDeviceWithId = randDeviceWithId; +globalThis.formatPlayUrl = formatPlayUrl; + +globalThis.appVersion = '1.1.7'; +globalThis.appUA = ''; +globalThis.appData = {}; +globalThis.device = {}; +globalThis.nativeEncode = '1449682949'; +globalThis.pk = NODERSA.NodeRSA( + `-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtSwotbu7UEonUCzCsJXP +SpYOrkuMnpyk24PBQskkcwYZsUTwbh8Y9vHuPIerh3AfZZ1luFV9yPC282xiNX+/ ++IAzWHWG6M+dWmJnDyybeUVTh7H7YVM31eSR9TFT4VASr7NftgCv7hfS2mVNL0sx +RrMSPSXa6SbjkIeW4GTpYpWKehKfaqrgDwVfFCu67ogL9JLIdDxvWthIe42uUMnz +4II1/pdrPtWRu0CDjaxvsLz26UdMGSL3gFEloaJhp4KuIPK4RlIx+9t28H00+3Ip +eVirmiayDYJQe1cjiDKoERSkLubJRD2yj5X3trGmgXex3QkcRtx5UNXYkLEuEMNG +iwIDAQAB +-----END PUBLIC KEY-----`, + 'pkcs8-public-pem', + { + encryptionScheme: 'pkcs1', + }, +); +globalThis.imgUrl = function (pic) { + if (pic.startsWith('http')) return pic; + return appData.img_url + pic; +} + +var rule = { + 类型: '听书',//影视|听书|漫画|小说 + title: '老白故事[听]', + host: 'https://lags.oss-cn-hangzhou.aliyuncs.com/', + url: '', + searchUrl: '#fypage', + searchable: 2, + quickSearch: 0, + filterable: 1, + filter: '', + filter_url: '', + headers: { + 'User-Agent': 'MOBILE_UA', + }, + timeout: 5000, + play_parse: true, + 预处理: $js.toString(() => { + device = getItem('device', '{}'); + if (typeof device == "string") { + device = JSON.parse(device); + } + // device = JSON.parse(device); + if (!device.id) { + device = randDeviceWithId(32); + device.id = device.id.toLowerCase(); + device.ua = 'Dalvik/2.1.0 (Linux; U; Android ' + device.release + '; ' + device.model + ' Build/' + device.buildId + ')'; + setItem('device', JSON.stringify(device)) + } + // log('device:'); + // log(device); + appUA = '(Mozilla/5.0 (Linux; Android ' + device.release + '; ' + device.model + ' Build/' + device.buildId + '; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/68.0.3440.70 Mobile Safari/537.36)'; + + try { + let html = request(rule.host + '/' + appVersion + '.json'); + let content = JSON.parse(html); + // log(content.data); + var datas = content.data.split('$6c1cef78ae='); + var json = ''; + for (let d of datas) { + // json += pk.decryptPublic(d, 'utf8').replace(/^\s*\n|\s*$/gm, ''); + json += pk.decryptPublic(d, 'utf8'); + } + appData = JSON.parse(json); + // log(appData); + appUA = appData.ua + '/' + appVersion + appUA; + log('appUA:' + appUA); + } catch (error) { + console.log(error); + } + rule.headers = { + 'User-Agent': appUA, + Referer: appData.http_referer, + } + }), + class_parse: $js.toString(() => { + let html = request(appData.json_url + 'cat/index.json', { + headers: rule.headers + }); + let content = JSON.parse(html); + let datas = content.data; + let classes = []; + let filterObj = {}; + for (let data of datas) { + let name = data.title.replace('分类', ''); + + let type = { + key: 'type', + name: '类型', + }; + var cvalues = data.types.reduce((result, t) => { + result.push({n: t.name, v: t.type_id}); + return result; + }, []); + type['init'] = cvalues[0]['v']; + type['value'] = cvalues; + let sort = { + key: 'sort', + name: '排序', + init: 'hot', + }; + let sortValues = []; + sortValues.push({n: '默认', v: 'index'}); + sortValues.push({n: '热门', v: 'hot'}); + sortValues.push({n: '连载', v: 'serial'}); + sortValues.push({n: '完结', v: 'done'}); + sort['value'] = sortValues; + + filterObj[type['init']] = [type, sort]; + classes.push({ + type_id: type['init'], + type_name: name, + }); + } + // log(classes); + input = classes; + homeObj.filter = filterObj; + + }), + 推荐: '', + 一级: $js.toString(() => { + VODS = []; + let type = MY_FL.type || MY_CATE; + let sort = MY_FL.sort || 'hot'; + let html = request(appData.json_url + 'cat_list/' + type + '/' + sort + '/' + MY_PAGE + '.json', {headers: rule.headers}); + let content = JSON.parse(html); + let datas = content.data; + let books = []; + for (let book of datas.books) { + books.push({ + vod_id: book.book_id, + vod_name: book.name, + vod_pic: imgUrl(book.pic), + vod_remarks: book.status, + }); + } + VODS = books; + }), + 二级: $js.toString(() => { + let ids = [orId]; + let books = []; + for (let id of ids) { + let html = request(appData.json_url + 'cont/' + id + '.json', {headers: rule.headers}); + let content = JSON.parse(html); + let data = content.data; + let book = { + vod_name: data.name, + vod_pic: imgUrl(data.pic), + type_name: '', + vod_year: data.time, + vod_area: '', + vod_remarks: data.status, + vod_actor: data.teller, + vod_director: '', + vod_content: data.synopsis, + vod_play_from: '道长在线', + }; + // log(book); + let us = data.play_data + .map(function (b) { + return formatPlayUrl(book.vod_name, b.name) + '$' + data.book_id + '-' + b.play_id; + }) + .join('#'); + book.vod_play_url = us; + books.push(book); + } + VOD = books.length > 0 ? books[0] : {}; + }), + 搜索: $js.toString(() => { + let time = Math.floor(new Date().getTime() / 1000); + time = time - (time % 60); + let t = CryptoJS.enc.Hex.stringify(CryptoJS.MD5(CryptoJS.enc.Hex.stringify(CryptoJS.MD5('search00')).toString() + nativeEncode + time)).toString(); + let data = { + m: 'search', + t: t, + aid: 0, + pid: 0, + key: KEY, + }; + // var params = pk.encrypt(JSON.stringify(data), 'base64').replace(/^\s*\n|\s*$/gm, ''); + var params = pk.encrypt(JSON.stringify(data), 'base64'); + log('params长度:' + params.length); + let post_obj = { + params: params, + version: appVersion, + }; + let post_data = `params=${params}&version=${appVersion}`; + // log('post_data:' + post_data); + log('api_url:' + appData.api_url); + let headers = JSON.parse(JSON.stringify(rule.headers)); + // headers['Accept'] = 'application/json, text/plain, */*'; + headers['Content-Type'] = 'application/x-www-form-urlencoded'; + let html = post(appData.api_url, { + headers: headers, + body: post_data, + }); + let content = JSON.parse(html); + var datas = content.data; + let books = []; + for (let book of datas.books) { + books.push({ + vod_id: book.book_id, + vod_name: book.name, + vod_pic: imgUrl(book.pic), + vod_remarks: book.status, + }); + } + VODS = books; + }), + lazy: $js.toString(() => { + var info = input.split('-'); + let time = Math.floor(new Date().getTime() / 1000); + time = time - (time % 60); + let t = CryptoJS.enc.Hex.stringify(CryptoJS.MD5(CryptoJS.enc.Hex.stringify(CryptoJS.MD5('play' + info[0] + info[1])).toString() + nativeEncode + time)).toString(); + let data = { + m: 'play', + t: t, + aid: info[0], + pid: info[1], + }; + // var params = pk.encrypt(JSON.stringify(data), 'base64').replace(/^\s*\n|\s*$/gm, ''); + var params = pk.encrypt(JSON.stringify(data), 'base64'); + // log('params:' + params); + // log([params]); + log('params长度:' + params.length); + let post_obj = { + params: params, + version: appVersion, + }; + let post_data = buildUrl('', post_obj).slice(1); + // let post_data = `params=${params}&version=${appVersion}`; + // log('post_data:' + post_data); + log('api_url:' + appData.api_url); + let headers = JSON.parse(JSON.stringify(rule.headers)); + // headers['Accept'] = 'application/json, text/plain, */*'; + headers['Content-Type'] = 'application/x-www-form-urlencoded'; + let html = post(appData.api_url, { + headers: headers, + body: post_obj, + postType: "form", + }); + let content = JSON.parse(html); + var datas = content.data; + input = { + parse: 0, + url: datas.url, + header: { + 'User-Agent': appUA, + Referer: appData.referer, + }, + }; + }), +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/豆瓣[官].js b/drpy_t3/drpy_js/豆瓣[官].js new file mode 100644 index 0000000..fd887c5 --- /dev/null +++ b/drpy_t3/drpy_js/豆瓣[官].js @@ -0,0 +1,37 @@ +var rule = { + title:'豆瓣[官]', + host:'https://frodo.douban.com', + apidoc:'https://www.doubanapi.com', + homeUrl:'', + searchUrl:'', + searchable:1, + quickSearch:1, + filterable:1, + // 分类链接fypage参数支持1个()表达式 + url:'/?pg=fypage&class=fyclass&douban=$douban', + filter_url:'fl={{fl}}', + 图片来源:'@Referer=https://api.douban.com/@User-Agent=Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/113.0.0.0%20Safari/537.36', + headers:{ + "Host": "frodo.douban.com", + // "Host": "api.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:'interests&hot_gaia&tv_hot&show_hot&movie&tv&rank_list_movie&rank_list_tv', + 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': '2023', 'v': '2023'}, {'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': '2023', 'v': '2023'}, {'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': '2023', 'v': '2023'}, {'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="http://api.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="http://api.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);if(/request_error/.test(html)){print(html)}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,douban);setResult2(res);', + 二级:'', + 搜索:'', +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/贝乐虎[儿].js b/drpy_t3/drpy_js/贝乐虎[儿].js new file mode 100644 index 0000000..395219a --- /dev/null +++ b/drpy_t3/drpy_js/贝乐虎[儿].js @@ -0,0 +1,56 @@ +var rule = { + 类型: '影视',//影视|听书|漫画|小说 + title: '贝乐虎[儿]', + host: 'https://vd.ubestkid.com', + url: '/api/v1/bv/video#pg=fypage', + homeUrl: '/api/v1/bv/video', + searchable: 0, + quickSearch: 0, + filterable: 0, + headers: { + 'User-Agent': 'IOS_UA', + }, + timeout: 5000, + class_parse: $js.toString(() => { + input = JSON.parse(ungzip('H4sIAAAAAAAAA4VUy27aUBD9F6+zwKRAk1+pqqpSsuiiVRfdVFUlUnCCwU1IwqNuHggFQ1owOCGNjAnwM547l10/oZeiRmTuoO5s6ZyZc87M3BefjA8f3+++erNjbKdTG8ufd6/f7hrbxu9GeSDOs6IWxGFRXN4bnzdW0Ka5qcPjKBJBBXO+OPGfwlNpHY3jI7BC7HoyuCLFNzM6HB6yMMvJu4t4VJbuIanPqIFpCYrXkJ8J3yHorXVqOLSZMHW4vLcw6oibiZy0TRoNU34Vj71eHDnga66ZkCgvtDXeFjO4v7i68kRbcDmNHha2bZXWTBYuqRluFKd5vGhyWWUSjIXSjagdsMmanOPiF1H34vBw8RFUiFdGjdgrz6duHNawSufMJKNWAitjtFlBKa78rz3ZdBRUnN1S+c8Z+f8WFCwPznzZD+g2cZ4fSa0OulPsHD8lpZNrF/aoJQd1gmaGvESLqhVHJSIoybkoOws1fhuKDWh1qQVmyjj+Js57fAPmfsg1L3cE7QIZN5MV1K8faSJnQXV/OVKqkXG1ANo/5o2hYou7KQxGVCnXTyOtEWsmuHXzDqDt4ve8jLrx5JT2e/ZfxppmaYYp+y1sePC1qbabSmOfpCs4HmI/i72Kll+GiU9UA/WosIec5O5+sK/gysL8p6OHleTeFUU6cXE4hsIq7+UfFA1HoacGAAA=')); + }), + play_parse: true, + lazy: $js.toString(() => { + input = {parse: 0, url: input + '#.mp4'}; + }), + 推荐: $js.toString(() => { + let pdata = {age: 1, appver: "6.1.9", egvip_status: 0, svip_status: 0, vps: 60, subcateId: 56, p: 1}; + // let pbody = buildUrl('',pdata).split('?')[1]; + // let html = post(input,{body:pbody}); + let html = post(input, {data: pdata}); + let json = JSON.parse(html); + let data = json.result.items; + let d = []; + data.forEach(it => { + d.push({ + vod_id: it.url + '@@' + it.title + '@@' + it.image, + vod_name: it.title, + vod_pic: it.image, + vod_remarks: '👀' + it.viewcount || '', + }); + }); + VODS = d; + }), + 一级: $js.toString(() => { + let pdata = {age: 1, appver: "6.1.9", egvip_status: 0, svip_status: 0, vps: 60, subcateId: MY_CATE, p: MY_PAGE}; + let html = post(input.split('#')[0], {data: pdata}); + let json = JSON.parse(html); + let data = json.result.items; + let d = []; + data.forEach(it => { + d.push({ + vod_id: it.url + '@@' + it.title + '@@' + it.image, + vod_name: it.title, + vod_pic: it.image, + vod_remarks: '👀' + it.viewcount || '', + }); + }); + VODS = d; + }), + 二级: '*', +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/路漫漫[漫].js b/drpy_t3/drpy_js/路漫漫[漫].js new file mode 100644 index 0000000..6114621 --- /dev/null +++ b/drpy_t3/drpy_js/路漫漫[漫].js @@ -0,0 +1,40 @@ +var rule = { + title: "路漫漫", + host: "https://m.lmm52.com", + url: "/vod/show/id/fyclassfyfilter.html", + searchUrl: "https://m.lmm52.com/vod/search/page/fypage/wd/**.html", + searchable: 2, + quickSearch: 0, + filterable: 1, + filter: "H4sIAAAAAAAAAO2Su04CURCG32XqNXu/wKsYitVsAlHRcEs2hISoECuJxqhRYqMFxkIKKFgLXoY9Lm/hHtB1mPqUU87//Tt7kvm6YEN5vwtHUQxlSBez1dcraFAPTyI8d8LjdrQp1mU8mKwvJjLOB+hp29QyLOc30+MobOibAFGbUhtTi1ILU5NSE1ODUgNRs0RoHiAaUBpg6lPqY+pR6mHqUuoWVDzPxMM75c6eWQryp1dkbXsRcX2bJqP/ixTz7kXEuJ8tb+TW++nf1oNYb9Xyj4p/jvvrj8dVkojpHepUa60m6WSfl+nVEHWah6eNnUXp29P3+SKbv6BS+0y+vKKBw0axUUqNctkoNkqpUR4bxUYpNcpno9gopUYFbBQbpdCo3g8SNsur7Q0AAA==", + filter_url: "{{fl.排序}}{{fl.年代}}/page/fypage", + filter_def: "", + headers: { + "User-Agent": "MOBILE_UA" + }, + timeout: 5000, + class_name: "日本动漫&国产动漫&欧美动漫&日本动画电影&国产动画电影&欧美动画电影", + class_url: "6&7&8&3&4&5", + class_parse: "", + cate_exclude: "", + play_parse: true, + lazy: $js.toString(() => { + input = {parse: 1, url: input, js: ''}; + }), + double: false, + 推荐: "*", + 一级: ".video-img-box;h6.title&&Text;.lazyload&&data-src;.label&&Text;a&&href", + 二级: { + title: ".page-title&&Text;.tag-link&&Text", + img: ".module-item-pic&&.lazyload&&src", + desc: ".video-info-items:eq(3)&&Text;.video-info-items:eq(2)&&Text;;.video-info-items:eq(1)&&Text;.video-info-items:eq(0)&&Text", + content: ".video-info-content&&Text", + tabs: ".module-tab-item.tab-item", + lists: ".module-player-list:eq(#id) a", + tab_text: "body&&Text", + list_text: "body&&Text", + list_url: "a&&href" + }, + detailUrl: "", + 搜索: "*" +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/闪雷电.js b/drpy_t3/drpy_js/闪雷电.js new file mode 100644 index 0000000..f5b1ecf --- /dev/null +++ b/drpy_t3/drpy_js/闪雷电.js @@ -0,0 +1,39 @@ +var rule = { + title: '闪雷电', + 编码: 'gb2312', + host: 'http://120.224.7.90:808', + url: '/www/List.asp?classid=fyclass&searchword=&page=fypage', + filterable: 0,//是否启用分类筛选, + class_name: '电影&电视剧&综艺&动漫&音乐', + class_url: '5000&10&8&6&12', + searchUrl: '/www/List.asp?classid=30&searchword=**&page=fypage', + searchable: 2, + quickSearch: 0, + headers: { + 'User-Agent': 'MOBILE_UA', + }, + play_parse: true, + lazy: $js.toString(() => { + var html = 'http://120.224.7.90:808/PlayMov.asp?ClassId=' + input.split(",")[2] + '&video=2&exe=0&down=0&movNo=' + input.split(",")[3] + '&vgver=undefined&ClientIP=120.224.7.90' + var url = request(html).match(/push\('(.*?)'/)[1] + input = { + jx: 0, + url: url, + parse: 0 + }; + }), + limit: 6, + 推荐: 'ul:eq(4)&&strong;img&&alt;img&&src;span:eq(1)&&Text;a&&href', + 一级: 'ul:eq(5)&&strong;img&&alt;img&&src;span:eq(1)&&Text;a&&href', + 二级: { + title: "ul:eq(2)&&li:eq(0)&&Text", + img: "img:eq(1)&&src", + desc: "ul:eq(2)&&li:eq(1)&&Text;ul:eq(2)&&li:eq(2)&&Text;ul:eq(2)&&li:eq(3)&&Text", + content: "body&&div:has(p)&&p:eq(3)&&Text", + tabs: "", + lists: 'body&&a[onclick^="senfe"]', + list_url: 'a&&onclick', + list_text: 'a&&Text' + }, + 搜索: '*', +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/阿里土豆[盘].js b/drpy_t3/drpy_js/阿里土豆[盘].js new file mode 100644 index 0000000..00b97be --- /dev/null +++ b/drpy_t3/drpy_js/阿里土豆[盘].js @@ -0,0 +1,32 @@ +Object.assign(muban.mxone5.二级,{ + //tabs: '.module-tab-item', + lists: '.module-row-one:eq(#id)&&a.module-row-text', + list_text:'h4&&Text', + list_url:'a&&data-clipboard-text', +}); +var rule = { + title: '阿里土豆[盘]', + 模板:'mxone5', + host: 'https://tudou.lvdoui.top', + //url: '/index.php/vod/show/id/fyclass/page/fypage.html', + url: '/index.php/vod/show/id/fyclassfyfilter.html', + searchUrl: '/index.php/vod/search.html?wd=**', + filter_url:'{{fl.cateId}}{{fl.area}}{{fl.by or "/by/time"}}{{fl.class}}{{fl.lang}}{{fl.letter}}/page/fypage{{fl.year}}', + filter: 'H4sIAAAAAAAAA+1b2U4bSRR9nvkMPzNyN2R/y77ve0Z5cCJrJhqGkYAZCUVIBLBjCNgGERyPzTZhHwxmCTFmjH/G1W3/Rdqu8u3bt1FsJCdCzH3knMutqlPl9jnt7tc//uDRPWd+fu35zd/lOeN52err6PA0edp8v/utP8XAgtEXsP7+y9f6p79S11aGA4ulvsUybP3h6W5S6HjSqleot9LJq7BqiRlaV/3sEoVVS4w3UaNn3FmiMBhocLGQS5KBJAYDLYyInV0ykMSgC6wNdZEYzCX0oZAdIHORWLWkmJoXQ8vOEoXBXAbXzBwpURhakTm261pRGYOSubeuFSkMppuaL+xNk+lKDLoER0vxJdJFYtBlctlaI+kisQPskdG7Yo6PkBKJQUnfoNH7NymRGEi3GxGBDJFOYtWS0sSo8WHOWaIwGGj8bXEgSwaSGOiyt2qOfRK5dSINwFAYmS1+pKdGYlASDorIBimRGJyafNTaXnJqJGbvVNKYGKE7VcGgpD9v/kuWrjAQMDdi7ib3W5qD6X5e/gd5CfC1+33oCpBMi6FsvVeA2YVSPFgdp9zIqyDYrfm4kVlzVCjIFjht7Ow5e0gI1rQXFomco0JBsOGb72mFgmAD3q3TCgVBj9ickVxx9pAQrGVqifZQkH2qPtMKBdkzTbtnmnb0GE6L7Lyzh4SgR3/EUlmElpxtAIU1z+XNSMociDuXDah9MZo23uWtf3YOCijUBbYLu+POIgnh49Tqa/vFPk7FtVRxsafe45TIWfXVAcqNvApC20grFASHZWOWVigItjGWE8MxWmSjaLtdRRJCR4ZWKAgdTFeFhNCRca1ZQkh2sdrnrJAQlr3L72u3ZTdi26XYVp2yN2vNx6rty228FQCxLZRtwWwzZZsxq1NWx6xGWQ2x+mnCWgBiT1H2FGZPUvYkZk9Q9gRmj1P2OGapVjrWSqda6VgrnWqlY610qpWOtdKpVjrWSqNaaVgrjWqlYa00qpWGtdKoVhrWSqNaaVgrjWqlYa00qpWGtdKoVhrWSqNaaVgrjWplAY5rlL+z048+LiIVM9aG6/y4nIWPYqWL9yww5whzDpjzhDkPzAXCXADmImEuAnOJMJeAuUyYy8BcIcwVYK4S5iow1whzDZjrhLkOzA3C3ADmJmFuAnOLMLeAuU2Y28DcIcwdYO4S5i4w9whzD5j7hLkPzAPCPADmIWEeAvOIMI+AeUyYx8A8IcwTYJ4S5ikwzwjzDBjtp9OEKyP4I/CiC31bhEdFNuI6/vaXSLnPiy5v5yurvDpEIZs10mOI/fVVZ4f9Rb3WL0JBxHa8/KPdX57B8yYrgjZ/vwgqVrdFNkVKJHawwFYrgtYR2OqIoHWEiTpCUmFnxhUmFGansYARX3OWKAzm8j7oSoYKQ3nDtQEK2982qi5u38gxhGMIx5BvE0M4QnCE4AjBEYIjBEeIIxMhvuPPWJwhjnyG+Iqrboyr/IqPYw+GWfZgiGUPxh6MPRh7sEPpwSwTxjdy2YQ1zoTxLdb/yS3W2jdQ+ckJttxsudlys+Vmy82W277t2dIgw13qGTAXepxmTmHYWPZPuY2lhcFkV/PFdMhZojDoMpoyBslDywqzDVnAyBAfrDDbkW0WdqJkuhJD5rH0kUxXYVCSXRark6REYjCXxIb72XGJQZexKWOLvmsgMeiSyRihSCE76nrq28GAjFv/WL6fyCgx6LjeW3wzRHpJrEHmu5BJWe50n2cpHATM59NnMeu0iAriX+HBsPKv8B62o2xH2Y6yHWU7eiTt6LEG2dE6vGYdr3iafaniDDG1CoOBwotmNEgGkhiURCfNFfoqo8Tgq7z2a5XF6EQxTN4lVRgMND0jEuSOtsJgoNq3q41k1v3+psRgLrVfP6zj1VeRtsTeInORGC6Z23SXWBjs0exe4T/yFqjCoEt4SoQSpIvE7EO7IVIkDygMBkoMGnHi5BVmq7su8jGqbgVDpu0b3/Q+oO+uefPaWFmwYo+zQkL7r4mfoGXvzt6dvTt7d/buiGHvftS9u3Wd54c3+OENfguPHxE5hI+IcIbgDMEZgjMEZwjOEJwhDm2GaNQPAJwhOENwhuAMwRmCMwRnCM4QnCE4Q3CGOPIZovsL7HXVqZFeAAA=', + +cate_exclude:'求片|全部影片', + lazy: ` + if (/(pan.quark.cn|www.aliyundrive.com|www.alipan.com)/.test(input)){ +let type="ali"; +if (input.includes("pan.quark.cn")){ +type="quark"; +} else if (input.includes("www.aliyundrive.com") || input.includes("www.alipan.com")){ +type="ali"; +} +let confirm=""; +//let confirm="&confirm=0"; +input = getProxyUrl().replace('js',type)+'&type=push'+confirm+'&url='+encodeURIComponent(input); +} + + `, +} \ No newline at end of file diff --git a/drpy_t3/drpy_js/黑木耳资源[资].js b/drpy_t3/drpy_js/黑木耳资源[资].js new file mode 100644 index 0000000..56f5beb --- /dev/null +++ b/drpy_t3/drpy_js/黑木耳资源[资].js @@ -0,0 +1,9 @@ +var rule = { + 模板: '采集1', + title: '黑木耳资源[资]', + host: 'https://www.heimuer.tv', + // homeTid: '13', + homeTid: '', + cate_exclude: '^电影$|^电视剧$|^综艺$|^动漫$', + parse_url: '', +} \ No newline at end of file diff --git a/drpy_t3/drpy_libs/alist.js b/drpy_t3/drpy_libs/alist.js new file mode 100644 index 0000000..ae9bd44 --- /dev/null +++ b/drpy_t3/drpy_libs/alist.js @@ -0,0 +1,819 @@ +// import _ from 'https://underscorejs.org/underscore-esm-min.js' +// import {distance} from 'https://unpkg.com/fastest-levenshtein@1.0.16/esm/mod.js' +import {distance} from './mod.js' +import {sortListByCN} from './sortName.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只显示 音视频和文件夹 + search: true, // 启用小雅的搜索,搜索只会搜第一个开启此开关的磁盘 + params:{ //对应文件夹参数 如设置对应文件夹的密码 + '/abc':{ password : '123' }, + '/abc/abc':{ password : '123' }, + } + }] + * 提示 想要加载文件夹里面全部视频到详情(看剧可以自动播放下一集支持历史记录) + * 需要改软件才能支持,,建议长按文件夹时添加判断 tag == folder 时跳转 DetailActivity + */ +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'; +var playRaw = 1; // 播放直链获取,默认0直接拼接/d 填1可以获取阿里oss链接。注意,有时效性 +const request_timeout = 5000; +const VERSION = 'alist v2/v3 20221223'; +const UA = 'Mozilla/5.0'; //默认请求ua +/** + * 打印日志 + * @param any 任意变量 + */ +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('print:'+e.message); + console.log(typeof(any)+':'+any.length); + } + }else if(typeof(any)=='object'&&Object.keys(any).length<1){ + console.log('null object'); + }else{ + console.log(any); + } +} + +/*** 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 +} + +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; + if(!options.headers){ + options.headers = {}; + } + let keys = Object.keys(options.headers).map(it=>it.toLowerCase()); + if(!keys.includes('referer')){ + options.headers['Referer'] = getHome(url); + } + if(!keys.includes('user-agent')){ + options.headers['User-Agent'] = UA; + } + console.log(JSON.stringify(options.headers)); + try { + const res = req(url, options); + // if(options.headers['Authorization']){ + // console.log(res.content); + // } + 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 }; +} + +function get_drives(name) { + const { settings, api, server,headers } = __drives[name]; + if (settings.v3 == null) { //获取 设置 + settings.v3 = false; + const data = http.get(server + '/api/public/settings',{headers:headers}).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; //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) { + console.log("当前版本号:"+VERSION); + let data; + if (typeof ext == 'object'){ + data = ext; + print('alist ext:object'); + } else if (typeof ext == 'string') { + if (ext.startsWith('http')) { + 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); + data = http.get(alist_data_url).json(); // .map(it=>{it.name='🙋丫仙女';return it}) + } else { + print('alist ext:json string'); + data = JSON.parse(ext); + } + } + + // print(data); // 测试证明壳子标题支持emoji,是http请求源码不支持emoji + let drives = []; + if(Array.isArray(data) && data.length > 0 && 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 > 0){ + 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)); + } + if(item.password){ + let pwdObj = { + password: item.password + }; + if(!item.params){ + item.params = {'/':pwdObj}; + }else{ + item.params['/'] = pwdObj; + } + _path_param.unshift('/'); + } + __drives[item.name] = { + name: item.name, + server: item.server.endsWith("/") ? item.server.rstrip("/") : item.server, + startPage: item.startPage || '/', //首页 + showAll: item.showAll === true, //默认只显示 视频和文件夹,如果想显示全部 showAll 设置true + search: !!item.search, //是否支持搜索,只有小丫的可以,多个可搜索只取最前面的一个 + params: item.params || {}, + _path_param: _path_param, + settings: {}, + api: {}, + headers:item.headers||{}, + 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),headers:this.headers }).json(); + // console.log(res); + try { + return this.settings.v3 ? res.data.content : res.data.files + }catch (e) { + console.log(`getPath发生错误:${e.message}`); + console.log(JSON.stringify(res)); + return [{name:'error',value:JSON.stringify(res)}] + } + }, + getFile(path) { + let raw_url = this.server+'/d'+path; + raw_url = encodeURI(raw_url); + let data = {raw_url:raw_url,raw_url1:raw_url}; + if(playRaw===1){ + try { + const res = http.post(this.server + this.api.file, { data: this.getParams(path),headers:this.headers }).json(); + data = this.settings.v3 ? res.data : res.data.files[0]; + if (!this.settings.v3) { + data.raw_url = data.url; //v2 的url和v3不一样 + } + data.raw_url1 = raw_url; + return data + }catch (e) { + return data + } + }else{ + return data + } + }, + isFolder(data) { return data.type === 1 }, + isVideo(data) { //判断是否是 视频文件 + // return this.settings.v3 ? data.type === 2 : data.type === 3 + // 增加音乐识别 视频,其他,音频 + 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)$/; // [".srt", ".ass", ".scc", ".stl", ".ttml"]; + // return ext.some(x => data.name.endsWith(x)); + 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) { + // print(e.message); + // print(data); + 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) { + let _post_data = {"pageNum":0,"pageSize":100}; + let _post_url = 'https://pbaccess.video.qq.com/trpc.videosearch.hot_rank.HotRankServantHttp/HotRankHttp'; + let data = http.post(_post_url,{ data: _post_data }).json(); + let _list = []; + try { + data = data['data']['navItemList'][0]['hotRankResult']['rankItemList']; + // print(data); + data.forEach(it=>{ + _list.push({ + vod_name:it.title, + vod_id:'msearch:'+it.title, + vod_pic:'https://avatars.githubusercontent.com/u/97389433?s=120&v=4', + vod_remarks:it.changeOrder, + }); + }); + }catch (e) { + print('Alist获取首页推荐发送错误:'+e.message); + } + return JSON.stringify({ 'list': _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(item.name!=='error') { + 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); + }else{ + console.log(item); + const vod = { + vod_name: item.value, + vod_id: 'no_data', + vod_remarks: '不要点,会崩的', + vod_pic: 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg' + } + 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(); + let sub; // 字幕文件名称 + if(subList.length === 1){ + sub = subList[0]; + }else { + let subs = JSON.parse(JSON.stringify(subList)); + subs.sort((a,b)=>{ + // chs是简体中文字幕 + 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 += " 有字幕"; + 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 += " 有字幕"; + item.vod_remarks += "🏷️"; + } + }); + } + + if(fl.order){ + // print(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{ + // 没传order是其他地方调用的,自动按名称正序排序方便追剧,如果传了none进去就不排序,假装云盘里本身文件顺序是正常的 + if(detail_order!=='none'){ + allList = sortListByName(allList,'vod_name','asc'); + } + } + + print("----category----"+`tid:${tid},detail_order:${detail_order},showMode:${showMode}`); + // print(allList); + 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: tid, + 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); + let list = [{vod_name:'无数据,防无限请求',type_name: "文件夹",vod_id:'no_data',vod_remarks:'不要点,会崩的',vod_pic:'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/static/img/404.jpg',vod_actor:e.message,vod_director: tid,vod_content: otid}]; + return JSON.stringify({ 'list': 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("@@@"); // @@@ 分割前是 相对文件path,分割后是字幕文件 + let vod = { + 'parse': 0, + 'playUrl': '', + // 'url': drives.getFile(urls[0]).raw_url+'#.m3u8' // 加 # 没法播放 + '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_url1; + } + 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(cnt < limit_search_show){ + print(vhref); + } + cnt ++; + let vid = searchDriver+'$'+vhref+'#search#'; + if(showMode==='all'){ + vid+='#all#'; + } + vods.push({ + vod_name:pdfh(it,'a&&Text'), + vod_id:vid, + vod_tag: isMedia(vhref) ? 'file' : 'folder', + vod_pic:'http://img1.3png.com/281e284a670865a71d91515866552b5f172b.png', + vod_remarks:searchDriver + }); + }); + // 截取搜索结果 + vods = vods.slice(0,limit_search_show); + print(vods); + return JSON.stringify({ + 'list': vods + }); + } +} + +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 if( sz > 1024.0){ + sz /= 1024.0; + 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); +} + +/** + * 自然排序 + * ["第1集","第10集","第20集","第2集","1","2","10","12","23","01","02"].sort(naturalSort()) + * @param options {{key,caseSensitive, order: string}} + */ +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() + ); + }; + + // Normalize values to strings + var x = normalize(a).replace(sre, '') || ''; + var y = normalize(b).replace(sre, '') || ''; + + // chunk/tokenize + 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'); + + // Return immediately if at least one of the values is empty. + if (!x && !y) return EQUAL; + if (!x && y) return GREATER; + if (x && !y) return SMALLER; + + // numeric, hex or date detection + 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; + + // first try and sort Hex codes or Dates + if (yD) { + if (xD < yD) return SMALLER; + else if (xD > yD) return GREATER; + } + + // natural sorting through split numeric strings and default strings + for (var cLoc = 0, numS = Math.max(xN.length, yN.length); cLoc < numS; cLoc++) { + + // find floats not starting with '0', string or 0 if not defined (Clint Priest) + oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0; + oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0; + + // handle numeric vs string comparison - number < string - (Kyle Adams) + if (isNaN(oFxNcL) !== isNaN(oFyNcL)) return (isNaN(oFxNcL)) ? GREATER : SMALLER; + + // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2' + else if (typeof oFxNcL !== typeof oFyNcL) { + oFxNcL += ''; + oFyNcL += ''; + } + if (oFxNcL < oFyNcL) return SMALLER; + if (oFxNcL > oFyNcL) 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/drpy_t3/drpy_libs/alist.min.js b/drpy_t3/drpy_libs/alist.min.js new file mode 100644 index 0000000..52d3606 --- /dev/null +++ b/drpy_t3/drpy_libs/alist.min.js @@ -0,0 +1 @@ +import{distance}from"./mod.js";import{sortListByCN}from"./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";var playRaw=1;const request_timeout=5e3;const VERSION="alist v2/v3 20221223";const UA="Mozilla/5.0";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)}}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}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;if(!options.headers){options.headers={}}let keys=Object.keys(options.headers).map(it=>it.toLowerCase());if(!keys.includes("referer")){options.headers["Referer"]=getHome(url)}if(!keys.includes("user-agent")){options.headers["User-Agent"]=UA}console.log(JSON.stringify(options.headers));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,headers}=__drives[name];if(settings.v3==null){settings.v3=false;const data=http.get(server+"/api/public/settings",{headers:headers}).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){console.log("当前版本号:"+VERSION);let data;if(typeof ext=="object"){data=ext;print("alist ext:object")}else if(typeof ext=="string"){if(ext.startsWith("http")){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);data=http.get(alist_data_url).json()}else{print("alist ext:json string");data=JSON.parse(ext)}}let drives=[];if(Array.isArray(data)&&data.length>0&&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>0){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)}if(item.password){let pwdObj={password:item.password};if(!item.params){item.params={"/":pwdObj}}else{item.params["/"]=pwdObj}_path_param.unshift("/")}__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:{},headers:item.headers||{},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),headers:this.headers}).json();try{return this.settings.v3?res.data.content:res.data.files}catch(e){console.log(`getPath发生错误:${e.message}`);console.log(JSON.stringify(res));return[{name:"error",value:JSON.stringify(res)}]}},getFile(path){let raw_url=this.server+"/d"+path;raw_url=encodeURI(raw_url);let data={raw_url:raw_url,raw_url1:raw_url};if(playRaw===1){try{const res=http.post(this.server+this.api.file,{data:this.getParams(path),headers:this.headers}).json();data=this.settings.v3?res.data:res.data.files[0];if(!this.settings.v3){data.raw_url=data.url}data.raw_url1=raw_url;return data}catch(e){return data}}else{return data}},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){let _post_data={pageNum:0,pageSize:100};let _post_url="https://pbaccess.video.qq.com/trpc.videosearch.hot_rank.HotRankServantHttp/HotRankHttp";let data=http.post(_post_url,{data:_post_data}).json();let _list=[];try{data=data["data"]["navItemList"][0]["hotRankResult"]["rankItemList"];data.forEach(it=>{_list.push({vod_name:it.title,vod_id:"msearch:"+it.title,vod_pic:"https://avatars.githubusercontent.com/u/97389433?s=120&v=4",vod_remarks:it.changeOrder})})}catch(e){print("Alist获取首页推荐发送错误:"+e.message)}return JSON.stringify({list:_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(item.name!=="error"){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)}else{console.log(item);const vod={vod_name:item.value,vod_id:"no_data",vod_remarks:"不要点,会崩的",vod_pic:"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"};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);let list=[{vod_name:"无数据,防无限请求",type_name:"文件夹",vod_id:"no_data",vod_remarks:"不要点,会崩的",vod_pic:"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/static/img/404.jpg",vod_actor:e.message,vod_director:tid,vod_content:otid}];return JSON.stringify({list: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_url1}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/drpy_t3/drpy_libs/atob.js b/drpy_t3/drpy_libs/atob.js new file mode 100644 index 0000000..319102f --- /dev/null +++ b/drpy_t3/drpy_libs/atob.js @@ -0,0 +1,140 @@ +!function(e) { + var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + var base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1); + + function base64encode(str) { + var out, i, len; + var c1, c2, c3; + len = str.length; + i = 0; + out = ""; + while (i < len) { + c1 = str.charCodeAt(i++) & 0xff; + if (i == len) { + out += base64EncodeChars.charAt(c1 >> 2); + out += base64EncodeChars.charAt((c1 & 0x3) << 4); + out += "=="; + break; + } + c2 = str.charCodeAt(i++); + if (i == len) { + out += base64EncodeChars.charAt(c1 >> 2); + out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); + out += base64EncodeChars.charAt((c2 & 0xF) << 2); + out += "="; + break; + } + c3 = str.charCodeAt(i++); + out += base64EncodeChars.charAt(c1 >> 2); + out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); + out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)); + out += base64EncodeChars.charAt(c3 & 0x3F); + } + return out; + } + + function base64decode(str) { + var c1, c2, c3, c4; + var i, len, out; + len = str.length; + i = 0; + out = ""; + while (i < len) { + do { + c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; + } while (i < len && c1 == -1); + if (c1 == -1) break; + do { + c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; + } while (i < len && c2 == -1); + if (c2 == -1) break; + out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)); + do { + c3 = str.charCodeAt(i++) & 0xff; + if (c3 == 61) return out; + c3 = base64DecodeChars[c3]; + } while (i < len && c3 == -1); + if (c3 == -1) break; + out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2)); + do { + c4 = str.charCodeAt(i++) & 0xff; + if (c4 == 61) return out; + c4 = base64DecodeChars[c4]; + } while (i < len && c4 == -1); + if (c4 == -1) break; + out += String.fromCharCode(((c3 & 0x03) << 6) | c4); + } + return out; + } + + function utf16to8(str) { + var out, i, len, c; + out = ""; + len = str.length; + for (i = 0; i < len; i++) { + c = str.charCodeAt(i); + if ((c >= 0x0001) && (c <= 0x007F)) { + out += str.charAt(i); + } else if (c > 0x07FF) { + out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F)); + out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F)); + out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); + } else { + out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F)); + out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); + } + } + return out; + } + + function utf8to16(str) { + var out, i, len, c; + var char2, char3; + out = ""; + len = str.length; + i = 0; + while (i < len) { + c = str.charCodeAt(i++); + switch (c >> 4) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + out += str.charAt(i - 1); + break; + case 12: + case 13: + char2 = str.charCodeAt(i++); + out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); + break; + case 14: + char2 = str.charCodeAt(i++); + char3 = str.charCodeAt(i++); + out += String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)); + break; + } + } + return out; + } + + function CharToHex(str) { + var out, i, len, c, h; + out = ""; + len = str.length; + i = 0; + while (i < len) { + c = str.charCodeAt(i++); + h = c.toString(16); + if (h.length < 2) h = "0" + h; + out += "\\x" + h + " "; + if (i > 0 && i % 8 == 0) out += "\r\n"; + } + return out; + } + this.atob = base64decode, this.btoa = base64encode; +}(this); + diff --git a/drpy_t3/drpy_libs/base64.js b/drpy_t3/drpy_libs/base64.js new file mode 100644 index 0000000..98bc742 --- /dev/null +++ b/drpy_t3/drpy_libs/base64.js @@ -0,0 +1,319 @@ +// +// THIS FILE IS AUTOMATICALLY GENERATED! DO NOT EDIT BY HAND! +// +; +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + ? module.exports = factory() + : typeof define === 'function' && define.amd + ? define(factory) : + // cf. https://github.com/dankogai/js-base64/issues/119 + (function () { + // existing version for noConflict() + var _Base64 = global.Base64; + var gBase64 = factory(); + gBase64.noConflict = function () { + global.Base64 = _Base64; + return gBase64; + }; + if (global.Meteor) { // Meteor.js + Base64 = gBase64; + } + global.Base64 = gBase64; + })(); +}((typeof self !== 'undefined' ? self + : typeof window !== 'undefined' ? window + : typeof global !== 'undefined' ? global + : this), function () { + 'use strict'; + /** + * base64.ts + * + * Licensed under the BSD 3-Clause License. + * http://opensource.org/licenses/BSD-3-Clause + * + * References: + * http://en.wikipedia.org/wiki/Base64 + * + * @author Dan Kogai (https://github.com/dankogai) + */ + var version = '3.7.2'; + /** + * @deprecated use lowercase `version`. + */ + var VERSION = version; + var _hasatob = typeof atob === 'function'; + var _hasbtoa = typeof btoa === 'function'; + var _hasBuffer = typeof Buffer === 'function'; + var _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined; + var _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined; + var b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + var b64chs = Array.prototype.slice.call(b64ch); + var b64tab = (function (a) { + var tab = {}; + a.forEach(function (c, i) { return tab[c] = i; }); + return tab; + })(b64chs); + var b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/; + var _fromCC = String.fromCharCode.bind(String); + var _U8Afrom = typeof Uint8Array.from === 'function' + ? Uint8Array.from.bind(Uint8Array) + : function (it, fn) { + if (fn === void 0) { fn = function (x) { return x; }; } + return new Uint8Array(Array.prototype.slice.call(it, 0).map(fn)); + }; + var _mkUriSafe = function (src) { return src + .replace(/=/g, '').replace(/[+\/]/g, function (m0) { return m0 == '+' ? '-' : '_'; }); }; + var _tidyB64 = function (s) { return s.replace(/[^A-Za-z0-9\+\/]/g, ''); }; + /** + * polyfill version of `btoa` + */ + var btoaPolyfill = function (bin) { + // console.log('polyfilled'); + var u32, c0, c1, c2, asc = ''; + var pad = bin.length % 3; + for (var i = 0; i < bin.length;) { + if ((c0 = bin.charCodeAt(i++)) > 255 || + (c1 = bin.charCodeAt(i++)) > 255 || + (c2 = bin.charCodeAt(i++)) > 255) + throw new TypeError('invalid character found'); + u32 = (c0 << 16) | (c1 << 8) | c2; + asc += b64chs[u32 >> 18 & 63] + + b64chs[u32 >> 12 & 63] + + b64chs[u32 >> 6 & 63] + + b64chs[u32 & 63]; + } + return pad ? asc.slice(0, pad - 3) + "===".substring(pad) : asc; + }; + /** + * does what `window.btoa` of web browsers do. + * @param {String} bin binary string + * @returns {string} Base64-encoded string + */ + var _btoa = _hasbtoa ? function (bin) { return btoa(bin); } + : _hasBuffer ? function (bin) { return Buffer.from(bin, 'binary').toString('base64'); } + : btoaPolyfill; + var _fromUint8Array = _hasBuffer + ? function (u8a) { return Buffer.from(u8a).toString('base64'); } + : function (u8a) { + // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326 + var maxargs = 0x1000; + var strs = []; + for (var i = 0, l = u8a.length; i < l; i += maxargs) { + strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs))); + } + return _btoa(strs.join('')); + }; + /** + * converts a Uint8Array to a Base64 string. + * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5 + * @returns {string} Base64 string + */ + var fromUint8Array = function (u8a, urlsafe) { + if (urlsafe === void 0) { urlsafe = false; } + return urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a); + }; + // This trick is found broken https://github.com/dankogai/js-base64/issues/130 + // const utob = (src: string) => unescape(encodeURIComponent(src)); + // reverting good old fationed regexp + var cb_utob = function (c) { + if (c.length < 2) { + var cc = c.charCodeAt(0); + return cc < 0x80 ? c + : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6)) + + _fromCC(0x80 | (cc & 0x3f))) + : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f)) + + _fromCC(0x80 | ((cc >>> 6) & 0x3f)) + + _fromCC(0x80 | (cc & 0x3f))); + } + else { + var cc = 0x10000 + + (c.charCodeAt(0) - 0xD800) * 0x400 + + (c.charCodeAt(1) - 0xDC00); + return (_fromCC(0xf0 | ((cc >>> 18) & 0x07)) + + _fromCC(0x80 | ((cc >>> 12) & 0x3f)) + + _fromCC(0x80 | ((cc >>> 6) & 0x3f)) + + _fromCC(0x80 | (cc & 0x3f))); + } + }; + var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; + /** + * @deprecated should have been internal use only. + * @param {string} src UTF-8 string + * @returns {string} UTF-16 string + */ + var utob = function (u) { return u.replace(re_utob, cb_utob); }; + // + var _encode = _hasBuffer + ? function (s) { return Buffer.from(s, 'utf8').toString('base64'); } + : _TE + ? function (s) { return _fromUint8Array(_TE.encode(s)); } + : function (s) { return _btoa(utob(s)); }; + /** + * converts a UTF-8-encoded string to a Base64 string. + * @param {boolean} [urlsafe] if `true` make the result URL-safe + * @returns {string} Base64 string + */ + var encode = function (src, urlsafe) { + if (urlsafe === void 0) { urlsafe = false; } + return urlsafe + ? _mkUriSafe(_encode(src)) + : _encode(src); + }; + /** + * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5. + * @returns {string} Base64 string + */ + var encodeURI = function (src) { return encode(src, true); }; + // This trick is found broken https://github.com/dankogai/js-base64/issues/130 + // const btou = (src: string) => decodeURIComponent(escape(src)); + // reverting good old fationed regexp + var re_btou = /[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g; + var cb_btou = function (cccc) { + switch (cccc.length) { + case 4: + var cp = ((0x07 & cccc.charCodeAt(0)) << 18) + | ((0x3f & cccc.charCodeAt(1)) << 12) + | ((0x3f & cccc.charCodeAt(2)) << 6) + | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000; + return (_fromCC((offset >>> 10) + 0xD800) + + _fromCC((offset & 0x3FF) + 0xDC00)); + case 3: + return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12) + | ((0x3f & cccc.charCodeAt(1)) << 6) + | (0x3f & cccc.charCodeAt(2))); + default: + return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6) + | (0x3f & cccc.charCodeAt(1))); + } + }; + /** + * @deprecated should have been internal use only. + * @param {string} src UTF-16 string + * @returns {string} UTF-8 string + */ + var btou = function (b) { return b.replace(re_btou, cb_btou); }; + /** + * polyfill version of `atob` + */ + var atobPolyfill = function (asc) { + // console.log('polyfilled'); + asc = asc.replace(/\s+/g, ''); + if (!b64re.test(asc)) + throw new TypeError('malformed base64.'); + asc += '=='.slice(2 - (asc.length & 3)); + var u24, bin = '', r1, r2; + for (var i = 0; i < asc.length;) { + u24 = b64tab[asc.charAt(i++)] << 18 + | b64tab[asc.charAt(i++)] << 12 + | (r1 = b64tab[asc.charAt(i++)]) << 6 + | (r2 = b64tab[asc.charAt(i++)]); + bin += r1 === 64 ? _fromCC(u24 >> 16 & 255) + : r2 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255) + : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255); + } + return bin; + }; + /** + * does what `window.atob` of web browsers do. + * @param {String} asc Base64-encoded string + * @returns {string} binary string + */ + var _atob = _hasatob ? function (asc) { return atob(_tidyB64(asc)); } + : _hasBuffer ? function (asc) { return Buffer.from(asc, 'base64').toString('binary'); } + : atobPolyfill; + // + var _toUint8Array = _hasBuffer + ? function (a) { return _U8Afrom(Buffer.from(a, 'base64')); } + : function (a) { return _U8Afrom(_atob(a), function (c) { return c.charCodeAt(0); }); }; + /** + * converts a Base64 string to a Uint8Array. + */ + var toUint8Array = function (a) { return _toUint8Array(_unURI(a)); }; + // + var _decode = _hasBuffer + ? function (a) { return Buffer.from(a, 'base64').toString('utf8'); } + : _TD + ? function (a) { return _TD.decode(_toUint8Array(a)); } + : function (a) { return btou(_atob(a)); }; + var _unURI = function (a) { return _tidyB64(a.replace(/[-_]/g, function (m0) { return m0 == '-' ? '+' : '/'; })); }; + /** + * converts a Base64 string to a UTF-8 string. + * @param {String} src Base64 string. Both normal and URL-safe are supported + * @returns {string} UTF-8 string + */ + var decode = function (src) { return _decode(_unURI(src)); }; + /** + * check if a value is a valid Base64 string + * @param {String} src a value to check + */ + var isValid = function (src) { + if (typeof src !== 'string') + return false; + var s = src.replace(/\s+/g, '').replace(/={0,2}$/, ''); + return !/[^\s0-9a-zA-Z\+/]/.test(s) || !/[^\s0-9a-zA-Z\-_]/.test(s); + }; + // + var _noEnum = function (v) { + return { + value: v, enumerable: false, writable: true, configurable: true + }; + }; + /** + * extend String.prototype with relevant methods + */ + var extendString = function () { + var _add = function (name, body) { return Object.defineProperty(String.prototype, name, _noEnum(body)); }; + _add('fromBase64', function () { return decode(this); }); + _add('toBase64', function (urlsafe) { return encode(this, urlsafe); }); + _add('toBase64URI', function () { return encode(this, true); }); + _add('toBase64URL', function () { return encode(this, true); }); + _add('toUint8Array', function () { return toUint8Array(this); }); + }; + /** + * extend Uint8Array.prototype with relevant methods + */ + var extendUint8Array = function () { + var _add = function (name, body) { return Object.defineProperty(Uint8Array.prototype, name, _noEnum(body)); }; + _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); }); + _add('toBase64URI', function () { return fromUint8Array(this, true); }); + _add('toBase64URL', function () { return fromUint8Array(this, true); }); + }; + /** + * extend Builtin prototypes with relevant methods + */ + var extendBuiltins = function () { + extendString(); + extendUint8Array(); + }; + var gBase64 = { + version: version, + VERSION: VERSION, + atob: _atob, + atobPolyfill: atobPolyfill, + btoa: _btoa, + btoaPolyfill: btoaPolyfill, + fromBase64: decode, + toBase64: encode, + encode: encode, + encodeURI: encodeURI, + encodeURL: encodeURI, + utob: utob, + btou: btou, + decode: decode, + isValid: isValid, + fromUint8Array: fromUint8Array, + toUint8Array: toUint8Array, + extendString: extendString, + extendUint8Array: extendUint8Array, + extendBuiltins: extendBuiltins + }; + // + // export Base64 to the namespace + // + // ES5 is yet to have Object.assign() that may make transpilers unhappy. + // gBase64.Base64 = Object.assign({}, gBase64); + gBase64.Base64 = {}; + Object.keys(gBase64).forEach(function (k) { return gBase64.Base64[k] = gBase64[k]; }); + return gBase64; +})); diff --git a/drpy_t3/drpy_libs/cheerio.min.js b/drpy_t3/drpy_libs/cheerio.min.js new file mode 100644 index 0000000..7d6375e --- /dev/null +++ b/drpy_t3/drpy_libs/cheerio.min.js @@ -0,0 +1 @@ +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 i = 0; i < thatSigBytes; i += 4) { + thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 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 (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); + }; +}()); + + + + + + + + + + + + +/** + * 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); +}()); diff --git a/drpy_t3/drpy_libs/crypto-js.js b/drpy_t3/drpy_libs/crypto-js.js new file mode 100644 index 0000000..5d77575 --- /dev/null +++ b/drpy_t3/drpy_libs/crypto-js.js @@ -0,0 +1,6191 @@ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(); + } + else if (typeof define === "function" && define.amd) { + // AMD + define([], factory); + } + else { + // Global (browser) + globalThis.CryptoJS = factory(); + } +}(this, function () { + + /*globals window, global, require*/ + + /** + * CryptoJS core components. + */ + var CryptoJS = CryptoJS || (function (Math, undefined) { + + var crypto; + + // Native crypto from window (Browser) + if (typeof window !== 'undefined' && window.crypto) { + crypto = window.crypto; + } + + // Native crypto in web worker (Browser) + if (typeof self !== 'undefined' && self.crypto) { + crypto = self.crypto; + } + + // Native crypto from worker + if (typeof globalThis !== 'undefined' && globalThis.crypto) { + crypto = globalThis.crypto; + } + + // Native (experimental IE 11) crypto from window (Browser) + if (!crypto && typeof window !== 'undefined' && window.msCrypto) { + crypto = window.msCrypto; + } + + // Native crypto from global (NodeJS) + if (!crypto && typeof global !== 'undefined' && global.crypto) { + crypto = global.crypto; + } + + // Native crypto import via require (NodeJS) + if (!crypto && typeof require === 'function') { + try { + crypto = require('crypto'); + } catch (err) {} + } + + /* + * Cryptographically secure pseudorandom number generator + * + * As Math.random() is cryptographically not safe to use + */ + var cryptoSecureRandomInt = function () { + if (crypto) { + // Use getRandomValues method (Browser) + if (typeof crypto.getRandomValues === 'function') { + try { + return crypto.getRandomValues(new Uint32Array(1))[0]; + } catch (err) {} + } + + // Use randomBytes method (NodeJS) + if (typeof crypto.randomBytes === 'function') { + try { + return crypto.randomBytes(4).readInt32LE(); + } catch (err) {} + } + } + + throw new Error('Native crypto module could not be used to get secure random number.'); + }; + + /* + * Local polyfill of Object.create + + */ + var create = Object.create || (function () { + function F() {} + + return function (obj) { + var subtype; + + F.prototype = obj; + + subtype = new F(); + + F.prototype = null; + + return subtype; + }; + }()); + + /** + * CryptoJS namespace. + */ + var C = {}; + + /** + * Library namespace. + */ + var C_lib = C.lib = {}; + + /** + * Base object for prototypal inheritance. + */ + var Base = C_lib.Base = (function () { + + + return { + /** + * Creates a new object that inherits from this object. + * + * @param {Object} overrides Properties to copy into the new object. + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * field: 'value', + * + * method: function () { + * } + * }); + */ + extend: function (overrides) { + // Spawn + var subtype = create(this); + + // Augment + if (overrides) { + subtype.mixIn(overrides); + } + + // Create default initializer + if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { + subtype.init = function () { + subtype.$super.init.apply(this, arguments); + }; + } + + // Initializer's prototype is the subtype object + subtype.init.prototype = subtype; + + // Reference supertype + subtype.$super = this; + + return subtype; + }, + + /** + * Extends this object and runs the init method. + * Arguments to create() will be passed to init(). + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var instance = MyType.create(); + */ + create: function () { + var instance = this.extend(); + instance.init.apply(instance, arguments); + + return instance; + }, + + /** + * Initializes a newly created object. + * Override this method to add some logic when your objects are created. + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * init: function () { + * // ... + * } + * }); + */ + init: function () { + }, + + /** + * Copies properties into this object. + * + * @param {Object} properties The properties to mix in. + * + * @example + * + * MyType.mixIn({ + * field: 'value' + * }); + */ + mixIn: function (properties) { + for (var propertyName in properties) { + if (properties.hasOwnProperty(propertyName)) { + this[propertyName] = properties[propertyName]; + } + } + + // IE won't copy toString using the loop above + if (properties.hasOwnProperty('toString')) { + this.toString = properties.toString; + } + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = instance.clone(); + */ + clone: function () { + return this.init.prototype.extend(this); + } + }; + }()); + + /** + * An array of 32-bit words. + * + * @property {Array} words The array of 32-bit words. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var WordArray = C_lib.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of 32-bit words. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.create(); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 4; + } + }, + + /** + * Converts this word array to a string. + * + * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex + * + * @return {string} The stringified word array. + * + * @example + * + * var string = wordArray + ''; + * var string = wordArray.toString(); + * var string = wordArray.toString(CryptoJS.enc.Utf8); + */ + toString: function (encoder) { + return (encoder || Hex).stringify(this); + }, + + /** + * Concatenates a word array to this word array. + * + * @param {WordArray} wordArray The word array to append. + * + * @return {WordArray} This word array. + * + * @example + * + * wordArray1.concat(wordArray2); + */ + concat: function (wordArray) { + // Shortcuts + var thisWords = this.words; + var thatWords = wordArray.words; + var thisSigBytes = this.sigBytes; + var thatSigBytes = wordArray.sigBytes; + + // Clamp excess bits + this.clamp(); + + // Concat + if (thisSigBytes % 4) { + // Copy one byte at a time + for (var i = 0; i < thatSigBytes; i++) { + var thatByte = (thatWords[i >>> 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/drpy_t3/drpy_libs/drT.js b/drpy_t3/drpy_libs/drT.js new file mode 100644 index 0000000..8d085fb --- /dev/null +++ b/drpy_t3/drpy_libs/drT.js @@ -0,0 +1,189 @@ +// 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+" { + let key = new NODERSA.NodeRSA({b: 1024}); + key.setOptions({encryptionScheme: 'pkcs1'}) + let text = `你好drpy node-ras`; + let encrypted = key.encrypt(text, 'base64'); + console.log('encrypted: ', encrypted); + const decrypted = key.decrypt(encrypted, 'utf8'); + console.log('decrypted: ', decrypted); + })(); + let t2 = new Date().getTime(); + console.log('rsa_demo_test 测试耗时:' + (t2 - t1) + '毫秒'); +} + + +/** + * 执行预处理代码 + */ +function pre() { + if (typeof (rule.预处理) === 'string' && rule.预处理 && rule.预处理.trim()) { + let code = rule.预处理.trim(); + console.log("执行预处理代码:" + code); + if (code.startsWith('js:')) { + code = code.replace('js:', ''); + } + try { + // code里可以进行get 或者 post请求cookie并改变rule.headers 里的cookie + // 直接操作 rule_fetch_params 这个变量 .headers.Cookie + eval(code); + } catch (e) { + console.log(`预处理执行失败:${e.message}`); + } + } +} + +let rule = {}; +let vercode = typeof (pdfl) === 'function' ? 'drpy2.1' : 'drpy2'; +const VERSION = vercode + ' 3.9.50beta32 20240625'; +/** 已知问题记录 + * 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.strifngify函数,它会原封不动保留中文不会编码unicode + * 6.base64Encode,base64Decode,md5函数还没有实现 (抄影魔代码实现了) + * 7.eval(getCryptoJS());还没有实现 (可以空实现了,以后遇到能忽略) + * done: jsp:{pdfa,pdfh,pd},json:{pdfa,pdfh,pd},jq:{pdfa,pdfh,pd} + * 8.req函数不支持传递字符串的data参数 {'content-type':'text/plain'} 类型数据,因此无法直接调用alist的ocr接口 + * * 电脑看日志调试 + adb tcpip 5555 + adb connect 192.168.10.192 + adb devices -l + adb logcat -c + adb logcat | grep -i QuickJS + adb logcat -c -b events + adb logcat -c -b main -b events -b radio -b system + adb logcat > 2.log DRPY:E | grep -i QuickJS + * **/ + + +/*** 以下是内置变量和解析方法 **/ +const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36'; +const PC_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'; +const UA = 'Mozilla/5.0'; +const UC_UA = 'Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36'; +const IOS_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'; +const RULE_CK = 'cookie'; // 源cookie的key值 +// const KEY = typeof(key)!=='undefined'&&key?key:'drpy_' + (rule.title || rule.host); // 源的唯一标识 +const CATE_EXCLUDE = '首页|留言|APP|下载|资讯|新闻|动态'; +const TAB_EXCLUDE = '猜你|喜欢|下载|剧情|榜|评论'; +const OCR_RETRY = 3;//ocr验证重试次数 +// const OCR_API = 'http://drpy.nokia.press:8028/ocr/drpy/text';//ocr在线识别接口 +const OCR_API = 'https://api.nn.ci/ocr/b64/text';//ocr在线识别接口 +if (typeof (MY_URL) === 'undefined') { + var MY_URL; // 全局注入变量,pd函数需要 +} +var HOST; +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|style)$/; +// 过滤特殊链接,不走urlJoin +const SPECIAL_URL = /^(ftp|magnet|thunder|ws):/; +const NOADD_INDEX = /:eq|:lt|:gt|:first|:last|^body$|^#/; // 不自动加eq下标索引 +const URLJOIN_ATTR = /(url|src|href|-original|-src|-play|-url|style)$|^(data-|url-|src-)/; // 需要自动urljoin的属性 +const SELECT_REGEX = /:eq|:lt|:gt|#/g; +const SELECT_REGEX_A = /:eq|:lt|:gt/g; + +// 增加$js工具,支持$js.toString(()=>{}); +const $js = { + toString(func) { + let strfun = func.toString(); + return strfun.replace(/^\(\)(\s+)?=>(\s+)?\{/, "js:").replace(/\}$/, ''); + } +}; + +function window_b64() { + let b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + let base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1); + + function btoa(str) { + var out, i, len; + var c1, c2, c3; + len = str.length; + i = 0; + out = ""; + while (i < len) { + c1 = str.charCodeAt(i++) & 0xff; + if (i == len) { + out += b64map.charAt(c1 >> 2); + out += b64map.charAt((c1 & 0x3) << 4); + out += "=="; + break; + } + c2 = str.charCodeAt(i++); + if (i == len) { + out += b64map.charAt(c1 >> 2); + out += b64map.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); + out += b64map.charAt((c2 & 0xF) << 2); + out += "="; + break; + } + c3 = str.charCodeAt(i++); + out += b64map.charAt(c1 >> 2); + out += b64map.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); + out += b64map.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)); + out += b64map.charAt(c3 & 0x3F); + } + return out; + } + + function atob(str) { + var c1, c2, c3, c4; + var i, len, out; + len = str.length; + i = 0; + out = ""; + while (i < len) { + do { + c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; + } while (i < len && c1 == -1); + if (c1 == -1) break; + do { + c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; + } while (i < len && c2 == -1); + if (c2 == -1) break; + out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)); + do { + c3 = str.charCodeAt(i++) & 0xff; + if (c3 == 61) return out; + c3 = base64DecodeChars[c3]; + } while (i < len && c3 == -1); + if (c3 == -1) break; + out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2)); + do { + c4 = str.charCodeAt(i++) & 0xff; + if (c4 == 61) return out; + c4 = base64DecodeChars[c4]; + } while (i < len && c4 == -1); + if (c4 == -1) break; + out += String.fromCharCode(((c3 & 0x03) << 6) | c4); + } + return out; + } + + return { + atob, + btoa + } +} + +/** + es6py扩展 + */ +if (typeof atob !== 'function' || typeof btoa !== 'function') { + var {atob, btoa} = window_b64(); +} + +if (typeof Object.assign !== 'function') { + Object.assign = function () { + let target = arguments[0]; + for (let i = 1; i < arguments.length; i++) { + let source = arguments[i]; + for (let key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + return target; + }; +} +if (!String.prototype.includes) { + String.prototype.includes = function (search, start) { + if (typeof start !== 'number') { + start = 0; + } + + if (start + search.length > this.length) { + return false; + } else { + return this.indexOf(search, start) !== -1; + } + }; +} + +if (!Array.prototype.includes) { + Object.defineProperty(Array.prototype, 'includes', { + value: function (searchElement, fromIndex) { + + if (this == null) {//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 + }, + enumerable: false + }); +} +if (typeof String.prototype.startsWith !== 'function') { + String.prototype.startsWith = function (prefix) { + return this.slice(0, prefix.length) === prefix; + }; +} +if (typeof String.prototype.endsWith !== 'function') { + String.prototype.endsWith = function (suffix) { + return this.indexOf(suffix, this.length - suffix.length) !== -1; + }; +} +Object.defineProperty(Object.prototype, 'myValues', { + value: function (obj) { + if (obj == null) { + throw new TypeError("Cannot convert undefined or null to object"); + } + var res = [] + for (var k in obj) { + if (obj.hasOwnProperty(k)) {//需判断是否是本身的属性 + res.push(obj[k]); + } + } + return res; + }, + enumerable: false +}); +if (typeof Object.prototype.values !== 'function') { + Object.defineProperty(Object.prototype, 'values', { + value: function (obj) { + if (obj == null) { + throw new TypeError("Cannot convert undefined or null to object"); + } + var res = [] + for (var k in obj) { + if (obj.hasOwnProperty(k)) {//需判断是否是本身的属性 + res.push(obj[k]); + } + } + return res; + }, + enumerable: false + }); +} +if (typeof Array.prototype.join !== 'function') { + Object.defineProperty(Array.prototype, 'join', { + value: function (emoji) { + // emoji = emoji||','; + emoji = emoji || ''; + let self = this; + let str = ""; + let i = 0; + if (!Array.isArray(self)) { + throw String(self) + 'is not Array' + } + if (self.length === 0) { + return '' + } + if (self.length === 1) { + return String(self[0]) + } + i = 1; + str = this[0]; + for (; i < self.length; i++) { + str += String(emoji) + String(self[i]); + } + return str; + }, + enumerable: false + }); +} +if (typeof Array.prototype.toReversed !== 'function') { + Object.defineProperty(Array.prototype, 'toReversed', { + value: function () { + const clonedList = this.slice(); + // 倒序新数组 + const reversedList = clonedList.reverse(); + return reversedList; + }, + enumerable: false + }); +} + +Object.defineProperty(Array.prototype, 'append', { + value: Array.prototype.push, + enumerable: false +}); +Object.defineProperty(String.prototype, 'strip', { + value: String.prototype.trim, + enumerable: false +}); +Object.defineProperty(String.prototype, 'rstrip', { + value: function (chars) { + let regex = new RegExp(chars + "$"); + return this.replace(regex, ""); + }, + enumerable: false +}); + +function 是否正版(vipUrl) { + let flag = new RegExp('qq\.com|iqiyi\.com|youku\.com|mgtv\.com|bilibili\.com|sohu\.com|ixigua\.com|pptv\.com|miguvideo\.com|le\.com|1905\.com|fun\.tv'); + return flag.test(vipUrl); +} + +function urlDeal(vipUrl) { + if (!vipUrl) { + return '' + } + if (!是否正版(vipUrl)) { + return vipUrl + } + if (!/miguvideo/.test(vipUrl)) { + vipUrl = vipUrl.split('#')[0].split('?')[0]; + } + return vipUrl +} + +function setResult(d) { + if (!Array.isArray(d)) { + return [] + } + VODS = []; + // 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 ''; + } +} + +/** + * 将base64编码进行url编译 + * @param str + * @returns {string} + */ +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, '+'); +} + +/** + * url编码,同 encodeURI + * @param str + * @returns {string} + */ +function encodeUrl(str) { + if (typeof (encodeURI) == 'function') { + return encodeURI(str) + } else { + str = (str + '').toString(); + return encodeURIComponent(str).replace(/%2F/g, '/').replace(/%3F/g, '?').replace(/%3A/g, ':').replace(/%40/g, '@').replace(/%3D/g, '=').replace(/%3A/g, ':').replace(/%2C/g, ',').replace(/%2B/g, '+').replace(/%24/g, '$'); + } +} + +function base64Encode(text) { + return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text)); + // 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 uint8ArrayToBase64(uint8Array) { + let binaryString = String.fromCharCode.apply(null, Array.from(uint8Array)); + return btoa(binaryString); +} + +function Utf8ArrayToStr(array) { + var out, i, len, c; + var char2, char3; + out = ""; + len = array.length; + i = 0; + while (i < len) { + c = array[i++]; + switch (c >> 4) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + out += String.fromCharCode(c); + break; + case 12: + case 13: + char2 = array[i++]; + out += String.fromCharCode(((c & 0x1f) << 6) | (char2 & 0x3f)); + break; + case 14: + char2 = array[i++]; + char3 = array[i++]; + out += String.fromCharCode( + ((c & 0x0f) << 12) | ((char2 & 0x3f) << 6) | ((char3 & 0x3f) << 0) + ); + break; + } + } + return out; +} + +/** + * gzip压缩base64|压缩率80%+ + * @param str + * @returns {string} + */ +function gzip(str) { + let arr = pako.gzip(str, { + // to: 'string' + }); + return uint8ArrayToBase64(arr) +} + +/** + * gzip解压base64数据 + * @param b64Data + * @returns {string} + */ +function ungzip(b64Data) { + let strData = atob(b64Data); + const charData = strData.split('').map(function (x) { + return x.charCodeAt(0); + }); + const binData = new Uint8Array(charData); + const data = pako.inflate(binData); + return Utf8ArrayToStr(data); +} + +/** + * 字符串按指定编码 + * @param input + * @param encoding + * @returns {*} + */ +function encodeStr(input, encoding) { + encoding = encoding || 'gbk'; + if (encoding.startsWith('gb')) { + const strTool = gbkTool(); + input = strTool.encode(input); + } + return input +} + +/** + * 字符串指定解码 + * @param input + * @param encoding + * @returns {*} + */ +function decodeStr(input, encoding) { + encoding = encoding || 'gbk'; + if (encoding.startsWith('gb')) { + const strTool = gbkTool(); + input = strTool.decode(input); + } + return input +} + +function getCryptoJS() { + // return request('https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/crypto-hiker.js'); + return 'console.log("CryptoJS已装载");' +} + +// 封装的RSA加解密类 +const RSA = { + decode: function (data, key, option) { + option = option || {}; + if (typeof (JSEncrypt) === 'function') { + let chunkSize = option.chunkSize || 117; // 默认分段长度为117 + let privateKey = this.getPrivateKey(key); // 获取私钥 + const decryptor = new JSEncrypt(); //创建解密对象实例 + decryptor.setPrivateKey(privateKey); //设置秘钥 + let uncrypted = ''; + // uncrypted = decryptor.decrypt(data); + uncrypted = decryptor.decryptUnicodeLong(data); + return uncrypted; + } else { + return false + } + }, + encode: function (data, key, option) { + option = option || {}; + if (typeof (JSEncrypt) === 'function') { + let chunkSize = option.chunkSize || 117; // 默认分段长度为117 + let publicKey = this.getPublicKey(key); // 获取公钥 + const encryptor = new JSEncrypt(); + encryptor.setPublicKey(publicKey); // 设置公钥 + let encrypted = ''; // 加密结果 + // const textLen = data.length; // 待加密文本长度 + // let offset = 0; // 分段偏移量 + // // 分段加密 + // while (offset < textLen) { + // let chunk = data.slice(offset, chunkSize); // 提取分段数据 + // let enc = encryptor.encrypt(chunk); // 加密分段数据 + // encrypted += enc; // 连接加密结果 + // offset += chunkSize; // 更新偏移量 + // } + encrypted = encryptor.encryptUnicodeLong(data); + return encrypted + } else { + return false + } + }, + fixKey(key, prefix, endfix) { + if (!key.includes(prefix)) { + key = prefix + key; + } + if (!key.includes(endfix)) { + key += endfix + } + return key + }, + getPrivateKey(key) { + let prefix = '-----BEGIN RSA PRIVATE KEY-----'; + let endfix = '-----END RSA PRIVATE KEY-----'; + return this.fixKey(key, prefix, endfix); + }, + getPublicKey(key) { + let prefix = '-----BEGIN PUBLIC KEY-----'; + let endfix = '-----END PUBLIC KEY-----'; + return this.fixKey(key, prefix, endfix); + } +}; + +/** + * 获取壳子返回的代理地址 + * @returns {string|*} + */ +function getProxyUrl() { + if (typeof (getProxy) === 'function') {//判断壳子里有getProxy函数就执行取返回结果。否则取默认的本地 + return getProxy(true) + } else { + return 'http://127.0.0.1:9978/proxy?do=js' + } +} + +/** + * 根据正则处理原始m3u8里的广告ts片段,自动修复相对链接 + * @param m3u8_text m3u8原始文本,里面是最末级的只含ts片段的。不支持嵌套m3u8链接 + * @param m3u8_url m3u8原始地址 + * @param ad_remove 正则表达式如: reg:/video/adjump(.*?)ts + * @returns {string|DocumentFragment|*|string} + */ +function fixAdM3u8(m3u8_text, m3u8_url, ad_remove) { + if ((!m3u8_text && !m3u8_url) || (!m3u8_text && m3u8_url && !m3u8_url.startsWith('http'))) { + return '' + } + if (!m3u8_text) { + log('m3u8_url:' + m3u8_url); + m3u8_text = request(m3u8_url); + } + log('len(m3u8_text):' + m3u8_text.length); + if (!ad_remove) { + return m3u8_text + } + if (ad_remove.startsWith('reg:')) { + ad_remove = ad_remove.slice(4) + } else if (ad_remove.startsWith('js:')) { + ad_remove = ad_remove.slice(3) + } + let m3u8_start = m3u8_text.slice(0, m3u8_text.indexOf('#EXTINF')).trim(); + let m3u8_body = m3u8_text.slice(m3u8_text.indexOf('#EXTINF'), m3u8_text.indexOf('#EXT-X-ENDLIST')).trim(); + let m3u8_end = m3u8_text.slice(m3u8_text.indexOf('#EXT-X-ENDLIST')).trim(); + let murls = []; + let m3_body_list = m3u8_body.split('\n'); + let m3_len = m3_body_list.length; + let i = 0; + while (i < m3_len) { + let mi = m3_body_list[i]; + let mi_1 = m3_body_list[i + 1]; + if (mi.startsWith('#EXTINF')) { + murls.push([mi, mi_1].join('&')); + i += 2 + } else if (mi.startsWith('#EXT-X-DISCONTINUITY')) { + let mi_2 = m3_body_list[i + 2]; + murls.push([mi, mi_1, mi_2].join('&')); + i += 3 + } else { + break; + } + } + let new_m3u8_body = []; + for (let murl of murls) { + if (ad_remove && new RegExp(ad_remove).test(murl)) { + + } else { + let murl_list = murl.split('&'); + if (!murl_list[murl_list.length - 1].startsWith('http') && m3u8_url.startsWith('http')) { + murl_list[murl_list.length - 1] = urljoin(m3u8_url, murl_list[murl_list.length - 1]); + } + murl_list.forEach((it) => { + new_m3u8_body.push(it); + }); + } + + } + new_m3u8_body = new_m3u8_body.join('\n').trim(); + m3u8_text = [m3u8_start, new_m3u8_body, m3u8_end].join('\n').trim(); + return m3u8_text +} + +/** + * 智能对比去除广告。支持嵌套m3u8。只需要传入播放地址 + * @param m3u8_url m3u8播放地址 + * @param headers 自定义访问m3u8的请求头,可以不传 + * @returns {string} + */ +function fixAdM3u8Ai(m3u8_url, headers) { + let ts = new Date().getTime(); + let option = headers ? {headers: headers} : {}; + + function b(s1, s2) { + let i = 0; + while (i < s1.length) { + if (s1[i] !== s2[i]) { + break + } + i++ + } + return i; + } + + function reverseString(str) { + return str.split('').reverse().join(''); + } + + //log('播放的地址:' + m3u8_url); + let m3u8 = request(m3u8_url, option); + //log('m3u8处理前:' + m3u8); + m3u8 = m3u8.trim().split('\n').map(it => it.startsWith('#') ? it : urljoin(m3u8_url, it)).join('\n'); + //log('m3u8处理后:============:' + m3u8); + // 获取嵌套m3u8地址 + m3u8 = m3u8.replace(/\n\n/ig, '\n');//删除多余的换行符 + let last_url = m3u8.split('\n').slice(-1)[0]; + if (last_url.length < 5) { + last_url = m3u8.split('\n').slice(-2)[0]; + } + + if (last_url.includes('.m3u8') && last_url !== m3u8_url) { + m3u8_url = urljoin2(m3u8_url, last_url); + log('嵌套的m3u8_url:' + m3u8_url); + m3u8 = request(m3u8_url, option); + } + //log('----处理有广告的地址----'); + let s = m3u8.trim().split('\n').filter(it => it.trim()).join('\n'); + let ss = s.split('\n') + //找出第一条播放地址 + //let firststr = ss.find(x => !x.startsWith('#')); + let firststr = ''; + let maxl = 0;//最大相同字符 + let kk = 0; + let kkk = 2; + let secondstr = ''; + for (let i = 0; i < ss.length; i++) { + let s = ss[i]; + if (!s.startsWith("#")) { + if (kk == 0) firststr = s; + if (kk == 1) maxl = b(firststr, s); + if (kk > 1) { + if (maxl > b(firststr, s)) { + if (secondstr.length < 5) secondstr = s; + kkk = kkk + 2; + } else { + maxl = b(firststr, s); + kkk++; + } + } + kk++; + if (kk >= 20) break; + } + } + if (kkk > 30) firststr = secondstr; + let firststrlen = firststr.length; + //log('字符串长度:' + firststrlen); + let ml = Math.round(ss.length / 2).toString().length;//取数据的长度的位数 + //log('数据条数的长度:' + ml); + //找出最后一条播放地址 + let maxc = 0; + let laststr = ss.toReversed().find((x) => { + if (!x.startsWith('#')) { + let k = b(reverseString(firststr), reverseString(x)); + maxl = b(firststr, x); + maxc++; + if (firststrlen - maxl <= ml + k || maxc > 10) { + return true + } + } + return false + }); + log('最后一条切片:' + laststr); + //log('最小相同字符长度:' + maxl); + let ad_urls = []; + for (let i = 0; i < ss.length; i++) { + let s = ss[i]; + if (!s.startsWith('#')) { + if (b(firststr, s) < maxl) { + ad_urls.push(s); // 广告地址加入列表 + ss.splice(i - 1, 2); + i = i - 2; + } else { + ss[i] = urljoin(m3u8_url, s); + } + } else { + ss[i] = s.replace(/URI=\"(.*)\"/, 'URI=\"' + urljoin(m3u8_url, '$1') + '\"'); + } + } + log('处理的m3u8地址:' + m3u8_url); + log('----广告地址----'); + log(ad_urls); + m3u8 = ss.join('\n'); + //log('处理完成'); + log('处理耗时:' + (new Date().getTime() - ts).toString()); + return m3u8 +} + + +/** + * 强制正序算法 + * @param lists 待正序列表 + * @param key 正序键 + * @param option 单个元素处理函数 + * @returns {*} + */ +function forceOrder(lists, key, option) { + let start = Math.floor(lists.length / 2); + let end = Math.min(lists.length - 1, start + 1); + if (start >= end) { + return lists; + } + let first = lists[start]; + let second = lists[end]; + if (key) { + try { + first = first[key]; + second = second[key]; + } catch (e) { + } + } + if (option && typeof (option) === 'function') { + try { + first = option(first); + second = option(second); + } catch (e) { + } + } + first += ''; + second += ''; + // console.log(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 = [];// 二级的自定义线路列表 如: TABS=['道长在线','道长在线2'] +let LISTS = [];// 二级的自定义选集播放列表 如: LISTS=[['第1集$http://1.mp4','第2集$http://2.mp4'],['第3集$http://1.mp4','第4集$http://2.mp4']] + +/** + * 获取链接的query请求转为js的object字典对象 + * @param url + * @returns {{}} + */ +function getQuery(url) { + try { + if (url.indexOf('?') > -1) { + url = url.slice(url.indexOf('?') + 1); + } + let arr = url.split("#")[0].split("&"); + const resObj = {}; + arr.forEach(item => { + let arr1 = item.split("="); + let key = arr1[0]; + let value = arr1.slice(1).join('='); + resObj[key] = value; + }); + return resObj; + } catch (err) { + log(`getQuery发生错误:${e.message}`) + return {}; + } +} + +/** + * 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: pd, +}; + + +/** + * 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]; + // 2023/07/28新增 style取内部链接自动去除首尾单双引号 + result = result.replace(/^['|"](.*)['|"]$/, "$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) && !SPECIAL_URL.test(ret)) { + if (/http/.test(ret)) { + ret = ret.slice(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) { + if (!html || !parse || !parse.trim()) { + return '' + } + parse = parse.trim(); + let result = defaultParser.pdfh(html, parse); + // print(`pdfh解析${parse}=>${result}`); + return result; + }, + pdfa(html, parse) { + if (!html || !parse || !parse.trim()) { + return []; + } + parse = parse.trim(); + let result = defaultParser.pdfa(html, parse); + // print(result); + 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) {//非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||''; + log('通过drpy_ocr验证码接口过验证...'); + let html = ''; + if (this.api.endsWith('drpy/text')) { + html = request(this.api, {data: {img: img}, headers: {'User-Agent': PC_UA}, 'method': 'POST'}, true); + } else { + html = post(this.api, {body: img}); + } + code = html || ''; + } catch (e) { + log(`OCR识别验证码发生错误:${e.message}`) + } + return code + } +}; + +/** + * 验证码识别,暂未实现 + * @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}, '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)); +} + +/** + * 将obj所有key变小写 + * @param obj + */ +function keysToLowerCase(obj) { + return Object.keys(obj).reduce((result, key) => { + const newKey = key.toLowerCase(); + result[newKey] = obj[key]; // 如果值也是对象,可以递归调用本函数 + return result; + }, {}); +} + +/** + * 海阔网页请求函数完整封装 + * @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); + } + 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; + // fetch_params 里存在ua则优先,否则才默认手机UA + if (typeof (fetch_params) === 'object' && fetch_params && fetch_params.headers) { + let fetch_headers = keysToLowerCase(fetch_params.headers); + if (fetch_headers['user-agent']) { + headers['User-Agent'] = fetch_headers['user-agent']; + } + } + } + if (!keys.includes('referer')) { + headers['Referer'] = getHome(url); + } + obj.headers = headers; + } + if (rule.encoding && rule.encoding !== 'utf-8' && !ocr_flag) { + if (!obj.headers.hasOwnProperty('Content-Type') && !obj.headers.hasOwnProperty('content-type')) { // 手动指定了就不管 + obj.headers["Content-Type"] = 'text/html; charset=' + rule.encoding; + } + } + if (typeof (obj.body) != 'undefined' && obj.body && typeof (obj.body) === 'string') { + // let data = {}; + // obj.body.split('&').forEach(it=>{ + // data[it.split('=')[0]] = it.split('=')[1] + // }); + // obj.data = data; + // delete obj.body + + // 传body加 "Content-Type":"application/x-www-form-urlencoded;" 即可post form + 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) { // 返回base64,用于请求图片 + obj.buffer = 2; + delete obj.toBase64 + } + if (obj.redirect === false) { + obj.redirect = 0; + } + console.log(JSON.stringify(obj.headers)); + // console.log('request:'+url+' obj:'+JSON.stringify(obj)); + console.log('request:' + url + `|method:${obj.method || 'GET'}|body:${obj.body || ''}`); + 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 = obj || {}; + obj.method = 'POST'; + return request(url, obj); +} + +/** + * 快捷获取特殊地址cookie|一般用作搜索过验证 + * 用法 let {cookie,html} = reqCookie(url); + * @param url 能返回cookie的地址 + * @param obj 常规请求参数 + * @param all_cookie 返回全部cookie.默认false只返回第一个,一般是PhpSessionId + * @returns {{cookie: string, html: (*|string|DocumentFragment)}} + */ +function reqCookie(url, obj, all_cookie) { + obj = obj || {}; + obj.withHeaders = true; + all_cookie = all_cookie || false; + let html = request(url, obj); + let json = JSON.parse(html); + let setCk = Object.keys(json).find(it => it.toLowerCase() === 'set-cookie'); + let cookie = setCk ? json[setCk] : ''; + if (Array.isArray(cookie)) { + cookie = cookie.join(';') + } + if (!all_cookie) { + cookie = cookie.split(';')[0]; + } + html = json.body; + return { + cookie, + html + } +} + +fetch = request; +print = function (data) { + data = data || ''; + if (typeof (data) == 'object' && Object.keys(data).length > 0) { + try { + data = JSON.stringify(data); + console.log(data); + } catch (e) { + // console.log('print:'+e.message); + 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; + +/** + * 检查宝塔验证并自动跳过获取正确源码 + * @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) { + // log('有cookie:'+cookie); + if (obj.headers && !Object.keys(obj.headers).map(it => it.toLowerCase()).includes('cookie')) { + log('历史无cookie,新增过验证后的cookie'); + obj.headers['Cookie'] = cookie; + } else if (obj.headers && obj.headers.cookie && obj.headers.cookie !== cookie) { + obj.headers['Cookie'] = cookie; + log('历史有小写过期的cookie,更新过验证后的cookie'); + } else if (obj.headers && obj.headers.Cookie && obj.headers.Cookie !== cookie) { + obj.headers['Cookie'] = cookie; + log('历史有大写过期的cookie,更新过验证后的cookie'); + } else if (!obj.headers) { + obj.headers = {Cookie: cookie}; + log('历史无headers,更新过验证后的含cookie的headers'); + } + } + let html = getCode(url, obj); + return html +} + +/** + * 首页分类解析,筛选暂未实现 + * @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) { + if (homeObj.class_parse.startsWith('js:')) { + var input = homeObj.MY_URL; + try { + eval(homeObj.class_parse.replace('js:', '')); + if (Array.isArray(input)) { + classes = input; + } + } catch (e) { + log(`通过js动态获取分类发生了错误:${e.message}`); + } + } else { + let p = homeObj.class_parse.split(';'); + let p0 = p[0]; + let _ps = parseTags.getParse(p0); + let is_json = p0.startsWith('json:'); + _pdfa = _ps.pdfa; + _pdfh = _ps.pdfh; + _pd = _ps.pd; + MY_URL = rule.url; + if (is_json) { + try { + let cms_cate_url = homeObj.MY_URL.replace('ac=detail', 'ac=list'); + let html = homeObj.home_html || getHtml(cms_cate_url); + if (html) { + if (cms_cate_url === homeObj.MY_URL) { + homeHtmlCache = html; + } + let list = _pdfa(html, p0.replace('json:', '')); + if (list && list.length > 0) { + classes = list; + } + } + } catch (e) { + console.log(e.message); + } + } else if (p.length >= 3 && !is_json) { // 可以不写正则 + try { + let html = homeObj.home_html || getHtml(homeObj.MY_URL); + if (html) { + homeHtmlCache = html; + let list = _pdfa(html, p0); + if (list && list.length > 0) { + list.forEach((it, idex) => { + try { + let name = _pdfh(it, p[1]); + if (homeObj.cate_exclude && (new RegExp(homeObj.cate_exclude).test(name))) { + return; + } + // let url = pdfh(it, p[2]); + let url = _pd(it, p[2]); + if (p.length > 3 && p[3] && !homeObj.home_html) { + let exp = new RegExp(p[3]); + url = url.match(exp)[1]; + } + + classes.push({ + 'type_id': url.trim(), + 'type_name': name.trim() + }); + } catch (e) { + console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`); + } + }); + } + } + } catch (e) { + console.log(e.message); + } + + } + } + } + // 排除分类 + classes = classes.filter(it => !homeObj.cate_exclude || !(new RegExp(homeObj.cate_exclude).test(it.type_name))); + let resp = { + 'class': classes + }; + if (homeObj.filter) { + resp.filters = homeObj.filter; + } + console.log(JSON.stringify(resp)); + return JSON.stringify(resp); + +} + +/** + * 推荐和搜索单字段继承一级 + * @param p 推荐或搜索的解析分割;列表 + * @param pn 自身列表序号 + * @param pp 一级解析分割;列表 + * @param ppn 继承一级序号 + * @returns {*} + */ +function getPP(p, pn, pp, ppn) { + try { + let ps = p[pn] === '*' && pp.length > ppn ? pp[ppn] : p[pn] + return ps + } catch (e) { + return '' + } +} + +/** + * 首页推荐列表解析 + * @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.一级 ? rule.一级.split(';') : []; + if (p.startsWith('js:')) { + const TYPE = 'home'; + var input = MY_URL; + HOST = rule.host; + eval(p.replace('js:', '')); + d = VODS; + } else { + p = p.split(';'); + if (!homeVodObj.double && p.length < 5) { + return '{}' + } else if (homeVodObj.double && p.length < 6) { + return '{}' + } + let p0 = getPP(p, 0, pp, 0) + let _ps = parseTags.getParse(p0); + _pdfa = _ps.pdfa; + _pdfh = _ps.pdfh; + _pd = _ps.pd; + let is_json = p0.startsWith('json:'); + p0 = p0.replace(/^(jsp:|json:|jq:)/, ''); + // 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); + 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) { + // console.log(p[1]); + let items2 = _pdfa(item, p1); + // console.log(items2.length); + 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 + }; + // print(vod); + 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) + '毫秒'); + // console.log(JSON.stringify(d)); + if (rule.图片替换) { + if (rule.图片替换.startsWith('js:')) { + d.forEach(it => { + try { + var input = it.vod_pic; + eval(rule.图片替换.trim().replace('js:', '')); + it.vod_pic = input; + } catch (e) { + log(`图片:${it.vod_pic}替换错误:${e.message}`); + } + }); + } else if (rule.图片替换.includes('=>')) { + let replace_from = rule.图片替换.split('=>')[0]; + let replace_to = rule.图片替换.split('=>')[1]; + d.forEach(it => { + if (it.vod_pic && it.vod_pic.startsWith('http')) { + it.vod_pic = it.vod_pic.replace(replace_from, replace_to); + } + }); + } + } + if (rule.图片来源) { + d.forEach(it => { + if (it.vod_pic && it.vod_pic.startsWith('http')) { + it.vod_pic = it.vod_pic + rule.图片来源; + } + }); + } + if (d.length > 0) { + print(d.slice(0, 2)); + } + return JSON.stringify({ + list: d + }) +} + +/** + * 一级分类页数据解析 + * @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 (cateObj.pg === 1 && url.includes('[') && url.includes(']')) { + url = url.split('[')[1].split(']')[0]; + } else if (cateObj.pg > 1 && url.includes('[') && url.includes(']')) { + url = url.split('[')[0]; + } + if (rule.filter_url) { + if (!/fyfilter/.test(url)) { + if (!url.endsWith('&') && !rule.filter_url.startsWith('&')) { + url += '&' + } + url += rule.filter_url; + } else { + url = url.replace('fyfilter', rule.filter_url); + } + // filter_url支持fyclass + url = url.replaceAll('fyclass', cateObj.tid); + // 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)); + 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); + } + } + + 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.图片替换) { + if (rule.图片替换.startsWith('js:')) { + d.forEach(it => { + try { + var input = it.vod_pic; + eval(rule.图片替换.trim().replace('js:', '')); + it.vod_pic = input; + } catch (e) { + log(`图片:${it.vod_pic}替换错误:${e.message}`); + } + }); + } else if (rule.图片替换.includes('=>')) { + let replace_from = rule.图片替换.split('=>')[0]; + let replace_to = rule.图片替换.split('=>')[1]; + d.forEach(it => { + if (it.vod_pic && it.vod_pic.startsWith('http')) { + it.vod_pic = it.vod_pic.replace(replace_from, replace_to); + } + }); + } + } + if (rule.图片来源) { + d.forEach(it => { + if (it.vod_pic && it.vod_pic.startsWith('http')) { + it.vod_pic = it.vod_pic + rule.图片来源; + } + }); + } + // print(d); + if (d.length > 0) { + print(d.slice(0, 2)); + } + let pagecount = 0; + if (rule.pagecount && typeof (rule.pagecount) === 'object' && rule.pagecount.hasOwnProperty(MY_CATE)) { + print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`); + pagecount = parseInt(rule.pagecount[MY_CATE]); + } + let nodata = { + list: [{ + vod_name: '无数据,防无限请求', + vod_id: 'no_data', + vod_remarks: '不要点,会崩的', + vod_pic: 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg' + }], + total: 1, pagecount: 1, page: 1, limit: 1 + }; + let vod = d.length < 1 ? JSON.stringify(nodata) : JSON.stringify({ + 'page': parseInt(cateObj.pg), + 'pagecount': pagecount || 999, + 'limit': 20, + 'total': 999, + 'list': d, + }); + // print(vod); + return vod +} + +/** + * 搜索列表数据解析 + * @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.一级 ? rule.一级.split(';') : []; + let url = searchObj.searchUrl.replaceAll('**', searchObj.wd); + if (searchObj.pg === 1 && url.includes('[') && url.includes(']') && !url.includes('#')) { + url = url.split('[')[1].split(']')[0]; + } else if (searchObj.pg > 1 && url.includes('[') && url.includes(']') && !url.includes('#')) { + url = url.split('[')[0]; + } + + if (/fypage/.test(url)) { + if (url.includes('(') && url.includes(')')) { + let url_rep = url.match(/.*?\((.*)\)/)[1]; + // console.log(url_rep); + let cnt_page = url_rep.replaceAll('fypage', searchObj.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', 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 req_method = MY_URL.split(';').length > 1 ? MY_URL.split(';')[1].toLowerCase() : 'get'; + let html; + if (req_method === 'post') { + let rurls = MY_URL.split(';')[0].split('#') + let rurl = rurls[0] + let params = rurls.length > 1 ? rurls[1] : ''; + print(`post=》rurl:${rurl},params:${params}`); + // let new_dict = {}; + // let new_tmp = params.split('&'); + // new_tmp.forEach(i=>{ + // new_dict[i.split('=')[0]] = i.split('=')[1]; + // }); + // html = post(rurl,{body:new_dict}); + let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); + let postData = {body: params}; + Object.assign(_fetch_params, postData); + html = post(rurl, _fetch_params); + } else if (req_method === 'postjson') { + let rurls = MY_URL.split(';')[0].split('#') + let rurl = rurls[0] + let params = rurls.length > 1 ? rurls[1] : ''; + print(`postjson-》rurl:${rurl},params:${params}`); + try { + params = JSON.parse(params); + } catch (e) { + params = '{}' + } + let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); + let postData = {body: params}; + Object.assign(_fetch_params, postData); + html = post(rurl, _fetch_params); + } else { + html = getHtml(MY_URL); + } + if (html) { + 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); + let p1 = getPP(p, 1, pp, 1); + let p2 = getPP(p, 2, pp, 2); + let p3 = getPP(p, 3, pp, 3); + let p4 = getPP(p, 4, pp, 4); + let p5 = getPP(p, 5, pp, 5); + list.forEach(it => { + let links = p4.split('+').map(_p4 => { + return !rule.detailUrl ? _pd(it, _p4, MY_URL) : _pdfh(it, _p4) + }); + let link = links.join('$'); + let content; + if (p.length > 5 && p[5]) { + content = _pdfh(it, p5); + } else { + content = ''; + } + let vod_id = link; + let vod_name = _pdfh(it, p1).replace(/\n|\t/g, '').trim(); + let vod_pic = _pd(it, p2, MY_URL); + if (rule.二级 === '*') { + vod_id = vod_id + '@@' + vod_name + '@@' + vod_pic; + } + let ob = { + 'vod_id': vod_id, + 'vod_name': vod_name, + 'vod_pic': vod_pic, + 'vod_remarks': _pdfh(it, p3).replace(/\n|\t/g, '').trim(), + 'vod_content': content.replace(/\n|\t/g, '').trim(), + }; + d.push(ob); + }); + + } + } catch (e) { + print(`搜索发生错误:${e.message}`); + return '{}' + } + } + if (rule.图片替换) { + if (rule.图片替换.startsWith('js:')) { + d.forEach(it => { + try { + var input = it.vod_pic; + eval(rule.图片替换.trim().replace('js:', '')); + it.vod_pic = input; + } catch (e) { + log(`图片:${it.vod_pic}替换错误:${e.message}`); + } + }); + } else if (rule.图片替换.includes('=>')) { + let replace_from = rule.图片替换.split('=>')[0]; + let replace_to = rule.图片替换.split('=>')[1]; + d.forEach(it => { + if (it.vod_pic && it.vod_pic.startsWith('http')) { + it.vod_pic = it.vod_pic.replace(replace_from, replace_to); + } + }); + } + } + if (rule.图片来源) { + d.forEach(it => { + if (it.vod_pic && it.vod_pic.startsWith('http')) { + it.vod_pic = it.vod_pic + rule.图片来源; + } + }); + } + // print(d); + return JSON.stringify({ + 'page': parseInt(searchObj.pg), + 'pagecount': 10, + 'limit': 20, + 'total': 100, + 'list': d, + }); +} + +/** + * 二级详情页数据解析 + * @param detailObj + * @returns {string} + */ +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.二级 === '*') { + // 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; + if (detailObj.二级访问前) { + try { + print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`); + eval(detailObj.二级访问前.trim().replace('js:', '')); + } catch (e) { + print(`二级访问前执行代码出现错误:${e.message}`) + } + } + // 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') { + 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; + // print('二级默认jsp'); + // _ps = parseTags.jsp; + } + 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]).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:', '')); + } + +// console.log(2); + 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]; + // 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); + let new_map = {}; + for (let v of vHeader) { + let v_title = _pdfh(v, tab_text).trim(); + if (!v_title) { + v_title = '线路空' + } + console.log(v_title); + if (tab_exclude && (new RegExp(tab_exclude)).test(v_title)) { + continue; + } + if (!new_map.hasOwnProperty(v_title)) { + new_map[v_title] = 1; + } else { + new_map[v_title] += 1; + } + if (new_map[v_title] > 1) { + v_title += Number(new_map[v_title] - 1); + } + playFrom.push(v_title); + } + } + console.log(JSON.stringify(playFrom)); + } else { + playFrom = ['道长在线'] + } + vod.vod_play_from = playFrom.join(vod_play_from); + +// console.log(3); + 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)) { + // 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'; + let list_url_prefix = p.list_url_prefix || ''; + // 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 < playFrom.length; i++) { + let tab_name = playFrom[i]; + let tab_ext = p.tabs.split(';').length > 1 && !is_tab_js ? p.tabs.split(';')[1] : ''; + let p1 = p.lists.replaceAll('#idv', tab_name).replaceAll('#id', i); + tab_ext = tab_ext.replaceAll('#idv', tab_name).replaceAll('#id', i); + let tabName = tab_ext ? _pdfh(html, tab_ext) : tab_name; + console.log(tabName); + // print('tab_ext:'+tab_ext); + let new_vod_list = []; + let tt1 = (new Date()).getTime(); + // print('pdfl:'+typeof (pdfl)); + if (typeof (pdfl) === 'function') { + new_vod_list = pdfl(html, p1, list_text, list_url, MY_URL); + if (list_url_prefix) { + new_vod_list = new_vod_list.map(it => it.split('$')[0] + '$' + list_url_prefix + it.split('$').slice(1).join('$')); + } + } else { + let vodList = []; + try { + vodList = _pdfa(html, p1); + console.log('len(vodList):' + vodList.length); + } catch (e) { + // console.log(e.message); + } + for (let i = 0; i < vodList.length; i++) { + let it = vodList[i]; + new_vod_list.push(_pdfh(it, list_text).trim() + '$' + list_url_prefix + _pd(it, list_url, MY_URL)); + } + } + if (new_vod_list.length > 0) { + new_vod_list = forceOrder(new_vod_list, '', x => x.split('$')[0]); + console.log(`drpy影响性能代码共计列表数循环次数:${new_vod_list.length},耗时:${(new Date()).getTime() - tt1}毫秒`); + } + // print(new_vod_list); + let vlist = new_vod_list.join('#'); + vod_tab_list.push(vlist); + } + vod_play_url = vod_tab_list.join(vod_play_url); + } + } + vod.vod_play_url = vod_play_url; + } + if (rule.图片替换 && rule.图片替换.includes('=>')) { + let replace_from = rule.图片替换.split('=>')[0]; + let replace_to = rule.图片替换.split('=>')[1]; + vod.vod_pic = vod.vod_pic.replace(replace_from, replace_to); + } + if (rule.图片来源 && vod.vod_pic && vod.vod_pic.startsWith('http')) { + vod.vod_pic = vod.vod_pic + rule.图片来源; + } + if (!vod.vod_id || (vod_id.includes('$') && vod.vod_id !== vod_id)) { + vod.vod_id = vod_id; + } + let t2 = (new Date()).getTime(); + console.log(`加载二级界面${MY_URL}耗时:${t2 - t1}毫秒`); + // print(vod); + try { + vod = vodDeal(vod); + } catch (e) { + console.log(`vodDeal发生错误:${e.message}`); + } + // print(vod); + return JSON.stringify({ + list: [vod] + }) +} + +/** + * 获取二级待返回的播放线路没处理时的索引关系 + * @param vod + * @returns {{}} + */ +function get_tab_index(vod) { + let obj = {}; + vod.vod_play_from.split('$$$').forEach((it, index) => { + obj[it] = index; + }); + return obj +} + +/** + * 处理待返回的vod数据|线路去除,排序,重命名 + * @param vod + * @returns {*} + */ +function vodDeal(vod) { + let vod_play_from = vod.vod_play_from.split('$$$'); + let vod_play_url = vod.vod_play_url.split('$$$'); + + // 移除指定线路后的列表 + let tab_removed_list = vod_play_from; + // 排序后的线路列表 + let tab_ordered_list = vod_play_from; + // 线路重命名后的列表 + let tab_renamed_list = vod_play_from; + // 定义实际要返回线路 + let tab_list = vod_play_from; + // 选集列表根据线路排序 + let play_ordered_list = vod_play_url; + + // 判断有移除线路或者线路排序 + if ((rule.tab_remove && rule.tab_remove.length > 0) || (rule.tab_order && rule.tab_order.length > 0)) { + // 获取原来线路的索引下标 + let tab_index_dict = get_tab_index(vod); + + if (rule.tab_remove && rule.tab_remove.length > 0) { + tab_removed_list = vod_play_from.filter(it => !rule.tab_remove.includes(it)); + tab_list = tab_removed_list; + } + + if (rule.tab_order && rule.tab_order.length > 0) { + let tab_order = rule.tab_order; + tab_ordered_list = tab_removed_list.sort((a, b) => { + return (tab_order.indexOf(a) === -1 ? 9999 : tab_order.indexOf(a)) - (tab_order.indexOf(b) === -1 ? 9999 : tab_order.indexOf(b)) + }); + tab_list = tab_ordered_list; + } + play_ordered_list = tab_list.map(it => vod_play_url[tab_index_dict[it]]); + } + + if (rule.tab_rename && typeof (rule.tab_rename) === 'object' & Object.keys(rule.tab_rename).length > 0) { + tab_renamed_list = tab_list.map(it => rule.tab_rename[it] || it); + tab_list = tab_renamed_list; + } + vod.vod_play_from = tab_list.join('$$$'); + vod.vod_play_url = play_ordered_list.join('$$$'); + return vod +} + +/** + * 判断是否需要解析 + * @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; + var MY_FLAG = playObj.flag; + if (!/http/.test(MY_URL)) { + try { + MY_URL = base64Decode(MY_URL); + } catch (e) { + } + } + MY_URL = decodeURIComponent(MY_URL); + var input = MY_URL;//注入给免嗅js + var flag = MY_FLAG;//注入播放线路名称给免嗅js + let common_play = { + parse: SPECIAL_URL.test(input) || /^(push:)/.test(input) ? 0 : 1, + url: input, + flag: flag, + // 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.trim(); + if (lazy_code.startsWith('js:')) { + lazy_code = lazy_code.replace('js:', '').trim(); + } + print('开始执行js免嗅=>' + lazy_code); + eval(lazy_code); + lazy_play = typeof (input) === 'object' ? input : { + parse: SPECIAL_URL.test(input) || /^(push:)/.test(input) ? 0 : 1, + jx: tellIsJx(input), + url: input + }; + } catch (e) { + print(`js免嗅错误:${e.message}`); + lazy_play = common_play; + } + } else { + lazy_play = common_play; + } + // 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); +} + +/** + * 本地代理解析规则 + * @param params + */ +function proxyParse(proxyObj) { + var input = proxyObj.params; + if (proxyObj.proxy_rule) { + log('准备执行本地代理规则:\n' + proxyObj.proxy_rule); + try { + eval(proxyObj.proxy_rule); + if (input && input !== proxyObj.params && Array.isArray(input) && input.length >= 3) { + return input + } else { + return [404, 'text/plain', 'Not Found'] + } + } catch (e) { + return [500, 'text/plain', '代理规则错误:' + e.message] + } + + } else { + return [404, 'text/plain', 'Not Found'] + } +} + +/** + * 辅助嗅探解析规则 + * @param isVideoObj + * @returns {boolean} + */ +function isVideoParse(isVideoObj) { + var input = isVideoObj.url; + if (!isVideoObj.t) { // t为假代表默认传的正则字符串 + let re_matcher = new RegExp(isVideoObj.isVideo, 'i'); // /g匹配多个,/i不区分大小写,/m匹配多行 + return re_matcher.test(input); + } else { + // 执行js + try { + eval(isVideoObj.isVideo); + if (typeof (input) === 'boolean') { + return input + } else { + return false + } + } catch (e) { + log(`执行嗅探规则发生错误:${e.message}`); + return false + } + } +} + +/** + * 获取加密前的原始的js源文本 + * @param js_code + */ +function getOriginalJs(js_code) { + let current_match = /var rule|[\u4E00-\u9FA5]+|function|let |var |const |\(|\)|"|'/; + if (current_match.test(js_code)) { + return js_code + } + let rsa_private_key = 'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqin/jUpqM6+fgYP/oMqj9zcdHMM0mEZXLeTyixIJWP53lzJV2N2E3OP6BBpUmq2O1a9aLnTIbADBaTulTNiOnVGoNG58umBnupnbmmF8iARbDp2mTzdMMeEgLdrfXS6Y3VvazKYALP8EhEQykQVarexR78vRq7ltY3quXx7cgI0ROfZz5Sw3UOLQJ+VoWmwIxu9AMEZLVzFDQN93hzuzs3tNyHK6xspBGB7zGbwCg+TKi0JeqPDrXxYUpAz1cQ/MO+Da0WgvkXnvrry8NQROHejdLVOAslgr6vYthH9bKbsGyNY3H+P12kcxo9RAcVveONnZbcMyxjtF5dWblaernAgMBAAECggEAGdEHlSEPFmAr5PKqKrtoi6tYDHXdyHKHC5tZy4YV+Pp+a6gxxAiUJejx1hRqBcWSPYeKne35BM9dgn5JofgjI5SKzVsuGL6bxl3ayAOu+xXRHWM9f0t8NHoM5fdd0zC3g88dX3fb01geY2QSVtcxSJpEOpNH3twgZe6naT2pgiq1S4okpkpldJPo5GYWGKMCHSLnKGyhwS76gF8bTPLoay9Jxk70uv6BDUMlA4ICENjmsYtd3oirWwLwYMEJbSFMlyJvB7hjOjR/4RpT4FPnlSsIpuRtkCYXD4jdhxGlvpXREw97UF2wwnEUnfgiZJ2FT/MWmvGGoaV/CfboLsLZuQKBgQDTNZdJrs8dbijynHZuuRwvXvwC03GDpEJO6c1tbZ1s9wjRyOZjBbQFRjDgFeWs9/T1aNBLUrgsQL9c9nzgUziXjr1Nmu52I0Mwxi13Km/q3mT+aQfdgNdu6ojsI5apQQHnN/9yMhF6sNHg63YOpH+b+1bGRCtr1XubuLlumKKscwKBgQDOtQ2lQjMtwsqJmyiyRLiUOChtvQ5XI7B2mhKCGi8kZ+WEAbNQcmThPesVzW+puER6D4Ar4hgsh9gCeuTaOzbRfZ+RLn3Aksu2WJEzfs6UrGvm6DU1INn0z/tPYRAwPX7sxoZZGxqML/z+/yQdf2DREoPdClcDa2Lmf1KpHdB+vQKBgBXFCVHz7a8n4pqXG/HvrIMJdEpKRwH9lUQS/zSPPtGzaLpOzchZFyQQBwuh1imM6Te+VPHeldMh3VeUpGxux39/m+160adlnRBS7O7CdgSsZZZ/dusS06HAFNraFDZf1/VgJTk9BeYygX+AZYu+0tReBKSs9BjKSVJUqPBIVUQXAoGBAJcZ7J6oVMcXxHxwqoAeEhtvLcaCU9BJK36XQ/5M67ceJ72mjJC6/plUbNukMAMNyyi62gO6I9exearecRpB/OGIhjNXm99Ar59dAM9228X8gGfryLFMkWcO/fNZzb6lxXmJ6b2LPY3KqpMwqRLTAU/zy+ax30eFoWdDHYa4X6e1AoGAfa8asVGOJ8GL9dlWufEeFkDEDKO9ww5GdnpN+wqLwePWqeJhWCHad7bge6SnlylJp5aZXl1+YaBTtOskC4Whq9TP2J+dNIgxsaF5EFZQJr8Xv+lY9lu0CruYOh9nTNF9x3nubxJgaSid/7yRPfAGnsJRiknB5bsrCvgsFQFjJVs='; + let decode_content = ''; + + function aes_decrypt(data) { + let key = CryptoJS.enc.Hex.parse("686A64686E780A0A0A0A0A0A0A0A0A0A"); + let iv = CryptoJS.enc.Hex.parse("647A797964730A0A0A0A0A0A0A0A0A0A"); + let encrypted = CryptoJS.AES.decrypt({ + ciphertext: CryptoJS.enc.Base64.parse(data) + }, key, { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }).toString(CryptoJS.enc.Utf8); + return encrypted; + } + + let error_log = false; + + function logger(text) { + if (error_log) { + log(text); + } + } + + let decode_funcs = [ + (text) => { + try { + return ungzip(text) + } catch (e) { + logger('非gzip加密'); + return '' + } + }, + (text) => { + try { + return base64Decode(text) + } catch (e) { + logger('非b64加密'); + return '' + } + }, + (text) => { + try { + return aes_decrypt(text) + } catch (e) { + logger('非aes加密'); + return '' + } + }, + (text) => { + try { + return RSA.decode(text, rsa_private_key, null) + } catch (e) { + logger('非rsa加密'); + return '' + } + }, + // (text)=>{try {return NODERSA.decryptRSAWithPrivateKey(text, RSA.getPrivateKey(rsa_private_key).replace(/RSA /g,''), {options: {environment: "browser", encryptionScheme: 'pkcs1',b:'1024'}});} catch (e) {log(e.message);return ''}}, + ] + let func_index = 0 + while (!current_match.test(decode_content)) { + decode_content = decode_funcs[func_index](js_code); + func_index++; + if (func_index >= decode_funcs.length) { + break; + } + } + return decode_content +} + +/** + * 执行main函数 + * 示例 function main(text){return gzip(text)} + * @param main_func_code + * @param arg + */ +function runMain(main_func_code, arg) { + let mainFunc = function () { + return '' + }; + try { + eval(main_func_code + '\nmainFunc=main;'); + return mainFunc(arg); + } catch (e) { + log(`执行main_funct发生了错误:${e.message}`); + return '' + } +} + +/** + * js源预处理特定返回对象中的函数 + * @param ext + */ +function init(ext) { + console.log('init'); + // init前重置rule和fetch_params + rule = {}; + rule_fetch_params = {}; + fetch_params = null; + try { + // make shared jsContext happy muban不能import,不然会造成换源继承后变量被篡改 + // if (typeof (globalThis.mubanJs) === 'undefined') { + // let mubanJs = request('https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/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); + + let muban = 模板.getMubans(); + // print(typeof (muban)); + // print(muban); + if (typeof ext == 'object') { + rule = ext; + } else if (typeof ext == 'string') { + if (ext.startsWith('http') || ext.startsWith('file://')) { + let query = getQuery(ext); // 获取链接传参 + let js = request(ext, {'method': 'GET'}); + if (js) { + js = getOriginalJs(js); + // eval(js.replace('var rule', 'rule')); + // eval("(function(){'use strict';"+js.replace('var rule', 'rule')+"})()"); + eval("(function(){" + js.replace('var rule', 'rule') + "})()"); + } + if (query.type === 'url' && query.params) { // 指定type是链接并且传了params支持简写如 ./xx.json + rule.params = urljoin(ext, query.params); + } else if (query.params) { // 没指定type直接视为字符串 + rule.params = query.params; + } + } else { + ext = getOriginalJs(ext); + // eval(ext.replace('var rule', 'rule')); + // eval("(function(){'use strict';"+ext.replace('var rule', 'rule')+"})()"); + eval("(function(){" + ext.replace('var rule', 'rule') + "})()"); + } + } else { + console.log(`规则加载失败,不支持的规则类型:${typeof ext}`); + return + } + rule.host = (rule.host || '').rstrip('/'); + HOST = rule.host; + if (rule.hostJs) { + console.log(`检测到hostJs,准备执行...`); + try { + eval(rule.hostJs); + rule.host = HOST.rstrip('/'); + } catch (e) { + console.log(`执行${rule.hostJs}获取host发生错误:${e.message}`); + } + } + if (rule['模板'] === '自动') { + try { + let host_headers = rule['headers'] || {}; + let host_html = getCode(HOST, {headers: host_headers}); + let match_muban = ''; + let muban_keys = Object.keys(muban).filter(it => !/默认|短视2|采集1/.test(it)); + for (let muban_key of muban_keys) { + try { + let host_data = JSON.parse(home({}, host_html, muban[muban_key].class_parse)); + if (host_data.class && host_data.class.length > 0) { + match_muban = muban_key; + console.log(`自动匹配模板:【${muban_key}】`); + break; + } + } catch (e) { + // @ts-ignore + console.log(`自动匹配模板:【${muban_key}】错误:${e.message}`); + } + } + if (match_muban) { + muban['自动'] = muban[match_muban]; + if (rule['模板修改'] && rule['模板修改'].startsWith('js:')) { + // 模板修改:$js.toString(()=>{ muban.自动.class_parse = ''}); + eval(rule['模板修改'].replace('js:', '').trim()); + } + } else { + delete rule['模板'] + } + } catch (e) { + delete rule['模板'] + } + } + if (rule.模板 && muban.hasOwnProperty(rule.模板)) { + print('继承模板:' + rule.模板); + rule = Object.assign(muban[rule.模板], rule); + } + /** 处理一下 rule规则关键字段没传递的情况 **/ + let rule_cate_excludes = (rule.cate_exclude || '').split('|').filter(it => it.trim()); + let rule_tab_excludes = (rule.tab_exclude || '').split('|').filter(it => it.trim()); + rule_cate_excludes = rule_cate_excludes.concat(CATE_EXCLUDE.split('|').filter(it => it.trim())); + rule_tab_excludes = rule_tab_excludes.concat(TAB_EXCLUDE.split('|').filter(it => it.trim())); + + rule.cate_exclude = rule_cate_excludes.join('|'); + rule.tab_exclude = rule_tab_excludes.join('|'); + + rule.类型 = rule.类型 || '影视'; // 影视|听书|漫画|小说 + rule.url = rule.url || ''; + rule.double = rule.double || false; + rule.homeUrl = rule.homeUrl || ''; + rule.detailUrl = rule.detailUrl || ''; + rule.searchUrl = rule.searchUrl || ''; + rule.homeUrl = rule.host && rule.homeUrl ? urljoin(rule.host, rule.homeUrl) : (rule.homeUrl || rule.host); + rule.homeUrl = cheerio.jinja2(rule.homeUrl, {rule: rule}); + rule.detailUrl = rule.host && rule.detailUrl ? urljoin(rule.host, rule.detailUrl) : rule.detailUrl; + rule.二级访问前 = rule.二级访问前 || ''; + if (rule.url.includes('[') && rule.url.includes(']')) { + let u1 = rule.url.split('[')[0] + let u2 = rule.url.split('[')[1].split(']')[0] + rule.url = rule.host && rule.url ? urljoin(rule.host, u1) + '[' + urljoin(rule.host, u2) + ']' : rule.url; + } else { + rule.url = rule.host && rule.url ? urljoin(rule.host, rule.url) : rule.url; + } + if (rule.searchUrl.includes('[') && rule.searchUrl.includes(']') && !rule.searchUrl.includes('#')) { + let u1 = rule.searchUrl.split('[')[0] + let u2 = rule.searchUrl.split('[')[1].split(']')[0] + rule.searchUrl = rule.host && rule.searchUrl ? urljoin(rule.host, u1) + '[' + urljoin(rule.host, u2) + ']' : rule.searchUrl; + } else { + rule.searchUrl = rule.host && rule.searchUrl ? urljoin(rule.host, rule.searchUrl) : rule.searchUrl; + } + + rule.timeout = rule.timeout || 5000; + rule.encoding = rule.编码 || rule.encoding || 'utf-8'; + rule.search_encoding = rule.搜索编码 || rule.search_encoding || ''; + rule.图片来源 = rule.图片来源 || ''; + rule.图片替换 = rule.图片替换 || ''; + rule.play_json = rule.hasOwnProperty('play_json') ? rule.play_json : []; + rule.pagecount = rule.hasOwnProperty('pagecount') ? rule.pagecount : {}; + rule.proxy_rule = rule.hasOwnProperty('proxy_rule') ? rule.proxy_rule : ''; + if (!rule.hasOwnProperty('sniffer')) { // 默认关闭辅助嗅探 + rule.sniffer = false; + } + rule.sniffer = rule.hasOwnProperty('sniffer') ? rule.sniffer : ''; + rule.sniffer = !!(rule.sniffer && rule.sniffer !== '0' && rule.sniffer !== 'false'); + + rule.isVideo = rule.hasOwnProperty('isVideo') ? rule.isVideo : ''; + if (rule.sniffer && !rule.isVideo) { // 默认辅助嗅探自动增强嗅探规则 + rule.isVideo = 'http((?!http).){12,}?\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)\\?.*|http((?!http).){12,}\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)|http((?!http).)*?video/tos*|http((?!http).)*?obj/tos*'; + } + + rule.tab_remove = rule.hasOwnProperty('tab_remove') ? rule.tab_remove : []; + rule.tab_order = rule.hasOwnProperty('tab_order') ? rule.tab_order : []; + rule.tab_rename = rule.hasOwnProperty('tab_rename') ? rule.tab_rename : {}; + + if (rule.headers && typeof (rule.headers) === 'object') { + try { + let header_keys = Object.keys(rule.headers); + for (let k of header_keys) { + if (k.toLowerCase() === 'user-agent') { + let v = rule.headers[k]; + console.log(v); + if (['MOBILE_UA', 'PC_UA', 'UC_UA', 'IOS_UA', 'UA'].includes(v)) { + rule.headers[k] = eval(v); + } + } else if (k.toLowerCase() === 'cookie') { + let v = rule.headers[k]; + if (v && v.startsWith('http')) { + console.log(v); + try { + v = fetch(v); + console.log(v); + rule.headers[k] = v; + } catch (e) { + console.log(`从${v}获取cookie发生错误:${e.message}`); + } + } + } + } + } catch (e) { + console.log(`处理headers发生错误:${e.message}`); + } + } + // 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); + pre(); // 预处理 + init_test(); + } catch (e) { + console.log(`init_test发生错误:${e.message}`); + } +} + +let homeHtmlCache = undefined; + +/** + * js源获取首页分类和筛选特定返回对象中的函数 + * @param filter 筛选条件字典对象 + * @param home_html 指定了源码。无需内部再请求 + * @param class_parse 自动匹配传入的模板的动态分类 + * @returns {string} + */ +function home(filter, home_html, class_parse) { + console.log("home"); + home_html = home_html || ''; + class_parse = class_parse || ''; + if (typeof (rule.filter) === 'string' && rule.filter.trim().length > 0) { + try { + let filter_json = ungzip(rule.filter.trim()); + rule.filter = JSON.parse(filter_json); + } catch (e) { + rule.filter = {}; + } + } + let homeObj = { + filter: rule.filter || false, + MY_URL: rule.homeUrl, + class_name: rule.class_name || '', + class_url: rule.class_url || '', + class_parse: class_parse || rule.class_parse || '', + cate_exclude: rule.cate_exclude, + home_html: home_html, + }; + return homeParse(homeObj); +} + +/** + * 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 = ''; + log('orId:' + orId); + if (vod_url.indexOf('$') > -1) { + let tmp = vod_url.split('$'); + fyclass = tmp[0]; + vod_url = tmp[1]; + } + let detailUrl = vod_url.split('@@')[0]; + let url; + if (!detailUrl.startsWith('http') && !detailUrl.includes('/')) { + url = rule.detailUrl.replaceAll('fyid', detailUrl).replaceAll('fyclass', fyclass); + } else if (detailUrl.includes('/')) { + url = urljoin(rule.homeUrl, detailUrl); + } else { + url = detailUrl + } + let detailObj = { + orId: orId, + url: url, + 二级: rule.二级, + 二级访问前: rule.二级访问前, + detailUrl: detailUrl, + fyclass: fyclass, + tab_exclude: rule.tab_exclude, + } + return detailParse(detailObj) +} + +/** + * 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, pg) { + if (rule.search_encoding) { + if (rule.search_encoding.toLowerCase() !== 'utf-8') { + // 按搜索编码进行编码 + wd = encodeStr(wd, rule.search_encoding); + } + } else if (rule.encoding && rule.encoding.toLowerCase() !== 'utf-8') { + // 按全局编码进行编码 + wd = encodeStr(wd, rule.encoding); + } + let searchObj = { + searchUrl: rule.searchUrl, + 搜索: rule.搜索, + wd: wd, + //pg: pg, + pg: pg || 1, + quick: quick, + }; + // console.log(JSON.stringify(searchObj)); + return searchParse(searchObj) +} + +/** + * js源本地代理返回的数据列表特定返回对象中的函数 + * @param params 代理链接参数比如 /proxy?do=js&url=https://wwww.baidu.com => params就是 {do:'js','url':'https://wwww.baidu.com'} + * @returns {*} + */ +function proxy(params) { + if (rule.proxy_rule && rule.proxy_rule.trim()) { + rule.proxy_rule = rule.proxy_rule.trim(); + } + if (rule.proxy_rule.startsWith('js:')) { + rule.proxy_rule = rule.proxy_rule.replace('js:', ''); + } + let proxyObj = { + params: params, + proxy_rule: rule.proxy_rule + }; + return proxyParse(proxyObj) +} + + +/** + * 是否启用辅助嗅探功能,启用后可以根据isVideo函数进行手动识别为视频的链接地址。默认为false + * @returns {*|boolean|boolean} + */ +function sniffer() { + let enable_sniffer = rule.sniffer || false; + if (enable_sniffer) { + // log('准备执行辅助嗅探代理规则:\n'+rule.isVideo); + log('开始执行辅助嗅探代理规则...'); + } + return enable_sniffer +} + +/** + * 启用辅助嗅探功能后根据次函数返回的值识别地址是否为视频,返回true/false + * @param url + */ +function isVideo(url) { + let t = 0; + let is_video; + if (rule.isVideo && rule.isVideo.trim()) { + is_video = rule.isVideo.trim(); + } + if (is_video.startsWith('js:')) { + is_video = is_video.replace('js:', ''); + t = 1; + } + let isVideoObj = { + url: url, + isVideo: is_video, + t: t, + }; + let result = isVideoParse(isVideoObj); + if (result) { + log('成功执行辅助嗅探规则并检测到视频地址:\n' + rule.isVideo); + } + return result +} + +/** + * 获取规则 + * @returns {{}} + */ +function getRule(key) { + return key ? rule[key] || '' : rule +} + +function DRPY() {//导出函数 + return { + runMain: runMain, + getRule: getRule, + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search, + proxy: proxy, + sniffer: sniffer, + isVideo: isVideo, + fixAdM3u8Ai: fixAdM3u8Ai, + } +} + +/** + * 导出函数无法简写成下面的形式: + + export default { + ...DRPY, + DRPY + } + + */ + +// 导出函数对象 +export default { + runMain, + getRule, + init, + home, + homeVod, + category, + detail, + play, + search, + proxy, + sniffer, + isVideo, + fixAdM3u8Ai, + DRPY, +} \ No newline at end of file diff --git a/drpy_t3/drpy_libs/drpy2.min.js b/drpy_t3/drpy_libs/drpy2.min.js new file mode 100644 index 0000000..c5bb4e4 --- /dev/null +++ b/drpy_t3/drpy_libs/drpy2.min.js @@ -0,0 +1,73 @@ +import cheerio from"assets://js/lib/cheerio.min.js";import"assets://js/lib/crypto-js.js";import"./jsencrypt.js";import"./node-rsa.js";import"./pako.min.js";import 模板 from"./模板.js";import{gbkTool}from"./gbk.js";function init_test(){console.log("init_test_start");console.log("当前版本号:"+VERSION);console.log("本地代理地址:"+getProxyUrl());console.log(RKEY);console.log(JSON.stringify(rule));console.log("init_test_end")}function ocr_demo_test(){let img_base64=`iVBORw0KGgoAAAANSUhEUgAAAIAAAAAoBAMAAADEX+97AAAAG1BMVEXz+/4thQTa7N6QwIFFkyNeokKozqDB3b93sWHFR+MEAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABN0lEQVRIie2TQU+DQBCFt9vScvQpxR4xrcSjJCZ67JDGXsX+AdR4B3vpsSYm/m2HXaRLmuySepR3Gdidb/btDAjRq5dT96eCMlfBuzi1QLZUoZy2yz5sOvI+9iomaPEZ6nWnEtxqIyiM1RcAy44GNDhBXUjot/VVNweV1ah68FqWRyjKIOqAcyYF6rGcmpYnHzGt3fycNoMw0d3/THFu7hFSJ/8OXO6iTM8/KSg09obAzIHLO250LgQ0txOZSfgrV4Exdw98uGycJ0ErAeExZGhOmFHV9zHO6qVSj0MpLq7xZON56o++MjlsEgfVhbQWWME+xQX7J4V6zfi9A1Ly9rP1BvEXp+BbVJ/M77n+wfOIDVp51pZ4iBxvmj9AGrtvry6emwfKnVkW+ZRKd5ZNMvob36vXP9YPDmQki8QiCFAAAAAASUVORK5CYII=`;OcrApi.api=OCR_API;let code=OcrApi.classification(img_base64);log("测试验证码图片的ocr识别结果为:"+code)}function rsa_demo_test(){let t1=(new Date).getTime();let pkcs1_public=` +-----BEGIN RSA PUBLIC KEY----- +MEgCQQCrI0pQ/ERRpJ3Ou190XJedFq846nDYP52rOtXyDxlFK5D3p6JJu2RwsKwy +lsQ9xY0xYPpRZUZKMEeR7e9gmRNLAgMBAAE= +-----END RSA PUBLIC KEY----- +`.trim();let pkcs1_public_pem=` +MEgCQQCrI0pQ/ERRpJ3Ou190XJedFq846nDYP52rOtXyDxlFK5D3p6JJu2RwsKwy +lsQ9xY0xYPpRZUZKMEeR7e9gmRNLAgMBAAE= +`.trim();let pkcs8_public=` +-----BEGIN PUBLIC KEY----- +MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/ +nas61fIPGUUrkPenokm7ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQ== +-----END PUBLIC KEY-----`.trim();let pkcs8_public_pem=` +MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/ +nas61fIPGUUrkPenokm7ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQ== +`.trim();let pkcs1_private=` +-----BEGIN RSA PRIVATE KEY----- +MIIBOAIBAAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/nas61fIPGUUrkPenokm7 +ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQI/b6OV1z65UokQaMvSeRXt +0Yv6wiYtduQI9qpq5nzy/ytaqsbBfClNTi/HifKPKxlRouWFkc518EQI8LBxoarJ +AiEA4DaONMplV8PQNa3TKn2F+SDEvLOCjdL0kHKdN90Ti28CIQDDZnTBaHgZwZbA +hS7Bbf5yvwjWMhO6Y7l04/Qm7R+35QIgPuQuqXIoUSD080mp1N5WyRW++atksIF+ +5lGv9e6GP/MCICnj8y/rl6Pd7tXDN6zcSeqLrfdNsREKhB3dKOCXgW9JAiAFYtFS +EJNBXVRTK42SNsZ2hJ/9xLwOwnH2epT8Q43s3Q== +-----END RSA PRIVATE KEY----- +`.trim();let pkcs8_private=` +-----BEGIN PRIVATE KEY----- +MIIBUgIBADANBgkqhkiG9w0BAQEFAASCATwwggE4AgEAAkEAqyNKUPxEUaSdzrtf +dFyXnRavOOpw2D+dqzrV8g8ZRSuQ96eiSbtkcLCsMpbEPcWNMWD6UWVGSjBHke3v +YJkTSwIDAQABAj9vo5XXPrlSiRBoy9J5Fe3Ri/rCJi125Aj2qmrmfPL/K1qqxsF8 +KU1OL8eJ8o8rGVGi5YWRznXwRAjwsHGhqskCIQDgNo40ymVXw9A1rdMqfYX5IMS8 +s4KN0vSQcp033ROLbwIhAMNmdMFoeBnBlsCFLsFt/nK/CNYyE7pjuXTj9CbtH7fl +AiA+5C6pcihRIPTzSanU3lbJFb75q2SwgX7mUa/17oY/8wIgKePzL+uXo93u1cM3 +rNxJ6out902xEQqEHd0o4JeBb0kCIAVi0VIQk0FdVFMrjZI2xnaEn/3EvA7CcfZ6 +lPxDjezd +-----END PRIVATE KEY----- +`.trim();let data=` +NodeRsa +这是node-rsa 现在修改集成在drpy里使用`.trim();let encryptedWithPublic=NODERSA.encryptRSAWithPublicKey(data,pkcs1_public,{outputEncoding:"base64",options:{environment:"browser",encryptionScheme:"pkcs1_oaep"}});console.log("公钥加密");console.log(encryptedWithPublic);let decryptedWithPrivate=NODERSA.decryptRSAWithPrivateKey(encryptedWithPublic,pkcs1_private,{options:{environment:"browser",encryptionScheme:"pkcs1_oaep"}});console.log("私钥解密");console.log(decryptedWithPrivate);let pkcs1_sha256_sign=NODERSA.sign("1",pkcs1_private,{outputEncoding:"base64",options:{environment:"browser",encryptionScheme:"pkcs1",signingScheme:"pkcs1-sha256"}});console.log("pkcs1_sha256_sign");console.log(pkcs1_sha256_sign);let pkcs1_sha256_sign_verify=NODERSA.verify("1","Oulx2QrgeipKYBtqEDqFb2s/+ndk2cGQxO4CkhU7iBM1vyNmmvqubpsmeoUuN3waGrYZLknSEdwBkfv0tUMpFQ==",pkcs1_private,{options:{environment:"browser",encryptionScheme:"pkcs1",signingScheme:"pkcs1-sha256"}});console.log("pkcs1_sha256_sign_verify");console.log(pkcs1_sha256_sign_verify);let pkcs1_oaep_sha256=NODERSA.encryptRSAWithPublicKey(data,`-----BEGIN RSA PUBLIC KEY----- +MIIBCgKCAQEA5KOq1gRNyllLNWKQy8sGpZE3Q1ULLSmzZw+eaAhj9lvqn7IsT1du +SYn08FfoOA2qMwtz+1O2l1mgzNoSVCyVpVabnTG+C9XKeZXAnJHd8aYA7l7Sxhdm +kte+iymYZ0ZBPzijo8938iugtVvqi9UgDmnY3u/NlQDqiL5BGqSxSTd/Sgmy3zD8 +PYzEa3wD9vehQ5fZZ45vKIq8GNVh2Z8+IGO85FF1OsN7+b2yGJa/FmDDNn0+HP+m +PfI+kYBqEVpo0Ztbc3UdxgFwGC8O1n8AQyriwHnSOtIiuBH62J/7qyC/3LEAApRb +Dd9YszqzmODjQUddZKHmvc638VW+azc0EwIDAQAB +-----END RSA PUBLIC KEY----- +`,{outputEncoding:"base64",options:{environment:"browser",encryptionScheme:{scheme:"pkcs1_oaep",hash:"sha256"}}});console.log("pkcs1_oaep_sha256");console.log(pkcs1_oaep_sha256);decryptedWithPrivate=NODERSA.decryptRSAWithPrivateKey("kSZesAAyYh2hdsQnYMdGqb6gKAzTauBKouvBzWcc4+F8RvGd0nwO6mVkUMVilPgUuNxjEauHayHiY8gI3Py45UI3+km0rSGyHrS6dHiHgCkMejXHieglYzAB0IxX3Jkm4z/66bdB/D+GFy0oct5fGCMI1UHPjEAYOsazJDa8lBFNbjiWFeb/qiZtIx3vGM7KYPAZzyRf/zPbbQ8zy9xOmRuOl5nnIxgo0Okp3KO/RIPO4GZOSBA8f2lx1UtNwwrXAMpcNavtoqHVcjJ/9lcotXYQFrn5b299pSIRf2gVm8ZJ31SK6Z8cc14nKtvgnmsgClDzIXJ1o1RcDK+knVAySg==",`-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA5KOq1gRNyllLNWKQy8sGpZE3Q1ULLSmzZw+eaAhj9lvqn7Is +T1duSYn08FfoOA2qMwtz+1O2l1mgzNoSVCyVpVabnTG+C9XKeZXAnJHd8aYA7l7S +xhdmkte+iymYZ0ZBPzijo8938iugtVvqi9UgDmnY3u/NlQDqiL5BGqSxSTd/Sgmy +3zD8PYzEa3wD9vehQ5fZZ45vKIq8GNVh2Z8+IGO85FF1OsN7+b2yGJa/FmDDNn0+ +HP+mPfI+kYBqEVpo0Ztbc3UdxgFwGC8O1n8AQyriwHnSOtIiuBH62J/7qyC/3LEA +ApRbDd9YszqzmODjQUddZKHmvc638VW+azc0EwIDAQABAoIBADZ/QGgUzInvsLp/ +zO2WbfYm39o/uhNAvk9RbLt1TIZbMFhyOpeKynHi3Swwd9xsfWX/U9zS/lGi/m31 +iKrhmaW4OA1G3vqpMcK7TBbFufYwUEaA+ZJX344euH8pIfdzyneMQ4z3Far2dS7l +QsmjuilVV2kEFadveXewiYoVOWCu00w6bN8wy2SIHlQn+kIL6HQhWz12iKKflIKu +eGRdzLHsKmBt6WbY1Wuhx7HU0fAKdlBDPxCHNlI+kybUYE9o5C2vJiaVM5wqJBgZ +8Dz8kt1QbLJ910JoLXkLVQ8uC8NJKQwFtqQjTGPnEq0+wbgz6Ij599rKZkwW/xq9 +l6KoUiECgYEA6Ah42tVdkNW047f03xVYXFH96RgorHRS36mR8Y+ONUq1fwKidovC +WjwVujt4OPf3l1W6iyn/F6cu/bsmvPrSc3HTN0B1V31QK4OjgetxQ2PSbTldH02J +NPzkt+v+cPxXpx/P5mgt7Weefw5txU547KubGrHUV5rBKFtIx9pj16MCgYEA/EF0 +o19+D24DZAPwlDS5VbEd7FStnwY4oQ5PqbuNOSbSJLMWU0AqzXcRokp8UTyCZ0X3 +ATkS1REq97kShCuR+npTR6a6DlY7sdpPI1SMLNajgB2tkx0EOzX+PfNIbHUd4jpJ +I0ZMAHv/OOtkzQHDaeTWBTrzsWm6/nTiykfduNECgYEA46AMD4HpPECqKAs66e5i +tI6q7JSKskObWVdcmQEfnSAhVOwcvPb2Ptda6UuV8S0xcwDi88rLOUUFUFzc79+P +vTkY38cYVi/VChsluDpk7ptqv0PbGu5Rf+3n4pZdEjI7OvR2W64wAAn67uIUxc7p +yiO/ET0K9rYWb6S9jXGtKMkCgYEA2kPAqoO7zZoBMQ7/oR0lp/HC1HRIbiqx4RlC +8Lgpb+QZPEwA6zPAVVvLVENi4d+bbcRp/xLlKpraNNJcJSSWAMbLPFoU7sbKjA87 +HnTPfRSTEA2d3Ibk3F7Rh8TzS3Ti0JZiJjVzGZAwu41iAMifzwaD8K6boUy80eNN +QH2CaaECgYBUsLYvC/MiYg3w+LGOONuQongoVUXjGqnw2bjVa9RK7lwRdXPUqJ51 +MpVO98IkoLvGSI/0sGNP3GKNhC+eMGjJAVwFyEuOn+JsmMv9Y9uStIVi5tIHIhKw +m7mp8il0kaftHdSxTbspG3tZ2fjIiFIZkLEOmRpd7ogWumgOajzUdA== +-----END RSA PRIVATE KEY-----`,{options:{environment:"browser",encryptionScheme:"pkcs1_oaep"}});console.log("decryptedWithPrivate");console.log(decryptedWithPrivate);(()=>{let key=new NODERSA.NodeRSA({b:1024});key.setOptions({encryptionScheme:"pkcs1"});let text=`你好drpy node-ras`;let encrypted=key.encrypt(text,"base64");console.log("encrypted: ",encrypted);const decrypted=key.decrypt(encrypted,"utf8");console.log("decrypted: ",decrypted)})();let t2=(new Date).getTime();console.log("rsa_demo_test 测试耗时:"+(t2-t1)+"毫秒")}function pre(){if(typeof rule.预处理==="string"&&rule.预处理&&rule.预处理.trim()){let code=rule.预处理.trim();console.log("执行预处理代码:"+code);if(code.startsWith("js:")){code=code.replace("js:","")}try{eval(code)}catch(e){console.log(`预处理执行失败:${e.message}`)}}}let rule={};let vercode=typeof pdfl==="function"?"drpy2.1":"drpy2";const VERSION=vercode+" 3.9.50beta32 20240625";const MOBILE_UA="Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36";const PC_UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36";const UA="Mozilla/5.0";const UC_UA="Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36";const IOS_UA="Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1";const RULE_CK="cookie";const CATE_EXCLUDE="首页|留言|APP|下载|资讯|新闻|动态";const TAB_EXCLUDE="猜你|喜欢|下载|剧情|榜|评论";const OCR_RETRY=3;const OCR_API="https://api.nn.ci/ocr/b64/text";if(typeof MY_URL==="undefined"){var MY_URL}var HOST;var RKEY;var fetch;var print;var log;var rule_fetch_params;var fetch_params;var oheaders;var _pdfh;var _pdfa;var _pd;const DOM_CHECK_ATTR=/(url|src|href|-original|-src|-play|-url|style)$/;const SPECIAL_URL=/^(ftp|magnet|thunder|ws):/;const NOADD_INDEX=/:eq|:lt|:gt|:first|:last|^body$|^#/;const URLJOIN_ATTR=/(url|src|href|-original|-src|-play|-url|style)$|^(data-|url-|src-)/;const SELECT_REGEX=/:eq|:lt|:gt|#/g;const SELECT_REGEX_A=/:eq|:lt|:gt/g;const $js={toString(func){let strfun=func.toString();return strfun.replace(/^\(\)(\s+)?=>(\s+)?\{/,"js:").replace(/\}$/,"")}};function window_b64(){let b64map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";let base64DecodeChars=new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);function btoa(str){var out,i,len;var c1,c2,c3;len=str.length;i=0;out="";while(i>2);out+=b64map.charAt((c1&3)<<4);out+="==";break}c2=str.charCodeAt(i++);if(i==len){out+=b64map.charAt(c1>>2);out+=b64map.charAt((c1&3)<<4|(c2&240)>>4);out+=b64map.charAt((c2&15)<<2);out+="=";break}c3=str.charCodeAt(i++);out+=b64map.charAt(c1>>2);out+=b64map.charAt((c1&3)<<4|(c2&240)>>4);out+=b64map.charAt((c2&15)<<2|(c3&192)>>6);out+=b64map.charAt(c3&63)}return out}function atob(str){var c1,c2,c3,c4;var i,len,out;len=str.length;i=0;out="";while(i>4);do{c3=str.charCodeAt(i++)&255;if(c3==61)return out;c3=base64DecodeChars[c3]}while(i>2);do{c4=str.charCodeAt(i++)&255;if(c4==61)return out;c4=base64DecodeChars[c4]}while(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>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:out+=String.fromCharCode(c);break;case 12:case 13:char2=array[i++];out+=String.fromCharCode((c&31)<<6|char2&63);break;case 14:char2=array[i++];char3=array[i++];out+=String.fromCharCode((c&15)<<12|(char2&63)<<6|(char3&63)<<0);break}}return out}function gzip(str){let arr=pako.gzip(str,{});return uint8ArrayToBase64(arr)}function ungzip(b64Data){let strData=atob(b64Data);const charData=strData.split("").map(function(x){return x.charCodeAt(0)});const binData=new Uint8Array(charData);const data=pako.inflate(binData);return Utf8ArrayToStr(data)}function encodeStr(input,encoding){encoding=encoding||"gbk";if(encoding.startsWith("gb")){const strTool=gbkTool();input=strTool.encode(input)}return input}function decodeStr(input,encoding){encoding=encoding||"gbk";if(encoding.startsWith("gb")){const strTool=gbkTool();input=strTool.decode(input)}return input}function getCryptoJS(){return'console.log("CryptoJS已装载");'}const RSA={decode:function(data,key,option){option=option||{};if(typeof JSEncrypt==="function"){let chunkSize=option.chunkSize||117;let privateKey=this.getPrivateKey(key);const decryptor=new JSEncrypt;decryptor.setPrivateKey(privateKey);let uncrypted="";uncrypted=decryptor.decryptUnicodeLong(data);return uncrypted}else{return false}},encode:function(data,key,option){option=option||{};if(typeof JSEncrypt==="function"){let chunkSize=option.chunkSize||117;let publicKey=this.getPublicKey(key);const encryptor=new JSEncrypt;encryptor.setPublicKey(publicKey);let encrypted="";encrypted=encryptor.encryptUnicodeLong(data);return encrypted}else{return false}},fixKey(key,prefix,endfix){if(!key.includes(prefix)){key=prefix+key}if(!key.includes(endfix)){key+=endfix}return key},getPrivateKey(key){let prefix="-----BEGIN RSA PRIVATE KEY-----";let endfix="-----END RSA PRIVATE KEY-----";return this.fixKey(key,prefix,endfix)},getPublicKey(key){let prefix="-----BEGIN PUBLIC KEY-----";let endfix="-----END PUBLIC KEY-----";return this.fixKey(key,prefix,endfix)}};function getProxyUrl(){if(typeof getProxy==="function"){return getProxy(true)}else{return"http://127.0.0.1:9978/proxy?do=js"}}function fixAdM3u8(m3u8_text,m3u8_url,ad_remove){if(!m3u8_text&&!m3u8_url||!m3u8_text&&m3u8_url&&!m3u8_url.startsWith("http")){return""}if(!m3u8_text){log("m3u8_url:"+m3u8_url);m3u8_text=request(m3u8_url)}log("len(m3u8_text):"+m3u8_text.length);if(!ad_remove){return m3u8_text}if(ad_remove.startsWith("reg:")){ad_remove=ad_remove.slice(4)}else if(ad_remove.startsWith("js:")){ad_remove=ad_remove.slice(3)}let m3u8_start=m3u8_text.slice(0,m3u8_text.indexOf("#EXTINF")).trim();let m3u8_body=m3u8_text.slice(m3u8_text.indexOf("#EXTINF"),m3u8_text.indexOf("#EXT-X-ENDLIST")).trim();let m3u8_end=m3u8_text.slice(m3u8_text.indexOf("#EXT-X-ENDLIST")).trim();let murls=[];let m3_body_list=m3u8_body.split("\n");let m3_len=m3_body_list.length;let i=0;while(i{new_m3u8_body.push(it)})}}new_m3u8_body=new_m3u8_body.join("\n").trim();m3u8_text=[m3u8_start,new_m3u8_body,m3u8_end].join("\n").trim();return m3u8_text}function fixAdM3u8Ai(m3u8_url,headers){let ts=(new Date).getTime();let option=headers?{headers:headers}:{};function b(s1,s2){let i=0;while(iit.startsWith("#")?it:urljoin(m3u8_url,it)).join("\n");m3u8=m3u8.replace(/\n\n/gi,"\n");let last_url=m3u8.split("\n").slice(-1)[0];if(last_url.length<5){last_url=m3u8.split("\n").slice(-2)[0]}if(last_url.includes(".m3u8")&&last_url!==m3u8_url){m3u8_url=urljoin2(m3u8_url,last_url);log("嵌套的m3u8_url:"+m3u8_url);m3u8=request(m3u8_url,option)}let s=m3u8.trim().split("\n").filter(it=>it.trim()).join("\n");let ss=s.split("\n");let firststr="";let maxl=0;let kk=0;let kkk=2;let secondstr="";for(let i=0;i1){if(maxl>b(firststr,s)){if(secondstr.length<5)secondstr=s;kkk=kkk+2}else{maxl=b(firststr,s);kkk++}}kk++;if(kk>=20)break}}if(kkk>30)firststr=secondstr;let firststrlen=firststr.length;let ml=Math.round(ss.length/2).toString().length;let maxc=0;let laststr=ss.toReversed().find(x=>{if(!x.startsWith("#")){let k=b(reverseString(firststr),reverseString(x));maxl=b(firststr,x);maxc++;if(firststrlen-maxl<=ml+k||maxc>10){return true}}return false});log("最后一条切片:"+laststr);let ad_urls=[];for(let i=0;i=end){return lists}let first=lists[start];let second=lists[end];if(key){try{first=first[key];second=second[key]}catch(e){}}if(option&&typeof option==="function"){try{first=option(first);second=option(second)}catch(e){}}first+="";second+="";if(first.match(/(\d+)/)&&second.match(/(\d+)/)){let num1=Number(first.match(/(\d+)/)[1]);let num2=Number(second.match(/(\d+)/)[1]);if(num1>num2){lists.reverse()}}return lists}let VODS=[];let VOD={};let TABS=[];let LISTS=[];function getQuery(url){try{if(url.indexOf("?")>-1){url=url.slice(url.indexOf("?")+1)}let arr=url.split("#")[0].split("&");const resObj={};arr.forEach(item=>{let arr1=item.split("=");let key=arr1[0];let value=arr1.slice(1).join("=");resObj[key]=value});return resObj}catch(err){log(`getQuery发生错误:${e.message}`);return{}}}function urljoin(fromPath,nowPath){fromPath=fromPath||"";nowPath=nowPath||"";return joinUrl(fromPath,nowPath)}var urljoin2=urljoin;const defaultParser={pdfh:pdfh,pdfa:pdfa,pd:pd};function pdfh2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print(`html对象转文本发生了错误:${e.message}`)}let result=defaultParser.pdfh(html2,parse);let option=parse.includes("&&")?parse.split("&&").slice(-1)[0]:parse.split(" ").slice(-1)[0];if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){try{result=result.match(/url\((.*?)\)/)[1];result=result.replace(/^['|"](.*)['|"]$/,"$1")}catch(e){}}return result}function pdfa2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print(`html对象转文本发生了错误:${e.message}`)}return defaultParser.pdfa(html2,parse)}function pd2(html,parse,uri){let ret=pdfh2(html,parse);if(typeof uri==="undefined"||!uri){uri=""}if(DOM_CHECK_ATTR.test(parse)&&!SPECIAL_URL.test(ret)){if(/http/.test(ret)){ret=ret.slice(ret.indexOf("http"))}else{ret=urljoin(MY_URL,ret)}}return ret}const parseTags={jsp:{pdfh:pdfh2,pdfa:pdfa2,pd:pd2},json:{pdfh(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}parse=parse.split("||");for(let ps of parse){let ret=cheerio.jp(ps,html);if(Array.isArray(ret)){ret=ret[0]||""}else{ret=ret||""}if(ret&&typeof ret!=="string"){ret=ret.toString()}if(ret){return ret}}return""},pdfa(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}let ret=cheerio.jp(parse,html);if(Array.isArray(ret)&&Array.isArray(ret[0])&&ret.length===1){return ret[0]||[]}return ret||[]},pd(html,parse){let ret=parseTags.json.pdfh(html,parse);if(ret){return urljoin(MY_URL,ret)}return ret}},jq:{pdfh(html,parse){if(!html||!parse||!parse.trim()){return""}parse=parse.trim();let result=defaultParser.pdfh(html,parse);return result},pdfa(html,parse){if(!html||!parse||!parse.trim()){return[]}parse=parse.trim();let result=defaultParser.pdfa(html,parse);print(`pdfa解析${parse}=>${result.length}`);return result},pd(html,parse,base_url){if(!html||!parse||!parse.trim()){return""}parse=parse.trim();base_url=base_url||MY_URL;return defaultParser.pd(html,parse,base_url)}},getParse(p0){if(p0.startsWith("jsp:")){return this.jsp}else if(p0.startsWith("json:")){return this.json}else if(p0.startsWith("jq:")){return this.jq}else{return this.jq}}};const stringify=JSON.stringify;const jsp=parseTags.jsp;const jq=parseTags.jq;function readFile(filePath){filePath=filePath||"./uri.min.js";var fd=os.open(filePath);var buffer=new ArrayBuffer(1024);var len=os.read(fd,buffer,0,1024);console.log(len);let text=String.fromCharCode.apply(null,new Uint8Array(buffer));console.log(text);return text}function dealJson(html){try{html=html.trim();if(!(html.startsWith("{")&&html.endsWith("}")||html.startsWith("[")&&html.endsWith("]"))){html="{"+html.match(/.*?\{(.*)\}/m)[1]+"}"}}catch(e){}try{html=JSON.parse(html)}catch(e){}return html}var OcrApi={api:OCR_API,classification:function(img){let code="";try{log("通过drpy_ocr验证码接口过验证...");let html="";if(this.api.endsWith("drpy/text")){html=request(this.api,{data:{img:img},headers:{"User-Agent":PC_UA},method:"POST"},true)}else{html=post(this.api,{body:img})}code=html||""}catch(e){log(`OCR识别验证码发生错误:${e.message}`)}return code}};function verifyCode(url){let cnt=0;let host=getHome(url);let cookie="";while(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},method:"POST"});html=JSON.parse(html);if(html.msg==="ok"){console.log(`第${cnt+1}次验证码提交成功`);return cookie}else if(html.msg!=="ok"&&cnt+1>=OCR_RETRY){cookie=""}}catch(e){console.log(`第${cnt+1}次验证码提交失败:${e.message}`);if(cnt+1>=OCR_RETRY){cookie=""}}cnt+=1}return cookie}function setItem(k,v){local.set(RKEY,k,v);console.log(`规则${RKEY}设置${k} => ${v}`)}function getItem(k,v){return local.get(RKEY,k)||v}function clearItem(k){local.delete(RKEY,k)}function getHome(url){if(!url){return""}let tmp=url.split("//");url=tmp[0]+"//"+tmp[1].split("/")[0];try{url=decodeURIComponent(url)}catch(e){}return url}function buildUrl(url,obj){obj=obj||{};if(url.indexOf("?")<0){url+="?"}let param_list=[];let keys=Object.keys(obj);keys.forEach(it=>{param_list.push(it+"="+obj[it])});let prs=param_list.join("&");if(keys.length>0&&!url.endsWith("?")){url+="&"}url+=prs;return url}function $require(url){eval(request(url))}function keysToLowerCase(obj){return Object.keys(obj).reduce((result,key)=>{const newKey=key.toLowerCase();result[newKey]=obj[key];return result},{})}function request(url,obj,ocr_flag){ocr_flag=ocr_flag||false;if(typeof obj==="undefined"||!obj||obj==={}){if(!fetch_params||!fetch_params.headers){let headers={"User-Agent":MOBILE_UA};if(rule.headers){Object.assign(headers,rule.headers)}if(!fetch_params){fetch_params={}}fetch_params.headers=headers}if(!fetch_params.headers.Referer){fetch_params.headers.Referer=getHome(url)}obj=fetch_params}else{let headers=obj.headers||{};let keys=Object.keys(headers).map(it=>it.toLowerCase());if(!keys.includes("user-agent")){headers["User-Agent"]=MOBILE_UA;if(typeof fetch_params==="object"&&fetch_params&&fetch_params.headers){let fetch_headers=keysToLowerCase(fetch_params.headers);if(fetch_headers["user-agent"]){headers["User-Agent"]=fetch_headers["user-agent"]}}}if(!keys.includes("referer")){headers["Referer"]=getHome(url)}obj.headers=headers}if(rule.encoding&&rule.encoding!=="utf-8"&&!ocr_flag){if(!obj.headers.hasOwnProperty("Content-Type")&&!obj.headers.hasOwnProperty("content-type")){obj.headers["Content-Type"]="text/html; charset="+rule.encoding}}if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="string"){if(!obj.headers.hasOwnProperty("Content-Type")&&!obj.headers.hasOwnProperty("content-type")){obj.headers["Content-Type"]="application/x-www-form-urlencoded; charset="+rule.encoding}}else if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="object"){obj.data=obj.body;delete obj.body}if(!url){return obj.withHeaders?"{}":""}if(obj.toBase64){obj.buffer=2;delete obj.toBase64}if(obj.redirect===false){obj.redirect=0}console.log(JSON.stringify(obj.headers));console.log("request:"+url+`|method:${obj.method||"GET"}|body:${obj.body||""}`);let res=req(url,obj);let html=res.content||"";if(obj.withHeaders){let htmlWithHeaders=res.headers;htmlWithHeaders.body=html;return JSON.stringify(htmlWithHeaders)}else{return html}}function post(url,obj){obj=obj||{};obj.method="POST";return request(url,obj)}function reqCookie(url,obj,all_cookie){obj=obj||{};obj.withHeaders=true;all_cookie=all_cookie||false;let html=request(url,obj);let json=JSON.parse(html);let setCk=Object.keys(json).find(it=>it.toLowerCase()==="set-cookie");let cookie=setCk?json[setCk]:"";if(Array.isArray(cookie)){cookie=cookie.join(";")}if(!all_cookie){cookie=cookie.split(";")[0]}html=json.body;return{cookie:cookie,html:html}}fetch=request;print=function(data){data=data||"";if(typeof data=="object"&&Object.keys(data).length>0){try{data=JSON.stringify(data);console.log(data)}catch(e){console.log(typeof data+":"+data.length);return}}else if(typeof data=="object"&&Object.keys(data).length<1){console.log("null object")}else{console.log(data)}};log=print;function checkHtml(html,url,obj){if(/\?btwaf=/.test(html)){let btwaf=html.match(/btwaf(.*?)"/)[1];url=url.split("#")[0]+"?btwaf"+btwaf;print("宝塔验证访问链接:"+url);html=request(url,obj)}return html}function getCode(url,obj){let html=request(url,obj);html=checkHtml(html,url,obj);return html}function getHtml(url){let obj={};if(rule.headers){obj.headers=rule.headers}let cookie=getItem(RULE_CK,"");if(cookie){if(obj.headers&&!Object.keys(obj.headers).map(it=>it.toLowerCase()).includes("cookie")){log("历史无cookie,新增过验证后的cookie");obj.headers["Cookie"]=cookie}else if(obj.headers&&obj.headers.cookie&&obj.headers.cookie!==cookie){obj.headers["Cookie"]=cookie;log("历史有小写过期的cookie,更新过验证后的cookie")}else if(obj.headers&&obj.headers.Cookie&&obj.headers.Cookie!==cookie){obj.headers["Cookie"]=cookie;log("历史有大写过期的cookie,更新过验证后的cookie")}else if(!obj.headers){obj.headers={Cookie:cookie};log("历史无headers,更新过验证后的含cookie的headers")}}let html=getCode(url,obj);return html}function homeParse(homeObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let classes=[];if(homeObj.class_name&&homeObj.class_url){let names=homeObj.class_name.split("&");let urls=homeObj.class_url.split("&");let cnt=Math.min(names.length,urls.length);for(let i=0;i0){classes=list}}}catch(e){console.log(e.message)}}else if(p.length>=3&&!is_json){try{let html=homeObj.home_html||getHtml(homeObj.MY_URL);if(html){homeHtmlCache=html;let list=_pdfa(html,p0);if(list&&list.length>0){list.forEach((it,idex)=>{try{let name=_pdfh(it,p[1]);if(homeObj.cate_exclude&&new RegExp(homeObj.cate_exclude).test(name)){return}let url=_pd(it,p[2]);if(p.length>3&&p[3]&&!homeObj.home_html){let exp=new RegExp(p[3]);url=url.match(exp)[1]}classes.push({type_id:url.trim(),type_name:name.trim()})}catch(e){console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`)}})}}}catch(e){console.log(e.message)}}}}classes=classes.filter(it=>!homeObj.cate_exclude||!new RegExp(homeObj.cate_exclude).test(it.type_name));let resp={class:classes};if(homeObj.filter){resp.filters=homeObj.filter}console.log(JSON.stringify(resp));return JSON.stringify(resp)}function getPP(p,pn,pp,ppn){try{let ps=p[pn]==="*"&&pp.length>ppn?pp[ppn]:p[pn];return ps}catch(e){return""}}function homeVodParse(homeVodObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];MY_URL=homeVodObj.homeUrl;console.log(MY_URL);let t1=(new Date).getTime();let p=homeVodObj.推荐;print("p:"+p);if(p==="*"&&rule.一级){p=rule.一级;homeVodObj.double=false}if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级?rule.一级.split(";"):[];if(p.startsWith("js:")){const TYPE="home";var input=MY_URL;HOST=rule.host;eval(p.replace("js:",""));d=VODS}else{p=p.split(";");if(!homeVodObj.double&&p.length<5){return"{}"}else if(homeVodObj.double&&p.length<6){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");let html=homeHtmlCache||getHtml(MY_URL);homeHtmlCache=undefined;if(is_json){html=dealJson(html)}try{console.log("double:"+homeVodObj.double);if(homeVodObj.double){let items=_pdfa(html,p0);let p1=getPP(p,1,pp,0);let p2=getPP(p,2,pp,1);let p3=getPP(p,3,pp,2);let p4=getPP(p,4,pp,3);let p5=getPP(p,5,pp,4);let p6=getPP(p,6,pp,5);for(let item of items){let items2=_pdfa(item,p1);for(let item2 of items2){try{let title=_pdfh(item2,p2);let img="";try{img=_pd(item2,p3)}catch(e){}let desc="";try{desc=_pdfh(item2,p4)}catch(e){}let links=[];for(let _p5 of p5.split("+")){let link=!homeVodObj.detailUrl?_pd(item2,_p5,MY_URL):_pdfh(item2,_p5);links.push(link)}let content;if(p.length>6&&p[6]){content=_pdfh(item2,p6)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){console.log(`首页列表双层定位处理发生错误:${e.message}`)}}}}else{let items=_pdfa(html,p0);let p1=getPP(p,1,pp,1);let p2=getPP(p,2,pp,2);let p3=getPP(p,3,pp,3);let p4=getPP(p,4,pp,4);let p5=getPP(p,5,pp,5);for(let item of items){try{let title=_pdfh(item,p1);let img="";try{img=_pd(item,p2,MY_URL)}catch(e){}let desc="";try{desc=_pdfh(item,p3)}catch(e){}let links=[];for(let _p5 of p4.split("+")){let link=!homeVodObj.detailUrl?_pd(item,_p5,MY_URL):_pdfh(item,_p5);links.push(link)}let content;if(p.length>5&&p[5]){content=_pdfh(item,p5)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){console.log(`首页列表单层定位处理发生错误:${e.message}`)}}}}catch(e){}}let t2=(new Date).getTime();console.log("加载首页推荐耗时:"+(t2-t1)+"毫秒");if(rule.图片替换){if(rule.图片替换.startsWith("js:")){d.forEach(it=>{try{var input=it.vod_pic;eval(rule.图片替换.trim().replace("js:",""));it.vod_pic=input}catch(e){log(`图片:${it.vod_pic}替换错误:${e.message}`)}})}else if(rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic.replace(replace_from,replace_to)}})}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}return JSON.stringify({list:d})}function categoryParse(cateObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let p=cateObj.一级;if(!p||typeof p!=="string"){return"{}"}let d=[];let url=cateObj.url.replaceAll("fyclass",cateObj.tid);if(cateObj.pg===1&&url.includes("[")&&url.includes("]")){url=url.split("[")[1].split("]")[0]}else if(cateObj.pg>1&&url.includes("[")&&url.includes("]")){url=url.split("[")[0]}if(rule.filter_url){if(!/fyfilter/.test(url)){if(!url.endsWith("&")&&!rule.filter_url.startsWith("&")){url+="&"}url+=rule.filter_url}else{url=url.replace("fyfilter",rule.filter_url)}url=url.replaceAll("fyclass",cateObj.tid);let fl=cateObj.filter?cateObj.extend:{};if(rule.filter_def&&typeof rule.filter_def==="object"){try{if(Object.keys(rule.filter_def).length>0&&rule.filter_def.hasOwnProperty(cateObj.tid)){let self_fl_def=rule.filter_def[cateObj.tid];if(self_fl_def&&typeof self_fl_def==="object"){let fl_def=JSON.parse(JSON.stringify(self_fl_def));fl=Object.assign(fl_def,fl)}}}catch(e){print(`合并不同分类对应的默认筛选出错:${e.message}`)}}let new_url;new_url=cheerio.jinja2(url,{fl:fl});url=new_url}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",cateObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.replaceAll("fypage",cateObj.pg)}}MY_URL=url;console.log(MY_URL);p=p.trim();const MY_CATE=cateObj.tid;if(p.startsWith("js:")){var MY_FL=cateObj.extend;const TYPE="cate";var input=MY_URL;const MY_PAGE=cateObj.pg;var desc="";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let _ps=parseTags.getParse(p[0]);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p[0].startsWith("json:");p[0]=p[0].replace(/^(jsp:|json:|jq:)/,"");try{let html=getHtml(MY_URL);if(html){if(is_json){html=dealJson(html)}let list=_pdfa(html,p[0]);list.forEach(it=>{let links=p[4].split("+").map(p4=>{return!rule.detailUrl?_pd(it,p4,MY_URL):_pdfh(it,p4)});let link=links.join("$");let vod_id=rule.detailUrl?MY_CATE+"$"+link:link;let vod_name=_pdfh(it,p[1]).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p[2],MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}d.push({vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,vod_remarks:_pdfh(it,p[3]).replace(/\n|\t/g,"").trim()})})}}catch(e){console.log(e.message)}}if(rule.图片替换){if(rule.图片替换.startsWith("js:")){d.forEach(it=>{try{var input=it.vod_pic;eval(rule.图片替换.trim().replace("js:",""));it.vod_pic=input}catch(e){log(`图片:${it.vod_pic}替换错误:${e.message}`)}})}else if(rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic.replace(replace_from,replace_to)}})}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}let pagecount=0;if(rule.pagecount&&typeof rule.pagecount==="object"&&rule.pagecount.hasOwnProperty(MY_CATE)){print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`);pagecount=parseInt(rule.pagecount[MY_CATE])}let nodata={list:[{vod_name:"无数据,防无限请求",vod_id:"no_data",vod_remarks:"不要点,会崩的",vod_pic:"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"}],total:1,pagecount:1,page:1,limit:1};let vod=d.length<1?JSON.stringify(nodata):JSON.stringify({page:parseInt(cateObj.pg),pagecount:pagecount||999,limit:20,total:999,list:d});return vod}function searchParse(searchObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];if(!searchObj.searchUrl){return"{}"}let p=searchObj.搜索==="*"&&rule.一级?rule.一级:searchObj.搜索;if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级?rule.一级.split(";"):[];let url=searchObj.searchUrl.replaceAll("**",searchObj.wd);if(searchObj.pg===1&&url.includes("[")&&url.includes("]")&&!url.includes("#")){url=url.split("[")[1].split("]")[0]}else if(searchObj.pg>1&&url.includes("[")&&url.includes("]")&&!url.includes("#")){url=url.split("[")[0]}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",searchObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.replaceAll("fypage",searchObj.pg)}}MY_URL=url;console.log(MY_URL);if(p.startsWith("js:")){const TYPE="search";const MY_PAGE=searchObj.pg;const KEY=searchObj.wd;var input=MY_URL;var detailUrl=rule.detailUrl||"";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");try{let req_method=MY_URL.split(";").length>1?MY_URL.split(";")[1].toLowerCase():"get";let html;if(req_method==="post"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`post=》rurl:${rurl},params:${params}`);let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else if(req_method==="postjson"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`postjson-》rurl:${rurl},params:${params}`);try{params=JSON.parse(params)}catch(e){params="{}"}let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else{html=getHtml(MY_URL)}if(html){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.图片替换){if(rule.图片替换.startsWith("js:")){d.forEach(it=>{try{var input=it.vod_pic;eval(rule.图片替换.trim().replace("js:",""));it.vod_pic=input}catch(e){log(`图片:${it.vod_pic}替换错误:${e.message}`)}})}else if(rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic.replace(replace_from,replace_to)}})}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}return JSON.stringify({page:parseInt(searchObj.pg),pagecount:10,limit:20,total:100,list:d})}function detailParse(detailObj){let t1=(new Date).getTime();fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let orId=detailObj.orId;let vod_name="片名";let vod_pic="";let vod_id=orId;if(rule.二级==="*"){let extra=orId.split("@@");vod_name=extra.length>1?extra[1]:vod_name;vod_pic=extra.length>2?extra[2]:vod_pic}let vod={vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,type_name:"类型",vod_year:"年份",vod_area:"地区",vod_remarks:"更新信息",vod_actor:"主演",vod_director:"导演",vod_content:"简介"};let p=detailObj.二级;let url=detailObj.url;let detailUrl=detailObj.detailUrl;let fyclass=detailObj.fyclass;let tab_exclude=detailObj.tab_exclude;let html=detailObj.html||"";MY_URL=url;if(detailObj.二级访问前){try{print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`);eval(detailObj.二级访问前.trim().replace("js:",""))}catch(e){print(`二级访问前执行代码出现错误:${e.message}`)}}if(p==="*"){vod.vod_play_from="道长在线";vod.vod_remarks=detailUrl;vod.vod_actor="没有二级,只有一级链接直接嗅探播放";vod.vod_content=MY_URL;vod.vod_play_url="嗅探播放$"+MY_URL.split("@@")[0]}else if(typeof p==="string"&&p.trim().startsWith("js:")){const TYPE="detail";var input=MY_URL;var play_url="";eval(p.trim().replace("js:",""));vod=VOD;console.log(JSON.stringify(vod))}else if(p&&typeof p==="object"){let tt1=(new Date).getTime();if(!html){html=getHtml(MY_URL)}print(`二级${MY_URL}仅获取源码耗时:${(new Date).getTime()-tt1}毫秒`);let _ps;if(p.is_json){print("二级是json");_ps=parseTags.json;html=dealJson(html)}else if(p.is_jsp){print("二级是jsp");_ps=parseTags.jsp}else if(p.is_jq){print("二级是jq");_ps=parseTags.jq}else{print("二级默认jq");_ps=parseTags.jq}let tt2=(new Date).getTime();print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;if(p.title){let p1=p.title.split(";");vod.vod_name=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();let type_name=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").replace(/ /g,"").trim():"";vod.type_name=type_name||vod.type_name}if(p.desc){try{let p1=p.desc.split(";");vod.vod_remarks=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();vod.vod_year=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").trim():"";vod.vod_area=p1.length>2?_pdfh(html,p1[2]).replace(/\n|\t/g,"").trim():"";vod.vod_actor=p1.length>3?_pdfh(html,p1[3]).replace(/\n|\t/g,"").trim():"";vod.vod_director=p1.length>4?_pdfh(html,p1[4]).replace(/\n|\t/g,"").trim():""}catch(e){}}if(p.content){try{let p1=p.content.split(";");vod.vod_content=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim()}catch(e){}}if(p.img){try{let p1=p.img.split(";");vod.vod_pic=_pd(html,p1[0],MY_URL)}catch(e){}}let vod_play_from="$$$";let playFrom=[];if(p.重定向&&p.重定向.startsWith("js:")){print("开始执行重定向代码:"+p.重定向);html=eval(p.重定向.replace("js:",""))}if(p.tabs){if(p.tabs.startsWith("js:")){print("开始执行tabs代码:"+p.tabs);var input=MY_URL;eval(p.tabs.replace("js:",""));playFrom=TABS}else{let p_tab=p.tabs.split(";")[0];let vHeader=_pdfa(html,p_tab);console.log(vHeader.length);let tab_text=p.tab_text||"body&&Text";let new_map={};for(let v of vHeader){let v_title=_pdfh(v,tab_text).trim();if(!v_title){v_title="线路空"}console.log(v_title);if(tab_exclude&&new RegExp(tab_exclude).test(v_title)){continue}if(!new_map.hasOwnProperty(v_title)){new_map[v_title]=1}else{new_map[v_title]+=1}if(new_map[v_title]>1){v_title+=Number(new_map[v_title]-1)}playFrom.push(v_title)}}console.log(JSON.stringify(playFrom))}else{playFrom=["道长在线"]}vod.vod_play_from=playFrom.join(vod_play_from);let vod_play_url="$$$";let vod_tab_list=[];if(p.lists){if(p.lists.startsWith("js:")){print("开始执行lists代码:"+p.lists);try{var input=MY_URL;var play_url="";eval(p.lists.replace("js:",""));for(let i in LISTS){if(LISTS.hasOwnProperty(i)){try{LISTS[i]=LISTS[i].map(it=>it.split("$").slice(0,2).join("$"))}catch(e){print(`格式化LISTS发生错误:${e.message}`)}}}vod_play_url=LISTS.map(it=>it.join("#")).join(vod_play_url)}catch(e){print(`js执行lists: 发生错误:${e.message}`)}}else{let list_text=p.list_text||"body&&Text";let list_url=p.list_url||"a&&href";let list_url_prefix=p.list_url_prefix||"";let is_tab_js=p.tabs.trim().startsWith("js:");for(let i=0;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 tabName=tab_ext?_pdfh(html,tab_ext):tab_name;console.log(tabName);let new_vod_list=[];let tt1=(new Date).getTime();if(typeof pdfl==="function"){new_vod_list=pdfl(html,p1,list_text,list_url,MY_URL);if(list_url_prefix){new_vod_list=new_vod_list.map(it=>it.split("$")[0]+"$"+list_url_prefix+it.split("$").slice(1).join("$"))}}else{let vodList=[];try{vodList=_pdfa(html,p1);console.log("len(vodList):"+vodList.length)}catch(e){}for(let i=0;i0){new_vod_list=forceOrder(new_vod_list,"",x=>x.split("$")[0]);console.log(`drpy影响性能代码共计列表数循环次数:${new_vod_list.length},耗时:${(new Date).getTime()-tt1}毫秒`)}let vlist=new_vod_list.join("#");vod_tab_list.push(vlist)}vod_play_url=vod_tab_list.join(vod_play_url)}}vod.vod_play_url=vod_play_url}if(rule.图片替换&&rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];vod.vod_pic=vod.vod_pic.replace(replace_from,replace_to)}if(rule.图片来源&&vod.vod_pic&&vod.vod_pic.startsWith("http")){vod.vod_pic=vod.vod_pic+rule.图片来源}if(!vod.vod_id||vod_id.includes("$")&&vod.vod_id!==vod_id){vod.vod_id=vod_id}let t2=(new Date).getTime();console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);try{vod=vodDeal(vod)}catch(e){console.log(`vodDeal发生错误:${e.message}`)}return JSON.stringify({list:[vod]})}function get_tab_index(vod){let obj={};vod.vod_play_from.split("$$$").forEach((it,index)=>{obj[it]=index});return obj}function vodDeal(vod){let vod_play_from=vod.vod_play_from.split("$$$");let vod_play_url=vod.vod_play_url.split("$$$");let tab_removed_list=vod_play_from;let tab_ordered_list=vod_play_from;let tab_renamed_list=vod_play_from;let tab_list=vod_play_from;let play_ordered_list=vod_play_url;if(rule.tab_remove&&rule.tab_remove.length>0||rule.tab_order&&rule.tab_order.length>0){let tab_index_dict=get_tab_index(vod);if(rule.tab_remove&&rule.tab_remove.length>0){tab_removed_list=vod_play_from.filter(it=>!rule.tab_remove.includes(it));tab_list=tab_removed_list}if(rule.tab_order&&rule.tab_order.length>0){let tab_order=rule.tab_order;tab_ordered_list=tab_removed_list.sort((a,b)=>{return(tab_order.indexOf(a)===-1?9999:tab_order.indexOf(a))-(tab_order.indexOf(b)===-1?9999:tab_order.indexOf(b))});tab_list=tab_ordered_list}play_ordered_list=tab_list.map(it=>vod_play_url[tab_index_dict[it]])}if(rule.tab_rename&&typeof rule.tab_rename==="object"&Object.keys(rule.tab_rename).length>0){tab_renamed_list=tab_list.map(it=>rule.tab_rename[it]||it);tab_list=tab_renamed_list}vod.vod_play_from=tab_list.join("$$$");vod.vod_play_url=play_ordered_list.join("$$$");return vod}function tellIsJx(url){try{let is_vip=!/\.(m3u8|mp4|m4a)$/.test(url.split("?")[0])&&是否正版(url);return is_vip?1:0}catch(e){return 1}}function playParse(playObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));MY_URL=playObj.url;var MY_FLAG=playObj.flag;if(!/http/.test(MY_URL)){try{MY_URL=base64Decode(MY_URL)}catch(e){}}MY_URL=decodeURIComponent(MY_URL);var input=MY_URL;var flag=MY_FLAG;let common_play={parse:SPECIAL_URL.test(input)||/^(push:)/.test(input)?0:1,url:input,flag:flag,jx:tellIsJx(input)};let lazy_play;if(!rule.play_parse||!rule.lazy){lazy_play=common_play}else if(rule.play_parse&&rule.lazy&&typeof rule.lazy==="string"){try{let lazy_code=rule.lazy.trim();if(lazy_code.startsWith("js:")){lazy_code=lazy_code.replace("js:","").trim()}print("开始执行js免嗅=>"+lazy_code);eval(lazy_code);lazy_play=typeof input==="object"?input:{parse:SPECIAL_URL.test(input)||/^(push:)/.test(input)?0:1,jx:tellIsJx(input),url:input}}catch(e){print(`js免嗅错误:${e.message}`);lazy_play=common_play}}else{lazy_play=common_play}if(Array.isArray(rule.play_json)&&rule.play_json.length>0){let web_url=lazy_play.url;for(let pjson of rule.play_json){if(pjson.re&&(pjson.re==="*"||web_url.match(new RegExp(pjson.re)))){if(pjson.json&&typeof pjson.json==="object"){let base_json=pjson.json;lazy_play=Object.assign(lazy_play,base_json);break}}}}else if(rule.play_json&&!Array.isArray(rule.play_json)){let base_json={jx:1,parse:1};lazy_play=Object.assign(lazy_play,base_json)}else if(!rule.play_json){let base_json={jx:0,parse:1};lazy_play=Object.assign(lazy_play,base_json)}console.log(JSON.stringify(lazy_play));return JSON.stringify(lazy_play)}function proxyParse(proxyObj){var input=proxyObj.params;if(proxyObj.proxy_rule){log("准备执行本地代理规则:\n"+proxyObj.proxy_rule);try{eval(proxyObj.proxy_rule);if(input&&input!==proxyObj.params&&Array.isArray(input)&&input.length>=3){return input}else{return[404,"text/plain","Not Found"]}}catch(e){return[500,"text/plain","代理规则错误:"+e.message]}}else{return[404,"text/plain","Not Found"]}}function isVideoParse(isVideoObj){var input=isVideoObj.url;if(!isVideoObj.t){let re_matcher=new RegExp(isVideoObj.isVideo,"i");return re_matcher.test(input)}else{try{eval(isVideoObj.isVideo);if(typeof input==="boolean"){return input}else{return false}}catch(e){log(`执行嗅探规则发生错误:${e.message}`);return false}}}function getOriginalJs(js_code){let current_match=/var rule|[\u4E00-\u9FA5]+|function|let |var |const |\(|\)|"|'/;if(current_match.test(js_code)){return js_code}let rsa_private_key="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqin/jUpqM6+fgYP/oMqj9zcdHMM0mEZXLeTyixIJWP53lzJV2N2E3OP6BBpUmq2O1a9aLnTIbADBaTulTNiOnVGoNG58umBnupnbmmF8iARbDp2mTzdMMeEgLdrfXS6Y3VvazKYALP8EhEQykQVarexR78vRq7ltY3quXx7cgI0ROfZz5Sw3UOLQJ+VoWmwIxu9AMEZLVzFDQN93hzuzs3tNyHK6xspBGB7zGbwCg+TKi0JeqPDrXxYUpAz1cQ/MO+Da0WgvkXnvrry8NQROHejdLVOAslgr6vYthH9bKbsGyNY3H+P12kcxo9RAcVveONnZbcMyxjtF5dWblaernAgMBAAECggEAGdEHlSEPFmAr5PKqKrtoi6tYDHXdyHKHC5tZy4YV+Pp+a6gxxAiUJejx1hRqBcWSPYeKne35BM9dgn5JofgjI5SKzVsuGL6bxl3ayAOu+xXRHWM9f0t8NHoM5fdd0zC3g88dX3fb01geY2QSVtcxSJpEOpNH3twgZe6naT2pgiq1S4okpkpldJPo5GYWGKMCHSLnKGyhwS76gF8bTPLoay9Jxk70uv6BDUMlA4ICENjmsYtd3oirWwLwYMEJbSFMlyJvB7hjOjR/4RpT4FPnlSsIpuRtkCYXD4jdhxGlvpXREw97UF2wwnEUnfgiZJ2FT/MWmvGGoaV/CfboLsLZuQKBgQDTNZdJrs8dbijynHZuuRwvXvwC03GDpEJO6c1tbZ1s9wjRyOZjBbQFRjDgFeWs9/T1aNBLUrgsQL9c9nzgUziXjr1Nmu52I0Mwxi13Km/q3mT+aQfdgNdu6ojsI5apQQHnN/9yMhF6sNHg63YOpH+b+1bGRCtr1XubuLlumKKscwKBgQDOtQ2lQjMtwsqJmyiyRLiUOChtvQ5XI7B2mhKCGi8kZ+WEAbNQcmThPesVzW+puER6D4Ar4hgsh9gCeuTaOzbRfZ+RLn3Aksu2WJEzfs6UrGvm6DU1INn0z/tPYRAwPX7sxoZZGxqML/z+/yQdf2DREoPdClcDa2Lmf1KpHdB+vQKBgBXFCVHz7a8n4pqXG/HvrIMJdEpKRwH9lUQS/zSPPtGzaLpOzchZFyQQBwuh1imM6Te+VPHeldMh3VeUpGxux39/m+160adlnRBS7O7CdgSsZZZ/dusS06HAFNraFDZf1/VgJTk9BeYygX+AZYu+0tReBKSs9BjKSVJUqPBIVUQXAoGBAJcZ7J6oVMcXxHxwqoAeEhtvLcaCU9BJK36XQ/5M67ceJ72mjJC6/plUbNukMAMNyyi62gO6I9exearecRpB/OGIhjNXm99Ar59dAM9228X8gGfryLFMkWcO/fNZzb6lxXmJ6b2LPY3KqpMwqRLTAU/zy+ax30eFoWdDHYa4X6e1AoGAfa8asVGOJ8GL9dlWufEeFkDEDKO9ww5GdnpN+wqLwePWqeJhWCHad7bge6SnlylJp5aZXl1+YaBTtOskC4Whq9TP2J+dNIgxsaF5EFZQJr8Xv+lY9lu0CruYOh9nTNF9x3nubxJgaSid/7yRPfAGnsJRiknB5bsrCvgsFQFjJVs=";let decode_content="";function aes_decrypt(data){let key=CryptoJS.enc.Hex.parse("686A64686E780A0A0A0A0A0A0A0A0A0A");let iv=CryptoJS.enc.Hex.parse("647A797964730A0A0A0A0A0A0A0A0A0A");let encrypted=CryptoJS.AES.decrypt({ciphertext:CryptoJS.enc.Base64.parse(data)},key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);return encrypted}let error_log=false;function logger(text){if(error_log){log(text)}}let decode_funcs=[text=>{try{return ungzip(text)}catch(e){logger("非gzip加密");return""}},text=>{try{return base64Decode(text)}catch(e){logger("非b64加密");return""}},text=>{try{return aes_decrypt(text)}catch(e){logger("非aes加密");return""}},text=>{try{return RSA.decode(text,rsa_private_key,null)}catch(e){logger("非rsa加密");return""}}];let func_index=0;while(!current_match.test(decode_content)){decode_content=decode_funcs[func_index](js_code);func_index++;if(func_index>=decode_funcs.length){break}}return decode_content}function runMain(main_func_code,arg){let mainFunc=function(){return""};try{eval(main_func_code+"\nmainFunc=main;");return mainFunc(arg)}catch(e){log(`执行main_funct发生了错误:${e.message}`);return""}}function init(ext){console.log("init");rule={};rule_fetch_params={};fetch_params=null;try{let muban=模板.getMubans();if(typeof ext=="object"){rule=ext}else if(typeof ext=="string"){if(ext.startsWith("http")||ext.startsWith("file://")){let query=getQuery(ext);let js=request(ext,{method:"GET"});if(js){js=getOriginalJs(js);eval("(function(){"+js.replace("var rule","rule")+"})()")}if(query.type==="url"&&query.params){rule.params=urljoin(ext,query.params)}else if(query.params){rule.params=query.params}}else{ext=getOriginalJs(ext);eval("(function(){"+ext.replace("var rule","rule")+"})()")}}else{console.log(`规则加载失败,不支持的规则类型:${typeof ext}`);return}rule.host=(rule.host||"").rstrip("/");HOST=rule.host;if(rule.hostJs){console.log(`检测到hostJs,准备执行...`);try{eval(rule.hostJs);rule.host=HOST.rstrip("/")}catch(e){console.log(`执行${rule.hostJs}获取host发生错误:${e.message}`)}}if(rule["模板"]==="自动"){try{let host_headers=rule["headers"]||{};let host_html=getCode(HOST,{headers:host_headers});let match_muban="";let muban_keys=Object.keys(muban).filter(it=>!/默认|短视2|采集1/.test(it));for(let muban_key of muban_keys){try{let host_data=JSON.parse(home({},host_html,muban[muban_key].class_parse));if(host_data.class&&host_data.class.length>0){match_muban=muban_key;console.log(`自动匹配模板:【${muban_key}】`);break}}catch(e){console.log(`自动匹配模板:【${muban_key}】错误:${e.message}`)}}if(match_muban){muban["自动"]=muban[match_muban];if(rule["模板修改"]&&rule["模板修改"].startsWith("js:")){eval(rule["模板修改"].replace("js:","").trim())}}else{delete rule["模板"]}}catch(e){delete rule["模板"]}}if(rule.模板&&muban.hasOwnProperty(rule.模板)){print("继承模板:"+rule.模板);rule=Object.assign(muban[rule.模板],rule)}let rule_cate_excludes=(rule.cate_exclude||"").split("|").filter(it=>it.trim());let rule_tab_excludes=(rule.tab_exclude||"").split("|").filter(it=>it.trim());rule_cate_excludes=rule_cate_excludes.concat(CATE_EXCLUDE.split("|").filter(it=>it.trim()));rule_tab_excludes=rule_tab_excludes.concat(TAB_EXCLUDE.split("|").filter(it=>it.trim()));rule.cate_exclude=rule_cate_excludes.join("|");rule.tab_exclude=rule_tab_excludes.join("|");rule.类型=rule.类型||"影视";rule.url=rule.url||"";rule.double=rule.double||false;rule.homeUrl=rule.homeUrl||"";rule.detailUrl=rule.detailUrl||"";rule.searchUrl=rule.searchUrl||"";rule.homeUrl=rule.host&&rule.homeUrl?urljoin(rule.host,rule.homeUrl):rule.homeUrl||rule.host;rule.homeUrl=cheerio.jinja2(rule.homeUrl,{rule:rule});rule.detailUrl=rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;rule.二级访问前=rule.二级访问前||"";if(rule.url.includes("[")&&rule.url.includes("]")){let u1=rule.url.split("[")[0];let u2=rule.url.split("[")[1].split("]")[0];rule.url=rule.host&&rule.url?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.url}else{rule.url=rule.host&&rule.url?urljoin(rule.host,rule.url):rule.url}if(rule.searchUrl.includes("[")&&rule.searchUrl.includes("]")&&!rule.searchUrl.includes("#")){let u1=rule.searchUrl.split("[")[0];let u2=rule.searchUrl.split("[")[1].split("]")[0];rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.searchUrl}else{rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,rule.searchUrl):rule.searchUrl}rule.timeout=rule.timeout||5e3;rule.encoding=rule.编码||rule.encoding||"utf-8";rule.search_encoding=rule.搜索编码||rule.search_encoding||"";rule.图片来源=rule.图片来源||"";rule.图片替换=rule.图片替换||"";rule.play_json=rule.hasOwnProperty("play_json")?rule.play_json:[];rule.pagecount=rule.hasOwnProperty("pagecount")?rule.pagecount:{};rule.proxy_rule=rule.hasOwnProperty("proxy_rule")?rule.proxy_rule:"";if(!rule.hasOwnProperty("sniffer")){rule.sniffer=false}rule.sniffer=rule.hasOwnProperty("sniffer")?rule.sniffer:"";rule.sniffer=!!(rule.sniffer&&rule.sniffer!=="0"&&rule.sniffer!=="false");rule.isVideo=rule.hasOwnProperty("isVideo")?rule.isVideo:"";if(rule.sniffer&&!rule.isVideo){rule.isVideo="http((?!http).){12,}?\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)\\?.*|http((?!http).){12,}\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)|http((?!http).)*?video/tos*|http((?!http).)*?obj/tos*"}rule.tab_remove=rule.hasOwnProperty("tab_remove")?rule.tab_remove:[];rule.tab_order=rule.hasOwnProperty("tab_order")?rule.tab_order:[];rule.tab_rename=rule.hasOwnProperty("tab_rename")?rule.tab_rename:{};if(rule.headers&&typeof rule.headers==="object"){try{let header_keys=Object.keys(rule.headers);for(let k of header_keys){if(k.toLowerCase()==="user-agent"){let v=rule.headers[k];console.log(v);if(["MOBILE_UA","PC_UA","UC_UA","IOS_UA","UA"].includes(v)){rule.headers[k]=eval(v)}}else if(k.toLowerCase()==="cookie"){let v=rule.headers[k];if(v&&v.startsWith("http")){console.log(v);try{v=fetch(v);console.log(v);rule.headers[k]=v}catch(e){console.log(`从${v}获取cookie发生错误:${e.message}`)}}}}}catch(e){console.log(`处理headers发生错误:${e.message}`)}}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,home_html,class_parse){console.log("home");home_html=home_html||"";class_parse=class_parse||"";if(typeof rule.filter==="string"&&rule.filter.trim().length>0){try{let filter_json=ungzip(rule.filter.trim());rule.filter=JSON.parse(filter_json)}catch(e){rule.filter={}}}let homeObj={filter:rule.filter||false,MY_URL:rule.homeUrl,class_name:rule.class_name||"",class_url:rule.class_url||"",class_parse:class_parse||rule.class_parse||"",cate_exclude:rule.cate_exclude,home_html:home_html};return homeParse(homeObj)}function homeVod(params){console.log("homeVod");let homeVodObj={"推荐":rule.推荐,double:rule.double,homeUrl:rule.homeUrl,detailUrl:rule.detailUrl};return homeVodParse(homeVodObj)}function category(tid,pg,filter,extend){let cateObj={url:rule.url,"一级":rule.一级,tid:tid,pg:parseInt(pg),filter:filter,extend:extend};return categoryParse(cateObj)}function detail(vod_url){let orId=vod_url;let fyclass="";log("orId:"+orId);if(vod_url.indexOf("$")>-1){let tmp=vod_url.split("$");fyclass=tmp[0];vod_url=tmp[1]}let detailUrl=vod_url.split("@@")[0];let url;if(!detailUrl.startsWith("http")&&!detailUrl.includes("/")){url=rule.detailUrl.replaceAll("fyid",detailUrl).replaceAll("fyclass",fyclass)}else if(detailUrl.includes("/")){url=urljoin(rule.homeUrl,detailUrl)}else{url=detailUrl}let detailObj={orId:orId,url:url,"二级":rule.二级,"二级访问前":rule.二级访问前,detailUrl:detailUrl,fyclass:fyclass,tab_exclude:rule.tab_exclude};return detailParse(detailObj)}function play(flag,id,flags){let playObj={url:id,flag:flag,flags:flags};return playParse(playObj)}function search(wd,quick,pg){if(rule.search_encoding){if(rule.search_encoding.toLowerCase()!=="utf-8"){wd=encodeStr(wd,rule.search_encoding)}}else if(rule.encoding&&rule.encoding.toLowerCase()!=="utf-8"){wd=encodeStr(wd,rule.encoding)}let searchObj={searchUrl:rule.searchUrl,"搜索":rule.搜索,wd:wd,pg:pg||1,quick:quick};return searchParse(searchObj)}function proxy(params){if(rule.proxy_rule&&rule.proxy_rule.trim()){rule.proxy_rule=rule.proxy_rule.trim()}if(rule.proxy_rule.startsWith("js:")){rule.proxy_rule=rule.proxy_rule.replace("js:","")}let proxyObj={params:params,proxy_rule:rule.proxy_rule};return proxyParse(proxyObj)}function sniffer(){let enable_sniffer=rule.sniffer||false;if(enable_sniffer){log("开始执行辅助嗅探代理规则...")}return enable_sniffer}function isVideo(url){let t=0;let is_video;if(rule.isVideo&&rule.isVideo.trim()){is_video=rule.isVideo.trim()}if(is_video.startsWith("js:")){is_video=is_video.replace("js:","");t=1}let isVideoObj={url:url,isVideo:is_video,t:t};let result=isVideoParse(isVideoObj);if(result){log("成功执行辅助嗅探规则并检测到视频地址:\n"+rule.isVideo)}return result}function getRule(key){return key?rule[key]||"":rule}function DRPY(){return{runMain:runMain,getRule:getRule,init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,proxy:proxy,sniffer:sniffer,isVideo:isVideo,fixAdM3u8Ai:fixAdM3u8Ai}}export default{runMain:runMain,getRule:getRule,init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,proxy:proxy,sniffer:sniffer,isVideo:isVideo,fixAdM3u8Ai:fixAdM3u8Ai,DRPY:DRPY}; \ No newline at end of file diff --git a/drpy_t3/drpy_libs/es6py.js b/drpy_t3/drpy_libs/es6py.js new file mode 100644 index 0000000..4f32827 --- /dev/null +++ b/drpy_t3/drpy_libs/es6py.js @@ -0,0 +1,256 @@ +if (typeof Object.assign != 'function') { + Object.assign = function () { + let target = arguments[0]; + for (let i = 1; i < arguments.length; i++) { + let source = arguments[i]; + for (let key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + return target; + }; +} + if (!String.prototype.includes) { + String.prototype.includes = function (search, start) { + if (typeof start !== 'number') { + start = 0; + } + + if (start + search.length > this.length) { + return false; + } else { + return this.indexOf(search, start) !== -1; + } + }; +} + +if (!Array.prototype.includes) { +Object.defineProperty(Array.prototype, 'includes', { + value: function (searchElement, fromIndex) { + + if (this == null) {//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 = []; + // console.log(JSON.stringify(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); +} +// 千万不要用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 ''; + } +} + +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, '+'); +} +globalThis.VODS = [];// 一级或者搜索需要的数据列表 +globalThis.VOD = {};// 二级的单个数据 +globalThis.encodeUrl = urlencode; +globalThis.urlencode = urlencode; +globalThis.是否正版 = 是否正版; +globalThis.urlDeal = urlDeal; +globalThis.setResult = setResult; +globalThis.setResult2 = setResult2; +globalThis.setHomeResult = setHomeResult; +globalThis.maoss = maoss; +// globalThis.urljoin2 = joinUrl; + +// export default { +// 是否正版:是否正版, +// urlDeal:urlDeal, +// setResult:setResult, +// setResult2:setResult2, +// setHomeResult:setHomeResult, +// maoss:maoss, +// urlencode:urlencode +// } \ No newline at end of file diff --git a/drpy_t3/drpy_libs/exRegExp.js b/drpy_t3/drpy_libs/exRegExp.js new file mode 100644 index 0000000..2b9a210 --- /dev/null +++ b/drpy_t3/drpy_libs/exRegExp.js @@ -0,0 +1,440 @@ +/** + * 字符串分段处理 + * @param {String} code 处理字符串 + * @param {Array} options 分段数组 + * @param {Array} maps 分段映射函数 + * @param {Boolean} all 是否完全映射 + * @returns {Array} 映射结果 + */ +function tsCode(code, options, maps, all) { + let start = 0, res = []; + if (maps) { + if (typeof maps === 'function') { + options.forEach((part, index) => { + res.push(maps(code.slice(start, part + start))); + start += part; + }); + } else { + options.forEach((part, index) => { + if (typeof maps[index] === 'function') { + res.push(maps[index](code.slice(start, part + start))); + } else if (maps[index] !== undefined) { + if (maps[index] === true) res.push(code.slice(start, part + start)); + else res.push(maps[index]); + } else if (all) res.push(code.slice(start, part + start)); + start += part; + }); + }; + return res + } else { + options.forEach(part => { + res.push(code.slice(start, part + start)); + start += part; + }); + return res + } +} + +function range(end, start = 0, reverse) { + if (reverse) { + const arr = []; + for (let i = end; i >= start; i--) { + arr.push(i); + }; + return arr; + } else { + const arr = []; + for (let i = start; i <= end; i++) { + arr.push(i); + }; + return arr; + } +} + +/** + * 正则函数调用及函数结果插入递归替换 + * [[mark=func:regExp]] //正则函数调用(标记与函数不同名) + * [[func:regExp]] //正则函数调用(标记与函数同名) + * [[mark|func]] //按标记插入结果 + * @param {RegExp} reg + */ +function splitRegExp({ oldRes, source, flags, split, res, fns, str, old, lastIndex, oldReg, oldLeft, oldRight, inner, oldSource }) { + function next() {//回溯处理 + const oldData = old[old.length - 1]; + if (oldData) { + const lefts = res[oldData.oldLeft]; + if (Array.isArray(lefts)) { + return splitRegExp({ oldRes, flags, split, fns, str, old, ...oldData }); + } else { + return splitRegExp({ oldRes, flags, split, fns, str, old, ...old.pop() }); + } + } + }; + + if (oldReg) {//回溯处理 + let oldNum, leftRes; + if (Array.isArray(res[oldLeft])) { + res[oldLeft].shift(); + leftRes = oldRes[oldLeft] = res[oldLeft][0]; + if (res[oldLeft].reg[0]) { + res[oldLeft].reg.shift(); + inner = res[oldLeft].reg[0]; + }; + if (leftRes.length === 1) { + oldNum = 0; + } + } else { + oldNum = 1; + } + + let reg = inner ? ( + source = tsCode(oldSource, [lastIndex, res[oldLeft].len, Infinity], { + 1: `(?:${inner})` //从结果池中以标记为键读取插入到原始正则之中 + }, true).join(''), + new RegExp(inner, flags) + ) : oldReg, + mats = reg.exec(str); + + switch (oldNum) { + case 0: + old[old.length - 1] = { lastIndex, oldSource, source, oldReg: reg, oldLeft, oldRight, res: { ...res, [oldLeft]: leftRes }, inner }; + break; + case 1: + res[oldLeft] = fns[oldRight](mats, reg); + old.push({ lastIndex, oldSource, source, oldReg: reg, oldLeft, oldRight, res: { ...res } }); + break; + }; + + return splitRegExp({ oldRes, source, flags, split, res, fns, str, old }); + + } else { + const mat = split.exec(source);//匹配函数调用点或函数结果插入点 + if (mat) { + let lastIndex = mat.index, so = mat[1], index = so.indexOf(':'); + if (index !== -1) {//函数调用点 + let [first, last] = tsCode(so, [index, 1, Infinity], { + 0: true, + 2: true + }), + reg = new RegExp(last, flags), + mats = reg.exec(str); + if (mats) {//匹配成功递归处理 + const index2 = first.indexOf('='), + [left, right] = index2 === -1 ? [first, first] : tsCode(first, [index2, 1, Infinity], { + 0: true, + 2: true + }), fnRes = fns[right](mats, reg); + res[left] = fnRes; + if (Array.isArray(fnRes)) { + fnRes.len = mat[0].length; + if (fnRes.reg[0]) last = fnRes.reg[0]; + oldRes[left] = fnRes[0]; + }; + const oldSource = source; + source = tsCode(source, [lastIndex, mat[0].length, Infinity], { + 1: `(?:${last})` //从结果池中以标记为键读取插入到原始正则之中 + }, true).join(''); + old.push({ lastIndex, oldSource, source, oldReg: reg, oldLeft: left, oldRight: right, res: { ...res } }); + return splitRegExp({ oldRes, source, flags, split, res, fns, str, old }); + } else return next(); + } else {//函数结果插入点 + const [lenStr, name] = mat; + let inner; + if (res[name] === undefined) { + try { + inner = fns[name](); + if (inner === undefined) return next(); + } catch (e) { + return //函数中主动抛出错误,触发匹配失败返回 + } + } else if (Array.isArray(res[name])) { + inner = oldRes[name]; + } else { + inner = res[name] + }; + source = tsCode(source, [lastIndex, lenStr.length, Infinity], { + 1: inner //从结果池中以标记为键读取插入到原始正则之中 + }, true).join(''); + return splitRegExp({ oldRes, source, flags, split, res, fns, str, old }); + } + } else { + return { source, next } + }; + + }; +}; + +/** + * 增强正则工具对象生成 + * @param {RegExp} reg 增强型原始正则 + * @param {Function} fns 插入正则的函数集 + * @param {String|Function} str 待匹配字符串,或生成下一个正则时回调执行函数 + * @param {Function} next 生成下一个正则时回调执行函数 + * @returns {{regExp:RegExp,next:Function,exec:Function,test:Function,match:Function,matchAll:Function,replace:Function,search:Function,split:Function}} 正则工具对象 + */ +function exRegExp({ reg, fns, str, next }) { + const oldSplit = /\[\[(.*?[^\\])\]\]/g; + let regExp, notFirst, source, flags, newFlags, nextCall, res = {}, oldRes = {}, old = []; + if (reg) { + source = reg.source.replace(/\\\[(?=\[)/g, '(?:\\[)'); + if (!(newFlags = reg.flags.replace('y', 'g')).includes('g')) { + newFlags += 'g'; + }; + if (str) regExp = returnRegExp(oldRes, source, oldSplit, newFlags, fns, str, res, old); + }; + + function matRegExp(mat) { + if (mat) { + const { source, next: callback } = mat, + regExp = new RegExp(source, flags); + if (next) { + nextCall = () => { + const genReg = matRegExp(callback()); + next(genReg); + return genReg; + }; + } else { + nextCall = () => matRegExp(callback()); + } + return regExp; + } else { + //正则表达式出错 + throw { reg, flags, fns, str } + }; + }; + function returnRegExp(oldRes, source, split, newFlags, fns, str, res, old, inner) { + return matRegExp(splitRegExp({ + source, + split, + flags: newFlags, + fns, + str, + res, + old, + inner, + oldRes + })); + }; + + function preExec() { + if (notFirst) { + try { + regExp = nextCall(); + } catch (e) { + return true + }; + } else { + notFirst = true; + } + }; + function exec() { + if (preExec()) return null; + const exec = regExp.exec(str); + if (exec) { + return exec + } else { + try { + regExp = nextCall(); + return exec(); + } catch (e) { + console.log(e); + return null + } + } + }; + + function test() { + const testRes = regExp.test(str); + if (testRes) { + return true + } else { + try { + regExp = nextCall(); + return test(); + } catch (e) { + console.log(e); + return false + } + } + }; + + function match() { + const matchRes = str.match(regExp); + if (matchRes) { + return matchRes + } else { + try { + regExp = nextCall(); + return match(); + } catch (e) { + console.log(e); + return null + } + } + }; + + function matchAll() { + const matchAllRes = str.matchAll(regExp); + if (matchAllRes) { + return matchAllRes + } else { + try { + regExp = nextCall(); + return matchAll(); + } catch (e) { + console.log(e); + return null + } + } + }; + + function replace(callback, change) { + const replaceRes = str.replace(regExp, callback); + if (change) { + if (replaceRes !== str) { + return replaceRes + } else { + try { + regExp = nextCall(); + return replace(str); + } catch (e) { + console.log(e); + return str + } + }; + } else { + return replaceRes + }; + }; + + function search() { + const searchRes = str.search(regExp); + if (searchRes !== -1) { + return searchRes + } else { + try { + regExp = nextCall(); + return search(str); + } catch (e) { + console.log(e); + return -1 + } + }; + }; + + function split(limit, change) { + const splitRes = str.split(regExp, limit); + if (change) { + if (splitRes.length !== 1) { + return splitRes + } else { + try { + regExp = nextCall(); + return split(str); + } catch (e) { + console.log(e); + return [str] + } + }; + } else { + return splitRes + }; + }; + + return { + //当前生成的正则 + get regExp() { return regExp }, + set regExp(nv) { + reg = nv; + notFirst = false; + res = {}; + oldRes = {}; + old = []; + flags = reg.flags; + nextCall = undefined; + source = reg.source.replace(/\\\[(?=\[)/g, '(?:\\[)'); + if (!(newFlags = flags.replace('y', 'g')).includes('g')) { + newFlags += 'g'; + }; + if (str) regExp = returnRegExp(oldRes, source, oldSplit, newFlags, fns, str, res, old); + }, + //当前匹配的字符串 + get str() { + return str + }, + set str(newStr) { + str = newStr; + notFirst = false; + res = {}; + oldRes = {}; + old = []; + nextCall = undefined; + if (reg) regExp = returnRegExp(oldRes, source, oldSplit, newFlags, fns, str, res, old); + }, + next() {//生成下一个有效正则,全部无效时报错 + return nextCall() + }, + + exec, /** + exec() => regExp.exec(str) + 无需主动执行next,当上个正则耗尽后,再调用exec则主动生成下一个有效正则 + */ + + test,/** + test() => regExp.test(str) + 匹配失败时主动执行next生成下一个有效正则 + 可主动执行next,主动生成下一个有效正则作为匹配正则 + */ + + match,/** + * match() => str.match(regExp) + 匹配失败时主动执行next生成下一个有效正则 + 可主动执行next,主动生成下一个有效正则作为匹配正则 + */ + + matchAll, /** + matchAll() => str.matchAll(regExp) + 匹配失败时主动执行next生成下一个有效正则 + 可主动执行next,主动生成下一个有效正则作为匹配正则 + */ + + replace, /** + //replace(callback, change) => str.replace(regExp,callback); + change为true时,如果替换后的值与替换前一样,则自动调用next生成下一个有效正则继续执行replace(callback, change) + change为false时,只要生成的正则有效则只执行一次replace + 可主动执行next,主动生成下一个有效正则作为匹配正则 + */ + + search, /** + search() => str.search(regExp) + 匹配失败时主动执行next生成下一个有效正则 + 可主动执行next,主动生成下一个有效正则作为匹配正则 + */ + + split /** + split(limit, change) => str.split(regExp,limit) + change为true时,如果切割后数组长度为1,则自动调用next生成下一个有效正则继续执行split(limit, change) + change为false时,只要生成的正则有效则只执行一次split + 可主动执行next,主动生成下一个有效正则作为匹配正则 + */ + } +}; + +//示例 +const obj = exRegExp({ + reg: /ersd[[reg:(ka)+]].*ef(fa){[[reg]]}.*sas/g, + fns: { + reg([$0, $1]) { + const range0 = range($0.length / $1.length, 1, true); + range0.reg = range0.map(it => new Array(it).fill($1).join('')); + return range0 + } + }, + str: 'bvgvgersdkakakaeffafaeffafafasaskuyfu' +}); + +console.log('match:', obj.match()); //match1: ['ersdkakakaeffafaeffafafasas', 'fa', index: 5, input: 'bvgvgersdkakakaeffafaeffafafasaskuyfu', groups: undefined] + +obj.regExp = /[[reg:(ka)+]]ef(fa){[[reg]]}/g; + +console.log('match2:', obj.match()); //match2: ['kakaeffafa'] \ No newline at end of file diff --git a/drpy_t3/drpy_libs/gbk.js b/drpy_t3/drpy_libs/gbk.js new file mode 100644 index 0000000..796d53a --- /dev/null +++ b/drpy_t3/drpy_libs/gbk.js @@ -0,0 +1,68 @@ +/*** + * gbk编码解码函数 + * strTool = gbkTool() strTool.encode(key) + * @returns {{encode: (function(*): *), decode: (function(*): *)}} + */ +export function gbkTool(){ + var data=function(zipData){ + var re=zipData + .replace(/#(\d+)\$/g,function(a,b){ + return Array(+b+3).join('#'); + }) + .replace(/#/g,'####') + .replace(/(\w\w):([\w#]+)(?:,|$)/g,function(a,hd,dt){ + return dt.replace(/../g,function(a){ + if(a!='##'){ + return hd+a; + }else{ + return a; + } + }); + }); + return re; + }('4e:020405060f12171f20212326292e2f313335373c40414244464a5155575a5b6263646567686a6b6c6d6e6f727475767778797a7b7c7d7f808182838485878a#909697999c9d9ea3aaafb0b1b4b6b7b8b9bcbdbec8cccfd0d2dadbdce0e2e6e7e9edeeeff1f4f8f9fafcfe,4f:00020304050607080b0c12131415161c1d212328292c2d2e31333537393b3e3f40414244454748494a4b4c525456616266686a6b6d6e7172757778797a7d8081828586878a8c8e909293959698999a9c9e9fa1a2a4abadb0b1b2b3b4b6b7b8b9babbbcbdbec0c1c2c6c7c8c9cbcccdd2d3d4d5d6d9dbe0e2e4e5e7ebecf0f2f4f5f6f7f9fbfcfdff,50:000102030405060708090a#0b0e1011131516171b1d1e20222324272b2f303132333435363738393b3d3f404142444546494a4b4d5051525354565758595b5d5e5f6061626364666768696a6b6d6e6f70717273747578797a7c7d818283848687898a8b8c8e8f909192939495969798999a9b9c9d9e9fa0a1a2a4a6aaabadaeafb0b1b3b4b5b6b7b8b9bcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdced0d1d2d3d4d5d7d8d9dbdcdddedfe0e1e2e3e4e5e8e9eaebeff0f1f2f4f6f7f8f9fafcfdfeff,51:00010203040508#090a0c0d0e0f1011131415161718191a1b1c1d1e1f2022232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e42474a4c4e4f5052535758595b5d5e5f606163646667696a6f727a7e7f838486878a8b8e8f90919394989a9d9e9fa1a3a6a7a8a9aaadaeb4b8b9babebfc1c2c3c5c8cacdced0d2d3d4d5d6d7d8d9dadcdedfe2e3e5e6e7e8e9eaeceef1f2f4f7fe,52:0405090b0c0f101314151c1e1f2122232526272a2c2f313234353c3e4445464748494b4e4f5253555758#595a5b5d5f6062636466686b6c6d6e7071737475767778797a7b7c7e808384858687898a8b8c8d8e8f91929495969798999a9ca4a5a6a7aeafb0b4b5b6b7b8b9babbbcbdc0c1c2c4c5c6c8cacccdcecfd1d3d4d5d7d9dadbdcdddee0e1e2e3e5e6e7e8e9eaebecedeeeff1f2f3f4f5f6f7f8fbfcfd,53:0102030407090a0b0c0e11121314181b1c1e1f2224252728292b2c2d2f3031323334353637383c3d404244464b4c4d505458595b5d65686a6c6d7276797b7c7d7e80818387888a8e8f#90919293949697999b9c9ea0a1a4a7aaabacadafb0b1b2b3b4b5b7b8b9babcbdbec0c3c4c5c6c7cecfd0d2d3d5dadcdddee1e2e7f4fafeff,54:000205070b1418191a1c2224252a303336373a3d3f4142444547494c4d4e4f515a5d5e5f6061636567696a6b6c6d6e6f7074797a7e7f8183858788898a8d919397989c9e9fa0a1a2a5aeb0b2b5b6b7b9babcbec3c5cacbd6d8dbe0e1e2e3e4ebeceff0f1f4f5f6f7f8f9fbfe,55:0002030405080a0b0c0d0e121315161718191a1c1d1e1f212526#28292b2d3234353638393a3b3d40424547484b4c4d4e4f515253545758595a5b5d5e5f60626368696b6f7071727374797a7d7f85868c8d8e9092939596979a9b9ea0a1a2a3a4a5a6a8a9aaabacadaeafb0b2b4b6b8babcbfc0c1c2c3c6c7c8cacbcecfd0d5d7d8d9dadbdee0e2e7e9edeef0f1f4f6f8f9fafbfcff,56:0203040506070a0b0d1011121314151617191a1c1d202122252628292a2b2e2f30333537383a3c3d3e404142434445464748494a4b4f5051525355565a5b5d5e5f6061#636566676d6e6f70727374757778797a7d7e7f80818283848788898a8b8c8d9091929495969798999a9b9c9d9e9fa0a1a2a4a5a6a7a8a9aaabacadaeb0b1b2b3b4b5b6b8b9babbbdbebfc0c1c2c3c4c5c6c7c8c9cbcccdcecfd0d1d2d3d5d6d8d9dce3e5e6e7e8e9eaeceeeff2f3f6f7f8fbfc,57:00010205070b0c0d0e0f101112131415161718191a1b1d1e202122242526272b313234353637383c3d3f414344454648494b52535455565859626365676c6e707172747578797a7d7e7f80#818788898a8d8e8f90919495969798999a9c9d9e9fa5a8aaacafb0b1b3b5b6b7b9babbbcbdbebfc0c1c4c5c6c7c8c9cacccdd0d1d3d6d7dbdcdee1e2e3e5e6e7e8e9eaebeceef0f1f2f3f5f6f7fbfcfeff,58:0103040508090a0c0e0f101213141617181a1b1c1d1f222325262728292b2c2d2e2f31323334363738393a3b3c3d3e3f4041424345464748494a4b4e4f505253555657595a5b5c5d5f6061626364666768696a6d6e6f707172737475767778797a7b7c7d7f82848687888a8b8c#8d8e8f909194959697989b9c9da0a1a2a3a4a5a6a7aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbdbebfc0c2c3c4c6c7c8c9cacbcccdcecfd0d2d3d4d6d7d8d9dadbdcdddedfe0e1e2e3e5e6e7e8e9eaedeff1f2f4f5f7f8fafbfcfdfeff,59:000103050608090a0b0c0e1011121317181b1d1e2021222326282c30323335363b3d3e3f404345464a4c4d505253595b5c5d5e5f616364666768696a6b6c6d6e6f70717275777a7b7c7e7f8085898b8c8e8f90919495989a9b9c9d9fa0a1a2a6#a7acadb0b1b3b4b5b6b7b8babcbdbfc0c1c2c3c4c5c7c8c9cccdcecfd5d6d9dbdedfe0e1e2e4e6e7e9eaebedeeeff0f1f2f3f4f5f6f7f8fafcfdfe,5a:00020a0b0d0e0f101214151617191a1b1d1e2122242627282a2b2c2d2e2f3033353738393a3b3d3e3f414243444547484b4c4d4e4f5051525354565758595b5c5d5e5f60616364656668696b6c6d6e6f7071727378797b7c7d7e808182838485868788898a8b8c8d8e8f9091939495969798999c9d9e9fa0a1a2a3a4a5a6a7a8a9abac#adaeafb0b1b4b6b7b9babbbcbdbfc0c3c4c5c6c7c8cacbcdcecfd0d1d3d5d7d9dadbdddedfe2e4e5e7e8eaecedeeeff0f2f3f4f5f6f7f8f9fafbfcfdfeff,5b:0001020304050607080a0b0c0d0e0f10111213141518191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303133353638393a3b3c3d3e3f4142434445464748494a4b4c4d4e4f52565e606167686b6d6e6f7274767778797b7c7e7f82868a8d8e90919294969fa7a8a9acadaeafb1b2b7babbbcc0c1c3c8c9cacbcdcecf#d1d4d5d6d7d8d9dadbdce0e2e3e6e7e9eaebecedeff1f2f3f4f5f6f7fdfe,5c:0002030507080b0c0d0e10121317191b1e1f2021232628292a2b2d2e2f303233353637434446474c4d5253545657585a5b5c5d5f62646768696a6b6c6d70727374757677787b7c7d7e808384858687898a8b8e8f9293959d9e9fa0a1a4a5a6a7a8aaaeafb0b2b4b6b9babbbcbec0c2c3c5c6c7c8c9cacccdcecfd0d1d3d4d5d6d7d8dadbdcdddedfe0e2e3e7e9ebeceeeff1f2f3f4f5f6f7f8f9fafcfdfeff,5d:00#01040508090a0b0c0d0f10111213151718191a1c1d1f2021222325282a2b2c2f3031323335363738393a3b3c3f4041424344454648494d4e4f5051525354555657595a5c5e5f6061626364656667686a6d6e7071727375767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f9091929394959697989a9b9c9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b8b9babbbcbdbebfc0c1c2c3c4c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d7d8d9dadcdfe0e3e4eaeced#f0f5f6f8f9fafbfcff,5e:000407090a0b0d0e1213171e1f20212223242528292a2b2c2f303233343536393a3e3f404143464748494a4b4d4e4f50515253565758595a5c5d5f60636465666768696a6b6c6d6e6f70717577797e8182838588898c8d8e92989b9da1a2a3a4a8a9aaabacaeafb0b1b2b4babbbcbdbfc0c1c2c3c4c5c6c7c8cbcccdcecfd0d4d5d7d8d9dadcdddedfe0e1e2e3e4e5e6e7e9ebecedeeeff0f1f2f3f5f8f9fbfcfd,5f:050607090c0d0e10121416191a1c1d1e21222324#282b2c2e30323334353637383b3d3e3f4142434445464748494a4b4c4d4e4f5154595a5b5c5e5f60636567686b6e6f72747576787a7d7e7f83868d8e8f919394969a9b9d9e9fa0a2a3a4a5a6a7a9abacafb0b1b2b3b4b6b8b9babbbebfc0c1c2c7c8cacbced3d4d5dadbdcdedfe2e3e5e6e8e9eceff0f2f3f4f6f7f9fafc,60:0708090b0c10111317181a1e1f2223242c2d2e3031323334363738393a3d3e404445464748494a4c4e4f5153545657585b5c5e5f606165666e71727475777e80#8182858687888a8b8e8f909193959798999c9ea1a2a4a5a7a9aaaeb0b3b5b6b7b9babdbebfc0c1c2c3c4c7c8c9cccdcecfd0d2d3d4d6d7d9dbdee1e2e3e4e5eaf1f2f5f7f8fbfcfdfeff,61:02030405070a0b0c1011121314161718191b1c1d1e21222528292a2c2d2e2f303132333435363738393a3b3c3d3e4041424344454647494b4d4f50525354565758595a5b5c5e5f606163646566696a6b6c6d6e6f717273747678797a7b7c7d7e7f808182838485868788898a8c8d8f9091929395#969798999a9b9c9e9fa0a1a2a3a4a5a6aaabadaeafb0b1b2b3b4b5b6b8b9babbbcbdbfc0c1c3c4c5c6c7c9cccdcecfd0d3d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e7e8e9eaebecedeeeff0f1f2f3f4f6f7f8f9fafbfcfdfe,62:00010203040507091314191c1d1e2023262728292b2d2f303132353638393a3b3c424445464a4f50555657595a5c5d5e5f6061626465687172747577787a7b7d818283858687888b8c8d8e8f9094999c9d9ea3a6a7a9aaadaeafb0b2b3b4b6b7b8babec0c1#c3cbcfd1d5dddee0e1e4eaebf0f2f5f8f9fafb,63:00030405060a0b0c0d0f10121314151718191c2627292c2d2e30313334353637383b3c3e3f40414447484a51525354565758595a5b5c5d60646566686a6b6c6f707273747578797c7d7e7f81838485868b8d9193949597999a9b9c9d9e9fa1a4a6abafb1b2b5b6b9bbbdbfc0c1c2c3c5c7c8cacbccd1d3d4d5d7d8d9dadbdcdddfe2e4e5e6e7e8ebeceeeff0f1f3f5f7f9fafbfcfe,64:0304060708090a0d0e111215161718191a1d1f222324#252728292b2e2f3031323335363738393b3c3e404243494b4c4d4e4f505153555657595a5b5c5d5f60616263646566686a6b6c6e6f70717273747576777b7c7d7e7f8081838688898a8b8c8d8e8f90939497989a9b9c9d9fa0a1a2a3a5a6a7a8aaabafb1b2b3b4b6b9bbbdbebfc1c3c4c6c7c8c9cacbcccfd1d3d4d5d6d9dadbdcdddfe0e1e3e5e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,65:01020304050607080a0b0c0d0e0f10111314151617191a1b1c1d1e1f2021#222324262728292a2c2d30313233373a3c3d404142434446474a4b4d4e5052535457585a5c5f606164656768696a6d6e6f7173757678797a7b7c7d7e7f8081828384858688898a8d8e8f92949596989a9d9ea0a2a3a6a8aaacaeb1b2b3b4b5b6b7b8babbbebfc0c2c7c8c9cacdd0d1d3d4d5d8d9dadbdcdddedfe1e3e4eaebf2f3f4f5f8f9fbfcfdfeff,66:0104050708090b0d1011121617181a1b1c1e2122232426292a2b2c2e3032333738393a3b3d3f40424445464748494a4d4e505158#595b5c5d5e6062636567696a6b6c6d7172737578797b7c7d7f808183858688898a8b8d8e8f909293949598999a9b9c9e9fa0a1a2a3a4a5a6a9aaabacadafb0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8dadedfe0e1e2e3e4e5e7e8eaebecedeeeff1f5f6f8fafbfd,67:010203040506070c0e0f1112131618191a1c1e20212223242527292e303233363738393b3c3e3f414445474a4b4d5254555758595a5b5d62636466676b6c6e717476#78797a7b7d8082838586888a8c8d8e8f9192939496999b9fa0a1a4a6a9acaeb1b2b4b9babbbcbdbebfc0c2c5c6c7c8c9cacbcccdced5d6d7dbdfe1e3e4e6e7e8eaebedeef2f5f6f7f8f9fafbfcfe,68:01020304060d1012141518191a1b1c1e1f20222324252627282b2c2d2e2f30313435363a3b3f474b4d4f52565758595a5b5c5d5e5f6a6c6d6e6f707172737578797a7b7c7d7e7f8082848788898a8b8c8d8e90919294959698999a9b9c9d9e9fa0a1a3a4a5a9aaabacaeb1b2b4b6b7b8#b9babbbcbdbebfc1c3c4c5c6c7c8cacccecfd0d1d3d4d6d7d9dbdcdddedfe1e2e4e5e6e7e8e9eaebecedeff2f3f4f6f7f8fbfdfeff,69:00020304060708090a0c0f11131415161718191a1b1c1d1e21222325262728292a2b2c2e2f313233353637383a3b3c3e4041434445464748494a4b4c4d4e4f50515253555658595b5c5f616264656768696a6c6d6f7072737475767a7b7d7e7f8183858a8b8c8e8f909192939697999a9d9e9fa0a1a2a3a4a5a6a9aaacaeafb0b2b3b5b6b8b9babcbd#bebfc0c2c3c4c5c6c7c8c9cbcdcfd1d2d3d5d6d7d8d9dadcdddee1e2e3e4e5e6e7e8e9eaebeceeeff0f1f3f4f5f6f7f8f9fafbfcfe,6a:000102030405060708090b0c0d0e0f10111213141516191a1b1c1d1e20222324252627292b2c2d2e30323334363738393a3b3c3f40414243454648494a4b4c4d4e4f515253545556575a5c5d5e5f60626364666768696a6b6c6d6e6f70727374757677787a7b7d7e7f81828385868788898a8b8c8d8f929394959698999a9b9c9d9e9fa1a2a3a4a5a6#a7a8aaadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,6b:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f252628292a2b2c2d2e2f303133343536383b3c3d3f4041424445484a4b4d4e4f5051525354555657585a5b5c5d5e5f606168696b6c6d6e6f7071727374757677787a7d7e7f808588#8c8e8f909194959798999c9d9e9fa0a2a3a4a5a6a7a8a9abacadaeafb0b1b2b6b8b9babbbcbdbec0c3c4c6c7c8c9caccced0d1d8dadcdddedfe0e2e3e4e5e6e7e8e9ecedeef0f1f2f4f6f7f8fafbfcfeff,6c:000102030408090a0b0c0e12171c1d1e2023252b2c2d31333637393a3b3c3e3f434445484b4c4d4e4f5152535658595a62636566676b6c6d6e6f71737577787a7b7c7f8084878a8b8d8e9192959697989a9c9d9ea0a2a8acafb0b4b5b6b7bac0c1c2c3c6c7c8cbcdcecfd1d2d8#d9dadcdddfe4e6e7e9ecedf2f4f9ff,6d:000203050608090a0d0f101113141516181c1d1f20212223242628292c2d2f30343637383a3f404244494c50555657585b5d5f6162646567686b6c6d707172737576797a7b7d7e7f8081838486878a8b8d8f9092969798999a9ca2a5acadb0b1b3b4b6b7b9babbbcbdbec1c2c3c8c9cacdcecfd0d2d3d4d5d7dadbdcdfe2e3e5e7e8e9eaedeff0f2f4f5f6f8fafdfeff,6e:0001020304060708090b0f12131518191b1c1e1f222627282a2c2e30313335#3637393b3c3d3e3f40414245464748494a4b4c4f5051525557595a5c5d5e606162636465666768696a6c6d6f707172737475767778797a7b7c7d8081828487888a8b8c8d8e91929394959697999a9b9d9ea0a1a3a4a6a8a9abacadaeb0b3b5b8b9bcbebfc0c3c4c5c6c8c9cacccdced0d2d6d8d9dbdcdde3e7eaebecedeeeff0f1f2f3f5f6f7f8fafbfcfdfeff,6f:000103040507080a0b0c0d0e101112161718191a1b1c1d1e1f212223252627282c2e303234353738393a3b3c3d3f404142#43444548494a4c4e4f5051525354555657595a5b5d5f60616364656768696a6b6c6f707173757677797b7d7e7f808182838586878a8b8f909192939495969798999a9b9d9e9fa0a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b7b8babbbcbdbebfc1c3c4c5c6c7c8cacbcccdcecfd0d3d4d5d6d7d8d9dadbdcdddfe2e3e4e5e6e7e8e9eaebecedf0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,70:000102030405060708090a0b0c0d0e0f1012131415161718191c1d1e1f2021222425262728292a#2b2c2d2e2f30313233343637383a3b3c3d3e3f404142434445464748494a4b4d4e505152535455565758595a5b5c5d5f606162636465666768696a6e7172737477797a7b7d818283848687888b8c8d8f90919397989a9b9e9fa0a1a2a3a4a5a6a7a8a9aab0b2b4b5b6babebfc4c5c6c7c9cbcccdcecfd0d1d2d3d4d5d6d7dadcdddee0e1e2e3e5eaeef0f1f2f3f4f5f6f8fafbfcfeff,71:0001020304050607080b0c0d0e0f111214171b1c1d1e1f2021222324252728292a2b2c2d2e323334#353738393a3b3c3d3e3f4041424344464748494b4d4f505152535455565758595a5b5d5f6061626365696a6b6c6d6f707174757677797b7c7e7f8081828385868788898b8c8d8e909192939596979a9b9c9d9ea1a2a3a4a5a6a7a9aaabadaeafb0b1b2b4b6b7b8babbbcbdbebfc0c1c2c4c5c6c7c8c9cacbcccdcfd0d1d2d3d6d7d8d9dadbdcdddedfe1e2e3e4e6e8e9eaebecedeff0f1f2f3f4f5f6f7f8fafbfcfdfeff,72:0001020304050708090a0b0c0d0e0f101112131415161718191a#1b1c1e1f2021222324252627292b2d2e2f3233343a3c3e40414243444546494a4b4e4f505153545557585a5c5e60636465686a6b6c6d707173747677787b7c7d828385868788898c8e9091939495969798999a9b9c9d9ea0a1a2a3a4a5a6a7a8a9aaabaeb1b2b3b5babbbcbdbebfc0c5c6c7c9cacbcccfd1d3d4d5d6d8dadb#95$,30:000102,00b702:c9c7,00a830:0305,2014ff5e20:162618191c1d,30:141508090a0b0c0d0e0f16171011,00:b1d7f7,22:362728110f2a2908371aa52520,231222:992b2e614c483d1d606e6f64651e3534,26:4240,00b020:3233,2103ff0400a4ff:e0e1,203000a7211626:0605,25:cbcfcec7c6a1a0b3b2,203b21:92909193,30:13#95$,21:70717273747576777879#4$,24:88898a8b8c8d8e8f909192939495969798999a9b7475767778797a7b7c7d7e7f808182838485868760616263646566676869##,32:20212223242526272829##,21:606162636465666768696a6b#97$,ff:010203e505060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5de3#95$,30:4142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293#106$a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6#103$,03:9192939495969798999a9b9c9d9e9fa0a1a3a4a5a6a7a8a9#6$b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c3c4c5c6c7c8c9#5$,fe:3536393a3f403d3e41424344##3b3c373831#3334#104$,04:10111213141501161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f#13$30313233343551363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f#11$,02:cacbd9,20:13152535,21:050996979899,22:151f23526667bf,25:505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727381828384858687#88898a8b8c8d8e8f939495bcbde2e3e4e5,2609229530:121d1e#9$,010100e101ce00e0011300e9011b00e8012b00ed01d000ec014d00f301d200f2016b00fa01d400f901:d6d8dadc,00:fcea,0251e7c701:4448,e7c802:61#2$,31:05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829#19$,30:212223242526272829,32a333:8e8f9c9d9ea1c4ced1d2d5,fe30ff:e2e4#,212132:31#,20:10#1$,30:fc9b9cfdfe069d9e,fe:494a4b4c4d4e4f50515254555657595a5b5c5d5e5f6061#626364656668696a6b,e7:e7e8e9eaebecedeeeff0f1f2f3,30:07#11$,25:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b#13$,72:dcdddfe2e3e4e5e6e7eaebf5f6f9fdfeff,73:00020405060708090b0c0d0f1011121418191a1f2023242627282d2f30323335363a3b3c3d404142434445464748#494a4b4c4e4f515354555658595a5b5c5d5e5f6162636465666768696a6b6e7071#92$72737475767778797a7b7c7d7f808182838586888a8c8d8f90929394959798999a9c9d9ea0a1a3a4a5a6a7a8aaacadb1b4b5b6b8b9bcbdbebfc1c3c4c5c6c7#cbccced2d3d4d5d6d7d8dadbdcdddfe1e2e3e4e6e8eaebeceeeff0f1f3f4f5f6f7#92$f8f9fafbfcfdfeff,74:0001020407080b0c0d0e1112131415161718191c1d1e1f2021232427292b2d2f31323738393a3b3d3e3f4042434445464748494a4b4c4d#4e4f505152535456585d606162636465666768696a6b6c6e6f717273747578797a#92$7b7c7d7f8284858688898a8c8d8f9192939495969798999a9b9d9fa0a1a2a3a4a5a6aaabacadaeafb0b1b2b3b4b5b6b7b8b9bbbcbdbebfc0c1c2c3c4c5c6c7#c8c9cacbcccdcecfd0d1d3d4d5d6d7d8d9dadbdddfe1e5e7e8e9eaebecedf0f1f2#92$f3f5f8f9fafbfcfdfe,75:0001020305060708090a0b0c0e1012141516171b1d1e202122232426272a2e3436393c3d3f414243444647494a4d5051525355565758#5d5e5f60616263646768696b6c6d6e6f7071737576777a7b7c7d7e808182848587#92$88898a8c8d8e909395989b9c9ea2a6a7a8a9aaadb6b7babbbfc0c1c6cbcccecfd0d1d3d7d9dadcdddfe0e1e5e9ecedeeeff2f3f5f6f7f8fafbfdfe,76:02040607#08090b0d0e0f11121314161a1c1d1e212327282c2e2f31323637393a3b3d414244#92$45464748494a4b4e4f50515253555758595a5b5d5f6061626465666768696a6c6d6e7071727374757677797a7c7f80818385898a8c8d8f9092949597989a9b#9c9d9e9fa0a1a2a3a5a6a7a8a9aaabacadafb0b3b5b6b7b8b9babbbcbdbec0c1c3,554a963f57c3632854ce550954c076:914c,853c77ee827e788d72319698978d6c285b894ffa630966975cb880fa684880ae660276ce51f9655671ac7ff1888450b2596561ca6fb382ad634c625253ed54277b06516b75a45df462d48dcb9776628a8019575d97387f627238767d67cf767e64464f708d2562dc7a17659173ed642c6273822c9881677f724862:6ecc,4f3474e3534a529e7eca90a65e2e6886699c81807ed168d278c5868c9551508d8c2482de80de53058912526576:c4c7c9cbccd3d5d9dadcdddee0e1e2e3e4e6e7e8e9eaebecedf0f3f5f6f7fafbfdff,77:00020305060a0c0e0f1011121314151617181b1c1d1e21232425272a2b#2c2e3031323334393b3d3e3f4244454648494a4b4c4d4e4f52535455565758595c,858496f94fdd582199715b9d62:b1a5,66b48c799c8d7206676f789160b253:5117,8f8880cc8d1d94a1500d72c8590760eb711988ab595482ef672c7b285d297ef7752d6cf58e668ff8903c9f3b6bd491197b145f7c78a784d6853d6b:d5d9d6,5e:0187,75f995ed655d5f:0ac5,8f9f58c181c2907f965b97ad8fb97f168d2c62414fbf53:d85e,8f:a8a9ab,904d68075f6a819888689cd6618b522b762a5f6c658c6fd26ee85bbe644851:75b0,67c44e1979c9997c70b377:5d5e5f606467696a6d6e6f7071727374757677787a7b7c818283868788898a8b8f90939495969798999a9b9c9d9ea1a3a4a6a8abadaeafb1b2b4b6b7b8b9ba#bcbec0c1c2c3c4c5c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d8d9dadddedfe0e1e4,75c55e7673bb83e064ad62e894b56ce2535a52c3640f94c27b944f2f5e1b823681:168a,6e246cca9a736355535c54fa886557e04e0d5e036b657c3f90e8601664e6731c88c16750624d8d22776c8e2991c75f6983dc8521991053c286956b8b60:ede8,707f82:cd31,4ed36ca785cf64cd7cd969fd66f9834953957b564fa7518c6d4b5c428e6d63d253c983:2c36,67e578b4643d5bdf5c945dee8be762c667f48c7a640063ba8749998b8c177f2094f24ea7961098a4660c731677:e6e8eaeff0f1f2f4f5f7f9fafbfc,78:0304050607080a0b0e0f101315191b1e20212224282a2b2e2f31323335363d3f414243444648494a4b4d4f51535458595a#5b5c5e5f606162636465666768696f7071727374757678797a7b7d7e7f80818283,573a5c1d5e38957f507f80a05382655e7545553150218d856284949e671d56326f6e5de2543570928f66626f64a463a35f7b6f8890f481e38fb05c1866685ff16c8996488d81886c649179f057ce6a59621054484e587a0b60e96f848bda627f901e9a8b79e4540375f4630153196c608fdf5f1b9a70803b9f7f4f885c3a8d647fc565a570bd51:45b2,866b5d075ba062bd916c75748e0c7a2061017b794ec77ef877854e1181ed521d51fa6a7153a88e87950496cf6ec19664695a78:848586888a8b8f9092949596999d9ea0a2a4a6a8a9aaabacadaeafb5b6b7b8babbbcbdbfc0c2c3c4c6c7c8cccdcecfd1d2d3d6d7d8dadbdcdddedfe0e1e2e3#e4e5e6e7e9eaebedeeeff0f1f3f5f6f8f9fbfcfdfeff,79:00020304060708090a0b0c,784050a877d7641089e6590463e35ddd7a7f693d4f20823955984e3275ae7a975e:628a,95ef521b5439708a6376952457826625693f918755076df37eaf882262337ef075b5832878c196cc8f9e614874f78bcd6b64523a8d506b21806a847156f153064e:ce1b,51d17c97918b7c074fc38e7f7be17a9c64675d1450ac810676017cb96dec7fe067515b:58f8,78cb64:ae13,63:aa2b,9519642d8fbe7b5476296253592754466b7950a362345e266b864ee38d37888b5f85902e79:0d0e0f1011121415161718191a1b1c1d1f2021222325262728292a2b2c2d2e2f3031323335363738393d3f42434445474a4b4c4d4e4f505152545558596163#6466696a6b6c6e70717273747576797b7c7d7e7f8283868788898b8c8d8e909192,6020803d62c54e39535590f863b880c665e66c2e4f4660ee6de18bde5f3986cb5f536321515a83616863520063638e4850125c9b79775bfc52307a3b60bc905376d75f:b797,76848e6c706f767b7b4977aa51f3909358244f4e6ef48fea654c7b1b72c46da47fdf5ae162b55e95573084827b2c5e1d5f1f90127f1498a063826ec7789870b95178975b57ab75354f4375385e9760e659606dc06bbf788953fc96d551cb52016389540a94938c038dcc7239789f87768fed8c0d53e079:939495969798999b9c9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b6b7b8bcbfc2c4c5c7c8cacccecfd0d3d4d6d7d9dadbdcdddee0e1e2e5e8ea#eceef1f2f3f4f5f6f7f9fafcfeff,7a:0104050708090a0c0f10111213151618191b1c,4e0176ef53ee948998769f0e952d5b9a8ba24e:221c,51ac846361c252a8680b4f97606b51bb6d1e515c6296659796618c46901775d890fd77636bd272:8aec,8bfb583577798d4c675c9540809a5ea66e2159927aef77ed953b6bb565ad7f0e58065151961f5bf958a954288e726566987f56e4949d76fe9041638754c659:1a3a,579b8eb267358dfa8235524160f0581586fe5ce89e454fc4989d8bb95a2560765384627c904f9102997f6069800c513f80335c1499756d314e8c7a:1d1f21222425262728292a2b2c2d2e2f303132343536383a3e4041424344454748494a4b4c4d4e4f50525354555658595a5b5c5d5e5f606162636465666768#696a6b6c6d6e6f717273757b7c7d7e828587898a8b8c8e8f909394999a9b9ea1a2,8d3053d17f5a7b4f4f104e4f96006cd573d085e95e06756a7ffb6a0a77fe94927e4151e170e653cd8fd483038d2972af996d6cdb574a82b365b980aa623f963259a84eff8bbf7eba653e83f2975e556198de80a5532a8bfd542080ba5e9f6cb88d3982ac915a54296c1b52067eb7575f711a6c7e7c89594b4efd5fff61247caa4e305c0167ab87025cf0950b98ce75af70fd902251af7f1d8bbd594951e44f5b5426592b657780a45b7562:76c2,8f905e456c1f7b264f:0fd8,670d7a:a3a4a7a9aaabaeafb0b1b2b4b5b6b7b8b9babbbcbdbec0c1c2c3c4c5c6c7c8c9cacccdcecfd0d1d2d3d4d5d7d8dadbdcdde1e2e4e7e8e9eaebeceef0f1f2f3#f4f5f6f7f8fbfcfe,7b:0001020507090c0d0e1012131617181a1c1d1f21222327292d,6d:6eaa,798f88b15f17752b629a8f854fef91dc65a781:2f51,5e9c81508d74526f89868d4b590d50854ed8961c723681798d1f5bcc8ba3964459877f1a549056:760e,8be565396982949976d66e895e72751867:46d1,7aff809d8d76611f79c665628d635188521a94a27f38809b7eb25c976e2f67607bd9768b9ad8818f7f947cd5641e95507a3f54:4ae5,6b4c640162089e3d80f3759952729769845b683c86e496:0194,94ec4e2a54047ed968398ddf801566f45e9a7fb97b:2f303234353637393b3d3f404142434446484a4d4e535557595c5e5f61636465666768696a6b6c6d6f70737476787a7c7d7f81828384868788898a8b8c8e8f#9192939698999a9b9e9fa0a3a4a5aeafb0b2b3b5b6b7b9babbbcbdbebfc0c2c3c4,57c2803f68975de5653b529f606d9f9a4f9b8eac516c5bab5f135de96c5e62f18d21517194a952fe6c9f82df72d757a267848d2d591f8f9c83c754957b8d4f306cbd5b6459d19f1353e486ca9aa88c3780a16545987e56fa96c7522e74dc52505be1630289024e5662d0602a68fa51735b9851a089c27ba199867f5060ef704c8d2f51495e7f901b747089c4572d78455f529f9f95fa8f689b3c8be17678684267dc8d:ea35,523d8f8a6eda68cd950590ed56fd679c88f98fc754c87b:c5c8c9cacbcdcecfd0d2d4d5d6d7d8dbdcdedfe0e2e3e4e7e8e9ebecedeff0f2f3f4f5f6f8f9fafbfdff,7c:0001020304050608090a0d0e101112131415171819#1a1b1c1d1e20212223242528292b2c2d2e2f3031323334353637393a3b3c3d3e42,9ab85b696d776c264ea55bb39a87916361a890af97e9542b6db55bd251fd558a7f:55f0,64bc634d65f161be608d710a6c:5749,592f676d822a58d5568e8c6a6beb90dd597d801753f76d695475559d83:77cf,683879be548c4f55540876d28c8996026cb36db88d6b89109e648d3a563f9ed175d55f8872e0606854fc4ea86a2a886160528f7054c470d886799e3f6d2a5b8f5f187ea255894faf7334543c539a501954:0e7c,4e4e5ffd745a58f6846b80e1877472d07cca6e567c:434445464748494a4b4c4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717275767778797a7e7f8081828384858687#888a8b8c8d8e8f90939496999a9ba0a1a3a6a7a8a9abacadafb0b4b5b6b7b8babb,5f27864e552c62a44e926caa623782b154d7534e733e6ed1753b521253168bdd69d05f8a60006dee574f6b2273af68538fd87f13636260a3552475ea8c6271156da35ba65e7b8352614c9ec478fa87577c27768751f060f6714c66435e4c604d8c0e707063258f895fbd606286d456de6bc160946167534960e066668d3f79fd4f1a70e96c478b:b3f2,7ed88364660f5a5a9b426d:51f7,8c416d3b4f19706b83b7621660d1970d8d27797851fb57:3efa,673a75787a3d79ef7b957c:bfc0c2c3c4c6c9cbcecfd0d1d2d3d4d8dadbdddee1e2e3e4e5e6e7e9eaebecedeef0f1f2f3f4f5f6f7f9fafcfdfeff,7d:000102030405060708090b0c0d0e0f10#1112131415161718191a1b1c1d1e1f212324252628292a2c2d2e30313233343536,808c99658ff96fc08ba59e2159ec7ee97f095409678168d88f917c4d96c653ca602575be6c7253735ac97ea7632451e0810a5df184df628051805b634f0e796d524260b86d4e5b:c4c2,8b:a1b0,65e25fcc964559937e:e7aa,560967b759394f735bb652a0835a988a8d3e753294be50477a3c4ef767b69a7e5ac16b7c76d1575a5c167b3a95f4714e517c80a9827059787f04832768c067ec78:b177,62e363617b804fed526a51cf835069db92748d:f531,89c1952e7bad4ef67d:3738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6f70717273747576#78797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798,506582305251996f6e:1085,6da75efa50f559dc5c066d466c5f7586848b686859568bb253209171964d854969127901712680f64ea490ca6d479a845a0756bc640594f077eb4fa5811a72e189d2997a7f347ede527f655991758f:7f83,53eb7a9663:eda5,768679f888579636622a52ab8282685467706377776b7aed6d017ed389e359d0621285c982a5754c501f4ecb75a58beb5c4a5dfe7b4b65a491d14eca6d25895f7d2795264ec58c288fdb9773664b79818fd170ec6d787d:999a9b9c9d9e9fa0a1a2a3a4a5a7a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9#dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa,5c3d52b283465162830e775b66769cb84eac60ca7c:beb3,7ecf4e958b66666f988897595883656c955c5f8475c997567a:dfde,51c070af7a9863ea7a767ea0739697ed4e4570784e5d915253a965:51e7,81fc8205548e5c31759a97a062d872d975bd5c459a7983ca5c40548077e94e3e6cae805a62d2636e5de851778ddd8e1e952f4ff153e560e770ac526763509e435a1f5026773753777ee26485652b628963985014723589c951b38bc07edd574783cc94a7519b541b5cfb7d:fbfcfdfeff,7e:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839#3a3c3d3e3f40424344454648494a4b4c4d4e4f505152535455565758595a5b5c5d,4fca7ae36d5a90e19a8f55805496536154af5f0063e9697751ef6168520a582a52d8574e780d770b5eb761777ce062:5b97,4ea27095800362f770e49760577782db67ef68f578d5989779d158f354b353ef6e34514b523b5ba28bfe80af554357a660735751542d7a7a60505b5463a762a053e362635bc767af54ed7a9f82e691775e9388e4593857ae630e8de880ef57577b774fa95feb5bbd6b3e53217b5072c2684677:ff36,65f751b54e8f76d45cbf7aa58475594e9b4150807e:5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f909192939495969798999a9c9d9e#aeb4bbbcd6e4ecf9,7f:0a101e37393b3c3d3e3f404143464748494a4b4c4d4e4f5253,998861276e8357646606634656f062:ec69,5ed39614578362c955878721814a8fa3556683b167658d5684dd5a6a680f62e67bee961151706f9c8c3063fd89c861d27f0670c26ee57405699472fc5eca90ce67176d6a635e52b3726280014f6c59e5916a70d96d9d52d24e5096f7956d857e78ca7d2f5121579264c2808b7c7b6cea68f1695e51b7539868a872819ece7bf172f879bb6f137406674e91cc9ca4793c83:8954,540f68174e3d538952b1783e5386522950884f:8bd0,7f:56595b5c5d5e6063646566676b6c6d6f7073757677787a7b7c7d7f8082838485868788898b8d8f9091929395969798999b9ca0a2a3a5a6a8a9aaabacadaeb1#b3b4b5b6b7babbbec0c2c3c4c6c7c8c9cbcdcfd0d1d2d3d6d7d9dadbdcdddee2e3,75e27acb7c926ca596b6529b748354e94fe9805483b28fde95705ec9601c6d9f5e18655b813894fe604b70bc7ec37cae51c968817cb1826f4e248f8691cf667e4eae8c0564a9804a50da759771ce5be58fbd6f664e86648295635ed66599521788c270c852a3730e7433679778f797164e3490bb9cde6dcb51db8d41541d62ce73b283f196f69f8494c34f367f9a51cc707596755cad988653e64ee46e9c740969b4786b998f7559521876246d4167f3516d9f99804b54997b3c7abf7f:e4e7e8eaebecedeff2f4f5f6f7f8f9fafdfeff,80:020708090a0e0f11131a1b1d1e1f2123242b2c2d2e2f303234393a3c3e404144454748494e4f505153555657#595b5c5d5e5f6061626364656667686b6c6d6e6f7072737475767778797a7b7c7d,9686578462e29647697c5a0464027bd36f0f964b82a6536298855e90708963b35364864f9c819e93788c97328d:ef42,9e7f6f5e79845f559646622e9a74541594dd4fa365c55c:6561,7f1586516c2f5f8b73876ee47eff5ce6631b5b6a6ee653754e7163a0756562a18f6e4f264ed16ca67eb68bba841d87ba7f57903b95237ba99aa188f8843d6d1b9a867edc59889ebb739b780186829a:6c82,561b541757cb4e709ea653568fc881097792999286ee6ee1851366fc61626f2b80:7e818285888a8d8e8f909192949597999ea3a6a7a8acb0b3b5b6b8b9bbc5c7c8c9cacbcfd0d1d2d3d4d5d8dfe0e2e3e6eef5f7f9fbfeff,81:000103040507080b#0c1517191b1c1d1f202122232425262728292a2b2d2e3033343537393a3b3c3d3f,8c298292832b76f26c135fd983bd732b8305951a6bdb77db94c6536f830251925e3d8c8c8d384e4873ab679a68859176970971646ca177095a9295416bcf7f8e66275bd059b95a9a95:e8f7,4eec84:0c99,6aac76df9530731b68a65b5f772f919a97617cdc8ff78c1c5f257c7379d889c56ccc871c5bc65e4268c977207ef551:954d,52c95a297f05976282d763cf778485d079d26e3a5e9959998511706d6c1162bf76bf654f60af95fd660e879f9e2394ed54:0d7d,8c2c647881:40414243444547494d4e4f525657585b5c5d5e5f6162636466686a6b6c6f727375767778818384858687898b8c8d8e90929394959697999a9e9fa0a1a2a4a5#a7a9abacadaeafb0b1b2b4b5b6b7b8b9bcbdbebfc4c5c7c8c9cbcdcecfd0d1d2d3,647986116a21819c78e864699b5462b9672b83ab58a89ed86cab6f205bde964c8c0b725f67d062c772614ea959c66bcd589366ae5e5552df6155672876ee776672677a4662ff54:ea50,94a090a35a1c7eb36c164e435976801059485357753796be56ca63208111607c95f96dd65462998151855ae980fd59ae9713502a6ce55c3c62df4f60533f817b90066eba852b62c85e7478be64b5637b5ff55a18917f9e1f5c3f634f80425b7d556e95:4a4d,6d8560a867e072de51dd5b8181:d4d5d6d7d8d9dadbdcdddedfe0e1e2e4e5e6e8e9ebeeeff0f1f2f5f6f7f8f9fafdff,82:030708090a0b0e0f111315161718191a1d2024252627292e323a3c3d3f#404142434546484a4c4d4e5051525354555657595b5c5d5e606162636465666769,62e76cde725b626d94ae7ebd81136d53519c5f04597452aa6012597366968650759f632a61e67cef8bfa54e66b279e256bb485d5545550766ca4556a8db4722c5e156015743662cd6392724c5f986e436d3e65006f5876d878d076fc7554522453db4e535e9e65c180:2ad6,629b5486522870ae888d8dd16ce1547880da57f988f48d54966a914d4f696c9b55b776c6783062a870f96f8e5f6d84ec68da787c7bf781a8670b9e4f636778b0576f7812973962:79ab,528874356bd782:6a6b6c6d71757677787b7c808183858687898c90939495969a9b9ea0a2a3a7b2b5b6babbbcbfc0c2c3c5c6c9d0d6d9dadde2e7e8e9eaecedeef0f2f3f5f6f8#fafcfdfeff,83:000a0b0d1012131618191d1e1f20212223242526292a2e3032373b3d,5564813e75b276ae533975de50fb5c418b6c7bc7504f72479a9798d86f0274e27968648777a562fc98918d2b54c180584e52576a82f9840d5e7351ed74f68bc45c4f57616cfc98875a4678349b448feb7c955256625194fa4ec68386846183e984b257d467345703666e6d668c3166dd7011671f6b3a6816621a59bb4e0351c46f0667d26c8f517668cb59476b6775665d0e81109f5065d779:4841,9a918d775c824e5e4f01542f5951780c56686c148fc45f036c:7de3,8bab639083:3e3f41424445484a4b4c4d4e5355565758595d6270717273747576797a7e7f808182838487888a8b8c8d8f909194959697999a9d9fa1a2a3a4a5a6a7acadae#afb5bbbebfc2c3c4c6c8c9cbcdced0d1d2d3d5d7d9dadbdee2e3e4e6e7e8ebeced,60706d3d7275626694:8ec5,53438fc17b7e4edf8c264e7e9ed494:b1b3,524d6f5c90636d458c3458115d4c6b:2049,67aa545b81547f8c589985375f3a62a26a47953965726084686577a74e544fa85de7979864ac7fd85ced4fcf7a8d520783044e14602f7a8394a64fb54eb279e6743452e482b964d279bd5bdd6c8197528f7b6c22503e537f6e0564ce66746c3060c598778bf75e86743c7a7779cb4e1890b174036c4256da914b6cc58d8b533a86c666f28eaf5c489a716e2083:eeeff3f4f5f6f7fafbfcfeff,84:0002050708090a10121314151617191a1b1e1f20212223292a2b2c2d2e2f30323334353637393a3b3e3f404142434445474849#4a4b4c4d4e4f505253545556585d5e5f606264656667686a6e6f70727477797b7c,53d65a369f8b8da353bb570898a76743919b6cc9516875ca62f372ac52:389d,7f3a7094763853749e4a69b7786e96c088d97fa471:36c3,518967d374e458e4651856b78ba9997662707ed560f970ed58ec4e:c1ba,5fcd97e74efb8ba45203598a7eab62544ecd65e5620e833884c98363878d71946eb65bb97ed2519763c967d480898339881551125b7a59828fb14e736c5d516589258f6f962e854a745e95:10f0,6da682e55f3164926d128428816e9cc3585e8d5b4e0953c184:7d7e7f8081838485868a8d8f90919293949596989a9b9d9e9fa0a2a3a4a5a6a7a8a9aaabacadaeb0b1b3b5b6b7bbbcbec0c2c3c5c6c7c8cbcccecfd2d4d5d7#d8d9dadbdcdee1e2e4e7e8e9eaebedeeeff1f2f3f4f5f6f7f8f9fafbfdfe,85:000102,4f1e6563685155d34e2764149a9a626b5ac2745f82726da968ee50e7838e7802674052396c997eb150bb5565715e7b5b665273ca82eb67495c715220717d886b95ea965564c58d6181b355846c5562477f2e58924f2455468d4f664c4e0a5c1a88f368a2634e7a0d70e7828d52fa97f65c1154e890b57ecd59628d4a86c782:0c0d,8d6664445c0461516d89793e8bbe78377533547b4f388eab6df15a207ec5795e6c885ba15a76751a80be614e6e1758f075:1f25,727253477ef385:030405060708090a0b0d0e0f101214151618191b1c1d1e2022232425262728292a2d2e2f303132333435363e3f404142444546474b4c4d4e4f505152535455#57585a5b5c5d5f60616263656667696a6b6c6d6e6f707173757677787c7d7f8081,770176db526980dc57235e08593172ee65bd6e7f8bd75c388671534177f362fe65f64ec098df86805b9e8bc653f277e24f7f5c4e9a7659cb5f0f793a58eb4e1667ff4e8b62ed8a93901d52bf662f55dc566c90024ed54f8d91ca99706c0f5e0260435ba489c68bd56536624b99965b:88ff,6388552e53d77626517d852c67a268b36b8a62928f9353d482126dd1758f4e668d4e5b70719f85af66:91d9,7f7287009ecd9f205c5e672f8ff06811675f620d7ad658855eb665706f3185:82838688898a8b8c8d8e909192939495969798999a9d9e9fa0a1a2a3a5a6a7a9abacadb1b2b3b4b5b6b8babbbcbdbebfc0c2c3c4c5c6c7c8cacbcccdced1d2#d4d6d7d8d9dadbdddedfe0e1e2e3e5e6e7e8eaebecedeeeff0f1f2f3f4f5f6f7f8,60555237800d6454887075295e05681362f4971c53cc723d8c016c3477617a0e542e77ac987a821c8bf47855671470c165af64955636601d79c153f84e1d6b7b80865bfa55e356db4f:3a3c,99725df3677e80386002988290015b8b8b:bcf5,641c825864de55fd82cf91654fd77d20901f7c9f50f358516eaf5bbf8bc980839178849c7b97867d96:8b8f,7ee59ad3788e5c817a57904296a7795f5b59635f7b0b84d168ad55067f2974107d2295016240584c4ed65b835979585485:f9fafcfdfe,86:0001020304060708090a0b0c0d0e0f10121314151718191a1b1c1d1e1f20212223242526282a2b2c2d2e2f3031323334353637393a3b3d3e3f40#4142434445464748494a4b4c525355565758595b5c5d5f6061636465666768696a,736d631e8e:4b0f,80ce82d462ac53f06cf0915e592a60016c70574d644a8d2a762b6ee9575b6a8075f06f6d8c:2d08,57666bef889278b363a253f970ad6c645858642a580268e0819b55107cd650188eba6dcc8d9f70eb638f6d9b6ed47ee68404684390036dd896768ba85957727985e4817e75bc8a8a68af52548e22951163d098988e44557c4f5366ff568f60d56d9552435c4959296dfb586b75:301c,606c82148146631167618fe2773a8d:f334,94c15e165385542c70c386:6d6f7072737475767778838485868788898e8f90919294969798999a9b9e9fa0a1a2a5a6abadaeb2b3b7b8b9bbbcbdbebfc1c2c3c5c8cccdd2d3d5d6d7dadc#dde0e1e2e3e5e6e7e8eaebeceff5f6f7fafbfcfdff,87:010405060b0c0e0f10111416,6c405ef7505c4ead5ead633a8247901a6850916e77b3540c94dc5f647ae5687663457b527edf75db507762955934900f51f879c37a8156fe5f9290146d825c60571f541051546e4d56e263a89893817f8715892a9000541e5c6f81c062:d658,81319e3596409a:6e7c,692d59a562d3553e631654c786d96d3c5a0374e6889c6b6a59168c4c5f2f6e7e73a9987d4e3870f75b8c7897633d665a769660cb5b9b5a494e0781556c6a738b4ea167897f515f8065fa671b5fd859845a0187:191b1d1f20242627282a2b2c2d2f303233353638393a3c3d404142434445464a4b4d4f505152545556585a5b5c5d5e5f6162666768696a6b6c6d6f71727375#7778797a7f8081848687898a8c8e8f90919294959698999a9b9c9d9ea0a1a2a3a4,5dcd5fae537197e68fdd684556f4552f60df4e3a6f4d7ef482c7840e59d44f:1f2a,5c3e7eac672a851a5473754f80c355829b4f4f4d6e2d8c135c096170536b761f6e29868a658795fb7eb9543b7a337d0a95ee55e17fc174ee631d87176da17a9d621165a1536763e16c835deb545c94a84e4c6c618bec5c4b65e0829c68a754:3e34,6b:cb66,4e9463425348821e4f:0dae,575e620a96fe6664726952:ffa1,609f8bef661471996790897f785277fd6670563b54389521727a87:a5a6a7a9aaaeb0b1b2b4b6b7b8b9bbbcbebfc1c2c3c4c5c7c8c9cccdcecfd0d4d5d6d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedeff0f1f2f3f4f5f6f7f8#fafbfcfdff,88:0001020405060708090b0c0d0e0f101112141718191a1c1d1e1f2023,7a00606f5e0c6089819d591560dc718470ef6eaa6c5072806a8488ad5e2d4e605ab3559c94e36d177cfb9699620f7ec6778e867e5323971e8f9666875ce14fa072ed4e0b53a6590f54136380952851484ed99c9c7ea454b88d248854823795f26d8e5f265acc663e966973:b02e,53bf817a99857fa15baa96:7750,7ebf76f853a2957699997bb189446e584e617fd479658be660f354cd4eab98795df76a6150cf54118c618427785d9704524a54ee56a395006d885bb56dc6665388:2425262728292a2b2c2d2e2f30313334353637383a3b3d3e3f414243464748494a4b4e4f505152535556585a5b5c5d5e5f6066676a6d6f717374757678797a#7b7c80838687898a8c8e8f90919394959798999a9b9d9e9fa0a1a3a5a6a7a8a9aa,5c0f5b5d6821809655787b11654869544e9b6b47874e978b534f631f643a90aa659c80c18c10519968b0537887f961c86c:c4fb,8c225c5185aa82af950c6b238f9b65b05f:fbc3,4fe18845661f8165732960fa51745211578b5f6290a2884c91925e78674f602759d351:44f6,80f853086c7996c4718a4f:11ee,7f9e673d55c5950879c088967ee3589f620c9700865a5618987b5f908bb884c4915753d965ed5e8f755c60647d6e5a7f7e:eaed,8f6955a75ba360ac65cb738488:acaeafb0b2b3b4b5b6b8b9babbbdbebfc0c3c4c7c8cacbcccdcfd0d1d3d6d7dadbdcdddee0e1e6e7e9eaebecedeeeff2f5f6f7fafbfdff,89:0001030405060708#090b0c0d0e0f1114151617181c1d1e1f20222324262728292c2d2e2f3132333537,9009766377297eda9774859b5b667a7496ea884052cb718f5faa65ec8be25bfb9a6f5de16b896c5b8b:adaf,900a8fc5538b62bc9e:262d,54404e2b82bd7259869c5d1688596daf96c554d14e9a8bb6710954bd960970df6df976d04e25781487125ca95ef68a00989c960e708e6cbf594463a9773c884d6f148273583071d5538c781a96c155015f6671305bb48c1a9a8c6b83592e9e2f79e76768626c4f6f75a17f8a6d0b96336c274ef075d2517b68376f3e908081705996747689:38393a3b3c3d3e3f40424345464748494a4b4c4d4e4f505152535455565758595a5b5c5d6061626364656768696a6b6c6d6e6f707172737475767778797a7c#7d7e808284858788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1,64475c2790657a918c2359da54ac8200836f898180006930564e8036723791ce51b64e5f987563964e1a53f666f3814b591c6db24e0058f9533b63d694f14f:9d0a,886398905937905779fb4eea80f075916c825b9c59e85f5d69058681501a5df24e5977e34ee5827a6291661390915c794ebf5f7981c69038808475ab4ea688d4610f6bc55fc64e4976ca6ea28b:e3ae,8c0a8bd15f027f:fccc,7ece83:356b,56e06bb797f3963459fb541f94f66deb5bc5996e5c395f15969089:a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c3cdd3d4d5d7d8d9dbdddfe0e1e2e4e7e8e9eaecedeef0f1f2f4f5f6f7f8f9fa#fbfcfdfeff,8a:01020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d,537082f16a315a749e705e947f2883b984:2425,836787478fce8d6276c85f719896786c662054df62e54f6381c375c85eb896cd8e0a86f9548f6cf36d8c6c38607f52c775285e7d4f1860a05fe75c24753190ae94c072b96cb96e389149670953:cbf3,4f5191c98bf153c85e7c8fc26de44e8e76c26986865e611a82064f:59de,903e9c7c61096e:1d14,96854e885a3196e84e0e5c7f79b95b878bed7fbd738957df828b90c15401904755bb5cea5fa161086b3272f180b28a:891e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f4041424344454647494a4b4c4d4e4f505152535455565758595a5b5c5d5e#5f606162636465666768696a6b6c6d6e6f7071727374757677787a7b7c7d7e7f80,6d745bd388d598848c6b9a6d9e336e0a51:a443,57a38881539f63f48f9556ed54585706733f6e907f188fdc82d1613f6028966266f07ea68d:8ac3,94a55cb37ca4670860a6960580184e9190e75300966851418fd08574915d665597f55b55531d78386742683d54c9707e5bb08f7d518d572854b1651266828d:5e43,810f846c906d7cdf51ff85fb67a365e96fa186a48e81566a90207682707671e58d2362e952196cfd8d3c600e589e618e66fe8d60624e55b36e23672d8f678a:81828384858687888b8c8d8e8f9091929495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3,94e195f87728680569a8548b4e4d70b88bc86458658b5b857a84503a5be877bb6be18a797c986cbe76cf65a98f975d2d5c5586386808536062187ad96e5b7efd6a1f7ae05f706f335f20638c6da867564e085e108d264ed780c07634969c62db662d627e6cbc8d7571677f695146808753ec906e629854f286f08f998005951785178fd96d5973cd659f771f7504782781fb8d1e94884fa6679575b98bca9707632f9547963584b8632377415f8172f04e896014657462ef6b63653f8a:e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8b:0001020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#24252728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,5e2775c790d18bc1829d679d652f5431871877e580a281026c414e4b7ec7804c76f4690d6b966267503c4f84574063076b628dbe53ea65e87eb85fd763:1ab7,81:f3f4,7f6e5e1c5cd95236667a79e97a1a8d28709975d46ede6cbb7a924e2d76c55fe0949f88777ec879cd80bf91cd4ef24f17821f54685dde6d328bcc7ca58f7480985e1a549276b15b99663c9aa473e0682a86db6731732a8b:f8db,90107af970db716e62c477a956314e3b845767f152a986c08d2e94f87b518b:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656768696a6b6d6e6f707172737475767778797a7b7c7d7e7f80818283848586#8788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9facb1bbc7d0ea,8c:091e,4f4f6ce8795d9a7b6293722a62fd4e1378168f6c64b08d5a7bc668695e8488c55986649e58ee72b6690e95258ffd8d5857607f008c0651c6634962d95353684c74228301914c55447740707c6d4a517954a88d4459ff6ecb6dc45b5c7d2b4ed47c7d6ed35b5081ea6e0d5b579b0368d58e2a5b977efc603b7eb590b98d70594f63cd79df8db3535265cf79568bc5963b7ec494bb7e825634918967007f6a5c0a907566285de64f5067de505a4f5c57505e:a7#3$,8c:38393a3b3c3d3e3f4042434445484a4b4d4e4f5051525354565758595b5c5d5e5f60636465666768696c6d6e6f707172747576777b7c7d7e7f808183848687#888b8d8e8f90919293959697999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad,4e:8d0c,51404e105eff53454e:15981e,9b325b6c56694e2879ba4e3f53154e47592d723b536e6c1056df80e499976bd3777e9f174e:369f,9f104e:5c6993,82885b5b556c560f4ec453:8d9da3a5ae,97658d5d53:1af5262e3e,8d5c53:6663,52:02080e2d333f404c5e615c,84af52:7d82819093,51827f544e:bbc3c9c2e8e1ebde,4f1b4ef34f:2264,4ef54f:2527092b5e67,65384f:5a5d,8c:aeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec#edeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8d:000102030405060708090a0b0c0d,4f:5f57323d76749189838f7e7baa7cac94e6e8eac5dae3dcd1dff8,50:294c,4ff350:2c0f2e2d,4ffe50:1c0c25287e4355484e6c7ba5a7a9bad6,510650:edece6ee,51:070b,4edd6c3d4f:5865ce,9fa06c467c74516e5dfd9ec999985181591452f9530d8a07531051eb591951554ea051564eb388:6ea4,4eb5811488d279805b3488037fb851:abb1bdbc,8d:0e0f101112131415161718191a1b1c205152575f6568696a6c6e6f717278797a7b7c7d7e7f808283868788898c8d8e8f90929395969798999a9b9c9d9ea0a1#a2a4a5a6a7a8a9aaabacadaeafb0b2b6b7b9bbbdc0c1c2c5c7c8c9cacdd0d2d3d4,51:c796a2a5,8b:a0a6a7aab4b5b7c2c3cbcfced2d3d4d6d8d9dcdfe0e4e8e9eef0f3f6f9fcff,8c:000204070c0f1112141516191b181d1f202125272a2b2e2f32333536,53:697a,96:1d2221312a3d3c4249545f676c7274888d97b0,90:979b9d99aca1b4b3b6ba,8d:d5d8d9dce0e1e2e5e6e7e9edeef0f1f2f4f6fcfeff,8e:00010203040607080b0d0e1011121315161718191a1b1c202124252627282b2d303233343637383b3c3e#3f4345464c4d4e4f505354555657585a5b5c5d5e5f60616263646567686a6b6e71,90:b8b0cfc5bed0c4c7d3e6e2dcd7dbebeffe,91:04221e23312f394346,520d594252:a2acadbe,54ff52:d0d6f0,53df71ee77cd5ef451:f5fc,9b2f53b65f01755a5def57:4ca9a1,58:7ebcc5d1,57:292c2a33392e2f5c3b4269856b867c7b686d7673ada48cb2cfa7b493a0d5d8dad9d2b8f4eff8e4dd,8e:73757778797a7b7d7e808283848688898a8b8c8d8e91929395969798999a9b9d9fa0a1a2a3a4a5a6a7a8a9aaadaeb0b1b3b4b5b6b7b8b9bbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4,58:0b0d,57:fded,58:001e194420656c81899a80,99a89f1961ff82:797d7f8f8aa8848e919799abb8beb0c8cae398b7aecbccc1a9b4a1aa9fc4cea4e1,830982:f7e4,83:0f07,82:dcf4d2d8,830c82:fbd3,83:111a061415,82:e0d5,83:1c515b5c08923c34319b5e2f4f47435f4017602d3a336665,8e:e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8f:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#2425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344,83:681b696c6a6d6eb078b3b4a0aa939c857cb6a97db87b989ea8babcc1,840183:e5d8,580784:180b,83:ddfdd6,84:1c381106,83:d4df,84:0f03,83:f8f9eac5c0,842683:f0e1,84:5c515a597387887a89783c4669768c8e316dc1cdd0e6bdd3cabfbae0a1b9b497e5e3,850c750d853884f085:391f3a,8f:45464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656a808c929da0a1a2a4a5a6a7aaacadaeafb2b3b4b5b7b8babbbcbfc0c3c6#c9cacbcccdcfd2d6d7dae0e1e3e7eceff1f2f4f5f6fafbfcfeff,90:07080c0e131518,85:563b,84:fffc,85:594868645e7a,77a285:43727ba4a8878f79ae9c85b9b7b0d3c1dcff,86:270529163c,5efe5f0859:3c41,803759:555a58,530f5c:22252c34,62:4c6a9fbbcadad7ee,632262f663:394b43adf6717a8eb46dac8a69aebcf2f8e0ffc4dece,645263:c6be,64:45410b1b200c26215e846d96,90:191c2324252728292a2b2c303132333437393a3d3f4043454648494a4b4c4e545556595a5c5d5e5f6061646667696a6b6c6f70717273767778797a7b7c7e81#84858687898a8c8d8e8f90929496989a9c9e9fa0a4a5a7a8a9abadb2b7bcbdbfc0,64:7ab7b899bac0d0d7e4e2,65:09252e,5f:0bd2,75195f1153:5ff1fde9e8fb,54:1216064b5253545643215759233282947771649a9b8476669dd0adc2b4d2a7a6d3d472a3d5bbbfccd9dadca9aaa4ddcfde,551b54e7552054fd551454f355:22230f11272a678fb5496d41553f503c,90:c2c3c6c8c9cbcccdd2d4d5d6d8d9dadedfe0e3e4e5e9eaeceef0f1f2f3f5f6f7f9fafbfcff,91:00010305060708090a0b0c0d0e0f1011121314151617181a1b1c#1d1f20212425262728292a2b2c2d2e30323334353637383a3b3c3d3e3f40414244,55:375675767733305c8bd283b1b988819f7ed6917bdfbdbe9499eaf7c9,561f55:d1ebecd4e6ddc4efe5f2f3cccde8f5e4,8f9456:1e080c012423,55fe56:00272d5839572c4d62595c4c548664716b7b7c8593afd4d7dde1f5ebf9ff,57:040a091c,5e:0f191411313b3c,91:454748515354555658595b5c5f606667686b6d737a7b7c808182838486888a8e8f939495969798999c9d9e9fa0a1a4a5a6a7a8a9abacb0b1b2b3b6b7b8b9bb#bcbdbebfc0c1c2c3c4c5c6c8cbd0d2d3d4d5d6d7d8d9dadbdddedfe0e1e2e3e4e5,5e:3744545b5e61,5c:8c7a8d9096889899919a9cb5a2bdacabb1a3c1b7c4d2e4cbe5,5d:020327262e241e061b583e343d6c5b6f5d6b4b4a697482999d,8c735d:b7c5,5f:73778287898c95999ca8adb5bc,88625f6172:adb0b4b7b8c3c1cecdd2e8efe9f2f4f7,730172f3730372fa91:e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,92:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324#25262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,72fb73:1713210a1e1d152239252c3831504d57606c6f7e,821b592598e759:2402,99:636768696a6b6c74777d8084878a8d9091939495,5e:80918b96a5a0b9b5beb3,8d535e:d2d1dbe8ea,81ba5f:c4c9d6cf,60035fee60045f:e1e4fe,60:0506,5f:eaedf8,60:1935261b0f0d292b0a3f2178797b7a42,92:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727375767778797a7b7c7d7e7f808182838485#868788898a8b8c8d8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7,60:6a7d969aad9d83928c9becbbb1ddd8c6dab4,61:20261523,60f461:000e2b4a75ac94a7b7d4f5,5fdd96b395:e9ebf1f3f5f6fcfe,96:030406080a0b0c0d0f12151617191a,4e2c723f62156c:35545c4aa38590948c6869747686a9d0d4adf7f8f1d7b2e0d6faebeeb1d3effe,92:a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8#e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,93:00010203040506070809,6d:39270c43480704190e2b4d2e351a4f525433916f9ea05e93945c607c63,6e1a6d:c7c5de,6e0e6d:bfe0,6e116d:e6ddd9,6e166dab6e0c6dae6e:2b6e4e6bb25f865354322544dfb198e0,6f2d6e:e2a5a7bdbbb7d7b4cf8fc29f,6f:6246472415,6ef96f:2f364b742a0929898d8c78727c7ad1,93:0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f40414243444546474849#4a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696b,6f:c9a7b9b6c2e1eedee0ef,70:1a231b39354f5e,5b:80849593a5b8,752f9a9e64345b:e4ee,89305bf08e478b078f:b6d3d5e5eee4e9e6f3e8,90:05040b26110d162135362d2f445152506858625b,66b990:747d8288838b,5f:50575658,5c3b54ab5c:5059,5b715c:6366,7fbc5f:2a292d,82745f3c9b3b5c6e59:81838da9aaa3,93:6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab#acadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cbcccd,59:97caab9ea4d2b2afd7be,5a:0506,59dd5a0859:e3d8f9,5a:0c09323411231340674a553c6275,80ec5a:aa9b777abeebb2d2d4b8e0e3f1d6e6d8dc,5b:091716323740,5c:151c,5b:5a6573515362,9a:7577787a7f7d808185888a90929396989b9c9d9fa0a2a3a5a7,7e:9fa1a3a5a8a9,93:cecfd0d1d2d3d4d5d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,94:000102030405060708090a0b0c0d#0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e,7e:adb0bec0c1c2c9cbccd0d4d7dbe0e1e8ebeeeff1f2,7f0d7e:f6fafbfe,7f:01020307080b0c0f111217191c1b1f212223242526272a2b2c2d2f3031323335,5e7a757f5ddb753e909573:8e91aea29fcfc2d1b7b3c0c9c8e5d9,987c740a73:e9e7debaf2,74:0f2a5b262528302e2c,94:2f303132333435363738393a3b3c3d3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6c6d6e6f#707172737475767778797a7b7c7d7e7f8081828384919698c7cfd3d4dae6fb,95:1c20,74:1b1a415c575559776d7e9c8e8081878b9ea8a990a7d2ba,97:eaebec,67:4c535e4869a5876a7398a775a89ead8b777cf0,680967d8680a67:e9b0,680c67:d9b5dab3dd,680067:c3b8e2,680e67:c1fd,68:323360614e624464831d55664167403e4a4929b58f7477936bc2,696e68fc69:1f20,68f995:27333d43484b555a606e74757778797a7b7c7d7e808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa#abacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb,692468f069:0b0157,68e369:10713960425d846b80987834cc8788ce896663799ba7bbabadd4b1c1cadf95e08dff,6a2f69ed6a:171865,69f26a:443ea0505b358e793d28587c9190a997ab,73:3752,6b:8182878492938d9a9ba1aa,8f:6b6d71727375767877797a7c7e818284878b,95:cccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7ecff,96:0713181b1e20232425262728292b2c2d2f303738393a3e41434a4e4f5152535657#58595a5c5d5e606365666b6d6e6f70717378797a7b7c7d7e7f808182838487898a,8f:8d8e8f989a,8ece62:0b171b1f222125242c,81e774:eff4ff,75:0f1113,65:34eeeff0,66:0a19,677266:031500,708566:f71d34313635,800666:5f54414f56615777848ca79dbedbdce6e9,8d:3233363b3d4045464849474d5559,89:c7cacbcccecfd0d1,72:6e9f5d666f7e7f848b8d8f92,63:0832b0,96:8c8e91929395969a9b9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb1b2b4b5b7b8babbbfc2c3c8cacbd0d1d3d4d6d7d8d9dadbdcdddedfe1e2e3e4e5e6e7eb#ecedeef0f1f2f4f5f8fafbfcfdff,97:0203050a0b0c10111214151718191a1b1d1f20,64:3fd8,80046b:eaf3fdf5f9,6c:0507060d1518191a2129242a32,65:35556b,72:4d525630,8662521680:9f9c93bc,670a80:bdb1abadb4b7e7e8e9eadbc2c4d9cdd7,671080:ddebf1f4ed,81:0d0e,80:f2fc,671581128c5a81:361e2c1832484c5374595a7160697c7d6d67,584d5ab581:888291,6ed581:a3aacc,672681:cabb,97:2122232425262728292b2c2e2f3133343536373a3b3c3d3f404142434445464748494a4b4c4d4e4f5051545557585a5c5d5f63646667686a6b6c6d6e6f7071#72757778797a7b7d7e7f8081828384868788898a8c8e8f9093959697999a9b9c9d,81:c1a6,6b:243739434659,98:d1d2d3d5d9da,6bb35f406bc289f365909f5165:93bcc6c4c3ccced2d6,70:809c969dbbc0b7abb1e8ca,71:1013162f31735c6845724a787a98b3b5a8a0e0d4e7f9,72:1d28,706c71:1866b9,62:3e3d434849,79:3b4046495b5c535a6257606f677a858a9aa7b3,5f:d1d0,97:9e9fa1a2a4a5a6a7a8a9aaacaeb0b1b3b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3#e4e5e8eeeff0f1f2f4f7f8f9fafbfcfdfeff,98:000102030405060708090a0b0c0d0e,60:3c5d5a67415963ab,61:060d5da99dcbd1,620680:807f,6c:93f6,6dfc77:f6f8,78:0009171811,65ab78:2d1c1d393a3b1f3c252c23294e6d56572650474c6a9b939a879ca1a3b2b9a5d4d9c9ecf2,790578f479:13241e34,9f9b9e:f9fbfc,76f177:040d,76f977:07081a22192d263538505147435a68,98:0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d#4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e,77:62657f8d7d808c919fa0b0b5bd,75:3a404e4b485b727983,7f:58615f,8a487f:68747179817e,76:cde5,883294:8586878b8a8c8d8f909497959a9b9ca3a4abaaadacafb0b2b4b6b7b8b9babcbdbfc4c8c9cacbcccdced0d1d2d5d6d7d9d8dbdedfe0e2e4e5e7e8ea,98:6f70717273748b8e929599a3a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcfd0d4d6d7dbdcdde0e1e2e3e4#e5e6e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,99:0001020304050607,94:e9ebeeeff3f4f5f7f9fcfdff,95:03020607090a0d0e0f1213141516181b1d1e1f222a2b292c3132343637383c3e3f4235444546494c4e4f525354565758595b5e5f5d61626465666768696a6b6c6f7172733a,77:e7ec,96c979:d5ede3eb,7a065d477a:03021e14,99:08090a0b0c0e0f1112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2f303132333435363738393a3b3c3d3e3f40414243444546474849#4a4b4c4d4e4f50515253565758595a5b5c5d5e5f60616264667378797b7e828389,7a:393751,9ecf99a57a7076:888e9399a4,74:dee0,752c9e:202228292a2b2c3231363837393a3e414244464748494b4c4e5155575a5b5c5e63666768696a6b6c716d73,75:929496a09daca3b3b4b8c4b1b0c3c2d6cde3e8e6e4ebe7,760375:f1fcff,76:1000050c170a25181519,99:8c8e9a9b9c9d9e9fa0a1a2a3a4a6a7a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8#d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9,76:1b3c2220402d303f35433e334d5e545c566b6f,7fca7a:e6787980868895a6a0aca8adb3,88:6469727d7f82a2c6b7bcc9e2cee3e5f1,891a88:fce8fef0,89:2119131b0a342b3641667b,758b80e576:b2b4,77dc80:1214161c20222526272928310b3543464d526971,898398:788083,99:fafbfcfdfeff,9a:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738#393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859,98:898c8d8f949a9b9e9fa1a2a5a6,86:4d546c6e7f7a7c7ba88d8bac9da7a3aa93a9b6c4b5ceb0bab1afc9cfb4e9f1f2edf3d0,871386:def4dfd8d1,87:0307,86f887:080a0d09233b1e252e1a3e48343129373f82227d7e7b60704c6e8b53637c64596593afa8d2,9a:5a5b5c5d5e5f606162636465666768696a6b7283898d8e949599a6a9aaabacadaeafb2b3b4b5b9bbbdbebfc3c4c6c7c8c9cacdcecfd0d2d4d5d6d7d9dadbdc#dddee0e2e3e4e5e7e8e9eaeceef0f1f2f3f4f5f6f7f8fafcfdfeff,9b:000102040506,87:c68885ad9783abe5acb5b3cbd3bdd1c0cadbeae0ee,88:1613,87fe88:0a1b21393c,7f:36424445,82107a:fafd,7b:080304150a2b0f47382a192e31202524333e1e585a45754c5d606e7b62727190a6a7b8ac9da885aa9ca2abb4d1c1ccdddae5e6ea,7c0c7b:fefc,7c:0f160b,9b:07090a0b0c0d0e1011121415161718191a1b1c1d1e2021222425262728292a2b2c2d2e3031333435363738393a3d3e3f40464a4b4c4e50525355565758595a#5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b,7c:1f2a26384140,81fe82:010204,81ec884482:2122232d2f282b383b33343e44494b4f5a5f68,88:7e8588d8df,895e7f:9d9fa7afb0b2,7c7c65497c:919d9c9ea2b2bcbdc1c7cccdc8c5d7e8,826e66a87f:bfced5e5e1e6e9eef3,7cf87d:77a6ae,7e:479b,9e:b8b4,8d:73849491b1676d,8c:4749,91:4a504e4f64,9b:7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba#bbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb,91:626170696f7d7e7274798c85908d91a2a3aaadaeafb5b4ba,8c559e7e8d:b8eb,8e:055969,8d:b5bfbcbac4d6d7dadececfdbc6ecf7f8e3f9fbe4,8e098dfd8e:141d1f2c2e232f3a4039353d3149414251524a70767c6f74858f94909c9e,8c:78828a859894,659b89:d6dedadc,9b:dcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9c:000102030405060708090a0b0c0d0e0f101112131415161718191a#1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b,89:e5ebef,8a3e8b26975396:e9f3ef,97:0601080f0e2a2d303e,9f:808385868788898a8c,9efe9f:0b0d,96:b9bcbdced2,77bf96e092:8eaec8,93:3e6aca8f,94:3e6b,9c:7f8285868788,7a239c:8b8e90919294959a9b9e9fa0a1a2a3a5a6a7a8a9abadaeb0b1b2b3b4b5b6b7babbbcbdc4c5c6c7cacb3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a#7b7d7e808384898a8c8f93969798999daaacafb9bebfc0c1c2c8c9d1d2dadbe0e1cccdcecfd0d3d4d5d7d8d9dcdddfe2,97:7c85919294afaba3b2b4,9a:b1b0b7,9e589a:b6babcc1c0c5c2cbccd1,9b:45434749484d51,98e899:0d2e5554,9a:dfe1e6efebfbedf9,9b:080f131f23,9e:bdbe,7e3b9e:8287888b92,93d69e:9d9fdbdcdde0dfe2e9e7e5eaef,9f:222c2f39373d3e44,9c:e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9d:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021#22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142#92$434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081#82838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2#92$a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1#e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9e:000102#92$030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e24272e30343b3c404d5052535456595d5f606162656e6f727475767778797a7b7c7d80#8183848586898a8c8d8e8f90919495969798999a9b9c9ea0a1a2a3a4a5a7a8a9aa#92$abacadaeafb0b1b2b3b5b6b7b9babcbfc0c1c2c3c5c6c7c8cacbccd0d2d3d5d6d7d9dadee1e3e4e6e8ebecedeef0f1f2f3f4f5f6f7f8fafdff,9f:000102030405#060708090a0c0f1112141516181a1b1c1d1e1f21232425262728292a2b2d2e3031#92$3233343536383a3c3f4041424345464748494a4b4c4d4e4f52535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778#797a7b7c7d7e81828d8e8f9091929394959697989c9d9ea1a2a3a4a5,f9:2c7995e7f1#92$,fa:0c0d0e0f111314181f20212324272829,e8:15161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243#4445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364'), + U2Ghash={}, + G2Uhash={}; + !function(data){ + var k=0; + data=data.match(/..../g); + for(var i=0x81;i<=0xfe;i++){ + for(var j=0x40;j<=0xFE;j++){ + U2Ghash[data[k++]]=('%'+i.toString(16)+'%'+j.toString(16)) + .toUpperCase(); + } + } + for(var key in U2Ghash){ + G2Uhash[U2Ghash[key]]=key; + } + }(data); + function isAscii(unicode) { + return ((unicode == 0x20AC) || (unicode <= 0x007F && unicode >= 0x0000)); + } + return{ + encode:function(str){ + return str.replace(/./g,function(a){ + var code=a.charCodeAt(0); + if(isAscii(code)){ + return encodeURIComponent(a); + }else{ + var key=code.toString(16); + if(key.length!=4)key=('000'+key).match(/....$/)[0]; + return U2Ghash[key]||a; + } + }); + }, + decode:function(str){ + return str.replace(/%[0-9A-F]{2}%[0-9A-F]{2}/g,function(a){ + if(a in G2Uhash){ + return String.fromCharCode('0x'+G2Uhash[a]); + }else{ + return a; + } + }).replace(/%[\w]{2}/g,function(a){ + return decodeURIComponent(a); + + }); + } + }; +} \ No newline at end of file diff --git a/drpy_t3/drpy_libs/jinja.js b/drpy_t3/drpy_libs/jinja.js new file mode 100644 index 0000000..5eedf5c --- /dev/null +++ b/drpy_t3/drpy_libs/jinja.js @@ -0,0 +1,577 @@ +/*! + * Jinja Templating for JavaScript v0.1.8 + * https://github.com/sstur/jinja-js + * + * This is a slimmed-down Jinja2 implementation [http://jinja.pocoo.org/] + * + * In the interest of simplicity, it deviates from Jinja2 as follows: + * - Line statements, cycle, super, macro tags and block nesting are not implemented + * - auto escapes html by default (the filter is "html" not "e") + * - Only "html" and "safe" filters are built in + * - Filters are not valid in expressions; `foo|length > 1` is not valid + * - Expression Tests (`if num is odd`) not implemented (`is` translates to `==` and `isnot` to `!=`) + * + * Notes: + * - if property is not found, but method '_get' exists, it will be called with the property name (and cached) + * - `{% for n in obj %}` iterates the object's keys; get the value with `{% for n in obj %}{{ obj[n] }}{% endfor %}` + * - subscript notation `a[0]` takes literals or simple variables but not `a[item.key]` + * - `.2` is not a valid number literal; use `0.2` + * + */ +/*global require, exports, module, define */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.jinja = {})); +})(this, (function (jinja) { + "use strict"; + var STRINGS = /'(\\.|[^'])*'|"(\\.|[^"'"])*"/g; + var IDENTS_AND_NUMS = /([$_a-z][$\w]*)|([+-]?\d+(\.\d+)?)/g; + var NUMBER = /^[+-]?\d+(\.\d+)?$/; + //non-primitive literals (array and object literals) + var NON_PRIMITIVES = /\[[@#~](,[@#~])*\]|\[\]|\{([@i]:[@#~])(,[@i]:[@#~])*\}|\{\}/g; + //bare identifiers such as variables and in object literals: {foo: 'value'} + var IDENTIFIERS = /[$_a-z][$\w]*/ig; + var VARIABLES = /i(\.i|\[[@#i]\])*/g; + var ACCESSOR = /(\.i|\[[@#i]\])/g; + var OPERATORS = /(===?|!==?|>=?|<=?|&&|\|\||[+\-\*\/%])/g; + //extended (english) operators + var EOPS = /(^|[^$\w])(and|or|not|is|isnot)([^$\w]|$)/g; + var LEADING_SPACE = /^\s+/; + var TRAILING_SPACE = /\s+$/; + + var START_TOKEN = /\{\{\{|\{\{|\{%|\{#/; + var TAGS = { + '{{{': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}\}/, + '{{': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}/, + '{%': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?%\}/, + '{#': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?#\}/ + }; + + var delimeters = { + '{%': 'directive', + '{{': 'output', + '{#': 'comment' + }; + + var operators = { + and: '&&', + or: '||', + not: '!', + is: '==', + isnot: '!=' + }; + + var constants = { + 'true': true, + 'false': false, + 'null': null + }; + + function Parser() { + this.nest = []; + this.compiled = []; + this.childBlocks = 0; + this.parentBlocks = 0; + this.isSilent = false; + } + + Parser.prototype.push = function (line) { + if (!this.isSilent) { + this.compiled.push(line); + } + }; + + Parser.prototype.parse = function (src) { + this.tokenize(src); + return this.compiled; + }; + + Parser.prototype.tokenize = function (src) { + var lastEnd = 0, parser = this, trimLeading = false; + matchAll(src, START_TOKEN, function (open, index, src) { + //here we match the rest of the src against a regex for this tag + var match = src.slice(index + open.length).match(TAGS[open]); + match = (match ? match[0] : ''); + //here we sub out strings so we don't get false matches + var simplified = match.replace(STRINGS, '@'); + //if we don't have a close tag or there is a nested open tag + if (!match || ~simplified.indexOf(open)) { + return index + 1; + } + var inner = match.slice(0, 0 - open.length); + //check for white-space collapse syntax + if (inner.charAt(0) === '-') var wsCollapseLeft = true; + if (inner.slice(-1) === '-') var wsCollapseRight = true; + inner = inner.replace(/^-|-$/g, '').trim(); + //if we're in raw mode and we are not looking at an "endraw" tag, move along + if (parser.rawMode && (open + inner) !== '{%endraw') { + return index + 1; + } + var text = src.slice(lastEnd, index); + lastEnd = index + open.length + match.length; + if (trimLeading) text = trimLeft(text); + if (wsCollapseLeft) text = trimRight(text); + if (wsCollapseRight) trimLeading = true; + if (open === '{{{') { + //liquid-style: make {{{x}}} => {{x|safe}} + open = '{{'; + inner += '|safe'; + } + parser.textHandler(text); + parser.tokenHandler(open, inner); + }); + var text = src.slice(lastEnd); + if (trimLeading) text = trimLeft(text); + this.textHandler(text); + }; + + Parser.prototype.textHandler = function (text) { + this.push('write(' + JSON.stringify(text) + ');'); + }; + + Parser.prototype.tokenHandler = function (open, inner) { + var type = delimeters[open]; + if (type === 'directive') { + this.compileTag(inner); + } else if (type === 'output') { + var extracted = this.extractEnt(inner, STRINGS, '@'); + //replace || operators with ~ + extracted.src = extracted.src.replace(/\|\|/g, '~').split('|'); + //put back || operators + extracted.src = extracted.src.map(function (part) { + return part.split('~').join('||'); + }); + var parts = this.injectEnt(extracted, '@'); + if (parts.length > 1) { + var filters = parts.slice(1).map(this.parseFilter.bind(this)); + this.push('filter(' + this.parseExpr(parts[0]) + ',' + filters.join(',') + ');'); + } else { + this.push('filter(' + this.parseExpr(parts[0]) + ');'); + } + } + }; + + Parser.prototype.compileTag = function (str) { + var directive = str.split(' ')[0]; + var handler = tagHandlers[directive]; + if (!handler) { + throw new Error('Invalid tag: ' + str); + } + handler.call(this, str.slice(directive.length).trim()); + }; + + Parser.prototype.parseFilter = function (src) { + src = src.trim(); + var match = src.match(/[:(]/); + var i = match ? match.index : -1; + if (i < 0) return JSON.stringify([src]); + var name = src.slice(0, i); + var args = src.charAt(i) === ':' ? src.slice(i + 1) : src.slice(i + 1, -1); + args = this.parseExpr(args, {terms: true}); + return '[' + JSON.stringify(name) + ',' + args + ']'; + }; + + Parser.prototype.extractEnt = function (src, regex, placeholder) { + var subs = [], isFunc = typeof placeholder == 'function'; + src = src.replace(regex, function (str) { + var replacement = isFunc ? placeholder(str) : placeholder; + if (replacement) { + subs.push(str); + return replacement; + } + return str; + }); + return {src: src, subs: subs}; + }; + + Parser.prototype.injectEnt = function (extracted, placeholder) { + var src = extracted.src, subs = extracted.subs, isArr = Array.isArray(src); + var arr = (isArr) ? src : [src]; + var re = new RegExp('[' + placeholder + ']', 'g'), i = 0; + arr.forEach(function (src, index) { + arr[index] = src.replace(re, function () { + return subs[i++]; + }); + }); + return isArr ? arr : arr[0]; + }; + + //replace complex literals without mistaking subscript notation with array literals + Parser.prototype.replaceComplex = function (s) { + var parsed = this.extractEnt(s, /i(\.i|\[[@#i]\])+/g, 'v'); + parsed.src = parsed.src.replace(NON_PRIMITIVES, '~'); + return this.injectEnt(parsed, 'v'); + }; + + //parse expression containing literals (including objects/arrays) and variables (including dot and subscript notation) + //valid expressions: `a + 1 > b.c or c == null`, `a and b[1] != c`, `(a < b) or (c < d and e)`, 'a || [1]` + Parser.prototype.parseExpr = function (src, opts) { + opts = opts || {}; + //extract string literals -> @ + var parsed1 = this.extractEnt(src, STRINGS, '@'); + //note: this will catch {not: 1} and a.is; could we replace temporarily and then check adjacent chars? + parsed1.src = parsed1.src.replace(EOPS, function (s, before, op, after) { + return (op in operators) ? before + operators[op] + after : s; + }); + //sub out non-string literals (numbers/true/false/null) -> # + // the distinction is necessary because @ can be object identifiers, # cannot + var parsed2 = this.extractEnt(parsed1.src, IDENTS_AND_NUMS, function (s) { + return (s in constants || NUMBER.test(s)) ? '#' : null; + }); + //sub out object/variable identifiers -> i + var parsed3 = this.extractEnt(parsed2.src, IDENTIFIERS, 'i'); + //remove white-space + parsed3.src = parsed3.src.replace(/\s+/g, ''); + + //the rest of this is simply to boil the expression down and check validity + var simplified = parsed3.src; + //sub out complex literals (objects/arrays) -> ~ + // the distinction is necessary because @ and # can be subscripts but ~ cannot + while (simplified !== (simplified = this.replaceComplex(simplified))) ; + //now @ represents strings, # represents other primitives and ~ represents non-primitives + //replace complex variables (those with dot/subscript accessors) -> v + while (simplified !== (simplified = simplified.replace(/i(\.i|\[[@#i]\])+/, 'v'))) ; + //empty subscript or complex variables in subscript, are not permitted + simplified = simplified.replace(/[iv]\[v?\]/g, 'x'); + //sub in "i" for @ and # and ~ and v (now "i" represents all literals, variables and identifiers) + simplified = simplified.replace(/[@#~v]/g, 'i'); + //sub out operators + simplified = simplified.replace(OPERATORS, '%'); + //allow 'not' unary operator + simplified = simplified.replace(/!+[i]/g, 'i'); + var terms = opts.terms ? simplified.split(',') : [simplified]; + terms.forEach(function (term) { + //simplify logical grouping + while (term !== (term = term.replace(/\(i(%i)*\)/g, 'i'))) ; + if (!term.match(/^i(%i)*/)) { + throw new Error('Invalid expression: ' + src + " " + term); + } + }); + parsed3.src = parsed3.src.replace(VARIABLES, this.parseVar.bind(this)); + parsed2.src = this.injectEnt(parsed3, 'i'); + parsed1.src = this.injectEnt(parsed2, '#'); + return this.injectEnt(parsed1, '@'); + }; + + Parser.prototype.parseVar = function (src) { + var args = Array.prototype.slice.call(arguments); + var str = args.pop(), index = args.pop(); + //quote bare object identifiers (might be a reserved word like {while: 1}) + if (src === 'i' && str.charAt(index + 1) === ':') { + return '"i"'; + } + var parts = ['"i"']; + src.replace(ACCESSOR, function (part) { + if (part === '.i') { + parts.push('"i"'); + } else if (part === '[i]') { + parts.push('get("i")'); + } else { + parts.push(part.slice(1, -1)); + } + }); + return 'get(' + parts.join(',') + ')'; + }; + + //escapes a name to be used as a javascript identifier + Parser.prototype.escName = function (str) { + return str.replace(/\W/g, function (s) { + return '$' + s.charCodeAt(0).toString(16); + }); + }; + + Parser.prototype.parseQuoted = function (str) { + if (str.charAt(0) === "'") { + str = str.slice(1, -1).replace(/\\.|"/, function (s) { + if (s === "\\'") return "'"; + return s.charAt(0) === '\\' ? s : ('\\' + s); + }); + str = '"' + str + '"'; + } + //todo: try/catch or deal with invalid characters (linebreaks, control characters) + return JSON.parse(str); + }; + + + //the context 'this' inside tagHandlers is the parser instance + var tagHandlers = { + 'if': function (expr) { + this.push('if (' + this.parseExpr(expr) + ') {'); + this.nest.unshift('if'); + }, + 'else': function () { + if (this.nest[0] === 'for') { + this.push('}, function() {'); + } else { + this.push('} else {'); + } + }, + 'elseif': function (expr) { + this.push('} else if (' + this.parseExpr(expr) + ') {'); + }, + 'endif': function () { + this.nest.shift(); + this.push('}'); + }, + 'for': function (str) { + var i = str.indexOf(' in '); + var name = str.slice(0, i).trim(); + var expr = str.slice(i + 4).trim(); + this.push('each(' + this.parseExpr(expr) + ',' + JSON.stringify(name) + ',function() {'); + this.nest.unshift('for'); + }, + 'endfor': function () { + this.nest.shift(); + this.push('});'); + }, + 'raw': function () { + this.rawMode = true; + }, + 'endraw': function () { + this.rawMode = false; + }, + 'set': function (stmt) { + var i = stmt.indexOf('='); + var name = stmt.slice(0, i).trim(); + var expr = stmt.slice(i + 1).trim(); + this.push('set(' + JSON.stringify(name) + ',' + this.parseExpr(expr) + ');'); + }, + 'block': function (name) { + if (this.isParent) { + ++this.parentBlocks; + var blockName = 'block_' + (this.escName(name) || this.parentBlocks); + this.push('block(typeof ' + blockName + ' == "function" ? ' + blockName + ' : function() {'); + } else if (this.hasParent) { + this.isSilent = false; + ++this.childBlocks; + blockName = 'block_' + (this.escName(name) || this.childBlocks); + this.push('function ' + blockName + '() {'); + } + this.nest.unshift('block'); + }, + 'endblock': function () { + this.nest.shift(); + if (this.isParent) { + this.push('});'); + } else if (this.hasParent) { + this.push('}'); + this.isSilent = true; + } + }, + 'extends': function (name) { + name = this.parseQuoted(name); + var parentSrc = this.readTemplateFile(name); + this.isParent = true; + this.tokenize(parentSrc); + this.isParent = false; + this.hasParent = true; + //silence output until we enter a child block + this.isSilent = true; + }, + 'include': function (name) { + name = this.parseQuoted(name); + var incSrc = this.readTemplateFile(name); + this.isInclude = true; + this.tokenize(incSrc); + this.isInclude = false; + } + }; + + //liquid style + tagHandlers.assign = tagHandlers.set; + //python/django style + tagHandlers.elif = tagHandlers.elseif; + + var getRuntime = function runtime(data, opts) { + var defaults = {autoEscape: 'toJson'}; + var _toString = Object.prototype.toString; + var _hasOwnProperty = Object.prototype.hasOwnProperty; + var getKeys = Object.keys || function (obj) { + var keys = []; + for (var n in obj) if (_hasOwnProperty.call(obj, n)) keys.push(n); + return keys; + }; + var isArray = Array.isArray || function (obj) { + return _toString.call(obj) === '[object Array]'; + }; + var create = Object.create || function (obj) { + function F() { + } + + F.prototype = obj; + return new F(); + }; + var toString = function (val) { + if (val == null) return ''; + return (typeof val.toString == 'function') ? val.toString() : _toString.call(val); + }; + var extend = function (dest, src) { + var keys = getKeys(src); + for (var i = 0, len = keys.length; i < len; i++) { + var key = keys[i]; + dest[key] = src[key]; + } + return dest; + }; + //get a value, lexically, starting in current context; a.b -> get("a","b") + var get = function () { + var val, n = arguments[0], c = stack.length; + while (c--) { + val = stack[c][n]; + if (typeof val != 'undefined') break; + } + for (var i = 1, len = arguments.length; i < len; i++) { + if (val == null) continue; + n = arguments[i]; + val = (_hasOwnProperty.call(val, n)) ? val[n] : (typeof val._get == 'function' ? (val[n] = val._get(n)) : null); + } + return (val == null) ? '' : val; + }; + var set = function (n, val) { + stack[stack.length - 1][n] = val; + }; + var push = function (ctx) { + stack.push(ctx || {}); + }; + var pop = function () { + stack.pop(); + }; + var write = function (str) { + output.push(str); + }; + var filter = function (val) { + for (var i = 1, len = arguments.length; i < len; i++) { + var arr = arguments[i], name = arr[0], filter = filters[name]; + if (filter) { + arr[0] = val; + //now arr looks like [val, arg1, arg2] + val = filter.apply(data, arr); + } else { + throw new Error('Invalid filter: ' + name); + } + } + if (opts.autoEscape && name !== opts.autoEscape && name !== 'safe') { + //auto escape if not explicitly safe or already escaped + val = filters[opts.autoEscape].call(data, val); + } + output.push(val); + }; + var each = function (obj, loopvar, fn1, fn2) { + if (obj == null) return; + var arr = isArray(obj) ? obj : getKeys(obj), len = arr.length; + var ctx = {loop: {length: len, first: arr[0], last: arr[len - 1]}}; + push(ctx); + for (var i = 0; i < len; i++) { + extend(ctx.loop, {index: i + 1, index0: i}); + fn1(ctx[loopvar] = arr[i]); + } + if (len === 0 && fn2) fn2(); + pop(); + }; + var block = function (fn) { + push(); + fn(); + pop(); + }; + var render = function () { + return output.join(''); + }; + data = data || {}; + opts = extend(defaults, opts || {}); + var filters = extend({ + html: function (val) { + return toString(val) + .split('&').join('&') + .split('<').join('<') + .split('>').join('>') + .split('"').join('"'); + }, + safe: function (val) { + return val; + }, + toJson: function (val) { + if (typeof val === 'object') { + return JSON.stringify(val); + } + return toString(val); + } + }, opts.filters || {}); + var stack = [create(data || {})], output = []; + return { + get: get, + set: set, + push: push, + pop: pop, + write: write, + filter: filter, + each: each, + block: block, + render: render + }; + }; + + var runtime; + + jinja.compile = function (markup, opts) { + opts = opts || {}; + var parser = new Parser(); + parser.readTemplateFile = this.readTemplateFile; + var code = []; + code.push('function render($) {'); + code.push('var get = $.get, set = $.set, push = $.push, pop = $.pop, write = $.write, filter = $.filter, each = $.each, block = $.block;'); + code.push.apply(code, parser.parse(markup)); + code.push('return $.render();'); + code.push('}'); + code = code.join('\n'); + if (opts.runtime === false) { + var fn = new Function('data', 'options', 'return (' + code + ')(runtime(data, options))'); + } else { + runtime = runtime || (runtime = getRuntime.toString()); + fn = new Function('data', 'options', 'return (' + code + ')((' + runtime + ')(data, options))'); + } + return {render: fn}; + }; + + jinja.render = function (markup, data, opts) { + var tmpl = jinja.compile(markup); + return tmpl.render(data, opts); + }; + + jinja.templateFiles = []; + + jinja.readTemplateFile = function (name) { + var templateFiles = this.templateFiles || []; + var templateFile = templateFiles[name]; + if (templateFile == null) { + throw new Error('Template file not found: ' + name); + } + return templateFile; + }; + + + /*! + * Helpers + */ + + function trimLeft(str) { + return str.replace(LEADING_SPACE, ''); + } + + function trimRight(str) { + return str.replace(TRAILING_SPACE, ''); + } + + function matchAll(str, reg, fn) { + //copy as global + reg = new RegExp(reg.source, 'g' + (reg.ignoreCase ? 'i' : '') + (reg.multiline ? 'm' : '')); + var match; + while ((match = reg.exec(str))) { + var result = fn(match[0], match.index, str); + if (typeof result == 'number') { + reg.lastIndex = result; + } + } + } +})); \ No newline at end of file diff --git a/drpy_t3/drpy_libs/jinja.min.js b/drpy_t3/drpy_libs/jinja.min.js new file mode 100644 index 0000000..474d996 --- /dev/null +++ b/drpy_t3/drpy_libs/jinja.min.js @@ -0,0 +1 @@ +(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?factory(exports):typeof define==="function"&&define.amd?define(["exports"],factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,factory(global.jinja={}))})(this,function(jinja){"use strict";var STRINGS=/'(\\.|[^'])*'|"(\\.|[^"'"])*"/g;var IDENTS_AND_NUMS=/([$_a-z][$\w]*)|([+-]?\d+(\.\d+)?)/g;var NUMBER=/^[+-]?\d+(\.\d+)?$/;var NON_PRIMITIVES=/\[[@#~](,[@#~])*\]|\[\]|\{([@i]:[@#~])(,[@i]:[@#~])*\}|\{\}/g;var IDENTIFIERS=/[$_a-z][$\w]*/gi;var VARIABLES=/i(\.i|\[[@#i]\])*/g;var ACCESSOR=/(\.i|\[[@#i]\])/g;var OPERATORS=/(===?|!==?|>=?|<=?|&&|\|\||[+\-\*\/%])/g;var EOPS=/(^|[^$\w])(and|or|not|is|isnot)([^$\w]|$)/g;var LEADING_SPACE=/^\s+/;var TRAILING_SPACE=/\s+$/;var START_TOKEN=/\{\{\{|\{\{|\{%|\{#/;var TAGS={"{{{":/^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}\}/,"{{":/^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}/,"{%":/^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?%\}/,"{#":/^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?#\}/};var delimeters={"{%":"directive","{{":"output","{#":"comment"};var operators={and:"&&",or:"||",not:"!",is:"==",isnot:"!="};var constants={true:true,false:false,null:null};function Parser(){this.nest=[];this.compiled=[];this.childBlocks=0;this.parentBlocks=0;this.isSilent=false}Parser.prototype.push=function(line){if(!this.isSilent){this.compiled.push(line)}};Parser.prototype.parse=function(src){this.tokenize(src);return this.compiled};Parser.prototype.tokenize=function(src){var lastEnd=0,parser=this,trimLeading=false;matchAll(src,START_TOKEN,function(open,index,src){var match=src.slice(index+open.length).match(TAGS[open]);match=match?match[0]:"";var simplified=match.replace(STRINGS,"@");if(!match||~simplified.indexOf(open)){return index+1}var inner=match.slice(0,0-open.length);if(inner.charAt(0)==="-")var wsCollapseLeft=true;if(inner.slice(-1)==="-")var wsCollapseRight=true;inner=inner.replace(/^-|-$/g,"").trim();if(parser.rawMode&&open+inner!=="{%endraw"){return index+1}var text=src.slice(lastEnd,index);lastEnd=index+open.length+match.length;if(trimLeading)text=trimLeft(text);if(wsCollapseLeft)text=trimRight(text);if(wsCollapseRight)trimLeading=true;if(open==="{{{"){open="{{";inner+="|safe"}parser.textHandler(text);parser.tokenHandler(open,inner)});var text=src.slice(lastEnd);if(trimLeading)text=trimLeft(text);this.textHandler(text)};Parser.prototype.textHandler=function(text){this.push("write("+JSON.stringify(text)+");")};Parser.prototype.tokenHandler=function(open,inner){var type=delimeters[open];if(type==="directive"){this.compileTag(inner)}else if(type==="output"){var extracted=this.extractEnt(inner,STRINGS,"@");extracted.src=extracted.src.replace(/\|\|/g,"~").split("|");extracted.src=extracted.src.map(function(part){return part.split("~").join("||")});var parts=this.injectEnt(extracted,"@");if(parts.length>1){var filters=parts.slice(1).map(this.parseFilter.bind(this));this.push("filter("+this.parseExpr(parts[0])+","+filters.join(",")+");")}else{this.push("filter("+this.parseExpr(parts[0])+");")}}};Parser.prototype.compileTag=function(str){var directive=str.split(" ")[0];var handler=tagHandlers[directive];if(!handler){throw new Error("Invalid tag: "+str)}handler.call(this,str.slice(directive.length).trim())};Parser.prototype.parseFilter=function(src){src=src.trim();var match=src.match(/[:(]/);var i=match?match.index:-1;if(i<0)return JSON.stringify([src]);var name=src.slice(0,i);var args=src.charAt(i)===":"?src.slice(i+1):src.slice(i+1,-1);args=this.parseExpr(args,{terms:true});return"["+JSON.stringify(name)+","+args+"]"};Parser.prototype.extractEnt=function(src,regex,placeholder){var subs=[],isFunc=typeof placeholder=="function";src=src.replace(regex,function(str){var replacement=isFunc?placeholder(str):placeholder;if(replacement){subs.push(str);return replacement}return str});return{src:src,subs:subs}};Parser.prototype.injectEnt=function(extracted,placeholder){var src=extracted.src,subs=extracted.subs,isArr=Array.isArray(src);var arr=isArr?src:[src];var re=new RegExp("["+placeholder+"]","g"),i=0;arr.forEach(function(src,index){arr[index]=src.replace(re,function(){return subs[i++]})});return isArr?arr:arr[0]};Parser.prototype.replaceComplex=function(s){var parsed=this.extractEnt(s,/i(\.i|\[[@#i]\])+/g,"v");parsed.src=parsed.src.replace(NON_PRIMITIVES,"~");return this.injectEnt(parsed,"v")};Parser.prototype.parseExpr=function(src,opts){opts=opts||{};var parsed1=this.extractEnt(src,STRINGS,"@");parsed1.src=parsed1.src.replace(EOPS,function(s,before,op,after){return op in operators?before+operators[op]+after:s});var parsed2=this.extractEnt(parsed1.src,IDENTS_AND_NUMS,function(s){return s in constants||NUMBER.test(s)?"#":null});var parsed3=this.extractEnt(parsed2.src,IDENTIFIERS,"i");parsed3.src=parsed3.src.replace(/\s+/g,"");var simplified=parsed3.src;while(simplified!==(simplified=this.replaceComplex(simplified)));while(simplified!==(simplified=simplified.replace(/i(\.i|\[[@#i]\])+/,"v")));simplified=simplified.replace(/[iv]\[v?\]/g,"x");simplified=simplified.replace(/[@#~v]/g,"i");simplified=simplified.replace(OPERATORS,"%");simplified=simplified.replace(/!+[i]/g,"i");var terms=opts.terms?simplified.split(","):[simplified];terms.forEach(function(term){while(term!==(term=term.replace(/\(i(%i)*\)/g,"i")));if(!term.match(/^i(%i)*/)){throw new Error("Invalid expression: "+src+" "+term)}});parsed3.src=parsed3.src.replace(VARIABLES,this.parseVar.bind(this));parsed2.src=this.injectEnt(parsed3,"i");parsed1.src=this.injectEnt(parsed2,"#");return this.injectEnt(parsed1,"@")};Parser.prototype.parseVar=function(src){var args=Array.prototype.slice.call(arguments);var str=args.pop(),index=args.pop();if(src==="i"&&str.charAt(index+1)===":"){return'"i"'}var parts=['"i"'];src.replace(ACCESSOR,function(part){if(part===".i"){parts.push('"i"')}else if(part==="[i]"){parts.push('get("i")')}else{parts.push(part.slice(1,-1))}});return"get("+parts.join(",")+")"};Parser.prototype.escName=function(str){return str.replace(/\W/g,function(s){return"$"+s.charCodeAt(0).toString(16)})};Parser.prototype.parseQuoted=function(str){if(str.charAt(0)==="'"){str=str.slice(1,-1).replace(/\\.|"/,function(s){if(s==="\\'")return"'";return s.charAt(0)==="\\"?s:"\\"+s});str='"'+str+'"'}return JSON.parse(str)};var tagHandlers={if:function(expr){this.push("if ("+this.parseExpr(expr)+") {");this.nest.unshift("if")},else:function(){if(this.nest[0]==="for"){this.push("}, function() {")}else{this.push("} else {")}},elseif:function(expr){this.push("} else if ("+this.parseExpr(expr)+") {")},endif:function(){this.nest.shift();this.push("}")},for:function(str){var i=str.indexOf(" in ");var name=str.slice(0,i).trim();var expr=str.slice(i+4).trim();this.push("each("+this.parseExpr(expr)+","+JSON.stringify(name)+",function() {");this.nest.unshift("for")},endfor:function(){this.nest.shift();this.push("});")},raw:function(){this.rawMode=true},endraw:function(){this.rawMode=false},set:function(stmt){var i=stmt.indexOf("=");var name=stmt.slice(0,i).trim();var expr=stmt.slice(i+1).trim();this.push("set("+JSON.stringify(name)+","+this.parseExpr(expr)+");")},block:function(name){if(this.isParent){++this.parentBlocks;var blockName="block_"+(this.escName(name)||this.parentBlocks);this.push("block(typeof "+blockName+' == "function" ? '+blockName+" : function() {")}else if(this.hasParent){this.isSilent=false;++this.childBlocks;blockName="block_"+(this.escName(name)||this.childBlocks);this.push("function "+blockName+"() {")}this.nest.unshift("block")},endblock:function(){this.nest.shift();if(this.isParent){this.push("});")}else if(this.hasParent){this.push("}");this.isSilent=true}},extends:function(name){name=this.parseQuoted(name);var parentSrc=this.readTemplateFile(name);this.isParent=true;this.tokenize(parentSrc);this.isParent=false;this.hasParent=true;this.isSilent=true},include:function(name){name=this.parseQuoted(name);var incSrc=this.readTemplateFile(name);this.isInclude=true;this.tokenize(incSrc);this.isInclude=false}};tagHandlers.assign=tagHandlers.set;tagHandlers.elif=tagHandlers.elseif;var getRuntime=function runtime(data,opts){var defaults={autoEscape:"toJson"};var _toString=Object.prototype.toString;var _hasOwnProperty=Object.prototype.hasOwnProperty;var getKeys=Object.keys||function(obj){var keys=[];for(var n in obj)if(_hasOwnProperty.call(obj,n))keys.push(n);return keys};var isArray=Array.isArray||function(obj){return _toString.call(obj)==="[object Array]"};var create=Object.create||function(obj){function F(){}F.prototype=obj;return new F};var toString=function(val){if(val==null)return"";return typeof val.toString=="function"?val.toString():_toString.call(val)};var extend=function(dest,src){var keys=getKeys(src);for(var i=0,len=keys.length;i").join(">").split('"').join(""")},safe:function(val){return val},toJson:function(val){if(typeof val==="object"){return JSON.stringify(val)}return toString(val)}},opts.filters||{});var stack=[create(data||{})],output=[];return{get:get,set:set,push:push,pop:pop,write:write,filter:filter,each:each,block:block,render:render}};var runtime;jinja.compile=function(markup,opts){opts=opts||{};var parser=new Parser;parser.readTemplateFile=this.readTemplateFile;var code=[];code.push("function render($) {");code.push("var get = $.get, set = $.set, push = $.push, pop = $.pop, write = $.write, filter = $.filter, each = $.each, block = $.block;");code.push.apply(code,parser.parse(markup));code.push("return $.render();");code.push("}");code=code.join("\n");if(opts.runtime===false){var fn=new Function("data","options","return ("+code+")(runtime(data, options))")}else{runtime=runtime||(runtime=getRuntime.toString());fn=new Function("data","options","return ("+code+")(("+runtime+")(data, options))")}return{render:fn}};jinja.render=function(markup,data,opts){var tmpl=jinja.compile(markup);return tmpl.render(data,opts)};jinja.templateFiles=[];jinja.readTemplateFile=function(name){var templateFiles=this.templateFiles||[];var templateFile=templateFiles[name];if(templateFile==null){throw new Error("Template file not found: "+name)}return templateFile};function trimLeft(str){return str.replace(LEADING_SPACE,"")}function trimRight(str){return str.replace(TRAILING_SPACE,"")}function matchAll(str,reg,fn){reg=new RegExp(reg.source,"g"+(reg.ignoreCase?"i":"")+(reg.multiline?"m":""));var match;while(match=reg.exec(str)){var result=fn(match[0],match.index,str);if(typeof result=="number"){reg.lastIndex=result}}}}); \ No newline at end of file diff --git a/drpy_t3/drpy_libs/jsencrypt.js b/drpy_t3/drpy_libs/jsencrypt.js new file mode 100644 index 0000000..fa3006c --- /dev/null +++ b/drpy_t3/drpy_libs/jsencrypt.js @@ -0,0 +1,265 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(function webpackUniversalModuleDefinition(root, factory) { + if (typeof exports === 'object' && typeof module === 'object') { + // CommonJS + module.exports = exports = factory(); + } else if (typeof define === 'function' && define.amd) { + // AMD + define([], factory); + } else { + // Global (browser) + globalThis.JSEncrypt = factory(); + } +})(this, () => { +return /******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./lib/JSEncrypt.js": +/*!**************************!*\ + !*** ./lib/JSEncrypt.js ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncrypt\": () => (/* binding */ JSEncrypt)\n/* harmony export */ });\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ \"./lib/lib/jsbn/base64.js\");\n/* harmony import */ var _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./JSEncryptRSAKey */ \"./lib/JSEncryptRSAKey.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process/browser */ \"./node_modules/process/browser.js\");\nvar _a;\n\n\nvar version = typeof process !== 'undefined'\n ? (_a = process.env) === null || _a === void 0 ? void 0 : \"3.3.2\"\n : undefined;\n/**\n *\n * @param {Object} [options = {}] - An object to customize JSEncrypt behaviour\n * possible parameters are:\n * - default_key_size {number} default: 1024 the key size in bit\n * - default_public_exponent {string} default: '010001' the hexadecimal representation of the public exponent\n * - log {boolean} default: false whether log warn/error or not\n * @constructor\n */\nvar JSEncrypt = /** @class */ (function () {\n function JSEncrypt(options) {\n if (options === void 0) { options = {}; }\n options = options || {};\n this.default_key_size = options.default_key_size\n ? parseInt(options.default_key_size, 10)\n : 1024;\n this.default_public_exponent = options.default_public_exponent || \"010001\"; // 65537 default openssl public exponent for rsa key type\n this.log = options.log || false;\n // The private and public key.\n this.key = null;\n }\n /**\n * Method to set the rsa key parameter (one method is enough to set both the public\n * and the private key, since the private key contains the public key paramenters)\n * Log a warning if logs are enabled\n * @param {Object|string} key the pem encoded string or an object (with or without header/footer)\n * @public\n */\n JSEncrypt.prototype.setKey = function (key) {\n if (this.log && this.key) {\n console.warn(\"A key was already set, overriding existing.\");\n }\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey(key);\n };\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n JSEncrypt.prototype.setPrivateKey = function (privkey) {\n // Create the key.\n this.setKey(privkey);\n };\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n JSEncrypt.prototype.setPublicKey = function (pubkey) {\n // Sets the public key.\n this.setKey(pubkey);\n };\n /**\n * Proxy method for RSAKey object's decrypt, decrypt the string using the private\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str base64 encoded crypted string to decrypt\n * @return {string} the decrypted string\n * @public\n */\n JSEncrypt.prototype.decrypt = function (str) {\n // Return the decrypted string.\n try {\n return this.getKey().decrypt((0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(str));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's encrypt, encrypt the string using the public\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str the string to encrypt\n * @return {string} the encrypted string encoded in base64\n * @public\n */\n JSEncrypt.prototype.encrypt = function (str) {\n // Return the encrypted string.\n try {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().encrypt(str));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's sign.\n * @param {string} str the string to sign\n * @param {function} digestMethod hash method\n * @param {string} digestName the name of the hash algorithm\n * @return {string} the signature encoded in base64\n * @public\n */\n JSEncrypt.prototype.sign = function (str, digestMethod, digestName) {\n // return the RSA signature of 'str' in 'hex' format.\n try {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().sign(str, digestMethod, digestName));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's verify.\n * @param {string} str the string to verify\n * @param {string} signature the signature encoded in base64 to compare the string to\n * @param {function} digestMethod hash method\n * @return {boolean} whether the data and signature match\n * @public\n */\n JSEncrypt.prototype.verify = function (str, signature, digestMethod) {\n // Return the decrypted 'digest' of the signature.\n try {\n return this.getKey().verify(str, (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(signature), digestMethod);\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object\n * will be created and returned\n * @param {callback} [cb] the callback to be called if we want the key to be generated\n * in an async fashion\n * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object\n * @public\n */\n JSEncrypt.prototype.getKey = function (cb) {\n // Only create new if it does not exist.\n if (!this.key) {\n // Get a new private key.\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey();\n if (cb && {}.toString.call(cb) === \"[object Function]\") {\n this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb);\n return;\n }\n // Generate the key.\n this.key.generate(this.default_key_size, this.default_public_exponent);\n }\n return this.key;\n };\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITH header and footer\n * @public\n */\n JSEncrypt.prototype.getPrivateKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateKey();\n };\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITHOUT header and footer\n * @public\n */\n JSEncrypt.prototype.getPrivateKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateBaseKeyB64();\n };\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITH header and footer\n * @public\n */\n JSEncrypt.prototype.getPublicKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicKey();\n };\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITHOUT header and footer\n * @public\n */\n JSEncrypt.prototype.getPublicKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicBaseKeyB64();\n };\nvar b64map=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";var b64pad=\"=\";var base64DecodeChars=new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);function btoa(str){var out,i,len;var c1,c2,c3;len=str.length;i=0;out=\"\";while(i>2);out+=b64map.charAt((c1&3)<<4);out+=\"==\";break}c2=str.charCodeAt(i++);if(i==len){out+=b64map.charAt(c1>>2);out+=b64map.charAt((c1&3)<<4|(c2&240)>>4);out+=b64map.charAt((c2&15)<<2);out+=\"=\";break}c3=str.charCodeAt(i++);out+=b64map.charAt(c1>>2);out+=b64map.charAt((c1&3)<<4|(c2&240)>>4);out+=b64map.charAt((c2&15)<<2|(c3&192)>>6);out+=b64map.charAt(c3&63)}return out}function atob(str){var c1,c2,c3,c4;var i,len,out;len=str.length;i=0;out=\"\";while(i>4);do{c3=str.charCodeAt(i++)&255;if(c3==61)return out;c3=base64DecodeChars[c3]}while(i>2);do{c4=str.charCodeAt(i++)&255;if(c4==61)return out;c4=base64DecodeChars[c4]}while(i>6)+b64map.charAt(c&63)}if(i+1==h.length){c=parseInt(h.substring(i,i+1),16);ret+=b64map.charAt(c<<2)}else if(i+2==h.length){c=parseInt(h.substring(i,i+2),16);ret+=b64map.charAt(c>>2)+b64map.charAt((c&3)<<4)}while((ret.length&3)>0)ret+=b64pad;return ret}function hexToBytes(hex){for(var bytes=[],c=0;c>>4).toString(16));hex.push((bytes[i]&15).toString(16))}return hex.join(\"\")}function b64tohex(str){for(var i=0,bin=atob(str.replace(/[ \\r\\n]+$/,\"\")),hex=[];i>3};JSEncrypt.prototype.decryptUnicodeLong=function(string){var k=this.getKey();var maxLength=(k.n.bitLength()+7>>3)*2;try{var hexString=b64tohex(string);var decryptedString=\"\";var rexStr=\".{1,\"+maxLength+\"}\";var rex=new RegExp(rexStr,\"g\");var subStrArray=hexString.match(rex);if(subStrArray){subStrArray.forEach(function(entry){decryptedString+=k.decrypt(entry)});return decryptedString}}catch(ex){console.log(\"加密错误:\"+ex.message);return false}};JSEncrypt.prototype.encryptUnicodeLong=function(string){var k=this.getKey();var maxLength=(k.n.bitLength()+7>>3)-11;try{var subStr=\"\",encryptedString=\"\";var subStart=0,subEnd=0;var bitLen=0,tmpPoint=0;for(var i=0,len=string.length;imaxLength){subStr=string.substring(subStart,subEnd);encryptedString+=k.encrypt(subStr);subStart=subEnd;bitLen=bitLen-tmpPoint}else{subEnd=i;tmpPoint=bitLen}}subStr=string.substring(subStart,len);encryptedString+=k.encrypt(subStr);return hex2b64(encryptedString)}catch(ex){console.log(\"解密错误:\"+ex.message);return false}}; JSEncrypt.version = version;\n return JSEncrypt;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/JSEncrypt.js?"); + +/***/ }), + +/***/ "./lib/JSEncryptRSAKey.js": +/*!********************************!*\ + !*** ./lib/JSEncryptRSAKey.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncryptRSAKey\": () => (/* binding */ JSEncryptRSAKey)\n/* harmony export */ });\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ \"./lib/lib/jsbn/base64.js\");\n/* harmony import */ var _lib_asn1js_hex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/asn1js/hex */ \"./lib/lib/asn1js/hex.js\");\n/* harmony import */ var _lib_asn1js_base64__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/asn1js/base64 */ \"./lib/lib/asn1js/base64.js\");\n/* harmony import */ var _lib_asn1js_asn1__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/asn1js/asn1 */ \"./lib/lib/asn1js/asn1.js\");\n/* harmony import */ var _lib_jsbn_rsa__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/jsbn/rsa */ \"./lib/lib/jsbn/rsa.js\");\n/* harmony import */ var _lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/jsbn/jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/jsrsasign/asn1-1.0 */ \"./lib/lib/jsrsasign/asn1-1.0.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n/**\n * Create a new JSEncryptRSAKey that extends Tom Wu's RSA key object.\n * This object is just a decorator for parsing the key parameter\n * @param {string|Object} key - The key in string format, or an object containing\n * the parameters needed to build a RSAKey object.\n * @constructor\n */\nvar JSEncryptRSAKey = /** @class */ (function (_super) {\n __extends(JSEncryptRSAKey, _super);\n function JSEncryptRSAKey(key) {\n var _this = _super.call(this) || this;\n // Call the super constructor.\n // RSAKey.call(this);\n // If a key key was provided.\n if (key) {\n // If this is a string...\n if (typeof key === \"string\") {\n _this.parseKey(key);\n }\n else if (JSEncryptRSAKey.hasPrivateKeyProperty(key) ||\n JSEncryptRSAKey.hasPublicKeyProperty(key)) {\n // Set the values for the key.\n _this.parsePropertiesFrom(key);\n }\n }\n return _this;\n }\n /**\n * Method to parse a pem encoded string containing both a public or private key.\n * The method will translate the pem encoded string in a der encoded string and\n * will parse private key and public key parameters. This method accepts public key\n * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1).\n *\n * @todo Check how many rsa formats use the same format of pkcs #1.\n *\n * The format is defined as:\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * it's possible to examine the structure of the keys obtained from openssl using\n * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/\n * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer\n * @private\n */\n JSEncryptRSAKey.prototype.parseKey = function (pem) {\n try {\n var modulus = 0;\n var public_exponent = 0;\n var reHex = /^\\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\\s*)+$/;\n var der = reHex.test(pem) ? _lib_asn1js_hex__WEBPACK_IMPORTED_MODULE_1__.Hex.decode(pem) : _lib_asn1js_base64__WEBPACK_IMPORTED_MODULE_2__.Base64.unarmor(pem);\n var asn1 = _lib_asn1js_asn1__WEBPACK_IMPORTED_MODULE_3__.ASN1.decode(der);\n // Fixes a bug with OpenSSL 1.0+ private keys\n if (asn1.sub.length === 3) {\n asn1 = asn1.sub[2].sub[0];\n }\n if (asn1.sub.length === 9) {\n // Parse the private key.\n modulus = asn1.sub[1].getHexStringValue(); // bigint\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = asn1.sub[2].getHexStringValue(); // int\n this.e = parseInt(public_exponent, 16);\n var private_exponent = asn1.sub[3].getHexStringValue(); // bigint\n this.d = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(private_exponent, 16);\n var prime1 = asn1.sub[4].getHexStringValue(); // bigint\n this.p = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(prime1, 16);\n var prime2 = asn1.sub[5].getHexStringValue(); // bigint\n this.q = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(prime2, 16);\n var exponent1 = asn1.sub[6].getHexStringValue(); // bigint\n this.dmp1 = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(exponent1, 16);\n var exponent2 = asn1.sub[7].getHexStringValue(); // bigint\n this.dmq1 = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(exponent2, 16);\n var coefficient = asn1.sub[8].getHexStringValue(); // bigint\n this.coeff = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(coefficient, 16);\n }\n else if (asn1.sub.length === 2) {\n if (asn1.sub[0].sub) {\n // Parse ASN.1 SubjectPublicKeyInfo type as defined by X.509\n var bit_string = asn1.sub[1];\n var sequence = bit_string.sub[0];\n modulus = sequence.sub[0].getHexStringValue();\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = sequence.sub[1].getHexStringValue();\n this.e = parseInt(public_exponent, 16);\n }\n else {\n // Parse ASN.1 RSAPublicKey type as defined by PKCS #1\n modulus = asn1.sub[0].getHexStringValue();\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = asn1.sub[1].getHexStringValue();\n this.e = parseInt(public_exponent, 16);\n }\n }\n else {\n return false;\n }\n return true;\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa key.\n *\n * The translation follow the ASN.1 notation :\n * RSAPrivateKey ::= SEQUENCE {\n * version Version,\n * modulus INTEGER, -- n\n * publicExponent INTEGER, -- e\n * privateExponent INTEGER, -- d\n * prime1 INTEGER, -- p\n * prime2 INTEGER, -- q\n * exponent1 INTEGER, -- d mod (p1)\n * exponent2 INTEGER, -- d mod (q-1)\n * coefficient INTEGER, -- (inverse of q) mod p\n * }\n * @returns {string} DER Encoded String representing the rsa private key\n * @private\n */\n JSEncryptRSAKey.prototype.getPrivateBaseKey = function () {\n var options = {\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: 0 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.n }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: this.e }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.d }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.p }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.q }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.dmp1 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.dmq1 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.coeff }),\n ],\n };\n var seq = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence(options);\n return seq.getEncodedHex();\n };\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPrivateBaseKeyB64 = function () {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getPrivateBaseKey());\n };\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa public key.\n * The representation follow the ASN.1 notation :\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * @returns {string} DER Encoded String representing the rsa public key\n * @private\n */\n JSEncryptRSAKey.prototype.getPublicBaseKey = function () {\n var first_sequence = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERObjectIdentifier({ oid: \"1.2.840.113549.1.1.1\" }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERNull(),\n ],\n });\n var second_sequence = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.n }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: this.e }),\n ],\n });\n var bit_string = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERBitString({\n hex: \"00\" + second_sequence.getEncodedHex(),\n });\n var seq = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [first_sequence, bit_string],\n });\n return seq.getEncodedHex();\n };\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPublicBaseKeyB64 = function () {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getPublicBaseKey());\n };\n /**\n * wrap the string in block of width chars. The default value for rsa keys is 64\n * characters.\n * @param {string} str the pem encoded string without header and footer\n * @param {Number} [width=64] - the length the string has to be wrapped at\n * @returns {string}\n * @private\n */\n JSEncryptRSAKey.wordwrap = function (str, width) {\n width = width || 64;\n if (!str) {\n return str;\n }\n var regex = \"(.{1,\" + width + \"})( +|$\\n?)|(.{1,\" + width + \"})\";\n return str.match(RegExp(regex, \"g\")).join(\"\\n\");\n };\n /**\n * Retrieve the pem encoded private key\n * @returns {string} the pem encoded private key with header/footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPrivateKey = function () {\n var key = \"-----BEGIN RSA PRIVATE KEY-----\\n\";\n key += JSEncryptRSAKey.wordwrap(this.getPrivateBaseKeyB64()) + \"\\n\";\n key += \"-----END RSA PRIVATE KEY-----\";\n return key;\n };\n /**\n * Retrieve the pem encoded public key\n * @returns {string} the pem encoded public key with header/footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPublicKey = function () {\n var key = \"-----BEGIN PUBLIC KEY-----\\n\";\n key += JSEncryptRSAKey.wordwrap(this.getPublicBaseKeyB64()) + \"\\n\";\n key += \"-----END PUBLIC KEY-----\";\n return key;\n };\n /**\n * Check if the object contains the necessary parameters to populate the rsa modulus\n * and public exponent parameters.\n * @param {Object} [obj={}] - An object that may contain the two public key\n * parameters\n * @returns {boolean} true if the object contains both the modulus and the public exponent\n * properties (n and e)\n * @todo check for types of n and e. N should be a parseable bigInt object, E should\n * be a parseable integer number\n * @private\n */\n JSEncryptRSAKey.hasPublicKeyProperty = function (obj) {\n obj = obj || {};\n return obj.hasOwnProperty(\"n\") && obj.hasOwnProperty(\"e\");\n };\n /**\n * Check if the object contains ALL the parameters of an RSA key.\n * @param {Object} [obj={}] - An object that may contain nine rsa key\n * parameters\n * @returns {boolean} true if the object contains all the parameters needed\n * @todo check for types of the parameters all the parameters but the public exponent\n * should be parseable bigint objects, the public exponent should be a parseable integer number\n * @private\n */\n JSEncryptRSAKey.hasPrivateKeyProperty = function (obj) {\n obj = obj || {};\n return (obj.hasOwnProperty(\"n\") &&\n obj.hasOwnProperty(\"e\") &&\n obj.hasOwnProperty(\"d\") &&\n obj.hasOwnProperty(\"p\") &&\n obj.hasOwnProperty(\"q\") &&\n obj.hasOwnProperty(\"dmp1\") &&\n obj.hasOwnProperty(\"dmq1\") &&\n obj.hasOwnProperty(\"coeff\"));\n };\n /**\n * Parse the properties of obj in the current rsa object. Obj should AT LEAST\n * include the modulus and public exponent (n, e) parameters.\n * @param {Object} obj - the object containing rsa parameters\n * @private\n */\n JSEncryptRSAKey.prototype.parsePropertiesFrom = function (obj) {\n this.n = obj.n;\n this.e = obj.e;\n if (obj.hasOwnProperty(\"d\")) {\n this.d = obj.d;\n this.p = obj.p;\n this.q = obj.q;\n this.dmp1 = obj.dmp1;\n this.dmq1 = obj.dmq1;\n this.coeff = obj.coeff;\n }\n };\n return JSEncryptRSAKey;\n}(_lib_jsbn_rsa__WEBPACK_IMPORTED_MODULE_4__.RSAKey));\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/JSEncryptRSAKey.js?"); + +/***/ }), + +/***/ "./lib/index.js": +/*!**********************!*\ + !*** ./lib/index.js ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncrypt\": () => (/* reexport safe */ _JSEncrypt__WEBPACK_IMPORTED_MODULE_0__.JSEncrypt),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _JSEncrypt__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./JSEncrypt */ \"./lib/JSEncrypt.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_JSEncrypt__WEBPACK_IMPORTED_MODULE_0__.JSEncrypt);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/index.js?"); + +/***/ }), + +/***/ "./lib/lib/asn1js/asn1.js": +/*!********************************!*\ + !*** ./lib/lib/asn1js/asn1.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ASN1\": () => (/* binding */ ASN1),\n/* harmony export */ \"ASN1Tag\": () => (/* binding */ ASN1Tag),\n/* harmony export */ \"Stream\": () => (/* binding */ Stream)\n/* harmony export */ });\n/* harmony import */ var _int10__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./int10 */ \"./lib/lib/asn1js/int10.js\");\n// ASN.1 JavaScript decoder\n// Copyright (c) 2008-2014 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\n/*global oids */\n\nvar ellipsis = \"\\u2026\";\nvar reTimeS = /^(\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nvar reTimeL = /^(\\d\\d\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nfunction stringCut(str, len) {\n if (str.length > len) {\n str = str.substring(0, len) + ellipsis;\n }\n return str;\n}\nvar Stream = /** @class */ (function () {\n function Stream(enc, pos) {\n this.hexDigits = \"0123456789ABCDEF\";\n if (enc instanceof Stream) {\n this.enc = enc.enc;\n this.pos = enc.pos;\n }\n else {\n // enc should be an array or a binary string\n this.enc = enc;\n this.pos = pos;\n }\n }\n Stream.prototype.get = function (pos) {\n if (pos === undefined) {\n pos = this.pos++;\n }\n if (pos >= this.enc.length) {\n throw new Error(\"Requesting byte offset \".concat(pos, \" on a stream of length \").concat(this.enc.length));\n }\n return (\"string\" === typeof this.enc) ? this.enc.charCodeAt(pos) : this.enc[pos];\n };\n Stream.prototype.hexByte = function (b) {\n return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF);\n };\n Stream.prototype.hexDump = function (start, end, raw) {\n var s = \"\";\n for (var i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n if (raw !== true) {\n switch (i & 0xF) {\n case 0x7:\n s += \" \";\n break;\n case 0xF:\n s += \"\\n\";\n break;\n default:\n s += \" \";\n }\n }\n }\n return s;\n };\n Stream.prototype.isASCII = function (start, end) {\n for (var i = start; i < end; ++i) {\n var c = this.get(i);\n if (c < 32 || c > 176) {\n return false;\n }\n }\n return true;\n };\n Stream.prototype.parseStringISO = function (start, end) {\n var s = \"\";\n for (var i = start; i < end; ++i) {\n s += String.fromCharCode(this.get(i));\n }\n return s;\n };\n Stream.prototype.parseStringUTF = function (start, end) {\n var s = \"\";\n for (var i = start; i < end;) {\n var c = this.get(i++);\n if (c < 128) {\n s += String.fromCharCode(c);\n }\n else if ((c > 191) && (c < 224)) {\n s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F));\n }\n else {\n s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F));\n }\n }\n return s;\n };\n Stream.prototype.parseStringBMP = function (start, end) {\n var str = \"\";\n var hi;\n var lo;\n for (var i = start; i < end;) {\n hi = this.get(i++);\n lo = this.get(i++);\n str += String.fromCharCode((hi << 8) | lo);\n }\n return str;\n };\n Stream.prototype.parseTime = function (start, end, shortYear) {\n var s = this.parseStringISO(start, end);\n var m = (shortYear ? reTimeS : reTimeL).exec(s);\n if (!m) {\n return \"Unrecognized time: \" + s;\n }\n if (shortYear) {\n // to avoid querying the timer, use the fixed range [1970, 2069]\n // it will conform with ITU X.400 [-10, +40] sliding window until 2030\n m[1] = +m[1];\n m[1] += (+m[1] < 70) ? 2000 : 1900;\n }\n s = m[1] + \"-\" + m[2] + \"-\" + m[3] + \" \" + m[4];\n if (m[5]) {\n s += \":\" + m[5];\n if (m[6]) {\n s += \":\" + m[6];\n if (m[7]) {\n s += \".\" + m[7];\n }\n }\n }\n if (m[8]) {\n s += \" UTC\";\n if (m[8] != \"Z\") {\n s += m[8];\n if (m[9]) {\n s += \":\" + m[9];\n }\n }\n }\n return s;\n };\n Stream.prototype.parseInteger = function (start, end) {\n var v = this.get(start);\n var neg = (v > 127);\n var pad = neg ? 255 : 0;\n var len;\n var s = \"\";\n // skip unuseful bits (not allowed in DER)\n while (v == pad && ++start < end) {\n v = this.get(start);\n }\n len = end - start;\n if (len === 0) {\n return neg ? -1 : 0;\n }\n // show bit length of huge integers\n if (len > 4) {\n s = v;\n len <<= 3;\n while (((+s ^ pad) & 0x80) == 0) {\n s = +s << 1;\n --len;\n }\n s = \"(\" + len + \" bit)\\n\";\n }\n // decode the integer\n if (neg) {\n v = v - 256;\n }\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10(v);\n for (var i = start + 1; i < end; ++i) {\n n.mulAdd(256, this.get(i));\n }\n return s + n.toString();\n };\n Stream.prototype.parseBitString = function (start, end, maxLength) {\n var unusedBit = this.get(start);\n var lenBit = ((end - start - 1) << 3) - unusedBit;\n var intro = \"(\" + lenBit + \" bit)\\n\";\n var s = \"\";\n for (var i = start + 1; i < end; ++i) {\n var b = this.get(i);\n var skip = (i == end - 1) ? unusedBit : 0;\n for (var j = 7; j >= skip; --j) {\n s += (b >> j) & 1 ? \"1\" : \"0\";\n }\n if (s.length > maxLength) {\n return intro + stringCut(s, maxLength);\n }\n }\n return intro + s;\n };\n Stream.prototype.parseOctetString = function (start, end, maxLength) {\n if (this.isASCII(start, end)) {\n return stringCut(this.parseStringISO(start, end), maxLength);\n }\n var len = end - start;\n var s = \"(\" + len + \" byte)\\n\";\n maxLength /= 2; // we work in bytes\n if (len > maxLength) {\n end = start + maxLength;\n }\n for (var i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n }\n if (len > maxLength) {\n s += ellipsis;\n }\n return s;\n };\n Stream.prototype.parseOID = function (start, end, maxLength) {\n var s = \"\";\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n var bits = 0;\n for (var i = start; i < end; ++i) {\n var v = this.get(i);\n n.mulAdd(128, v & 0x7F);\n bits += 7;\n if (!(v & 0x80)) { // finished\n if (s === \"\") {\n n = n.simplify();\n if (n instanceof _int10__WEBPACK_IMPORTED_MODULE_0__.Int10) {\n n.sub(80);\n s = \"2.\" + n.toString();\n }\n else {\n var m = n < 80 ? n < 40 ? 0 : 1 : 2;\n s = m + \".\" + (n - m * 40);\n }\n }\n else {\n s += \".\" + n.toString();\n }\n if (s.length > maxLength) {\n return stringCut(s, maxLength);\n }\n n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n bits = 0;\n }\n }\n if (bits > 0) {\n s += \".incomplete\";\n }\n return s;\n };\n return Stream;\n}());\n\nvar ASN1 = /** @class */ (function () {\n function ASN1(stream, header, length, tag, sub) {\n if (!(tag instanceof ASN1Tag)) {\n throw new Error(\"Invalid tag value.\");\n }\n this.stream = stream;\n this.header = header;\n this.length = length;\n this.tag = tag;\n this.sub = sub;\n }\n ASN1.prototype.typeName = function () {\n switch (this.tag.tagClass) {\n case 0: // universal\n switch (this.tag.tagNumber) {\n case 0x00:\n return \"EOC\";\n case 0x01:\n return \"BOOLEAN\";\n case 0x02:\n return \"INTEGER\";\n case 0x03:\n return \"BIT_STRING\";\n case 0x04:\n return \"OCTET_STRING\";\n case 0x05:\n return \"NULL\";\n case 0x06:\n return \"OBJECT_IDENTIFIER\";\n case 0x07:\n return \"ObjectDescriptor\";\n case 0x08:\n return \"EXTERNAL\";\n case 0x09:\n return \"REAL\";\n case 0x0A:\n return \"ENUMERATED\";\n case 0x0B:\n return \"EMBEDDED_PDV\";\n case 0x0C:\n return \"UTF8String\";\n case 0x10:\n return \"SEQUENCE\";\n case 0x11:\n return \"SET\";\n case 0x12:\n return \"NumericString\";\n case 0x13:\n return \"PrintableString\"; // ASCII subset\n case 0x14:\n return \"TeletexString\"; // aka T61String\n case 0x15:\n return \"VideotexString\";\n case 0x16:\n return \"IA5String\"; // ASCII\n case 0x17:\n return \"UTCTime\";\n case 0x18:\n return \"GeneralizedTime\";\n case 0x19:\n return \"GraphicString\";\n case 0x1A:\n return \"VisibleString\"; // ASCII subset\n case 0x1B:\n return \"GeneralString\";\n case 0x1C:\n return \"UniversalString\";\n case 0x1E:\n return \"BMPString\";\n }\n return \"Universal_\" + this.tag.tagNumber.toString();\n case 1:\n return \"Application_\" + this.tag.tagNumber.toString();\n case 2:\n return \"[\" + this.tag.tagNumber.toString() + \"]\"; // Context\n case 3:\n return \"Private_\" + this.tag.tagNumber.toString();\n }\n };\n ASN1.prototype.content = function (maxLength) {\n if (this.tag === undefined) {\n return null;\n }\n if (maxLength === undefined) {\n maxLength = Infinity;\n }\n var content = this.posContent();\n var len = Math.abs(this.length);\n if (!this.tag.isUniversal()) {\n if (this.sub !== null) {\n return \"(\" + this.sub.length + \" elem)\";\n }\n return this.stream.parseOctetString(content, content + len, maxLength);\n }\n switch (this.tag.tagNumber) {\n case 0x01: // BOOLEAN\n return (this.stream.get(content) === 0) ? \"false\" : \"true\";\n case 0x02: // INTEGER\n return this.stream.parseInteger(content, content + len);\n case 0x03: // BIT_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseBitString(content, content + len, maxLength);\n case 0x04: // OCTET_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseOctetString(content, content + len, maxLength);\n // case 0x05: // NULL\n case 0x06: // OBJECT_IDENTIFIER\n return this.stream.parseOID(content, content + len, maxLength);\n // case 0x07: // ObjectDescriptor\n // case 0x08: // EXTERNAL\n // case 0x09: // REAL\n // case 0x0A: // ENUMERATED\n // case 0x0B: // EMBEDDED_PDV\n case 0x10: // SEQUENCE\n case 0x11: // SET\n if (this.sub !== null) {\n return \"(\" + this.sub.length + \" elem)\";\n }\n else {\n return \"(no elem)\";\n }\n case 0x0C: // UTF8String\n return stringCut(this.stream.parseStringUTF(content, content + len), maxLength);\n case 0x12: // NumericString\n case 0x13: // PrintableString\n case 0x14: // TeletexString\n case 0x15: // VideotexString\n case 0x16: // IA5String\n // case 0x19: // GraphicString\n case 0x1A: // VisibleString\n // case 0x1B: // GeneralString\n // case 0x1C: // UniversalString\n return stringCut(this.stream.parseStringISO(content, content + len), maxLength);\n case 0x1E: // BMPString\n return stringCut(this.stream.parseStringBMP(content, content + len), maxLength);\n case 0x17: // UTCTime\n case 0x18: // GeneralizedTime\n return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17));\n }\n return null;\n };\n ASN1.prototype.toString = function () {\n return this.typeName() + \"@\" + this.stream.pos + \"[header:\" + this.header + \",length:\" + this.length + \",sub:\" + ((this.sub === null) ? \"null\" : this.sub.length) + \"]\";\n };\n ASN1.prototype.toPrettyString = function (indent) {\n if (indent === undefined) {\n indent = \"\";\n }\n var s = indent + this.typeName() + \" @\" + this.stream.pos;\n if (this.length >= 0) {\n s += \"+\";\n }\n s += this.length;\n if (this.tag.tagConstructed) {\n s += \" (constructed)\";\n }\n else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) {\n s += \" (encapsulates)\";\n }\n s += \"\\n\";\n if (this.sub !== null) {\n indent += \" \";\n for (var i = 0, max = this.sub.length; i < max; ++i) {\n s += this.sub[i].toPrettyString(indent);\n }\n }\n return s;\n };\n ASN1.prototype.posStart = function () {\n return this.stream.pos;\n };\n ASN1.prototype.posContent = function () {\n return this.stream.pos + this.header;\n };\n ASN1.prototype.posEnd = function () {\n return this.stream.pos + this.header + Math.abs(this.length);\n };\n ASN1.prototype.toHexString = function () {\n return this.stream.hexDump(this.posStart(), this.posEnd(), true);\n };\n ASN1.decodeLength = function (stream) {\n var buf = stream.get();\n var len = buf & 0x7F;\n if (len == buf) {\n return len;\n }\n // no reason to use Int10, as it would be a huge buffer anyways\n if (len > 6) {\n throw new Error(\"Length over 48 bits not supported at position \" + (stream.pos - 1));\n }\n if (len === 0) {\n return null;\n } // undefined\n buf = 0;\n for (var i = 0; i < len; ++i) {\n buf = (buf * 256) + stream.get();\n }\n return buf;\n };\n /**\n * Retrieve the hexadecimal value (as a string) of the current ASN.1 element\n * @returns {string}\n * @public\n */\n ASN1.prototype.getHexStringValue = function () {\n var hexString = this.toHexString();\n var offset = this.header * 2;\n var length = this.length * 2;\n return hexString.substr(offset, length);\n };\n ASN1.decode = function (str) {\n var stream;\n if (!(str instanceof Stream)) {\n stream = new Stream(str, 0);\n }\n else {\n stream = str;\n }\n var streamStart = new Stream(stream);\n var tag = new ASN1Tag(stream);\n var len = ASN1.decodeLength(stream);\n var start = stream.pos;\n var header = start - streamStart.pos;\n var sub = null;\n var getSub = function () {\n var ret = [];\n if (len !== null) {\n // definite length\n var end = start + len;\n while (stream.pos < end) {\n ret[ret.length] = ASN1.decode(stream);\n }\n if (stream.pos != end) {\n throw new Error(\"Content size is not correct for container starting at offset \" + start);\n }\n }\n else {\n // undefined length\n try {\n for (;;) {\n var s = ASN1.decode(stream);\n if (s.tag.isEOC()) {\n break;\n }\n ret[ret.length] = s;\n }\n len = start - stream.pos; // undefined lengths are represented as negative values\n }\n catch (e) {\n throw new Error(\"Exception while decoding undefined length content: \" + e);\n }\n }\n return ret;\n };\n if (tag.tagConstructed) {\n // must have valid content\n sub = getSub();\n }\n else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) {\n // sometimes BitString and OctetString are used to encapsulate ASN.1\n try {\n if (tag.tagNumber == 0x03) {\n if (stream.get() != 0) {\n throw new Error(\"BIT STRINGs with unused bits cannot encapsulate.\");\n }\n }\n sub = getSub();\n for (var i = 0; i < sub.length; ++i) {\n if (sub[i].tag.isEOC()) {\n throw new Error(\"EOC is not supposed to be actual content.\");\n }\n }\n }\n catch (e) {\n // but silently ignore when they don't\n sub = null;\n }\n }\n if (sub === null) {\n if (len === null) {\n throw new Error(\"We can't skip over an invalid tag with undefined length at offset \" + start);\n }\n stream.pos = start + Math.abs(len);\n }\n return new ASN1(streamStart, header, len, tag, sub);\n };\n return ASN1;\n}());\n\nvar ASN1Tag = /** @class */ (function () {\n function ASN1Tag(stream) {\n var buf = stream.get();\n this.tagClass = buf >> 6;\n this.tagConstructed = ((buf & 0x20) !== 0);\n this.tagNumber = buf & 0x1F;\n if (this.tagNumber == 0x1F) { // long tag\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n do {\n buf = stream.get();\n n.mulAdd(128, buf & 0x7F);\n } while (buf & 0x80);\n this.tagNumber = n.simplify();\n }\n }\n ASN1Tag.prototype.isUniversal = function () {\n return this.tagClass === 0x00;\n };\n ASN1Tag.prototype.isEOC = function () {\n return this.tagClass === 0x00 && this.tagNumber === 0x00;\n };\n return ASN1Tag;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/asn1.js?"); + +/***/ }), + +/***/ "./lib/lib/asn1js/base64.js": +/*!**********************************!*\ + !*** ./lib/lib/asn1js/base64.js ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Base64\": () => (/* binding */ Base64)\n/* harmony export */ });\n// Base64 JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar decoder;\nvar Base64 = {\n decode: function (a) {\n var i;\n if (decoder === undefined) {\n var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n var ignore = \"= \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = Object.create(null);\n for (i = 0; i < 64; ++i) {\n decoder[b64.charAt(i)] = i;\n }\n decoder['-'] = 62; //+\n decoder['_'] = 63; //-\n for (i = 0; i < ignore.length; ++i) {\n decoder[ignore.charAt(i)] = -1;\n }\n }\n var out = [];\n var bits = 0;\n var char_count = 0;\n for (i = 0; i < a.length; ++i) {\n var c = a.charAt(i);\n if (c == \"=\") {\n break;\n }\n c = decoder[c];\n if (c == -1) {\n continue;\n }\n if (c === undefined) {\n throw new Error(\"Illegal character at offset \" + i);\n }\n bits |= c;\n if (++char_count >= 4) {\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n out[out.length] = bits & 0xFF;\n bits = 0;\n char_count = 0;\n }\n else {\n bits <<= 6;\n }\n }\n switch (char_count) {\n case 1:\n throw new Error(\"Base64 encoding incomplete: at least 2 bits missing\");\n case 2:\n out[out.length] = (bits >> 10);\n break;\n case 3:\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n break;\n }\n return out;\n },\n re: /-----BEGIN [^-]+-----([A-Za-z0-9+\\/=\\s]+)-----END [^-]+-----|begin-base64[^\\n]+\\n([A-Za-z0-9+\\/=\\s]+)====/,\n unarmor: function (a) {\n var m = Base64.re.exec(a);\n if (m) {\n if (m[1]) {\n a = m[1];\n }\n else if (m[2]) {\n a = m[2];\n }\n else {\n throw new Error(\"RegExp out of sync\");\n }\n }\n return Base64.decode(a);\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/base64.js?"); + +/***/ }), + +/***/ "./lib/lib/asn1js/hex.js": +/*!*******************************!*\ + !*** ./lib/lib/asn1js/hex.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Hex\": () => (/* binding */ Hex)\n/* harmony export */ });\n// Hex JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar decoder;\nvar Hex = {\n decode: function (a) {\n var i;\n if (decoder === undefined) {\n var hex = \"0123456789ABCDEF\";\n var ignore = \" \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = {};\n for (i = 0; i < 16; ++i) {\n decoder[hex.charAt(i)] = i;\n }\n hex = hex.toLowerCase();\n for (i = 10; i < 16; ++i) {\n decoder[hex.charAt(i)] = i;\n }\n for (i = 0; i < ignore.length; ++i) {\n decoder[ignore.charAt(i)] = -1;\n }\n }\n var out = [];\n var bits = 0;\n var char_count = 0;\n for (i = 0; i < a.length; ++i) {\n var c = a.charAt(i);\n if (c == \"=\") {\n break;\n }\n c = decoder[c];\n if (c == -1) {\n continue;\n }\n if (c === undefined) {\n throw new Error(\"Illegal character at offset \" + i);\n }\n bits |= c;\n if (++char_count >= 2) {\n out[out.length] = bits;\n bits = 0;\n char_count = 0;\n }\n else {\n bits <<= 4;\n }\n }\n if (char_count) {\n throw new Error(\"Hex encoding incomplete: 4 bits missing\");\n }\n return out;\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/hex.js?"); + +/***/ }), + +/***/ "./lib/lib/asn1js/int10.js": +/*!*********************************!*\ + !*** ./lib/lib/asn1js/int10.js ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Int10\": () => (/* binding */ Int10)\n/* harmony export */ });\n// Big integer base-10 printing library\n// Copyright (c) 2014 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar max = 10000000000000; // biggest integer that can still fit 2^53 when multiplied by 256\nvar Int10 = /** @class */ (function () {\n function Int10(value) {\n this.buf = [+value || 0];\n }\n Int10.prototype.mulAdd = function (m, c) {\n // assert(m <= 256)\n var b = this.buf;\n var l = b.length;\n var i;\n var t;\n for (i = 0; i < l; ++i) {\n t = b[i] * m + c;\n if (t < max) {\n c = 0;\n }\n else {\n c = 0 | (t / max);\n t -= c * max;\n }\n b[i] = t;\n }\n if (c > 0) {\n b[i] = c;\n }\n };\n Int10.prototype.sub = function (c) {\n // assert(m <= 256)\n var b = this.buf;\n var l = b.length;\n var i;\n var t;\n for (i = 0; i < l; ++i) {\n t = b[i] - c;\n if (t < 0) {\n t += max;\n c = 1;\n }\n else {\n c = 0;\n }\n b[i] = t;\n }\n while (b[b.length - 1] === 0) {\n b.pop();\n }\n };\n Int10.prototype.toString = function (base) {\n if ((base || 10) != 10) {\n throw new Error(\"only base 10 is supported\");\n }\n var b = this.buf;\n var s = b[b.length - 1].toString();\n for (var i = b.length - 2; i >= 0; --i) {\n s += (max + b[i]).toString().substring(1);\n }\n return s;\n };\n Int10.prototype.valueOf = function () {\n var b = this.buf;\n var v = 0;\n for (var i = b.length - 1; i >= 0; --i) {\n v = v * max + b[i];\n }\n return v;\n };\n Int10.prototype.simplify = function () {\n var b = this.buf;\n return (b.length == 1) ? b[0] : this;\n };\n return Int10;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/int10.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/base64.js": +/*!********************************!*\ + !*** ./lib/lib/jsbn/base64.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"b64toBA\": () => (/* binding */ b64toBA),\n/* harmony export */ \"b64tohex\": () => (/* binding */ b64tohex),\n/* harmony export */ \"hex2b64\": () => (/* binding */ hex2b64)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./lib/lib/jsbn/util.js\");\n\nvar b64map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar b64pad = \"=\";\nfunction hex2b64(h) {\n var i;\n var c;\n var ret = \"\";\n for (i = 0; i + 3 <= h.length; i += 3) {\n c = parseInt(h.substring(i, i + 3), 16);\n ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);\n }\n if (i + 1 == h.length) {\n c = parseInt(h.substring(i, i + 1), 16);\n ret += b64map.charAt(c << 2);\n }\n else if (i + 2 == h.length) {\n c = parseInt(h.substring(i, i + 2), 16);\n ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);\n }\n while ((ret.length & 3) > 0) {\n ret += b64pad;\n }\n return ret;\n}\n// convert a base64 string to hex\nfunction b64tohex(s) {\n var ret = \"\";\n var i;\n var k = 0; // b64 state, 0-3\n var slop = 0;\n for (i = 0; i < s.length; ++i) {\n if (s.charAt(i) == b64pad) {\n break;\n }\n var v = b64map.indexOf(s.charAt(i));\n if (v < 0) {\n continue;\n }\n if (k == 0) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v >> 2);\n slop = v & 3;\n k = 1;\n }\n else if (k == 1) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)((slop << 2) | (v >> 4));\n slop = v & 0xf;\n k = 2;\n }\n else if (k == 2) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(slop);\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v >> 2);\n slop = v & 3;\n k = 3;\n }\n else {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)((slop << 2) | (v >> 4));\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v & 0xf);\n k = 0;\n }\n }\n if (k == 1) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(slop << 2);\n }\n return ret;\n}\n// convert a base64 string to a byte/number array\nfunction b64toBA(s) {\n // piggyback on b64tohex for now, optimize later\n var h = b64tohex(s);\n var i;\n var a = [];\n for (i = 0; 2 * i < h.length; ++i) {\n a[i] = parseInt(h.substring(2 * i, 2 * i + 2), 16);\n }\n return a;\n}\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/base64.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/jsbn.js": +/*!******************************!*\ + !*** ./lib/lib/jsbn/jsbn.js ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BigInteger\": () => (/* binding */ BigInteger),\n/* harmony export */ \"intAt\": () => (/* binding */ intAt),\n/* harmony export */ \"nbi\": () => (/* binding */ nbi),\n/* harmony export */ \"nbits\": () => (/* binding */ nbits),\n/* harmony export */ \"nbv\": () => (/* binding */ nbv),\n/* harmony export */ \"parseBigInt\": () => (/* binding */ parseBigInt)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./lib/lib/jsbn/util.js\");\n// Copyright (c) 2005 Tom Wu\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n// Basic JavaScript BN library - subset useful for RSA encryption.\n\n// Bits per digit\nvar dbits;\n// JavaScript engine analysis\nvar canary = 0xdeadbeefcafe;\nvar j_lm = ((canary & 0xffffff) == 0xefcafe);\n//#region\nvar lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];\nvar lplim = (1 << 26) / lowprimes[lowprimes.length - 1];\n//#endregion\n// (public) Constructor\nvar BigInteger = /** @class */ (function () {\n function BigInteger(a, b, c) {\n if (a != null) {\n if (\"number\" == typeof a) {\n this.fromNumber(a, b, c);\n }\n else if (b == null && \"string\" != typeof a) {\n this.fromString(a, 256);\n }\n else {\n this.fromString(a, b);\n }\n }\n }\n //#region PUBLIC\n // BigInteger.prototype.toString = bnToString;\n // (public) return string representation in given radix\n BigInteger.prototype.toString = function (b) {\n if (this.s < 0) {\n return \"-\" + this.negate().toString(b);\n }\n var k;\n if (b == 16) {\n k = 4;\n }\n else if (b == 8) {\n k = 3;\n }\n else if (b == 2) {\n k = 1;\n }\n else if (b == 32) {\n k = 5;\n }\n else if (b == 4) {\n k = 2;\n }\n else {\n return this.toRadix(b);\n }\n var km = (1 << k) - 1;\n var d;\n var m = false;\n var r = \"\";\n var i = this.t;\n var p = this.DB - (i * this.DB) % k;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) > 0) {\n m = true;\n r = (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(d);\n }\n while (i >= 0) {\n if (p < k) {\n d = (this[i] & ((1 << p) - 1)) << (k - p);\n d |= this[--i] >> (p += this.DB - k);\n }\n else {\n d = (this[i] >> (p -= k)) & km;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if (d > 0) {\n m = true;\n }\n if (m) {\n r += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(d);\n }\n }\n }\n return m ? r : \"0\";\n };\n // BigInteger.prototype.negate = bnNegate;\n // (public) -this\n BigInteger.prototype.negate = function () {\n var r = nbi();\n BigInteger.ZERO.subTo(this, r);\n return r;\n };\n // BigInteger.prototype.abs = bnAbs;\n // (public) |this|\n BigInteger.prototype.abs = function () {\n return (this.s < 0) ? this.negate() : this;\n };\n // BigInteger.prototype.compareTo = bnCompareTo;\n // (public) return + if this > a, - if this < a, 0 if equal\n BigInteger.prototype.compareTo = function (a) {\n var r = this.s - a.s;\n if (r != 0) {\n return r;\n }\n var i = this.t;\n r = i - a.t;\n if (r != 0) {\n return (this.s < 0) ? -r : r;\n }\n while (--i >= 0) {\n if ((r = this[i] - a[i]) != 0) {\n return r;\n }\n }\n return 0;\n };\n // BigInteger.prototype.bitLength = bnBitLength;\n // (public) return the number of bits in \"this\"\n BigInteger.prototype.bitLength = function () {\n if (this.t <= 0) {\n return 0;\n }\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));\n };\n // BigInteger.prototype.mod = bnMod;\n // (public) this mod a\n BigInteger.prototype.mod = function (a) {\n var r = nbi();\n this.abs().divRemTo(a, null, r);\n if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\n a.subTo(r, r);\n }\n return r;\n };\n // BigInteger.prototype.modPowInt = bnModPowInt;\n // (public) this^e % m, 0 <= e < 2^32\n BigInteger.prototype.modPowInt = function (e, m) {\n var z;\n if (e < 256 || m.isEven()) {\n z = new Classic(m);\n }\n else {\n z = new Montgomery(m);\n }\n return this.exp(e, z);\n };\n // BigInteger.prototype.clone = bnClone;\n // (public)\n BigInteger.prototype.clone = function () {\n var r = nbi();\n this.copyTo(r);\n return r;\n };\n // BigInteger.prototype.intValue = bnIntValue;\n // (public) return value as integer\n BigInteger.prototype.intValue = function () {\n if (this.s < 0) {\n if (this.t == 1) {\n return this[0] - this.DV;\n }\n else if (this.t == 0) {\n return -1;\n }\n }\n else if (this.t == 1) {\n return this[0];\n }\n else if (this.t == 0) {\n return 0;\n }\n // assumes 16 < DB < 32\n return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0];\n };\n // BigInteger.prototype.byteValue = bnByteValue;\n // (public) return value as byte\n BigInteger.prototype.byteValue = function () {\n return (this.t == 0) ? this.s : (this[0] << 24) >> 24;\n };\n // BigInteger.prototype.shortValue = bnShortValue;\n // (public) return value as short (assumes DB>=16)\n BigInteger.prototype.shortValue = function () {\n return (this.t == 0) ? this.s : (this[0] << 16) >> 16;\n };\n // BigInteger.prototype.signum = bnSigNum;\n // (public) 0 if this == 0, 1 if this > 0\n BigInteger.prototype.signum = function () {\n if (this.s < 0) {\n return -1;\n }\n else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) {\n return 0;\n }\n else {\n return 1;\n }\n };\n // BigInteger.prototype.toByteArray = bnToByteArray;\n // (public) convert to bigendian byte array\n BigInteger.prototype.toByteArray = function () {\n var i = this.t;\n var r = [];\n r[0] = this.s;\n var p = this.DB - (i * this.DB) % 8;\n var d;\n var k = 0;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) {\n r[k++] = d | (this.s << (this.DB - p));\n }\n while (i >= 0) {\n if (p < 8) {\n d = (this[i] & ((1 << p) - 1)) << (8 - p);\n d |= this[--i] >> (p += this.DB - 8);\n }\n else {\n d = (this[i] >> (p -= 8)) & 0xff;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if ((d & 0x80) != 0) {\n d |= -256;\n }\n if (k == 0 && (this.s & 0x80) != (d & 0x80)) {\n ++k;\n }\n if (k > 0 || d != this.s) {\n r[k++] = d;\n }\n }\n }\n return r;\n };\n // BigInteger.prototype.equals = bnEquals;\n BigInteger.prototype.equals = function (a) {\n return (this.compareTo(a) == 0);\n };\n // BigInteger.prototype.min = bnMin;\n BigInteger.prototype.min = function (a) {\n return (this.compareTo(a) < 0) ? this : a;\n };\n // BigInteger.prototype.max = bnMax;\n BigInteger.prototype.max = function (a) {\n return (this.compareTo(a) > 0) ? this : a;\n };\n // BigInteger.prototype.and = bnAnd;\n BigInteger.prototype.and = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_and, r);\n return r;\n };\n // BigInteger.prototype.or = bnOr;\n BigInteger.prototype.or = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_or, r);\n return r;\n };\n // BigInteger.prototype.xor = bnXor;\n BigInteger.prototype.xor = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_xor, r);\n return r;\n };\n // BigInteger.prototype.andNot = bnAndNot;\n BigInteger.prototype.andNot = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_andnot, r);\n return r;\n };\n // BigInteger.prototype.not = bnNot;\n // (public) ~this\n BigInteger.prototype.not = function () {\n var r = nbi();\n for (var i = 0; i < this.t; ++i) {\n r[i] = this.DM & ~this[i];\n }\n r.t = this.t;\n r.s = ~this.s;\n return r;\n };\n // BigInteger.prototype.shiftLeft = bnShiftLeft;\n // (public) this << n\n BigInteger.prototype.shiftLeft = function (n) {\n var r = nbi();\n if (n < 0) {\n this.rShiftTo(-n, r);\n }\n else {\n this.lShiftTo(n, r);\n }\n return r;\n };\n // BigInteger.prototype.shiftRight = bnShiftRight;\n // (public) this >> n\n BigInteger.prototype.shiftRight = function (n) {\n var r = nbi();\n if (n < 0) {\n this.lShiftTo(-n, r);\n }\n else {\n this.rShiftTo(n, r);\n }\n return r;\n };\n // BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\n // (public) returns index of lowest 1-bit (or -1 if none)\n BigInteger.prototype.getLowestSetBit = function () {\n for (var i = 0; i < this.t; ++i) {\n if (this[i] != 0) {\n return i * this.DB + (0,_util__WEBPACK_IMPORTED_MODULE_0__.lbit)(this[i]);\n }\n }\n if (this.s < 0) {\n return this.t * this.DB;\n }\n return -1;\n };\n // BigInteger.prototype.bitCount = bnBitCount;\n // (public) return number of set bits\n BigInteger.prototype.bitCount = function () {\n var r = 0;\n var x = this.s & this.DM;\n for (var i = 0; i < this.t; ++i) {\n r += (0,_util__WEBPACK_IMPORTED_MODULE_0__.cbit)(this[i] ^ x);\n }\n return r;\n };\n // BigInteger.prototype.testBit = bnTestBit;\n // (public) true iff nth bit is set\n BigInteger.prototype.testBit = function (n) {\n var j = Math.floor(n / this.DB);\n if (j >= this.t) {\n return (this.s != 0);\n }\n return ((this[j] & (1 << (n % this.DB))) != 0);\n };\n // BigInteger.prototype.setBit = bnSetBit;\n // (public) this | (1< 1) {\n var g2 = nbi();\n z.sqrTo(g[1], g2);\n while (n <= km) {\n g[n] = nbi();\n z.mulTo(g2, g[n - 2], g[n]);\n n += 2;\n }\n }\n var j = e.t - 1;\n var w;\n var is1 = true;\n var r2 = nbi();\n var t;\n i = nbits(e[j]) - 1;\n while (j >= 0) {\n if (i >= k1) {\n w = (e[j] >> (i - k1)) & km;\n }\n else {\n w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i);\n if (j > 0) {\n w |= e[j - 1] >> (this.DB + i - k1);\n }\n }\n n = k;\n while ((w & 1) == 0) {\n w >>= 1;\n --n;\n }\n if ((i -= n) < 0) {\n i += this.DB;\n --j;\n }\n if (is1) { // ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n }\n else {\n while (n > 1) {\n z.sqrTo(r, r2);\n z.sqrTo(r2, r);\n n -= 2;\n }\n if (n > 0) {\n z.sqrTo(r, r2);\n }\n else {\n t = r;\n r = r2;\n r2 = t;\n }\n z.mulTo(r2, g[w], r);\n }\n while (j >= 0 && (e[j] & (1 << i)) == 0) {\n z.sqrTo(r, r2);\n t = r;\n r = r2;\n r2 = t;\n if (--i < 0) {\n i = this.DB - 1;\n --j;\n }\n }\n }\n return z.revert(r);\n };\n // BigInteger.prototype.modInverse = bnModInverse;\n // (public) 1/this % m (HAC 14.61)\n BigInteger.prototype.modInverse = function (m) {\n var ac = m.isEven();\n if ((this.isEven() && ac) || m.signum() == 0) {\n return BigInteger.ZERO;\n }\n var u = m.clone();\n var v = this.clone();\n var a = nbv(1);\n var b = nbv(0);\n var c = nbv(0);\n var d = nbv(1);\n while (u.signum() != 0) {\n while (u.isEven()) {\n u.rShiftTo(1, u);\n if (ac) {\n if (!a.isEven() || !b.isEven()) {\n a.addTo(this, a);\n b.subTo(m, b);\n }\n a.rShiftTo(1, a);\n }\n else if (!b.isEven()) {\n b.subTo(m, b);\n }\n b.rShiftTo(1, b);\n }\n while (v.isEven()) {\n v.rShiftTo(1, v);\n if (ac) {\n if (!c.isEven() || !d.isEven()) {\n c.addTo(this, c);\n d.subTo(m, d);\n }\n c.rShiftTo(1, c);\n }\n else if (!d.isEven()) {\n d.subTo(m, d);\n }\n d.rShiftTo(1, d);\n }\n if (u.compareTo(v) >= 0) {\n u.subTo(v, u);\n if (ac) {\n a.subTo(c, a);\n }\n b.subTo(d, b);\n }\n else {\n v.subTo(u, v);\n if (ac) {\n c.subTo(a, c);\n }\n d.subTo(b, d);\n }\n }\n if (v.compareTo(BigInteger.ONE) != 0) {\n return BigInteger.ZERO;\n }\n if (d.compareTo(m) >= 0) {\n return d.subtract(m);\n }\n if (d.signum() < 0) {\n d.addTo(m, d);\n }\n else {\n return d;\n }\n if (d.signum() < 0) {\n return d.add(m);\n }\n else {\n return d;\n }\n };\n // BigInteger.prototype.pow = bnPow;\n // (public) this^e\n BigInteger.prototype.pow = function (e) {\n return this.exp(e, new NullExp());\n };\n // BigInteger.prototype.gcd = bnGCD;\n // (public) gcd(this,a) (HAC 14.54)\n BigInteger.prototype.gcd = function (a) {\n var x = (this.s < 0) ? this.negate() : this.clone();\n var y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n var t = x;\n x = y;\n y = t;\n }\n var i = x.getLowestSetBit();\n var g = y.getLowestSetBit();\n if (g < 0) {\n return x;\n }\n if (i < g) {\n g = i;\n }\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n while (x.signum() > 0) {\n if ((i = x.getLowestSetBit()) > 0) {\n x.rShiftTo(i, x);\n }\n if ((i = y.getLowestSetBit()) > 0) {\n y.rShiftTo(i, y);\n }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n }\n else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n }\n if (g > 0) {\n y.lShiftTo(g, y);\n }\n return y;\n };\n // BigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n // (public) test primality with certainty >= 1-.5^t\n BigInteger.prototype.isProbablePrime = function (t) {\n var i;\n var x = this.abs();\n if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {\n for (i = 0; i < lowprimes.length; ++i) {\n if (x[0] == lowprimes[i]) {\n return true;\n }\n }\n return false;\n }\n if (x.isEven()) {\n return false;\n }\n i = 1;\n while (i < lowprimes.length) {\n var m = lowprimes[i];\n var j = i + 1;\n while (j < lowprimes.length && m < lplim) {\n m *= lowprimes[j++];\n }\n m = x.modInt(m);\n while (i < j) {\n if (m % lowprimes[i++] == 0) {\n return false;\n }\n }\n }\n return x.millerRabin(t);\n };\n //#endregion PUBLIC\n //#region PROTECTED\n // BigInteger.prototype.copyTo = bnpCopyTo;\n // (protected) copy this to r\n BigInteger.prototype.copyTo = function (r) {\n for (var i = this.t - 1; i >= 0; --i) {\n r[i] = this[i];\n }\n r.t = this.t;\n r.s = this.s;\n };\n // BigInteger.prototype.fromInt = bnpFromInt;\n // (protected) set from integer value x, -DV <= x < DV\n BigInteger.prototype.fromInt = function (x) {\n this.t = 1;\n this.s = (x < 0) ? -1 : 0;\n if (x > 0) {\n this[0] = x;\n }\n else if (x < -1) {\n this[0] = x + this.DV;\n }\n else {\n this.t = 0;\n }\n };\n // BigInteger.prototype.fromString = bnpFromString;\n // (protected) set from string and radix\n BigInteger.prototype.fromString = function (s, b) {\n var k;\n if (b == 16) {\n k = 4;\n }\n else if (b == 8) {\n k = 3;\n }\n else if (b == 256) {\n k = 8;\n /* byte array */\n }\n else if (b == 2) {\n k = 1;\n }\n else if (b == 32) {\n k = 5;\n }\n else if (b == 4) {\n k = 2;\n }\n else {\n this.fromRadix(s, b);\n return;\n }\n this.t = 0;\n this.s = 0;\n var i = s.length;\n var mi = false;\n var sh = 0;\n while (--i >= 0) {\n var x = (k == 8) ? (+s[i]) & 0xff : intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\") {\n mi = true;\n }\n continue;\n }\n mi = false;\n if (sh == 0) {\n this[this.t++] = x;\n }\n else if (sh + k > this.DB) {\n this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;\n this[this.t++] = (x >> (this.DB - sh));\n }\n else {\n this[this.t - 1] |= x << sh;\n }\n sh += k;\n if (sh >= this.DB) {\n sh -= this.DB;\n }\n }\n if (k == 8 && ((+s[0]) & 0x80) != 0) {\n this.s = -1;\n if (sh > 0) {\n this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;\n }\n }\n this.clamp();\n if (mi) {\n BigInteger.ZERO.subTo(this, this);\n }\n };\n // BigInteger.prototype.clamp = bnpClamp;\n // (protected) clamp off excess high words\n BigInteger.prototype.clamp = function () {\n var c = this.s & this.DM;\n while (this.t > 0 && this[this.t - 1] == c) {\n --this.t;\n }\n };\n // BigInteger.prototype.dlShiftTo = bnpDLShiftTo;\n // (protected) r = this << n*DB\n BigInteger.prototype.dlShiftTo = function (n, r) {\n var i;\n for (i = this.t - 1; i >= 0; --i) {\n r[i + n] = this[i];\n }\n for (i = n - 1; i >= 0; --i) {\n r[i] = 0;\n }\n r.t = this.t + n;\n r.s = this.s;\n };\n // BigInteger.prototype.drShiftTo = bnpDRShiftTo;\n // (protected) r = this >> n*DB\n BigInteger.prototype.drShiftTo = function (n, r) {\n for (var i = n; i < this.t; ++i) {\n r[i - n] = this[i];\n }\n r.t = Math.max(this.t - n, 0);\n r.s = this.s;\n };\n // BigInteger.prototype.lShiftTo = bnpLShiftTo;\n // (protected) r = this << n\n BigInteger.prototype.lShiftTo = function (n, r) {\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << cbs) - 1;\n var ds = Math.floor(n / this.DB);\n var c = (this.s << bs) & this.DM;\n for (var i = this.t - 1; i >= 0; --i) {\n r[i + ds + 1] = (this[i] >> cbs) | c;\n c = (this[i] & bm) << bs;\n }\n for (var i = ds - 1; i >= 0; --i) {\n r[i] = 0;\n }\n r[ds] = c;\n r.t = this.t + ds + 1;\n r.s = this.s;\n r.clamp();\n };\n // BigInteger.prototype.rShiftTo = bnpRShiftTo;\n // (protected) r = this >> n\n BigInteger.prototype.rShiftTo = function (n, r) {\n r.s = this.s;\n var ds = Math.floor(n / this.DB);\n if (ds >= this.t) {\n r.t = 0;\n return;\n }\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << bs) - 1;\n r[0] = this[ds] >> bs;\n for (var i = ds + 1; i < this.t; ++i) {\n r[i - ds - 1] |= (this[i] & bm) << cbs;\n r[i - ds] = this[i] >> bs;\n }\n if (bs > 0) {\n r[this.t - ds - 1] |= (this.s & bm) << cbs;\n }\n r.t = this.t - ds;\n r.clamp();\n };\n // BigInteger.prototype.subTo = bnpSubTo;\n // (protected) r = this - a\n BigInteger.prototype.subTo = function (a, r) {\n var i = 0;\n var c = 0;\n var m = Math.min(a.t, this.t);\n while (i < m) {\n c += this[i] - a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n if (a.t < this.t) {\n c -= a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while (i < a.t) {\n c -= a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = (c < 0) ? -1 : 0;\n if (c < -1) {\n r[i++] = this.DV + c;\n }\n else if (c > 0) {\n r[i++] = c;\n }\n r.t = i;\n r.clamp();\n };\n // BigInteger.prototype.multiplyTo = bnpMultiplyTo;\n // (protected) r = this * a, r != this,a (HAC 14.12)\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyTo = function (a, r) {\n var x = this.abs();\n var y = a.abs();\n var i = x.t;\n r.t = i + y.t;\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = 0; i < y.t; ++i) {\n r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\n }\n r.s = 0;\n r.clamp();\n if (this.s != a.s) {\n BigInteger.ZERO.subTo(r, r);\n }\n };\n // BigInteger.prototype.squareTo = bnpSquareTo;\n // (protected) r = this^2, r != this (HAC 14.16)\n BigInteger.prototype.squareTo = function (r) {\n var x = this.abs();\n var i = r.t = 2 * x.t;\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = 0; i < x.t - 1; ++i) {\n var c = x.am(i, x[i], r, 2 * i, 0, 1);\n if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\n r[i + x.t] -= x.DV;\n r[i + x.t + 1] = 1;\n }\n }\n if (r.t > 0) {\n r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\n }\n r.s = 0;\n r.clamp();\n };\n // BigInteger.prototype.divRemTo = bnpDivRemTo;\n // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n // r != q, this != m. q or r may be null.\n BigInteger.prototype.divRemTo = function (m, q, r) {\n var pm = m.abs();\n if (pm.t <= 0) {\n return;\n }\n var pt = this.abs();\n if (pt.t < pm.t) {\n if (q != null) {\n q.fromInt(0);\n }\n if (r != null) {\n this.copyTo(r);\n }\n return;\n }\n if (r == null) {\n r = nbi();\n }\n var y = nbi();\n var ts = this.s;\n var ms = m.s;\n var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus\n if (nsh > 0) {\n pm.lShiftTo(nsh, y);\n pt.lShiftTo(nsh, r);\n }\n else {\n pm.copyTo(y);\n pt.copyTo(r);\n }\n var ys = y.t;\n var y0 = y[ys - 1];\n if (y0 == 0) {\n return;\n }\n var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0);\n var d1 = this.FV / yt;\n var d2 = (1 << this.F1) / yt;\n var e = 1 << this.F2;\n var i = r.t;\n var j = i - ys;\n var t = (q == null) ? nbi() : q;\n y.dlShiftTo(j, t);\n if (r.compareTo(t) >= 0) {\n r[r.t++] = 1;\n r.subTo(t, r);\n }\n BigInteger.ONE.dlShiftTo(ys, t);\n t.subTo(y, y); // \"negative\" y so we can replace sub with am later\n while (y.t < ys) {\n y[y.t++] = 0;\n }\n while (--j >= 0) {\n // Estimate quotient digit\n var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\n if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out\n y.dlShiftTo(j, t);\n r.subTo(t, r);\n while (r[i] < --qd) {\n r.subTo(t, r);\n }\n }\n }\n if (q != null) {\n r.drShiftTo(ys, q);\n if (ts != ms) {\n BigInteger.ZERO.subTo(q, q);\n }\n }\n r.t = ys;\n r.clamp();\n if (nsh > 0) {\n r.rShiftTo(nsh, r);\n } // Denormalize remainder\n if (ts < 0) {\n BigInteger.ZERO.subTo(r, r);\n }\n };\n // BigInteger.prototype.invDigit = bnpInvDigit;\n // (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n // justification:\n // xy == 1 (mod m)\n // xy = 1+km\n // xy(2-xy) = (1+km)(1-km)\n // x[y(2-xy)] = 1-k^2m^2\n // x[y(2-xy)] == 1 (mod m^2)\n // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n // JS multiply \"overflows\" differently from C/C++, so care is needed here.\n BigInteger.prototype.invDigit = function () {\n if (this.t < 1) {\n return 0;\n }\n var x = this[0];\n if ((x & 1) == 0) {\n return 0;\n }\n var y = x & 3; // y == 1/x mod 2^2\n y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4\n y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8\n y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return (y > 0) ? this.DV - y : -y;\n };\n // BigInteger.prototype.isEven = bnpIsEven;\n // (protected) true iff this is even\n BigInteger.prototype.isEven = function () {\n return ((this.t > 0) ? (this[0] & 1) : this.s) == 0;\n };\n // BigInteger.prototype.exp = bnpExp;\n // (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\n BigInteger.prototype.exp = function (e, z) {\n if (e > 0xffffffff || e < 1) {\n return BigInteger.ONE;\n }\n var r = nbi();\n var r2 = nbi();\n var g = z.convert(this);\n var i = nbits(e) - 1;\n g.copyTo(r);\n while (--i >= 0) {\n z.sqrTo(r, r2);\n if ((e & (1 << i)) > 0) {\n z.mulTo(r2, g, r);\n }\n else {\n var t = r;\n r = r2;\n r2 = t;\n }\n }\n return z.revert(r);\n };\n // BigInteger.prototype.chunkSize = bnpChunkSize;\n // (protected) return x s.t. r^x < DV\n BigInteger.prototype.chunkSize = function (r) {\n return Math.floor(Math.LN2 * this.DB / Math.log(r));\n };\n // BigInteger.prototype.toRadix = bnpToRadix;\n // (protected) convert to radix string\n BigInteger.prototype.toRadix = function (b) {\n if (b == null) {\n b = 10;\n }\n if (this.signum() == 0 || b < 2 || b > 36) {\n return \"0\";\n }\n var cs = this.chunkSize(b);\n var a = Math.pow(b, cs);\n var d = nbv(a);\n var y = nbi();\n var z = nbi();\n var r = \"\";\n this.divRemTo(d, y, z);\n while (y.signum() > 0) {\n r = (a + z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d, y, z);\n }\n return z.intValue().toString(b) + r;\n };\n // BigInteger.prototype.fromRadix = bnpFromRadix;\n // (protected) convert from radix string\n BigInteger.prototype.fromRadix = function (s, b) {\n this.fromInt(0);\n if (b == null) {\n b = 10;\n }\n var cs = this.chunkSize(b);\n var d = Math.pow(b, cs);\n var mi = false;\n var j = 0;\n var w = 0;\n for (var i = 0; i < s.length; ++i) {\n var x = intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\" && this.signum() == 0) {\n mi = true;\n }\n continue;\n }\n w = b * w + x;\n if (++j >= cs) {\n this.dMultiply(d);\n this.dAddOffset(w, 0);\n j = 0;\n w = 0;\n }\n }\n if (j > 0) {\n this.dMultiply(Math.pow(b, j));\n this.dAddOffset(w, 0);\n }\n if (mi) {\n BigInteger.ZERO.subTo(this, this);\n }\n };\n // BigInteger.prototype.fromNumber = bnpFromNumber;\n // (protected) alternate constructor\n BigInteger.prototype.fromNumber = function (a, b, c) {\n if (\"number\" == typeof b) {\n // new BigInteger(int,int,RNG)\n if (a < 2) {\n this.fromInt(1);\n }\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1)) {\n // force MSB set\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), _util__WEBPACK_IMPORTED_MODULE_0__.op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n } // force odd\n while (!this.isProbablePrime(b)) {\n this.dAddOffset(2, 0);\n if (this.bitLength() > a) {\n this.subTo(BigInteger.ONE.shiftLeft(a - 1), this);\n }\n }\n }\n }\n else {\n // new BigInteger(int,RNG)\n var x = [];\n var t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) {\n x[0] &= ((1 << t) - 1);\n }\n else {\n x[0] = 0;\n }\n this.fromString(x, 256);\n }\n };\n // BigInteger.prototype.bitwiseTo = bnpBitwiseTo;\n // (protected) r = this op a (bitwise)\n BigInteger.prototype.bitwiseTo = function (a, op, r) {\n var i;\n var f;\n var m = Math.min(a.t, this.t);\n for (i = 0; i < m; ++i) {\n r[i] = op(this[i], a[i]);\n }\n if (a.t < this.t) {\n f = a.s & this.DM;\n for (i = m; i < this.t; ++i) {\n r[i] = op(this[i], f);\n }\n r.t = this.t;\n }\n else {\n f = this.s & this.DM;\n for (i = m; i < a.t; ++i) {\n r[i] = op(f, a[i]);\n }\n r.t = a.t;\n }\n r.s = op(this.s, a.s);\n r.clamp();\n };\n // BigInteger.prototype.changeBit = bnpChangeBit;\n // (protected) this op (1<>= this.DB;\n }\n if (a.t < this.t) {\n c += a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while (i < a.t) {\n c += a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += a.s;\n }\n r.s = (c < 0) ? -1 : 0;\n if (c > 0) {\n r[i++] = c;\n }\n else if (c < -1) {\n r[i++] = this.DV + c;\n }\n r.t = i;\n r.clamp();\n };\n // BigInteger.prototype.dMultiply = bnpDMultiply;\n // (protected) this *= n, this >= 0, 1 < n < DV\n BigInteger.prototype.dMultiply = function (n) {\n this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);\n ++this.t;\n this.clamp();\n };\n // BigInteger.prototype.dAddOffset = bnpDAddOffset;\n // (protected) this += n << w words, this >= 0\n BigInteger.prototype.dAddOffset = function (n, w) {\n if (n == 0) {\n return;\n }\n while (this.t <= w) {\n this[this.t++] = 0;\n }\n this[w] += n;\n while (this[w] >= this.DV) {\n this[w] -= this.DV;\n if (++w >= this.t) {\n this[this.t++] = 0;\n }\n ++this[w];\n }\n };\n // BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\n // (protected) r = lower n words of \"this * a\", a.t <= n\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyLowerTo = function (a, n, r) {\n var i = Math.min(this.t + a.t, n);\n r.s = 0; // assumes a,this >= 0\n r.t = i;\n while (i > 0) {\n r[--i] = 0;\n }\n for (var j = r.t - this.t; i < j; ++i) {\n r[i + this.t] = this.am(0, a[i], r, i, 0, this.t);\n }\n for (var j = Math.min(a.t, n); i < j; ++i) {\n this.am(0, a[i], r, i, 0, n - i);\n }\n r.clamp();\n };\n // BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\n // (protected) r = \"this * a\" without lower n words, n > 0\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyUpperTo = function (a, n, r) {\n --n;\n var i = r.t = this.t + a.t - n;\n r.s = 0; // assumes a,this >= 0\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = Math.max(n - this.t, 0); i < a.t; ++i) {\n r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n);\n }\n r.clamp();\n r.drShiftTo(1, r);\n };\n // BigInteger.prototype.modInt = bnpModInt;\n // (protected) this % n, n < 2^26\n BigInteger.prototype.modInt = function (n) {\n if (n <= 0) {\n return 0;\n }\n var d = this.DV % n;\n var r = (this.s < 0) ? n - 1 : 0;\n if (this.t > 0) {\n if (d == 0) {\n r = this[0] % n;\n }\n else {\n for (var i = this.t - 1; i >= 0; --i) {\n r = (d * r + this[i]) % n;\n }\n }\n }\n return r;\n };\n // BigInteger.prototype.millerRabin = bnpMillerRabin;\n // (protected) true if probably prime (HAC 4.24, Miller-Rabin)\n BigInteger.prototype.millerRabin = function (t) {\n var n1 = this.subtract(BigInteger.ONE);\n var k = n1.getLowestSetBit();\n if (k <= 0) {\n return false;\n }\n var r = n1.shiftRight(k);\n t = (t + 1) >> 1;\n if (t > lowprimes.length) {\n t = lowprimes.length;\n }\n var a = nbi();\n for (var i = 0; i < t; ++i) {\n // Pick bases at random, instead of starting at 2\n a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);\n var y = a.modPow(r, this);\n if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n var j = 1;\n while (j++ < k && y.compareTo(n1) != 0) {\n y = y.modPowInt(2, this);\n if (y.compareTo(BigInteger.ONE) == 0) {\n return false;\n }\n }\n if (y.compareTo(n1) != 0) {\n return false;\n }\n }\n }\n return true;\n };\n // BigInteger.prototype.square = bnSquare;\n // (public) this^2\n BigInteger.prototype.square = function () {\n var r = nbi();\n this.squareTo(r);\n return r;\n };\n //#region ASYNC\n // Public API method\n BigInteger.prototype.gcda = function (a, callback) {\n var x = (this.s < 0) ? this.negate() : this.clone();\n var y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n var t = x;\n x = y;\n y = t;\n }\n var i = x.getLowestSetBit();\n var g = y.getLowestSetBit();\n if (g < 0) {\n callback(x);\n return;\n }\n if (i < g) {\n g = i;\n }\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n // Workhorse of the algorithm, gets called 200 - 800 times per 512 bit keygen.\n var gcda1 = function () {\n if ((i = x.getLowestSetBit()) > 0) {\n x.rShiftTo(i, x);\n }\n if ((i = y.getLowestSetBit()) > 0) {\n y.rShiftTo(i, y);\n }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n }\n else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n if (!(x.signum() > 0)) {\n if (g > 0) {\n y.lShiftTo(g, y);\n }\n setTimeout(function () { callback(y); }, 0); // escape\n }\n else {\n setTimeout(gcda1, 0);\n }\n };\n setTimeout(gcda1, 10);\n };\n // (protected) alternate constructor\n BigInteger.prototype.fromNumberAsync = function (a, b, c, callback) {\n if (\"number\" == typeof b) {\n if (a < 2) {\n this.fromInt(1);\n }\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1)) {\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), _util__WEBPACK_IMPORTED_MODULE_0__.op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n }\n var bnp_1 = this;\n var bnpfn1_1 = function () {\n bnp_1.dAddOffset(2, 0);\n if (bnp_1.bitLength() > a) {\n bnp_1.subTo(BigInteger.ONE.shiftLeft(a - 1), bnp_1);\n }\n if (bnp_1.isProbablePrime(b)) {\n setTimeout(function () { callback(); }, 0); // escape\n }\n else {\n setTimeout(bnpfn1_1, 0);\n }\n };\n setTimeout(bnpfn1_1, 0);\n }\n }\n else {\n var x = [];\n var t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) {\n x[0] &= ((1 << t) - 1);\n }\n else {\n x[0] = 0;\n }\n this.fromString(x, 256);\n }\n };\n return BigInteger;\n}());\n\n//#region REDUCERS\n//#region NullExp\nvar NullExp = /** @class */ (function () {\n function NullExp() {\n }\n // NullExp.prototype.convert = nNop;\n NullExp.prototype.convert = function (x) {\n return x;\n };\n // NullExp.prototype.revert = nNop;\n NullExp.prototype.revert = function (x) {\n return x;\n };\n // NullExp.prototype.mulTo = nMulTo;\n NullExp.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n };\n // NullExp.prototype.sqrTo = nSqrTo;\n NullExp.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n };\n return NullExp;\n}());\n// Modular reduction using \"classic\" algorithm\nvar Classic = /** @class */ (function () {\n function Classic(m) {\n this.m = m;\n }\n // Classic.prototype.convert = cConvert;\n Classic.prototype.convert = function (x) {\n if (x.s < 0 || x.compareTo(this.m) >= 0) {\n return x.mod(this.m);\n }\n else {\n return x;\n }\n };\n // Classic.prototype.revert = cRevert;\n Classic.prototype.revert = function (x) {\n return x;\n };\n // Classic.prototype.reduce = cReduce;\n Classic.prototype.reduce = function (x) {\n x.divRemTo(this.m, null, x);\n };\n // Classic.prototype.mulTo = cMulTo;\n Classic.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Classic.prototype.sqrTo = cSqrTo;\n Classic.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Classic;\n}());\n//#endregion\n//#region Montgomery\n// Montgomery reduction\nvar Montgomery = /** @class */ (function () {\n function Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp & 0x7fff;\n this.mph = this.mp >> 15;\n this.um = (1 << (m.DB - 15)) - 1;\n this.mt2 = 2 * m.t;\n }\n // Montgomery.prototype.convert = montConvert;\n // xR mod m\n Montgomery.prototype.convert = function (x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t, r);\n r.divRemTo(this.m, null, r);\n if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\n this.m.subTo(r, r);\n }\n return r;\n };\n // Montgomery.prototype.revert = montRevert;\n // x/R mod m\n Montgomery.prototype.revert = function (x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n };\n // Montgomery.prototype.reduce = montReduce;\n // x = x/R mod m (HAC 14.32)\n Montgomery.prototype.reduce = function (x) {\n while (x.t <= this.mt2) {\n // pad x so am has enough room later\n x[x.t++] = 0;\n }\n for (var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x[i]*mp mod DV\n var j = x[i] & 0x7fff;\n var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i + this.m.t;\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t);\n // propagate carry\n while (x[j] >= x.DV) {\n x[j] -= x.DV;\n x[++j]++;\n }\n }\n x.clamp();\n x.drShiftTo(this.m.t, x);\n if (x.compareTo(this.m) >= 0) {\n x.subTo(this.m, x);\n }\n };\n // Montgomery.prototype.mulTo = montMulTo;\n // r = \"xy/R mod m\"; x,y != r\n Montgomery.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Montgomery.prototype.sqrTo = montSqrTo;\n // r = \"x^2/R mod m\"; x != r\n Montgomery.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Montgomery;\n}());\n//#endregion Montgomery\n//#region Barrett\n// Barrett modular reduction\nvar Barrett = /** @class */ (function () {\n function Barrett(m) {\n this.m = m;\n // setup Barrett\n this.r2 = nbi();\n this.q3 = nbi();\n BigInteger.ONE.dlShiftTo(2 * m.t, this.r2);\n this.mu = this.r2.divide(m);\n }\n // Barrett.prototype.convert = barrettConvert;\n Barrett.prototype.convert = function (x) {\n if (x.s < 0 || x.t > 2 * this.m.t) {\n return x.mod(this.m);\n }\n else if (x.compareTo(this.m) < 0) {\n return x;\n }\n else {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n }\n };\n // Barrett.prototype.revert = barrettRevert;\n Barrett.prototype.revert = function (x) {\n return x;\n };\n // Barrett.prototype.reduce = barrettReduce;\n // x = x mod m (HAC 14.42)\n Barrett.prototype.reduce = function (x) {\n x.drShiftTo(this.m.t - 1, this.r2);\n if (x.t > this.m.t + 1) {\n x.t = this.m.t + 1;\n x.clamp();\n }\n this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);\n this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);\n while (x.compareTo(this.r2) < 0) {\n x.dAddOffset(1, this.m.t + 1);\n }\n x.subTo(this.r2, x);\n while (x.compareTo(this.m) >= 0) {\n x.subTo(this.m, x);\n }\n };\n // Barrett.prototype.mulTo = barrettMulTo;\n // r = x*y mod m; x,y != r\n Barrett.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Barrett.prototype.sqrTo = barrettSqrTo;\n // r = x^2 mod m; x != r\n Barrett.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Barrett;\n}());\n//#endregion\n//#endregion REDUCERS\n// return new, unset BigInteger\nfunction nbi() { return new BigInteger(null); }\nfunction parseBigInt(str, r) {\n return new BigInteger(str, r);\n}\n// am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\nvar inBrowser = typeof navigator !== \"undefined\";\nif (inBrowser && j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n // am2 avoids a big mult-and-extract completely.\n // Max digit bits should be <= 30 because we do bitwise ops\n // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\n BigInteger.prototype.am = function am2(i, x, w, j, c, n) {\n var xl = x & 0x7fff;\n var xh = x >> 15;\n while (--n >= 0) {\n var l = this[i] & 0x7fff;\n var h = this[i++] >> 15;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\n w[j++] = l & 0x3fffffff;\n }\n return c;\n };\n dbits = 30;\n}\nelse if (inBrowser && j_lm && (navigator.appName != \"Netscape\")) {\n // am1: use a single mult and divide to get the high bits,\n // max digit bits should be 26 because\n // max internal value = 2*dvalue^2-2*dvalue (< 2^53)\n BigInteger.prototype.am = function am1(i, x, w, j, c, n) {\n while (--n >= 0) {\n var v = x * this[i++] + w[j] + c;\n c = Math.floor(v / 0x4000000);\n w[j++] = v & 0x3ffffff;\n }\n return c;\n };\n dbits = 26;\n}\nelse { // Mozilla/Netscape seems to prefer am3\n // Alternately, set max digit bits to 28 since some\n // browsers slow down when dealing with 32-bit numbers.\n BigInteger.prototype.am = function am3(i, x, w, j, c, n) {\n var xl = x & 0x3fff;\n var xh = x >> 14;\n while (--n >= 0) {\n var l = this[i] & 0x3fff;\n var h = this[i++] >> 14;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\n c = (l >> 28) + (m >> 14) + xh * h;\n w[j++] = l & 0xfffffff;\n }\n return c;\n };\n dbits = 28;\n}\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = ((1 << dbits) - 1);\nBigInteger.prototype.DV = (1 << dbits);\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\nBigInteger.prototype.F1 = BI_FP - dbits;\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\n// Digit conversions\nvar BI_RC = [];\nvar rr;\nvar vv;\nrr = \"0\".charCodeAt(0);\nfor (vv = 0; vv <= 9; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"a\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"A\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nfunction intAt(s, i) {\n var c = BI_RC[s.charCodeAt(i)];\n return (c == null) ? -1 : c;\n}\n// return bigint initialized to value\nfunction nbv(i) {\n var r = nbi();\n r.fromInt(i);\n return r;\n}\n// returns bit length of the integer x\nfunction nbits(x) {\n var r = 1;\n var t;\n if ((t = x >>> 16) != 0) {\n x = t;\n r += 16;\n }\n if ((t = x >> 8) != 0) {\n x = t;\n r += 8;\n }\n if ((t = x >> 4) != 0) {\n x = t;\n r += 4;\n }\n if ((t = x >> 2) != 0) {\n x = t;\n r += 2;\n }\n if ((t = x >> 1) != 0) {\n x = t;\n r += 1;\n }\n return r;\n}\n// \"constants\"\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/jsbn.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/prng4.js": +/*!*******************************!*\ + !*** ./lib/lib/jsbn/prng4.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Arcfour\": () => (/* binding */ Arcfour),\n/* harmony export */ \"prng_newstate\": () => (/* binding */ prng_newstate),\n/* harmony export */ \"rng_psize\": () => (/* binding */ rng_psize)\n/* harmony export */ });\n// prng4.js - uses Arcfour as a PRNG\nvar Arcfour = /** @class */ (function () {\n function Arcfour() {\n this.i = 0;\n this.j = 0;\n this.S = [];\n }\n // Arcfour.prototype.init = ARC4init;\n // Initialize arcfour context from key, an array of ints, each from [0..255]\n Arcfour.prototype.init = function (key) {\n var i;\n var j;\n var t;\n for (i = 0; i < 256; ++i) {\n this.S[i] = i;\n }\n j = 0;\n for (i = 0; i < 256; ++i) {\n j = (j + this.S[i] + key[i % key.length]) & 255;\n t = this.S[i];\n this.S[i] = this.S[j];\n this.S[j] = t;\n }\n this.i = 0;\n this.j = 0;\n };\n // Arcfour.prototype.next = ARC4next;\n Arcfour.prototype.next = function () {\n var t;\n this.i = (this.i + 1) & 255;\n this.j = (this.j + this.S[this.i]) & 255;\n t = this.S[this.i];\n this.S[this.i] = this.S[this.j];\n this.S[this.j] = t;\n return this.S[(t + this.S[this.i]) & 255];\n };\n return Arcfour;\n}());\n\n// Plug in your RNG constructor here\nfunction prng_newstate() {\n return new Arcfour();\n}\n// Pool size must be a multiple of 4 and greater than 32.\n// An array of bytes the size of the pool will be passed to init()\nvar rng_psize = 256;\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/prng4.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/rng.js": +/*!*****************************!*\ + !*** ./lib/lib/jsbn/rng.js ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SecureRandom\": () => (/* binding */ SecureRandom)\n/* harmony export */ });\n/* harmony import */ var _prng4__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./prng4 */ \"./lib/lib/jsbn/prng4.js\");\n// Random number generator - requires a PRNG backend, e.g. prng4.js\n\nvar rng_state;\nvar rng_pool = null;\nvar rng_pptr;\n// Initialize the pool with junk if needed.\nif (rng_pool == null) {\n rng_pool = [];\n rng_pptr = 0;\n var t = void 0;\n if (typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues) {\n // Extract entropy (2048 bits) from RNG if available\n var z = new Uint32Array(256);\n window.crypto.getRandomValues(z);\n for (t = 0; t < z.length; ++t) {\n rng_pool[rng_pptr++] = z[t] & 255;\n }\n }\n // Use mouse events for entropy, if we do not have enough entropy by the time\n // we need it, entropy will be generated by Math.random.\n var count = 0;\n var onMouseMoveListener_1 = function (ev) {\n count = count || 0;\n if (count >= 256 || rng_pptr >= _prng4__WEBPACK_IMPORTED_MODULE_0__.rng_psize) {\n if (window.removeEventListener) {\n window.removeEventListener(\"mousemove\", onMouseMoveListener_1, false);\n }\n else if (window.detachEvent) {\n window.detachEvent(\"onmousemove\", onMouseMoveListener_1);\n }\n return;\n }\n try {\n var mouseCoordinates = ev.x + ev.y;\n rng_pool[rng_pptr++] = mouseCoordinates & 255;\n count += 1;\n }\n catch (e) {\n // Sometimes Firefox will deny permission to access event properties for some reason. Ignore.\n }\n };\n if (typeof window !== 'undefined') {\n if (window.addEventListener) {\n window.addEventListener(\"mousemove\", onMouseMoveListener_1, false);\n }\n else if (window.attachEvent) {\n window.attachEvent(\"onmousemove\", onMouseMoveListener_1);\n }\n }\n}\nfunction rng_get_byte() {\n if (rng_state == null) {\n rng_state = (0,_prng4__WEBPACK_IMPORTED_MODULE_0__.prng_newstate)();\n // At this point, we may not have collected enough entropy. If not, fall back to Math.random\n while (rng_pptr < _prng4__WEBPACK_IMPORTED_MODULE_0__.rng_psize) {\n var random = Math.floor(65536 * Math.random());\n rng_pool[rng_pptr++] = random & 255;\n }\n rng_state.init(rng_pool);\n for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) {\n rng_pool[rng_pptr] = 0;\n }\n rng_pptr = 0;\n }\n // TODO: allow reseeding after first request\n return rng_state.next();\n}\nvar SecureRandom = /** @class */ (function () {\n function SecureRandom() {\n }\n SecureRandom.prototype.nextBytes = function (ba) {\n for (var i = 0; i < ba.length; ++i) {\n ba[i] = rng_get_byte();\n }\n };\n return SecureRandom;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/rng.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/rsa.js": +/*!*****************************!*\ + !*** ./lib/lib/jsbn/rsa.js ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"RSAKey\": () => (/* binding */ RSAKey)\n/* harmony export */ });\n/* harmony import */ var _jsbn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _rng__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rng */ \"./lib/lib/jsbn/rng.js\");\n// Depends on jsbn.js and rng.js\n// Version 1.1: support utf-8 encoding in pkcs1pad2\n// convert a (hex) string to a bignum object\n\n\n// function linebrk(s,n) {\n// var ret = \"\";\n// var i = 0;\n// while(i + n < s.length) {\n// ret += s.substring(i,i+n) + \"\\n\";\n// i += n;\n// }\n// return ret + s.substring(i,s.length);\n// }\n// function byte2Hex(b) {\n// if(b < 0x10)\n// return \"0\" + b.toString(16);\n// else\n// return b.toString(16);\n// }\nfunction pkcs1pad1(s, n) {\n if (n < s.length + 22) {\n console.error(\"Message too long for RSA\");\n return null;\n }\n var len = n - s.length - 6;\n var filler = \"\";\n for (var f = 0; f < len; f += 2) {\n filler += \"ff\";\n }\n var m = \"0001\" + filler + \"00\" + s;\n return (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(m, 16);\n}\n// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint\nfunction pkcs1pad2(s, n) {\n if (n < s.length + 11) { // TODO: fix for utf-8\n console.error(\"Message too long for RSA\");\n return null;\n }\n var ba = [];\n var i = s.length - 1;\n while (i >= 0 && n > 0) {\n var c = s.charCodeAt(i--);\n if (c < 128) { // encode using utf-8\n ba[--n] = c;\n }\n else if ((c > 127) && (c < 2048)) {\n ba[--n] = (c & 63) | 128;\n ba[--n] = (c >> 6) | 192;\n }\n else {\n ba[--n] = (c & 63) | 128;\n ba[--n] = ((c >> 6) & 63) | 128;\n ba[--n] = (c >> 12) | 224;\n }\n }\n ba[--n] = 0;\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var x = [];\n while (n > 2) { // random non-zero pad\n x[0] = 0;\n while (x[0] == 0) {\n rng.nextBytes(x);\n }\n ba[--n] = x[0];\n }\n ba[--n] = 2;\n ba[--n] = 0;\n return new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(ba);\n}\n// \"empty\" RSA key constructor\nvar RSAKey = /** @class */ (function () {\n function RSAKey() {\n this.n = null;\n this.e = 0;\n this.d = null;\n this.p = null;\n this.q = null;\n this.dmp1 = null;\n this.dmq1 = null;\n this.coeff = null;\n }\n //#region PROTECTED\n // protected\n // RSAKey.prototype.doPublic = RSADoPublic;\n // Perform raw public operation on \"x\": return x^e (mod n)\n RSAKey.prototype.doPublic = function (x) {\n return x.modPowInt(this.e, this.n);\n };\n // RSAKey.prototype.doPrivate = RSADoPrivate;\n // Perform raw private operation on \"x\": return x^d (mod n)\n RSAKey.prototype.doPrivate = function (x) {\n if (this.p == null || this.q == null) {\n return x.modPow(this.d, this.n);\n }\n // TODO: re-calculate any missing CRT params\n var xp = x.mod(this.p).modPow(this.dmp1, this.p);\n var xq = x.mod(this.q).modPow(this.dmq1, this.q);\n while (xp.compareTo(xq) < 0) {\n xp = xp.add(this.p);\n }\n return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);\n };\n //#endregion PROTECTED\n //#region PUBLIC\n // RSAKey.prototype.setPublic = RSASetPublic;\n // Set the public key fields N and e from hex strings\n RSAKey.prototype.setPublic = function (N, E) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n }\n else {\n console.error(\"Invalid RSA public key\");\n }\n };\n // RSAKey.prototype.encrypt = RSAEncrypt;\n // Return the PKCS#1 RSA encryption of \"text\" as an even-length hex string\n RSAKey.prototype.encrypt = function (text) {\n var maxLength = (this.n.bitLength() + 7) >> 3;\n var m = pkcs1pad2(text, maxLength);\n if (m == null) {\n return null;\n }\n var c = this.doPublic(m);\n if (c == null) {\n return null;\n }\n var h = c.toString(16);\n var length = h.length;\n // fix zero before result\n for (var i = 0; i < maxLength * 2 - length; i++) {\n h = \"0\" + h;\n }\n return h;\n };\n // RSAKey.prototype.setPrivate = RSASetPrivate;\n // Set the private key fields N, e, and d from hex strings\n RSAKey.prototype.setPrivate = function (N, E, D) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n this.d = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(D, 16);\n }\n else {\n console.error(\"Invalid RSA private key\");\n }\n };\n // RSAKey.prototype.setPrivateEx = RSASetPrivateEx;\n // Set the private key fields N, e, d and CRT params from hex strings\n RSAKey.prototype.setPrivateEx = function (N, E, D, P, Q, DP, DQ, C) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n this.d = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(D, 16);\n this.p = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(P, 16);\n this.q = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(Q, 16);\n this.dmp1 = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(DP, 16);\n this.dmq1 = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(DQ, 16);\n this.coeff = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(C, 16);\n }\n else {\n console.error(\"Invalid RSA private key\");\n }\n };\n // RSAKey.prototype.generate = RSAGenerate;\n // Generate a new random private key B bits long, using public expt E\n RSAKey.prototype.generate = function (B, E) {\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var qs = B >> 1;\n this.e = parseInt(E, 16);\n var ee = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(E, 16);\n for (;;) {\n for (;;) {\n this.p = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(B - qs, 1, rng);\n if (this.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) {\n break;\n }\n }\n for (;;) {\n this.q = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(qs, 1, rng);\n if (this.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) {\n break;\n }\n }\n if (this.p.compareTo(this.q) <= 0) {\n var t = this.p;\n this.p = this.q;\n this.q = t;\n }\n var p1 = this.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var q1 = this.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0) {\n this.n = this.p.multiply(this.q);\n this.d = ee.modInverse(phi);\n this.dmp1 = this.d.mod(p1);\n this.dmq1 = this.d.mod(q1);\n this.coeff = this.q.modInverse(this.p);\n break;\n }\n }\n };\n // RSAKey.prototype.decrypt = RSADecrypt;\n // Return the PKCS#1 RSA decryption of \"ctext\".\n // \"ctext\" is an even-length hex string and the output is a plain string.\n RSAKey.prototype.decrypt = function (ctext) {\n var c = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(ctext, 16);\n var m = this.doPrivate(c);\n if (m == null) {\n return null;\n }\n return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3);\n };\n // Generate a new random private key B bits long, using public expt E\n RSAKey.prototype.generateAsync = function (B, E, callback) {\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var qs = B >> 1;\n this.e = parseInt(E, 16);\n var ee = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(E, 16);\n var rsa = this;\n // These functions have non-descript names because they were originally for(;;) loops.\n // I don't know about cryptography to give them better names than loop1-4.\n var loop1 = function () {\n var loop4 = function () {\n if (rsa.p.compareTo(rsa.q) <= 0) {\n var t = rsa.p;\n rsa.p = rsa.q;\n rsa.q = t;\n }\n var p1 = rsa.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var q1 = rsa.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0) {\n rsa.n = rsa.p.multiply(rsa.q);\n rsa.d = ee.modInverse(phi);\n rsa.dmp1 = rsa.d.mod(p1);\n rsa.dmq1 = rsa.d.mod(q1);\n rsa.coeff = rsa.q.modInverse(rsa.p);\n setTimeout(function () { callback(); }, 0); // escape\n }\n else {\n setTimeout(loop1, 0);\n }\n };\n var loop3 = function () {\n rsa.q = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.nbi)();\n rsa.q.fromNumberAsync(qs, 1, rng, function () {\n rsa.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcda(ee, function (r) {\n if (r.compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && rsa.q.isProbablePrime(10)) {\n setTimeout(loop4, 0);\n }\n else {\n setTimeout(loop3, 0);\n }\n });\n });\n };\n var loop2 = function () {\n rsa.p = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.nbi)();\n rsa.p.fromNumberAsync(B - qs, 1, rng, function () {\n rsa.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcda(ee, function (r) {\n if (r.compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && rsa.p.isProbablePrime(10)) {\n setTimeout(loop3, 0);\n }\n else {\n setTimeout(loop2, 0);\n }\n });\n });\n };\n setTimeout(loop2, 0);\n };\n setTimeout(loop1, 0);\n };\n RSAKey.prototype.sign = function (text, digestMethod, digestName) {\n var header = getDigestHeader(digestName);\n var digest = header + digestMethod(text).toString();\n var m = pkcs1pad1(digest, this.n.bitLength() / 4);\n if (m == null) {\n return null;\n }\n var c = this.doPrivate(m);\n if (c == null) {\n return null;\n }\n var h = c.toString(16);\n if ((h.length & 1) == 0) {\n return h;\n }\n else {\n return \"0\" + h;\n }\n };\n RSAKey.prototype.verify = function (text, signature, digestMethod) {\n var c = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(signature, 16);\n var m = this.doPublic(c);\n if (m == null) {\n return null;\n }\n var unpadded = m.toString(16).replace(/^1f+00/, \"\");\n var digest = removeDigestHeader(unpadded);\n return digest == digestMethod(text).toString();\n };\n return RSAKey;\n}());\n\n// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext\nfunction pkcs1unpad2(d, n) {\n var b = d.toByteArray();\n var i = 0;\n while (i < b.length && b[i] == 0) {\n ++i;\n }\n if (b.length - i != n - 1 || b[i] != 2) {\n return null;\n }\n ++i;\n while (b[i] != 0) {\n if (++i >= b.length) {\n return null;\n }\n }\n var ret = \"\";\n while (++i < b.length) {\n var c = b[i] & 255;\n if (c < 128) { // utf-8 decode\n ret += String.fromCharCode(c);\n }\n else if ((c > 191) && (c < 224)) {\n ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63));\n ++i;\n }\n else {\n ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63));\n i += 2;\n }\n }\n return ret;\n}\n// https://tools.ietf.org/html/rfc3447#page-43\nvar DIGEST_HEADERS = {\n md2: \"3020300c06082a864886f70d020205000410\",\n md5: \"3020300c06082a864886f70d020505000410\",\n sha1: \"3021300906052b0e03021a05000414\",\n sha224: \"302d300d06096086480165030402040500041c\",\n sha256: \"3031300d060960864801650304020105000420\",\n sha384: \"3041300d060960864801650304020205000430\",\n sha512: \"3051300d060960864801650304020305000440\",\n ripemd160: \"3021300906052b2403020105000414\"\n};\nfunction getDigestHeader(name) {\n return DIGEST_HEADERS[name] || \"\";\n}\nfunction removeDigestHeader(str) {\n for (var name_1 in DIGEST_HEADERS) {\n if (DIGEST_HEADERS.hasOwnProperty(name_1)) {\n var header = DIGEST_HEADERS[name_1];\n var len = header.length;\n if (str.substr(0, len) == header) {\n return str.substr(len);\n }\n }\n }\n return str;\n}\n// Return the PKCS#1 RSA encryption of \"text\" as a Base64-encoded string\n// function RSAEncryptB64(text) {\n// var h = this.encrypt(text);\n// if(h) return hex2b64(h); else return null;\n// }\n// public\n// RSAKey.prototype.encrypt_b64 = RSAEncryptB64;\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/rsa.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/util.js": +/*!******************************!*\ + !*** ./lib/lib/jsbn/util.js ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"cbit\": () => (/* binding */ cbit),\n/* harmony export */ \"int2char\": () => (/* binding */ int2char),\n/* harmony export */ \"lbit\": () => (/* binding */ lbit),\n/* harmony export */ \"op_and\": () => (/* binding */ op_and),\n/* harmony export */ \"op_andnot\": () => (/* binding */ op_andnot),\n/* harmony export */ \"op_or\": () => (/* binding */ op_or),\n/* harmony export */ \"op_xor\": () => (/* binding */ op_xor)\n/* harmony export */ });\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nfunction int2char(n) {\n return BI_RM.charAt(n);\n}\n//#region BIT_OPERATIONS\n// (public) this & a\nfunction op_and(x, y) {\n return x & y;\n}\n// (public) this | a\nfunction op_or(x, y) {\n return x | y;\n}\n// (public) this ^ a\nfunction op_xor(x, y) {\n return x ^ y;\n}\n// (public) this & ~a\nfunction op_andnot(x, y) {\n return x & ~y;\n}\n// return index of lowest 1-bit in x, x < 2^31\nfunction lbit(x) {\n if (x == 0) {\n return -1;\n }\n var r = 0;\n if ((x & 0xffff) == 0) {\n x >>= 16;\n r += 16;\n }\n if ((x & 0xff) == 0) {\n x >>= 8;\n r += 8;\n }\n if ((x & 0xf) == 0) {\n x >>= 4;\n r += 4;\n }\n if ((x & 3) == 0) {\n x >>= 2;\n r += 2;\n }\n if ((x & 1) == 0) {\n ++r;\n }\n return r;\n}\n// return number of 1 bits in x\nfunction cbit(x) {\n var r = 0;\n while (x != 0) {\n x &= x - 1;\n ++r;\n }\n return r;\n}\n//#endregion BIT_OPERATIONS\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/util.js?"); + +/***/ }), + +/***/ "./lib/lib/jsrsasign/asn1-1.0.js": +/*!***************************************!*\ + !*** ./lib/lib/jsrsasign/asn1-1.0.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"KJUR\": () => (/* binding */ KJUR)\n/* harmony export */ });\n/* harmony import */ var _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../jsbn/jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _yahoo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./yahoo */ \"./lib/lib/jsrsasign/yahoo.js\");\n/* asn1-1.0.13.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license\n */\n/*\n * asn1.js - ASN.1 DER encoder classes\n *\n * Copyright (c) 2013-2017 Kenji Urushima (kenji.urushima@gmail.com)\n *\n * This software is licensed under the terms of the MIT License.\n * https://kjur.github.io/jsrsasign/license\n *\n * The above copyright and license notice shall be\n * included in all copies or substantial portions of the Software.\n */\n\n\n/**\n * @fileOverview\n * @name asn1-1.0.js\n * @author Kenji Urushima kenji.urushima@gmail.com\n * @version asn1 1.0.13 (2017-Jun-02)\n * @since jsrsasign 2.1\n * @license MIT License\n */\n/**\n * kjur's class library name space\n *

\n * This name space provides following name spaces:\n *

    \n *
  • {@link KJUR.asn1} - ASN.1 primitive hexadecimal encoder
  • \n *
  • {@link KJUR.asn1.x509} - ASN.1 structure for X.509 certificate and CRL
  • \n *
  • {@link KJUR.crypto} - Java Cryptographic Extension(JCE) style MessageDigest/Signature\n * class and utilities
  • \n *
\n *

\n * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2.\n * @name KJUR\n * @namespace kjur's class library name space\n */\nvar KJUR = {};\n/**\n * kjur's ASN.1 class library name space\n *

\n * This is ITU-T X.690 ASN.1 DER encoder class library and\n * class structure and methods is very similar to\n * org.bouncycastle.asn1 package of\n * well known BouncyCaslte Cryptography Library.\n *

PROVIDING ASN.1 PRIMITIVES

\n * Here are ASN.1 DER primitive classes.\n *
    \n *
  • 0x01 {@link KJUR.asn1.DERBoolean}
  • \n *
  • 0x02 {@link KJUR.asn1.DERInteger}
  • \n *
  • 0x03 {@link KJUR.asn1.DERBitString}
  • \n *
  • 0x04 {@link KJUR.asn1.DEROctetString}
  • \n *
  • 0x05 {@link KJUR.asn1.DERNull}
  • \n *
  • 0x06 {@link KJUR.asn1.DERObjectIdentifier}
  • \n *
  • 0x0a {@link KJUR.asn1.DEREnumerated}
  • \n *
  • 0x0c {@link KJUR.asn1.DERUTF8String}
  • \n *
  • 0x12 {@link KJUR.asn1.DERNumericString}
  • \n *
  • 0x13 {@link KJUR.asn1.DERPrintableString}
  • \n *
  • 0x14 {@link KJUR.asn1.DERTeletexString}
  • \n *
  • 0x16 {@link KJUR.asn1.DERIA5String}
  • \n *
  • 0x17 {@link KJUR.asn1.DERUTCTime}
  • \n *
  • 0x18 {@link KJUR.asn1.DERGeneralizedTime}
  • \n *
  • 0x30 {@link KJUR.asn1.DERSequence}
  • \n *
  • 0x31 {@link KJUR.asn1.DERSet}
  • \n *
\n *

OTHER ASN.1 CLASSES

\n *
    \n *
  • {@link KJUR.asn1.ASN1Object}
  • \n *
  • {@link KJUR.asn1.DERAbstractString}
  • \n *
  • {@link KJUR.asn1.DERAbstractTime}
  • \n *
  • {@link KJUR.asn1.DERAbstractStructured}
  • \n *
  • {@link KJUR.asn1.DERTaggedObject}
  • \n *
\n *

SUB NAME SPACES

\n *
    \n *
  • {@link KJUR.asn1.cades} - CAdES long term signature format
  • \n *
  • {@link KJUR.asn1.cms} - Cryptographic Message Syntax
  • \n *
  • {@link KJUR.asn1.csr} - Certificate Signing Request (CSR/PKCS#10)
  • \n *
  • {@link KJUR.asn1.tsp} - RFC 3161 Timestamping Protocol Format
  • \n *
  • {@link KJUR.asn1.x509} - RFC 5280 X.509 certificate and CRL
  • \n *
\n *

\n * NOTE: Please ignore method summary and document of this namespace.\n * This caused by a bug of jsdoc2.\n * @name KJUR.asn1\n * @namespace\n */\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1)\n KJUR.asn1 = {};\n/**\n * ASN1 utilities class\n * @name KJUR.asn1.ASN1Util\n * @class ASN1 utilities class\n * @since asn1 1.0.2\n */\nKJUR.asn1.ASN1Util = new function () {\n this.integerToByteHex = function (i) {\n var h = i.toString(16);\n if ((h.length % 2) == 1)\n h = '0' + h;\n return h;\n };\n this.bigIntToMinTwosComplementsHex = function (bigIntegerValue) {\n var h = bigIntegerValue.toString(16);\n if (h.substr(0, 1) != '-') {\n if (h.length % 2 == 1) {\n h = '0' + h;\n }\n else {\n if (!h.match(/^[0-7]/)) {\n h = '00' + h;\n }\n }\n }\n else {\n var hPos = h.substr(1);\n var xorLen = hPos.length;\n if (xorLen % 2 == 1) {\n xorLen += 1;\n }\n else {\n if (!h.match(/^[0-7]/)) {\n xorLen += 2;\n }\n }\n var hMask = '';\n for (var i = 0; i < xorLen; i++) {\n hMask += 'f';\n }\n var biMask = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(hMask, 16);\n var biNeg = biMask.xor(bigIntegerValue).add(_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n h = biNeg.toString(16).replace(/^-/, '');\n }\n return h;\n };\n /**\n * get PEM string from hexadecimal data and header string\n * @name getPEMStringFromHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} dataHex hexadecimal string of PEM body\n * @param {String} pemHeader PEM header string (ex. 'RSA PRIVATE KEY')\n * @return {String} PEM formatted string of input data\n * @description\n * This method converts a hexadecimal string to a PEM string with\n * a specified header. Its line break will be CRLF(\"\\r\\n\").\n * @example\n * var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex('616161', 'RSA PRIVATE KEY');\n * // value of pem will be:\n * -----BEGIN PRIVATE KEY-----\n * YWFh\n * -----END PRIVATE KEY-----\n */\n this.getPEMStringFromHex = function (dataHex, pemHeader) {\n return hextopem(dataHex, pemHeader);\n };\n /**\n * generate ASN1Object specifed by JSON parameters\n * @name newObject\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {Array} param JSON parameter to generate ASN1Object\n * @return {KJUR.asn1.ASN1Object} generated object\n * @since asn1 1.0.3\n * @description\n * generate any ASN1Object specified by JSON param\n * including ASN.1 primitive or structured.\n * Generally 'param' can be described as follows:\n *
\n * {TYPE-OF-ASNOBJ: ASN1OBJ-PARAMETER}\n *
\n * 'TYPE-OF-ASN1OBJ' can be one of following symbols:\n *
    \n *
  • 'bool' - DERBoolean
  • \n *
  • 'int' - DERInteger
  • \n *
  • 'bitstr' - DERBitString
  • \n *
  • 'octstr' - DEROctetString
  • \n *
  • 'null' - DERNull
  • \n *
  • 'oid' - DERObjectIdentifier
  • \n *
  • 'enum' - DEREnumerated
  • \n *
  • 'utf8str' - DERUTF8String
  • \n *
  • 'numstr' - DERNumericString
  • \n *
  • 'prnstr' - DERPrintableString
  • \n *
  • 'telstr' - DERTeletexString
  • \n *
  • 'ia5str' - DERIA5String
  • \n *
  • 'utctime' - DERUTCTime
  • \n *
  • 'gentime' - DERGeneralizedTime
  • \n *
  • 'seq' - DERSequence
  • \n *
  • 'set' - DERSet
  • \n *
  • 'tag' - DERTaggedObject
  • \n *
\n * @example\n * newObject({'prnstr': 'aaa'});\n * newObject({'seq': [{'int': 3}, {'prnstr': 'aaa'}]})\n * // ASN.1 Tagged Object\n * newObject({'tag': {'tag': 'a1',\n * 'explicit': true,\n * 'obj': {'seq': [{'int': 3}, {'prnstr': 'aaa'}]}}});\n * // more simple representation of ASN.1 Tagged Object\n * newObject({'tag': ['a1',\n * true,\n * {'seq': [\n * {'int': 3},\n * {'prnstr': 'aaa'}]}\n * ]});\n */\n this.newObject = function (param) {\n var _KJUR = KJUR, _KJUR_asn1 = _KJUR.asn1, _DERBoolean = _KJUR_asn1.DERBoolean, _DERInteger = _KJUR_asn1.DERInteger, _DERBitString = _KJUR_asn1.DERBitString, _DEROctetString = _KJUR_asn1.DEROctetString, _DERNull = _KJUR_asn1.DERNull, _DERObjectIdentifier = _KJUR_asn1.DERObjectIdentifier, _DEREnumerated = _KJUR_asn1.DEREnumerated, _DERUTF8String = _KJUR_asn1.DERUTF8String, _DERNumericString = _KJUR_asn1.DERNumericString, _DERPrintableString = _KJUR_asn1.DERPrintableString, _DERTeletexString = _KJUR_asn1.DERTeletexString, _DERIA5String = _KJUR_asn1.DERIA5String, _DERUTCTime = _KJUR_asn1.DERUTCTime, _DERGeneralizedTime = _KJUR_asn1.DERGeneralizedTime, _DERSequence = _KJUR_asn1.DERSequence, _DERSet = _KJUR_asn1.DERSet, _DERTaggedObject = _KJUR_asn1.DERTaggedObject, _newObject = _KJUR_asn1.ASN1Util.newObject;\n var keys = Object.keys(param);\n if (keys.length != 1)\n throw \"key of param shall be only one.\";\n var key = keys[0];\n if (\":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:\".indexOf(\":\" + key + \":\") == -1)\n throw \"undefined key: \" + key;\n if (key == \"bool\")\n return new _DERBoolean(param[key]);\n if (key == \"int\")\n return new _DERInteger(param[key]);\n if (key == \"bitstr\")\n return new _DERBitString(param[key]);\n if (key == \"octstr\")\n return new _DEROctetString(param[key]);\n if (key == \"null\")\n return new _DERNull(param[key]);\n if (key == \"oid\")\n return new _DERObjectIdentifier(param[key]);\n if (key == \"enum\")\n return new _DEREnumerated(param[key]);\n if (key == \"utf8str\")\n return new _DERUTF8String(param[key]);\n if (key == \"numstr\")\n return new _DERNumericString(param[key]);\n if (key == \"prnstr\")\n return new _DERPrintableString(param[key]);\n if (key == \"telstr\")\n return new _DERTeletexString(param[key]);\n if (key == \"ia5str\")\n return new _DERIA5String(param[key]);\n if (key == \"utctime\")\n return new _DERUTCTime(param[key]);\n if (key == \"gentime\")\n return new _DERGeneralizedTime(param[key]);\n if (key == \"seq\") {\n var paramList = param[key];\n var a = [];\n for (var i = 0; i < paramList.length; i++) {\n var asn1Obj = _newObject(paramList[i]);\n a.push(asn1Obj);\n }\n return new _DERSequence({ 'array': a });\n }\n if (key == \"set\") {\n var paramList = param[key];\n var a = [];\n for (var i = 0; i < paramList.length; i++) {\n var asn1Obj = _newObject(paramList[i]);\n a.push(asn1Obj);\n }\n return new _DERSet({ 'array': a });\n }\n if (key == \"tag\") {\n var tagParam = param[key];\n if (Object.prototype.toString.call(tagParam) === '[object Array]' &&\n tagParam.length == 3) {\n var obj = _newObject(tagParam[2]);\n return new _DERTaggedObject({ tag: tagParam[0],\n explicit: tagParam[1],\n obj: obj });\n }\n else {\n var newParam = {};\n if (tagParam.explicit !== undefined)\n newParam.explicit = tagParam.explicit;\n if (tagParam.tag !== undefined)\n newParam.tag = tagParam.tag;\n if (tagParam.obj === undefined)\n throw \"obj shall be specified for 'tag'.\";\n newParam.obj = _newObject(tagParam.obj);\n return new _DERTaggedObject(newParam);\n }\n }\n };\n /**\n * get encoded hexadecimal string of ASN1Object specifed by JSON parameters\n * @name jsonToASN1HEX\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {Array} param JSON parameter to generate ASN1Object\n * @return hexadecimal string of ASN1Object\n * @since asn1 1.0.4\n * @description\n * As for ASN.1 object representation of JSON object,\n * please see {@link newObject}.\n * @example\n * jsonToASN1HEX({'prnstr': 'aaa'});\n */\n this.jsonToASN1HEX = function (param) {\n var asn1Obj = this.newObject(param);\n return asn1Obj.getEncodedHex();\n };\n};\n/**\n * get dot noted oid number string from hexadecimal value of OID\n * @name oidHexToInt\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} hex hexadecimal value of object identifier\n * @return {String} dot noted string of object identifier\n * @since jsrsasign 4.8.3 asn1 1.0.7\n * @description\n * This static method converts from hexadecimal string representation of\n * ASN.1 value of object identifier to oid number string.\n * @example\n * KJUR.asn1.ASN1Util.oidHexToInt('550406') → \"2.5.4.6\"\n */\nKJUR.asn1.ASN1Util.oidHexToInt = function (hex) {\n var s = \"\";\n var i01 = parseInt(hex.substr(0, 2), 16);\n var i0 = Math.floor(i01 / 40);\n var i1 = i01 % 40;\n var s = i0 + \".\" + i1;\n var binbuf = \"\";\n for (var i = 2; i < hex.length; i += 2) {\n var value = parseInt(hex.substr(i, 2), 16);\n var bin = (\"00000000\" + value.toString(2)).slice(-8);\n binbuf = binbuf + bin.substr(1, 7);\n if (bin.substr(0, 1) == \"0\") {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(binbuf, 2);\n s = s + \".\" + bi.toString(10);\n binbuf = \"\";\n }\n }\n ;\n return s;\n};\n/**\n * get hexadecimal value of object identifier from dot noted oid value\n * @name oidIntToHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} oidString dot noted string of object identifier\n * @return {String} hexadecimal value of object identifier\n * @since jsrsasign 4.8.3 asn1 1.0.7\n * @description\n * This static method converts from object identifier value string.\n * to hexadecimal string representation of it.\n * @example\n * KJUR.asn1.ASN1Util.oidIntToHex(\"2.5.4.6\") → \"550406\"\n */\nKJUR.asn1.ASN1Util.oidIntToHex = function (oidString) {\n var itox = function (i) {\n var h = i.toString(16);\n if (h.length == 1)\n h = '0' + h;\n return h;\n };\n var roidtox = function (roid) {\n var h = '';\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(roid, 10);\n var b = bi.toString(2);\n var padLen = 7 - b.length % 7;\n if (padLen == 7)\n padLen = 0;\n var bPad = '';\n for (var i = 0; i < padLen; i++)\n bPad += '0';\n b = bPad + b;\n for (var i = 0; i < b.length - 1; i += 7) {\n var b8 = b.substr(i, 7);\n if (i != b.length - 7)\n b8 = '1' + b8;\n h += itox(parseInt(b8, 2));\n }\n return h;\n };\n if (!oidString.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + oidString;\n }\n var h = '';\n var a = oidString.split('.');\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n h += itox(i0);\n a.splice(0, 2);\n for (var i = 0; i < a.length; i++) {\n h += roidtox(a[i]);\n }\n return h;\n};\n// ********************************************************************\n// Abstract ASN.1 Classes\n// ********************************************************************\n// ********************************************************************\n/**\n * base class for ASN.1 DER encoder object\n * @name KJUR.asn1.ASN1Object\n * @class base class for ASN.1 DER encoder object\n * @property {Boolean} isModified flag whether internal data was changed\n * @property {String} hTLV hexadecimal string of ASN.1 TLV\n * @property {String} hT hexadecimal string of ASN.1 TLV tag(T)\n * @property {String} hL hexadecimal string of ASN.1 TLV length(L)\n * @property {String} hV hexadecimal string of ASN.1 TLV value(V)\n * @description\n */\nKJUR.asn1.ASN1Object = function () {\n var isModified = true;\n var hTLV = null;\n var hT = '00';\n var hL = '00';\n var hV = '';\n /**\n * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V)\n * @name getLengthHexFromValue\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV length(L)\n */\n this.getLengthHexFromValue = function () {\n if (typeof this.hV == \"undefined\" || this.hV == null) {\n throw \"this.hV is null or undefined.\";\n }\n if (this.hV.length % 2 == 1) {\n throw \"value hex must be even length: n=\" + hV.length + \",v=\" + this.hV;\n }\n var n = this.hV.length / 2;\n var hN = n.toString(16);\n if (hN.length % 2 == 1) {\n hN = \"0\" + hN;\n }\n if (n < 128) {\n return hN;\n }\n else {\n var hNlen = hN.length / 2;\n if (hNlen > 15) {\n throw \"ASN.1 length too long to represent by 8x: n = \" + n.toString(16);\n }\n var head = 128 + hNlen;\n return head.toString(16) + hN;\n }\n };\n /**\n * get hexadecimal string of ASN.1 TLV bytes\n * @name getEncodedHex\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV\n */\n this.getEncodedHex = function () {\n if (this.hTLV == null || this.isModified) {\n this.hV = this.getFreshValueHex();\n this.hL = this.getLengthHexFromValue();\n this.hTLV = this.hT + this.hL + this.hV;\n this.isModified = false;\n //alert(\"first time: \" + this.hTLV);\n }\n return this.hTLV;\n };\n /**\n * get hexadecimal string of ASN.1 TLV value(V) bytes\n * @name getValueHex\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV value(V) bytes\n */\n this.getValueHex = function () {\n this.getEncodedHex();\n return this.hV;\n };\n this.getFreshValueHex = function () {\n return '';\n };\n};\n// == BEGIN DERAbstractString ================================================\n/**\n * base class for ASN.1 DER string classes\n * @name KJUR.asn1.DERAbstractString\n * @class base class for ASN.1 DER string classes\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @property {String} s internal string of value\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • str - specify initial ASN.1 value(V) by a string
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERAbstractString = function (params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var s = null;\n var hV = null;\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @return {String} string value of this string object\n */\n this.getString = function () {\n return this.s;\n };\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @param {String} newS value by a string to set\n */\n this.setString = function (newS) {\n this.hTLV = null;\n this.isModified = true;\n this.s = newS;\n this.hV = stohex(this.s);\n };\n /**\n * set value by a hexadecimal string\n * @name setStringHex\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @param {String} newHexString value by a hexadecimal string to set\n */\n this.setStringHex = function (newHexString) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params == \"string\") {\n this.setString(params);\n }\n else if (typeof params['str'] != \"undefined\") {\n this.setString(params['str']);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setStringHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);\n// == END DERAbstractString ================================================\n// == BEGIN DERAbstractTime ==================================================\n/**\n * base class for ASN.1 DER Generalized/UTCTime class\n * @name KJUR.asn1.DERAbstractTime\n * @class base class for ASN.1 DER Generalized/UTCTime class\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractTime = function (params) {\n KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);\n var s = null;\n var date = null;\n // --- PRIVATE METHODS --------------------\n this.localDateToUTC = function (d) {\n utc = d.getTime() + (d.getTimezoneOffset() * 60000);\n var utcDate = new Date(utc);\n return utcDate;\n };\n /*\n * format date string by Data object\n * @name formatDate\n * @memberOf KJUR.asn1.AbstractTime;\n * @param {Date} dateObject\n * @param {string} type 'utc' or 'gen'\n * @param {boolean} withMillis flag for with millisections or not\n * @description\n * 'withMillis' flag is supported from asn1 1.0.6.\n */\n this.formatDate = function (dateObject, type, withMillis) {\n var pad = this.zeroPadding;\n var d = this.localDateToUTC(dateObject);\n var year = String(d.getFullYear());\n if (type == 'utc')\n year = year.substr(2, 2);\n var month = pad(String(d.getMonth() + 1), 2);\n var day = pad(String(d.getDate()), 2);\n var hour = pad(String(d.getHours()), 2);\n var min = pad(String(d.getMinutes()), 2);\n var sec = pad(String(d.getSeconds()), 2);\n var s = year + month + day + hour + min + sec;\n if (withMillis === true) {\n var millis = d.getMilliseconds();\n if (millis != 0) {\n var sMillis = pad(String(millis), 3);\n sMillis = sMillis.replace(/[0]+$/, \"\");\n s = s + \".\" + sMillis;\n }\n }\n return s + \"Z\";\n };\n this.zeroPadding = function (s, len) {\n if (s.length >= len)\n return s;\n return new Array(len - s.length + 1).join('0') + s;\n };\n // --- PUBLIC METHODS --------------------\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @return {String} string value of this time object\n */\n this.getString = function () {\n return this.s;\n };\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @param {String} newS value by a string to set such like \"130430235959Z\"\n */\n this.setString = function (newS) {\n this.hTLV = null;\n this.isModified = true;\n this.s = newS;\n this.hV = stohex(newS);\n };\n /**\n * set value by a Date object\n * @name setByDateValue\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @param {Integer} year year of date (ex. 2013)\n * @param {Integer} month month of date between 1 and 12 (ex. 12)\n * @param {Integer} day day of month\n * @param {Integer} hour hours of date\n * @param {Integer} min minutes of date\n * @param {Integer} sec seconds of date\n */\n this.setByDateValue = function (year, month, day, hour, min, sec) {\n var dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0));\n this.setByDate(dateObject);\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);\n// == END DERAbstractTime ==================================================\n// == BEGIN DERAbstractStructured ============================================\n/**\n * base class for ASN.1 DER structured class\n * @name KJUR.asn1.DERAbstractStructured\n * @class base class for ASN.1 DER structured class\n * @property {Array} asn1Array internal array of ASN1Object\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractStructured = function (params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var asn1Array = null;\n /**\n * set value by array of ASN1Object\n * @name setByASN1ObjectArray\n * @memberOf KJUR.asn1.DERAbstractStructured#\n * @function\n * @param {array} asn1ObjectArray array of ASN1Object to set\n */\n this.setByASN1ObjectArray = function (asn1ObjectArray) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array = asn1ObjectArray;\n };\n /**\n * append an ASN1Object to internal array\n * @name appendASN1Object\n * @memberOf KJUR.asn1.DERAbstractStructured#\n * @function\n * @param {ASN1Object} asn1Object to add\n */\n this.appendASN1Object = function (asn1Object) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array.push(asn1Object);\n };\n this.asn1Array = new Array();\n if (typeof params != \"undefined\") {\n if (typeof params['array'] != \"undefined\") {\n this.asn1Array = params['array'];\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);\n// ********************************************************************\n// ASN.1 Object Classes\n// ********************************************************************\n// ********************************************************************\n/**\n * class for ASN.1 DER Boolean\n * @name KJUR.asn1.DERBoolean\n * @class class for ASN.1 DER Boolean\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERBoolean = function () {\n KJUR.asn1.DERBoolean.superclass.constructor.call(this);\n this.hT = \"01\";\n this.hTLV = \"0101ff\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER Integer\n * @name KJUR.asn1.DERInteger\n * @class class for ASN.1 DER Integer\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • int - specify initial ASN.1 value(V) by integer value
  • \n *
  • bigint - specify initial ASN.1 value(V) by BigInteger object
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERInteger = function (params) {\n KJUR.asn1.DERInteger.superclass.constructor.call(this);\n this.hT = \"02\";\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DERInteger#\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function (bigIntegerValue) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DERInteger\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function (intValue) {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(String(intValue), 10);\n this.setByBigInteger(bi);\n };\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DERInteger#\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n *
\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n * @example\n * new KJUR.asn1.DERInteger(123);\n * new KJUR.asn1.DERInteger({'int': 123});\n * new KJUR.asn1.DERInteger({'hex': '1fad'});\n */\n this.setValueHex = function (newHexString) {\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['bigint'] != \"undefined\") {\n this.setByBigInteger(params['bigint']);\n }\n else if (typeof params['int'] != \"undefined\") {\n this.setByInteger(params['int']);\n }\n else if (typeof params == \"number\") {\n this.setByInteger(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setValueHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER encoded BitString primitive\n * @name KJUR.asn1.DERBitString\n * @class class for ASN.1 DER encoded BitString primitive\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • bin - specify binary string (ex. '10111')
  • \n *
  • array - specify array of boolean (ex. [true,false,true,true])
  • \n *
  • hex - specify hexadecimal string of ASN.1 value(V) including unused bits
  • \n *
  • obj - specify {@link KJUR.asn1.ASN1Util.newObject}\n * argument for \"BitString encapsulates\" structure.
  • \n *
\n * NOTE1: 'params' can be omitted.
\n * NOTE2: 'obj' parameter have been supported since\n * asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).
\n * @example\n * // default constructor\n * o = new KJUR.asn1.DERBitString();\n * // initialize with binary string\n * o = new KJUR.asn1.DERBitString({bin: \"1011\"});\n * // initialize with boolean array\n * o = new KJUR.asn1.DERBitString({array: [true,false,true,true]});\n * // initialize with hexadecimal string (04 is unused bits)\n * o = new KJUR.asn1.DEROctetString({hex: \"04bac0\"});\n * // initialize with ASN1Util.newObject argument for encapsulated\n * o = new KJUR.asn1.DERBitString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});\n * // above generates a ASN.1 data like this:\n * // BIT STRING, encapsulates {\n * // SEQUENCE {\n * // INTEGER 3\n * // PrintableString 'aaa'\n * // }\n * // }\n */\nKJUR.asn1.DERBitString = function (params) {\n if (params !== undefined && typeof params.obj !== \"undefined\") {\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\n params.hex = \"00\" + o.getEncodedHex();\n }\n KJUR.asn1.DERBitString.superclass.constructor.call(this);\n this.hT = \"03\";\n /**\n * set ASN.1 value(V) by a hexadecimal string including unused bits\n * @name setHexValueIncludingUnusedBits\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {String} newHexStringIncludingUnusedBits\n */\n this.setHexValueIncludingUnusedBits = function (newHexStringIncludingUnusedBits) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = newHexStringIncludingUnusedBits;\n };\n /**\n * set ASN.1 value(V) by unused bit and hexadecimal string of value\n * @name setUnusedBitsAndHexValue\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {Integer} unusedBits\n * @param {String} hValue\n */\n this.setUnusedBitsAndHexValue = function (unusedBits, hValue) {\n if (unusedBits < 0 || 7 < unusedBits) {\n throw \"unused bits shall be from 0 to 7: u = \" + unusedBits;\n }\n var hUnusedBits = \"0\" + unusedBits;\n this.hTLV = null;\n this.isModified = true;\n this.hV = hUnusedBits + hValue;\n };\n /**\n * set ASN.1 DER BitString by binary string
\n * @name setByBinaryString\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {String} binaryString binary value string (i.e. '10111')\n * @description\n * Its unused bits will be calculated automatically by length of\n * 'binaryValue'.
\n * NOTE: Trailing zeros '0' will be ignored.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.setByBooleanArray(\"01011\");\n */\n this.setByBinaryString = function (binaryString) {\n binaryString = binaryString.replace(/0+$/, '');\n var unusedBits = 8 - binaryString.length % 8;\n if (unusedBits == 8)\n unusedBits = 0;\n for (var i = 0; i <= unusedBits; i++) {\n binaryString += '0';\n }\n var h = '';\n for (var i = 0; i < binaryString.length - 1; i += 8) {\n var b = binaryString.substr(i, 8);\n var x = parseInt(b, 2).toString(16);\n if (x.length == 1)\n x = '0' + x;\n h += x;\n }\n this.hTLV = null;\n this.isModified = true;\n this.hV = '0' + unusedBits + h;\n };\n /**\n * set ASN.1 TLV value(V) by an array of boolean
\n * @name setByBooleanArray\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {array} booleanArray array of boolean (ex. [true, false, true])\n * @description\n * NOTE: Trailing falses will be ignored in the ASN.1 DER Object.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.setByBooleanArray([false, true, false, true, true]);\n */\n this.setByBooleanArray = function (booleanArray) {\n var s = '';\n for (var i = 0; i < booleanArray.length; i++) {\n if (booleanArray[i] == true) {\n s += '1';\n }\n else {\n s += '0';\n }\n }\n this.setByBinaryString(s);\n };\n /**\n * generate an array of falses with specified length
\n * @name newFalseArray\n * @memberOf KJUR.asn1.DERBitString\n * @function\n * @param {Integer} nLength length of array to generate\n * @return {array} array of boolean falses\n * @description\n * This static method may be useful to initialize boolean array.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.newFalseArray(3) → [false, false, false]\n */\n this.newFalseArray = function (nLength) {\n var a = new Array(nLength);\n for (var i = 0; i < nLength; i++) {\n a[i] = false;\n }\n return a;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params == \"string\" && params.toLowerCase().match(/^[0-9a-f]+$/)) {\n this.setHexValueIncludingUnusedBits(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setHexValueIncludingUnusedBits(params['hex']);\n }\n else if (typeof params['bin'] != \"undefined\") {\n this.setByBinaryString(params['bin']);\n }\n else if (typeof params['array'] != \"undefined\") {\n this.setByBooleanArray(params['array']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER OctetString
\n * @name KJUR.asn1.DEROctetString\n * @class class for ASN.1 DER OctetString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * This class provides ASN.1 OctetString simple type.
\n * Supported \"params\" attributes are:\n *
    \n *
  • str - to set a string as a value
  • \n *
  • hex - to set a hexadecimal string as a value
  • \n *
  • obj - to set a encapsulated ASN.1 value by JSON object\n * which is defined in {@link KJUR.asn1.ASN1Util.newObject}
  • \n *
\n * NOTE: A parameter 'obj' have been supported\n * for \"OCTET STRING, encapsulates\" structure.\n * since asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).\n * @see KJUR.asn1.DERAbstractString - superclass\n * @example\n * // default constructor\n * o = new KJUR.asn1.DEROctetString();\n * // initialize with string\n * o = new KJUR.asn1.DEROctetString({str: \"aaa\"});\n * // initialize with hexadecimal string\n * o = new KJUR.asn1.DEROctetString({hex: \"616161\"});\n * // initialize with ASN1Util.newObject argument\n * o = new KJUR.asn1.DEROctetString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});\n * // above generates a ASN.1 data like this:\n * // OCTET STRING, encapsulates {\n * // SEQUENCE {\n * // INTEGER 3\n * // PrintableString 'aaa'\n * // }\n * // }\n */\nKJUR.asn1.DEROctetString = function (params) {\n if (params !== undefined && typeof params.obj !== \"undefined\") {\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\n params.hex = o.getEncodedHex();\n }\n KJUR.asn1.DEROctetString.superclass.constructor.call(this, params);\n this.hT = \"04\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER Null\n * @name KJUR.asn1.DERNull\n * @class class for ASN.1 DER Null\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERNull = function () {\n KJUR.asn1.DERNull.superclass.constructor.call(this);\n this.hT = \"05\";\n this.hTLV = \"0500\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER ObjectIdentifier\n * @name KJUR.asn1.DERObjectIdentifier\n * @class class for ASN.1 DER ObjectIdentifier\n * @param {Array} params associative array of parameters (ex. {'oid': '2.5.4.5'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • oid - specify initial ASN.1 value(V) by a oid string (ex. 2.5.4.13)
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERObjectIdentifier = function (params) {\n var itox = function (i) {\n var h = i.toString(16);\n if (h.length == 1)\n h = '0' + h;\n return h;\n };\n var roidtox = function (roid) {\n var h = '';\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(roid, 10);\n var b = bi.toString(2);\n var padLen = 7 - b.length % 7;\n if (padLen == 7)\n padLen = 0;\n var bPad = '';\n for (var i = 0; i < padLen; i++)\n bPad += '0';\n b = bPad + b;\n for (var i = 0; i < b.length - 1; i += 7) {\n var b8 = b.substr(i, 7);\n if (i != b.length - 7)\n b8 = '1' + b8;\n h += itox(parseInt(b8, 2));\n }\n return h;\n };\n KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);\n this.hT = \"06\";\n /**\n * set value by a hexadecimal string\n * @name setValueHex\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} newHexString hexadecimal value of OID bytes\n */\n this.setValueHex = function (newHexString) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = newHexString;\n };\n /**\n * set value by a OID string
\n * @name setValueOidString\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} oidString OID string (ex. 2.5.4.13)\n * @example\n * o = new KJUR.asn1.DERObjectIdentifier();\n * o.setValueOidString(\"2.5.4.13\");\n */\n this.setValueOidString = function (oidString) {\n if (!oidString.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + oidString;\n }\n var h = '';\n var a = oidString.split('.');\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n h += itox(i0);\n a.splice(0, 2);\n for (var i = 0; i < a.length; i++) {\n h += roidtox(a[i]);\n }\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = h;\n };\n /**\n * set value by a OID name\n * @name setValueName\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} oidName OID name (ex. 'serverAuth')\n * @since 1.0.1\n * @description\n * OID name shall be defined in 'KJUR.asn1.x509.OID.name2oidList'.\n * Otherwise raise error.\n * @example\n * o = new KJUR.asn1.DERObjectIdentifier();\n * o.setValueName(\"serverAuth\");\n */\n this.setValueName = function (oidName) {\n var oid = KJUR.asn1.x509.OID.name2oid(oidName);\n if (oid !== '') {\n this.setValueOidString(oid);\n }\n else {\n throw \"DERObjectIdentifier oidName undefined: \" + oidName;\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (params !== undefined) {\n if (typeof params === \"string\") {\n if (params.match(/^[0-2].[0-9.]+$/)) {\n this.setValueOidString(params);\n }\n else {\n this.setValueName(params);\n }\n }\n else if (params.oid !== undefined) {\n this.setValueOidString(params.oid);\n }\n else if (params.hex !== undefined) {\n this.setValueHex(params.hex);\n }\n else if (params.name !== undefined) {\n this.setValueName(params.name);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER Enumerated\n * @name KJUR.asn1.DEREnumerated\n * @class class for ASN.1 DER Enumerated\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • int - specify initial ASN.1 value(V) by integer value
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n * @example\n * new KJUR.asn1.DEREnumerated(123);\n * new KJUR.asn1.DEREnumerated({int: 123});\n * new KJUR.asn1.DEREnumerated({hex: '1fad'});\n */\nKJUR.asn1.DEREnumerated = function (params) {\n KJUR.asn1.DEREnumerated.superclass.constructor.call(this);\n this.hT = \"0a\";\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function (bigIntegerValue) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function (intValue) {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(String(intValue), 10);\n this.setByBigInteger(bi);\n };\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n *
\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n */\n this.setValueHex = function (newHexString) {\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['int'] != \"undefined\") {\n this.setByInteger(params['int']);\n }\n else if (typeof params == \"number\") {\n this.setByInteger(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setValueHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER UTF8String\n * @name KJUR.asn1.DERUTF8String\n * @class class for ASN.1 DER UTF8String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERUTF8String = function (params) {\n KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params);\n this.hT = \"0c\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER NumericString\n * @name KJUR.asn1.DERNumericString\n * @class class for ASN.1 DER NumericString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERNumericString = function (params) {\n KJUR.asn1.DERNumericString.superclass.constructor.call(this, params);\n this.hT = \"12\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER PrintableString\n * @name KJUR.asn1.DERPrintableString\n * @class class for ASN.1 DER PrintableString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERPrintableString = function (params) {\n KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params);\n this.hT = \"13\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER TeletexString\n * @name KJUR.asn1.DERTeletexString\n * @class class for ASN.1 DER TeletexString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERTeletexString = function (params) {\n KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params);\n this.hT = \"14\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER IA5String\n * @name KJUR.asn1.DERIA5String\n * @class class for ASN.1 DER IA5String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERIA5String = function (params) {\n KJUR.asn1.DERIA5String.superclass.constructor.call(this, params);\n this.hT = \"16\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER UTCTime\n * @name KJUR.asn1.DERUTCTime\n * @class class for ASN.1 DER UTCTime\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • str - specify initial ASN.1 value(V) by a string (ex.'130430235959Z')
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
  • date - specify Date object.
  • \n *
\n * NOTE: 'params' can be omitted.\n *

EXAMPLES

\n * @example\n * d1 = new KJUR.asn1.DERUTCTime();\n * d1.setString('130430125959Z');\n *\n * d2 = new KJUR.asn1.DERUTCTime({'str': '130430125959Z'});\n * d3 = new KJUR.asn1.DERUTCTime({'date': new Date(Date.UTC(2015, 0, 31, 0, 0, 0, 0))});\n * d4 = new KJUR.asn1.DERUTCTime('130430125959Z');\n */\nKJUR.asn1.DERUTCTime = function (params) {\n KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params);\n this.hT = \"17\";\n /**\n * set value by a Date object
\n * @name setByDate\n * @memberOf KJUR.asn1.DERUTCTime#\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * o = new KJUR.asn1.DERUTCTime();\n * o.setByDate(new Date(\"2016/12/31\"));\n */\n this.setByDate = function (dateObject) {\n this.hTLV = null;\n this.isModified = true;\n this.date = dateObject;\n this.s = this.formatDate(this.date, 'utc');\n this.hV = stohex(this.s);\n };\n this.getFreshValueHex = function () {\n if (typeof this.date == \"undefined\" && typeof this.s == \"undefined\") {\n this.date = new Date();\n this.s = this.formatDate(this.date, 'utc');\n this.hV = stohex(this.s);\n }\n return this.hV;\n };\n if (params !== undefined) {\n if (params.str !== undefined) {\n this.setString(params.str);\n }\n else if (typeof params == \"string\" && params.match(/^[0-9]{12}Z$/)) {\n this.setString(params);\n }\n else if (params.hex !== undefined) {\n this.setStringHex(params.hex);\n }\n else if (params.date !== undefined) {\n this.setByDate(params.date);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);\n// ********************************************************************\n/**\n * class for ASN.1 DER GeneralizedTime\n * @name KJUR.asn1.DERGeneralizedTime\n * @class class for ASN.1 DER GeneralizedTime\n * @param {Array} params associative array of parameters (ex. {'str': '20130430235959Z'})\n * @property {Boolean} withMillis flag to show milliseconds or not\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • str - specify initial ASN.1 value(V) by a string (ex.'20130430235959Z')
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
  • date - specify Date object.
  • \n *
  • millis - specify flag to show milliseconds (from 1.0.6)
  • \n *
\n * NOTE1: 'params' can be omitted.\n * NOTE2: 'withMillis' property is supported from asn1 1.0.6.\n */\nKJUR.asn1.DERGeneralizedTime = function (params) {\n KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params);\n this.hT = \"18\";\n this.withMillis = false;\n /**\n * set value by a Date object\n * @name setByDate\n * @memberOf KJUR.asn1.DERGeneralizedTime#\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * When you specify UTC time, use 'Date.UTC' method like this:
\n * o1 = new DERUTCTime();\n * o1.setByDate(date);\n *\n * date = new Date(Date.UTC(2015, 0, 31, 23, 59, 59, 0)); #2015JAN31 23:59:59\n */\n this.setByDate = function (dateObject) {\n this.hTLV = null;\n this.isModified = true;\n this.date = dateObject;\n this.s = this.formatDate(this.date, 'gen', this.withMillis);\n this.hV = stohex(this.s);\n };\n this.getFreshValueHex = function () {\n if (this.date === undefined && this.s === undefined) {\n this.date = new Date();\n this.s = this.formatDate(this.date, 'gen', this.withMillis);\n this.hV = stohex(this.s);\n }\n return this.hV;\n };\n if (params !== undefined) {\n if (params.str !== undefined) {\n this.setString(params.str);\n }\n else if (typeof params == \"string\" && params.match(/^[0-9]{14}Z$/)) {\n this.setString(params);\n }\n else if (params.hex !== undefined) {\n this.setStringHex(params.hex);\n }\n else if (params.date !== undefined) {\n this.setByDate(params.date);\n }\n if (params.millis === true) {\n this.withMillis = true;\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);\n// ********************************************************************\n/**\n * class for ASN.1 DER Sequence\n * @name KJUR.asn1.DERSequence\n * @class class for ASN.1 DER Sequence\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • array - specify array of ASN1Object to set elements of content
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERSequence = function (params) {\n KJUR.asn1.DERSequence.superclass.constructor.call(this, params);\n this.hT = \"30\";\n this.getFreshValueHex = function () {\n var h = '';\n for (var i = 0; i < this.asn1Array.length; i++) {\n var asn1Obj = this.asn1Array[i];\n h += asn1Obj.getEncodedHex();\n }\n this.hV = h;\n return this.hV;\n };\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);\n// ********************************************************************\n/**\n * class for ASN.1 DER Set\n * @name KJUR.asn1.DERSet\n * @class class for ASN.1 DER Set\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • array - specify array of ASN1Object to set elements of content
  • \n *
  • sortflag - flag for sort (default: true). ASN.1 BER is not sorted in 'SET OF'.
  • \n *
\n * NOTE1: 'params' can be omitted.
\n * NOTE2: sortflag is supported since 1.0.5.\n */\nKJUR.asn1.DERSet = function (params) {\n KJUR.asn1.DERSet.superclass.constructor.call(this, params);\n this.hT = \"31\";\n this.sortFlag = true; // item shall be sorted only in ASN.1 DER\n this.getFreshValueHex = function () {\n var a = new Array();\n for (var i = 0; i < this.asn1Array.length; i++) {\n var asn1Obj = this.asn1Array[i];\n a.push(asn1Obj.getEncodedHex());\n }\n if (this.sortFlag == true)\n a.sort();\n this.hV = a.join('');\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params.sortflag != \"undefined\" &&\n params.sortflag == false)\n this.sortFlag = false;\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);\n// ********************************************************************\n/**\n * class for ASN.1 DER TaggedObject\n * @name KJUR.asn1.DERTaggedObject\n * @class class for ASN.1 DER TaggedObject\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * Parameter 'tagNoNex' is ASN.1 tag(T) value for this object.\n * For example, if you find '[1]' tag in a ASN.1 dump,\n * 'tagNoHex' will be 'a1'.\n *
\n * As for optional argument 'params' for constructor, you can specify *ANY* of\n * following properties:\n *
    \n *
  • explicit - specify true if this is explicit tag otherwise false\n * (default is 'true').
  • \n *
  • tag - specify tag (default is 'a0' which means [0])
  • \n *
  • obj - specify ASN1Object which is tagged
  • \n *
\n * @example\n * d1 = new KJUR.asn1.DERUTF8String({'str':'a'});\n * d2 = new KJUR.asn1.DERTaggedObject({'obj': d1});\n * hex = d2.getEncodedHex();\n */\nKJUR.asn1.DERTaggedObject = function (params) {\n KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);\n this.hT = \"a0\";\n this.hV = '';\n this.isExplicit = true;\n this.asn1Object = null;\n /**\n * set value by an ASN1Object\n * @name setString\n * @memberOf KJUR.asn1.DERTaggedObject#\n * @function\n * @param {Boolean} isExplicitFlag flag for explicit/implicit tag\n * @param {Integer} tagNoHex hexadecimal string of ASN.1 tag\n * @param {ASN1Object} asn1Object ASN.1 to encapsulate\n */\n this.setASN1Object = function (isExplicitFlag, tagNoHex, asn1Object) {\n this.hT = tagNoHex;\n this.isExplicit = isExplicitFlag;\n this.asn1Object = asn1Object;\n if (this.isExplicit) {\n this.hV = this.asn1Object.getEncodedHex();\n this.hTLV = null;\n this.isModified = true;\n }\n else {\n this.hV = null;\n this.hTLV = asn1Object.getEncodedHex();\n this.hTLV = this.hTLV.replace(/^../, tagNoHex);\n this.isModified = false;\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['tag'] != \"undefined\") {\n this.hT = params['tag'];\n }\n if (typeof params['explicit'] != \"undefined\") {\n this.isExplicit = params['explicit'];\n }\n if (typeof params['obj'] != \"undefined\") {\n this.asn1Object = params['obj'];\n this.setASN1Object(this.isExplicit, this.hT, this.asn1Object);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsrsasign/asn1-1.0.js?"); + +/***/ }), + +/***/ "./lib/lib/jsrsasign/yahoo.js": +/*!************************************!*\ + !*** ./lib/lib/jsrsasign/yahoo.js ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"YAHOO\": () => (/* binding */ YAHOO)\n/* harmony export */ });\n/*!\nCopyright (c) 2011, Yahoo! Inc. All rights reserved.\nCode licensed under the BSD License:\nhttp://developer.yahoo.com/yui/license.html\nversion: 2.9.0\n*/\nvar YAHOO = {};\nYAHOO.lang = {\n /**\n * Utility to set up the prototype, constructor and superclass properties to\n * support an inheritance strategy that can chain constructors and methods.\n * Static members will not be inherited.\n *\n * @method extend\n * @static\n * @param {Function} subc the object to modify\n * @param {Function} superc the object to inherit\n * @param {Object} overrides additional properties/methods to add to the\n * subclass prototype. These will override the\n * matching items obtained from the superclass\n * if present.\n */\n extend: function (subc, superc, overrides) {\n if (!superc || !subc) {\n throw new Error(\"YAHOO.lang.extend failed, please check that \" +\n \"all dependencies are included.\");\n }\n var F = function () { };\n F.prototype = superc.prototype;\n subc.prototype = new F();\n subc.prototype.constructor = subc;\n subc.superclass = superc.prototype;\n if (superc.prototype.constructor == Object.prototype.constructor) {\n superc.prototype.constructor = superc;\n }\n if (overrides) {\n var i;\n for (i in overrides) {\n subc.prototype[i] = overrides[i];\n }\n /*\n * IE will not enumerate native functions in a derived object even if the\n * function was overridden. This is a workaround for specific functions\n * we care about on the Object prototype.\n * @property _IEEnumFix\n * @param {Function} r the object to receive the augmentation\n * @param {Function} s the object that supplies the properties to augment\n * @static\n * @private\n */\n var _IEEnumFix = function () { }, ADD = [\"toString\", \"valueOf\"];\n try {\n if (/MSIE/.test(navigator.userAgent)) {\n _IEEnumFix = function (r, s) {\n for (i = 0; i < ADD.length; i = i + 1) {\n var fname = ADD[i], f = s[fname];\n if (typeof f === 'function' && f != Object.prototype[fname]) {\n r[fname] = f;\n }\n }\n };\n }\n }\n catch (ex) { }\n ;\n _IEEnumFix(subc.prototype, overrides);\n }\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsrsasign/yahoo.js?"); + +/***/ }), + +/***/ "./node_modules/process/browser.js": +/*!*****************************************!*\ + !*** ./node_modules/process/browser.js ***! + \*****************************************/ +/***/ ((module) => { + +eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n//# sourceURL=webpack://JSEncrypt/./node_modules/process/browser.js?"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./lib/index.js"); +/******/ __webpack_exports__ = __webpack_exports__["default"]; +/******/ +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/drpy_t3/drpy_libs/jsonpathplus.min.js b/drpy_t3/drpy_libs/jsonpathplus.min.js new file mode 100644 index 0000000..bc5ffbb --- /dev/null +++ b/drpy_t3/drpy_libs/jsonpathplus.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).JSONPath={})}(this,function(e){"use strict";function n(e,t,r){return t=l(t),function(e,t){{if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined")}return function(e){if(void 0!==e)return e;throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}(e)}(e,i()?Reflect.construct(t,r||[],l(e).constructor):t.apply(e,r))}function o(e,t,r){if(i())return Reflect.construct.apply(null,arguments);var n=[null];n.push.apply(n,t);n=new(e.bind.apply(e,n));return r&&h(n,r.prototype),n}function i(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(i=function(){return!!e})()}function t(t,e){var r,n=Object.keys(t);return Object.getOwnPropertySymbols&&(r=Object.getOwnPropertySymbols(t),e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)),n}function r(n){for(var e=1;ee.length)&&(t=e.length);for(var r=0,n=new Array(t);ru.prec:r<=u.prec);)o=n.pop(),t=n.pop().value,c=n.pop(),e={type:l.BINARY_EXP,operator:t,left:c,right:o},n.push(e);(e=this.gobbleToken())||this.throwError("Expected expression after "+s),n.push(i,e)}for(e=n[a=n.length-1];1=t.length&&this.throwError("Unexpected token "+String.fromCharCode(e));break}if(i===l.COMMA_CODE){if(this.index++,++n!==t.length)if(e===l.CPAREN_CODE)this.throwError("Unexpected token ,");else if(e===l.CBRACK_CODE)for(var o=t.length;o":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},right_associative:new Set,additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"}),v.max_unop_len=v.getMaxKeyLen(v.unary_ops),v.max_binop_len=v.getMaxKeyLen(v.binary_ops);var E=function(e){return new v(e).parse()};Object.getOwnPropertyNames(v).forEach(function(e){void 0===E[e]&&"prototype"!==e&&(E[e]=v[e])}),E.Jsep=v;b={name:"ternary",init:function(o){o.hooks.add("after-expression",function(e){if(e.node&&this.code===o.QUMARK_CODE){this.index++;var t=e.node,r=this.gobbleExpression();if(r||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===o.COLON_CODE){this.index++;var n=this.gobbleExpression();if(n||this.throwError("Expected expression"),e.node={type:"ConditionalExpression",test:t,consequent:r,alternate:n},t.operator&&o.binary_ops[t.operator]<=.9){for(var i=t;i.right.operator&&o.binary_ops[i.right.operator]<=.9;)i=i.right;e.node.test=i.right,i.right=e.node,e.node=t}}else this.throwError("Expected :")}})}};E.plugins.register(b);var b={name:"regex",init:function(s){s.hooks.add("gobble-token",function(e){if(47===this.code){for(var t=++this.index,r=!1;this.index>=",">>>=","&=","^=","|="]),updateOperators:[43,45],assignmentPrecedence:.9,init:function(t){var n=[t.IDENTIFIER,t.MEMBER_EXP];g.assignmentOperators.forEach(function(e){return t.addBinaryOp(e,g.assignmentPrecedence,!0)}),t.hooks.add("gobble-token",function(e){var t=this,r=this.code;g.updateOperators.some(function(e){return e===r&&e===t.expr.charCodeAt(t.index+1)})&&(this.index+=2,e.node={type:"UpdateExpression",operator:43===r?"++":"--",argument:this.gobbleTokenProperty(this.gobbleIdentifier()),prefix:!0},e.node.argument&&n.includes(e.node.argument.type)||this.throwError("Unexpected ".concat(e.node.operator)))}),t.hooks.add("after-token",function(e){var t,r=this;e.node&&(t=this.code,g.updateOperators.some(function(e){return e===t&&e===r.expr.charCodeAt(r.index+1)})&&(n.includes(e.node.type)||this.throwError("Unexpected ".concat(e.node.operator)),this.index+=2,e.node={type:"UpdateExpression",operator:43===t?"++":"--",argument:e.node,prefix:!1}))}),t.hooks.add("after-expression",function(e){e.node&&!function t(e){g.assignmentOperators.has(e.operator)?(e.type="AssignmentExpression",t(e.left),t(e.right)):e.operator||Object.values(e).forEach(function(e){e&&"object"===C(e)&&t(e)})}(e.node)})}},A=Object.prototype.hasOwnProperty;function w(e,t){return(e=e.slice()).push(t),e}function k(e,t){return(t=t.slice()).unshift(e),t}var x=function(){function r(e){var t;return s(this,r),(t=n(this,r,['JSONPath should not be called with "new" (it prevents return of (unwrapped) scalar values)'])).avoidNew=!0,t.value=e,t.name="NewError",t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&h(e,t)}(r,p(Error)),c(r)}();function F(e,t,r,n,i){if(!(this instanceof F))try{return new F(e,t,r,n,i)}catch(e){if(!e.avoidNew)throw e;return e.value}"string"==typeof e&&(i=n,n=r,r=t,t=e,e=null);var o=e&&"object"===C(e);if(e=e||{},this.json=e.json||r,this.path=e.path||t,this.resultType=e.resultType||"value",this.flatten=e.flatten||!1,this.wrap=!A.call(e,"wrap")||e.wrap,this.sandbox=e.sandbox||{},this.eval=void 0===e.eval?"safe":e.eval,this.ignoreEvalErrors=void 0!==e.ignoreEvalErrors&&e.ignoreEvalErrors,this.parent=e.parent||null,this.parentProperty=e.parentProperty||null,this.callback=e.callback||n||null,this.otherTypeCallback=e.otherTypeCallback||i||function(){throw new TypeError("You must supply an otherTypeCallback callback option with the @other() operator.")},!1!==e.autostart){var a={path:o?e.path:t};o?"json"in e&&(a.json=e.json):a.json=r;a=this.evaluate(a);if(!a||"object"!==C(a))throw new x(a);return a}}F.prototype.evaluate=function(e,t,r,n){var i=this,o=this.parent,a=this.parentProperty,s=this.flatten,u=this.wrap;if(this.currResultType=this.resultType,this.currEval=this.eval,this.currSandbox=this.sandbox,r=r||this.callback,this.currOtherTypeCallback=n||this.otherTypeCallback,t=t||this.json,(e=e||this.path)&&"object"===C(e)&&!Array.isArray(e)){if(!e.path&&""!==e.path)throw new TypeError('You must supply a "path" property when providing an object argument to JSONPath.evaluate().');if(!A.call(e,"json"))throw new TypeError('You must supply a "json" property when providing an object argument to JSONPath.evaluate().');t=e.json,s=A.call(e,"flatten")?e.flatten:s,this.currResultType=A.call(e,"resultType")?e.resultType:this.currResultType,this.currSandbox=A.call(e,"sandbox")?e.sandbox:this.currSandbox,u=A.call(e,"wrap")?e.wrap:u,this.currEval=A.call(e,"eval")?e.eval:this.currEval,r=A.call(e,"callback")?e.callback:r,this.currOtherTypeCallback=A.call(e,"otherTypeCallback")?e.otherTypeCallback:this.currOtherTypeCallback,o=A.call(e,"parent")?e.parent:o,a=A.call(e,"parentProperty")?e.parentProperty:a,e=e.path}if(o=o||null,a=a||null,Array.isArray(e)&&(e=F.toPathString(e)),(e||""===e)&&t){e=F.toPathArray(e);"$"===e[0]&&1@-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)['\[](\??\((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*?\))(?!(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])\)\])['\]]/g.exec(f);d?this._walk(n,function(e){var t=[d[2]],r=d[1]?n[e][d[1]]:n[e];0=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:t}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,a=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){a=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(a)throw i}}}}(c.split(","));try{for(E.s();!(g=E.n()).done;){var g=g.value;p(this._trace(k(g,l),n,i,o,a,s,!0))}}catch(e){E.e(e)}finally{E.f()}}else!r&&n&&A.call(n,c)&&p(this._trace(l,n[c],w(i,c),n,c,s,e,!0))}if(this._hasParentSelector)for(var x=0;x":function(e,t){return e>t()},"<=":function(e,t){return e<=t()},">=":function(e,t){return e>=t()},"<<":function(e,t){return e<>":function(e,t){return e>>t()},">>>":function(e,t){return e>>>t()},"+":function(e,t){return e+t()},"-":function(e,t){return e-t()},"*":function(e,t){return e*t()},"/":function(e,t){return e/t()},"%":function(e,t){return e%t()}}[e.operator](D.evalAst(e.left,t),function(){return D.evalAst(e.right,t)})},evalCompound:function(e,t){for(var r=0;r> 2); + out += b64map.charAt((c1 & 0x3) << 4); + out += "=="; + break; + } + c2 = str.charCodeAt(i++); + if (i == len) { + out += b64map.charAt(c1 >> 2); + out += b64map.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); + out += b64map.charAt((c2 & 0xF) << 2); + out += "="; + break; + } + c3 = str.charCodeAt(i++); + out += b64map.charAt(c1 >> 2); + out += b64map.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); + out += b64map.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)); + out += b64map.charAt(c3 & 0x3F); + } + return out; +} + +function atob(str) { + var c1, c2, c3, c4; + var i, len, out; + len = str.length; + i = 0; + out = ""; + while (i < len) { + do { + c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; + } while (i < len && c1 == -1); + if (c1 == -1) break; + do { + c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; + } while (i < len && c2 == -1); + if (c2 == -1) break; + out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)); + do { + c3 = str.charCodeAt(i++) & 0xff; + if (c3 == 61) return out; + c3 = base64DecodeChars[c3]; + } while (i < len && c3 == -1); + if (c3 == -1) break; + out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2)); + do { + c4 = str.charCodeAt(i++) & 0xff; + if (c4 == 61) return out; + c4 = base64DecodeChars[c4]; + } while (i < len && c4 == -1); + if (c4 == -1) break; + out += String.fromCharCode(((c3 & 0x03) << 6) | c4); + } + return out; +} + +function hex2b64(h) { + var i; + var c; + var ret = ""; + for (i = 0; i + 3 <= h.length; i += 3) { + c = parseInt(h.substring(i, i + 3), 16); + ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63); + } + if (i + 1 == h.length) { + c = parseInt(h.substring(i, i + 1), 16); + ret += b64map.charAt(c << 2); + } else if (i + 2 == h.length) { + c = parseInt(h.substring(i, i + 2), 16); + ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4); + } + while ((ret.length & 3) > 0) ret += b64pad; + return ret; +} + +function hexToBytes(hex) { + for (var bytes = [], c = 0; c < hex.length; c += 2) + bytes.push(parseInt(hex.substr(c, 2), 16)); + return bytes; +} + +function bytesToHex(bytes) { + for (var hex = [], i = 0; i < bytes.length; i++) { + hex.push((bytes[i] >>> 4).toString(16)); + hex.push((bytes[i] & 0xF).toString(16)); + } + return hex.join(""); +} + +function b64tohex(str) { + for (var i = 0, bin = atob(str.replace(/[ \r\n]+$/, "")), hex = []; i < bin.length; ++i) { + var tmp = bin.charCodeAt(i).toString(16); + if (tmp.length === 1) tmp = "0" + tmp; + hex[hex.length] = tmp; + } + return hex.join(""); +} + +function addPreZero(num, length) { + var t = (num + '').length, + s = ''; + for (var i = 0; i < length - t; i++) { + s += '0'; + } + + return s + num; +} + +//获取RSA key 长度 +JSEncrypt.prototype.getkeylength = function () { + return ((this.key.n.bitLength() + 7) >> 3); +}; + +// 分段解密,支持中文 +JSEncrypt.prototype.decryptUnicodeLong = function (string) { + var k = this.getKey(); + //解密长度=key size.hex2b64结果是每字节每两字符,所以直接*2 + var maxLength = ((k.n.bitLength() + 7) >> 3) * 2; + try { + var hexString = b64tohex(string); + var decryptedString = ""; + var rexStr = ".{1," + maxLength + "}"; + var rex = new RegExp(rexStr, 'g'); + var subStrArray = hexString.match(rex); + if (subStrArray) { + subStrArray.forEach(function (entry) { + decryptedString += k.decrypt(entry); + }); + return decryptedString; + } + } catch (ex) { + console.log('加密错误:' + ex.message); + return false; + } +}; + +// 分段加密,支持中文 +JSEncrypt.prototype.encryptUnicodeLong = function (string) { + var k = this.getKey(); + //根据key所能编码的最大长度来定分段长度。key size - 11:11字节随机padding使每次加密结果都不同。 + var maxLength = ((k.n.bitLength() + 7) >> 3) - 11; + try { + var subStr = "", encryptedString = ""; + var subStart = 0, subEnd = 0; + var bitLen = 0, tmpPoint = 0; + for (var i = 0, len = string.length; i < len; i++) { + //js 是使用 Unicode 编码的,每个字符所占用的字节数不同 + var charCode = string.charCodeAt(i); + if (charCode <= 0x007f) { + bitLen += 1; + } else if (charCode <= 0x07ff) { + bitLen += 2; + } else if (charCode <= 0xffff) { + bitLen += 3; + } else { + bitLen += 4; + } + //字节数到达上限,获取子字符串加密并追加到总字符串后。更新下一个字符串起始位置及字节计算。 + if (bitLen > maxLength) { + subStr = string.substring(subStart, subEnd) + encryptedString += k.encrypt(subStr); + subStart = subEnd; + bitLen = bitLen - tmpPoint; + } else { + subEnd = i; + tmpPoint = bitLen; + } + } + subStr = string.substring(subStart, len) + encryptedString += k.encrypt(subStr); + return hex2b64(encryptedString); + } catch (ex) { + console.log('解密错误:' + ex.message); + return false; + } +}; +//添加的函数与方法结束 diff --git a/drpy_t3/drpy_libs/jsrsa.min.js b/drpy_t3/drpy_libs/jsrsa.min.js new file mode 100644 index 0000000..406f210 --- /dev/null +++ b/drpy_t3/drpy_libs/jsrsa.min.js @@ -0,0 +1 @@ +var b64map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var b64pad="=";var base64DecodeChars=new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);function btoa(str){var out,i,len;var c1,c2,c3;len=str.length;i=0;out="";while(i>2);out+=b64map.charAt((c1&3)<<4);out+="==";break}c2=str.charCodeAt(i++);if(i==len){out+=b64map.charAt(c1>>2);out+=b64map.charAt((c1&3)<<4|(c2&240)>>4);out+=b64map.charAt((c2&15)<<2);out+="=";break}c3=str.charCodeAt(i++);out+=b64map.charAt(c1>>2);out+=b64map.charAt((c1&3)<<4|(c2&240)>>4);out+=b64map.charAt((c2&15)<<2|(c3&192)>>6);out+=b64map.charAt(c3&63)}return out}function atob(str){var c1,c2,c3,c4;var i,len,out;len=str.length;i=0;out="";while(i>4);do{c3=str.charCodeAt(i++)&255;if(c3==61)return out;c3=base64DecodeChars[c3]}while(i>2);do{c4=str.charCodeAt(i++)&255;if(c4==61)return out;c4=base64DecodeChars[c4]}while(i>6)+b64map.charAt(c&63)}if(i+1==h.length){c=parseInt(h.substring(i,i+1),16);ret+=b64map.charAt(c<<2)}else if(i+2==h.length){c=parseInt(h.substring(i,i+2),16);ret+=b64map.charAt(c>>2)+b64map.charAt((c&3)<<4)}while((ret.length&3)>0)ret+=b64pad;return ret}function hexToBytes(hex){for(var bytes=[],c=0;c>>4).toString(16));hex.push((bytes[i]&15).toString(16))}return hex.join("")}function b64tohex(str){for(var i=0,bin=atob(str.replace(/[ \r\n]+$/,"")),hex=[];i>3};JSEncrypt.prototype.decryptUnicodeLong=function(string){var k=this.getKey();var maxLength=(k.n.bitLength()+7>>3)*2;try{var hexString=b64tohex(string);var decryptedString="";var rexStr=".{1,"+maxLength+"}";var rex=new RegExp(rexStr,"g");var subStrArray=hexString.match(rex);if(subStrArray){subStrArray.forEach(function(entry){decryptedString+=k.decrypt(entry)});return decryptedString}}catch(ex){console.log("加密错误:"+ex.message);return false}};JSEncrypt.prototype.encryptUnicodeLong=function(string){var k=this.getKey();var maxLength=(k.n.bitLength()+7>>3)-11;try{var subStr="",encryptedString="";var subStart=0,subEnd=0;var bitLen=0,tmpPoint=0;for(var i=0,len=string.length;imaxLength){subStr=string.substring(subStart,subEnd);encryptedString+=k.encrypt(subStr);subStart=subEnd;bitLen=bitLen-tmpPoint}else{subEnd=i;tmpPoint=bitLen}}subStr=string.substring(subStart,len);encryptedString+=k.encrypt(subStr);return hex2b64(encryptedString)}catch(ex){console.log("解密错误:"+ex.message);return false}}; \ No newline at end of file diff --git a/drpy_t3/drpy_libs/live2cms.js b/drpy_t3/drpy_libs/live2cms.js new file mode 100644 index 0000000..48606d0 --- /dev/null +++ b/drpy_t3/drpy_libs/live2cms.js @@ -0,0 +1,534 @@ +/** + * live2cms.js + * 配置设置 {"key":"Live2CMS","name":"直播转点播V2","type":3,"api":"{{host}}/libs/live2cms.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/txt/json/live2mv_data.json"} + * live2mv_data.json + * 支持m3u类直播,支持线路归并。支持筛选切换显示模式 +[ +{"name": "甜蜜", "url": "http://zdir.kebedd69.repl.co/public/live.txt"}, +{"name": "俊于", "url": "http://home.jundie.top:81/Cat/tv/live.txt"}, +{"name": "菜妮丝", "url": "http://xn--ihqu10cn4c.xn--z7x900a.love:63/TV/tvzb.txt"}, +{"name": "布里m3u", "url": "http://jiexi.bulisite.top/m3u.php"}, +{"name": "吾爱", "url": "http://52bsj.vip:81/api/v3/file/get/763/live.txt?sign=87BTGT1_6AOry7FPwy_uuxFTv2Wcb9aDMj46rDdRTD8%3D%3A0"}, +{"name": "饭太硬", "url": "http://ftyyy.tk/live.txt"} +] + + * 提示 ext文件格式为json列表,name,url参数 + * 取消加密,减少性能问题 + */ +String.prototype.rstrip = function (chars) { + let regex = new RegExp(chars + "$"); + return this.replace(regex, ""); +}; +const request_timeout = 5000; +const RKEY = 'live2cms'; // 源的唯一标识 +const VERSION = 'live2cms 20230619'; +const UA = 'Mozilla/5.0'; //默认请求ua +const __ext = {data_dict:{}}; +const tips = `\n道长直播转点播js-当前版本${VERSION}`; +const def_pic = 'https://avatars.githubusercontent.com/u/97389433?s=120&v=4'; + +/** + * 存在数据库配置表里, 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); +} + +var showMode = getItem('showMode','groups'); // groups按组分类显示 all全部一条线路展示 +var groupDict = JSON.parse(getItem('groupDict','{}')); // 搜索分组字典 + +/** + * 打印日志 + * @param any 任意变量 + */ +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('print:'+e.message); + console.log(typeof(any)+':'+any.length); + } + }else if(typeof(any)=='object'&&Object.keys(any).length<1){ + console.log('null object'); + }else{ + console.log(any); + } +} + +/*** 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 +} + +/** + * m3u直播格式转一般直播格式 + * @param m3u + * @returns {string} + */ +function convertM3uToNormal(m3u) { + try { + const lines = m3u.split('\n'); + let result = ''; + let TV=''; + // let flag='#genre#'; + let flag='#m3u#'; + let currentGroupTitle = ''; + lines.forEach((line) => { + if (line.startsWith('#EXTINF:')) { + const groupTitle = line.split('"')[1].trim(); + TV= line.split('"')[2].substring(1); + if (currentGroupTitle !== groupTitle) { + currentGroupTitle = groupTitle; + result += `\n${currentGroupTitle},${flag}\n`; + } + } else if (line.startsWith('http')) { + const splitLine = line.split(','); + result += `${TV}\,${splitLine[0]}\n`; + } + }); + return result.trim(); + }catch (e) { + print(`m3u直播转普通直播发生错误:${e.message}`); + return m3u + } +} + +/** + * 线路归类 + * @param arr + * @returns {*[][]} + */ +function merge(arr) { + var parse = arguments[1] ? arguments[1] : ''; + var p = []; + if (parse !== '' && typeof(parse)=="function") { + p = arr.map(parse); + } + const createEmptyArrays = (length) => Array.from({ + length + }, () => []); + let lists = createEmptyArrays(arr.length); + let sl = createEmptyArrays(arr.length); + (p.length ? p : arr).forEach((k, index) => { + var i = 0; + while (sl[i].includes(k)) { + i = i + 1 + } + sl[i].push(k); + lists[i].push(arr[index]); + }) + lists=lists.filter(x=>x.some(k=>k.length)); + return lists +} + +/** + * 线路归类/小棉袄算法 + * @param arr 数组 + * @param parse 解析式 + * @returns {[[*]]} + */ +function splitArray(arr,parse) { + parse = parse&&typeof(parse)=='function'?parse:''; + let result = [[arr[0]]]; + for (let i = 1; i < arr.length; i++) { + let index = -1; + for (let j = 0; j < result.length; j++) { + if (parse&&result[j].map(parse).includes(parse(arr[i]))) { + index = j; + }else if((!parse) && result[j].includes(arr[i])){ + index = j; + } + } + if (index >= result.length - 1) { + result.push([]); + result[result.length - 1].push(arr[i]); + } else { + result[index + 1].push(arr[i]); + } + } + return result; +} + + +/** + * 搜索结果生成分组字典 + * @param arr + * @param parse x=>x.split(',')[0] + * @returns {{}} + */ +function gen_group_dict(arr,parse){ + let dict = {}; + arr.forEach((it)=>{ + let k = it.split(',')[0]; + if(parse && typeof(parse)==='function'){ + k = parse(k); + } + if(!dict[k]){ + dict[k] = [it] + }else{ + dict[k].push(it); + } + }); + return dict +} + +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; + if(!options.headers){ + options.headers = {}; + } + let keys = Object.keys(options.headers).map(it=>it.toLowerCase()); + if(!keys.includes('referer')){ + options.headers['Referer'] = getHome(url); + } + if(!keys.includes('user-agent')){ + options.headers['User-Agent'] = UA; + } + console.log(JSON.stringify(options.headers)); + try { + const res = req(url, options); + // if(options.headers['Authorization']){ + // console.log(res.content); + // } + 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()})); + } +}); + +function init(ext) { + console.log("当前版本号:"+VERSION); + let data; + if (typeof ext == 'object'){ + data = ext; + print('live ext:object'); + } else if (typeof ext == 'string') { + if (ext.startsWith('http')) { + let ext_paramas = ext.split(';'); + let data_url = ext_paramas[0]; + print(data_url); + data = http.get(data_url).json(); + } + } + print(data); + __ext.data = data; + print('init执行完毕'); +} + +function home(filter) { + let classes = __ext.data.map(it => ({ + type_id: it.url, + type_name: it.name, + })); + print("----home----"); + let filter_dict = {}; + let filters = [ + {'key': 'show', 'name': '播放展示', 'value': [{'n': '多线路分组', 'v': 'groups'},{'n': '单线路', 'v': 'all'}]} + ]; + classes.forEach(it=>{ + filter_dict[it.type_id] = filters; + }); + print(classes); + return JSON.stringify({ 'class': classes,'filters': filter_dict}); +} + +function homeVod(params) { + let _get_url = __ext.data[0].url; + let html; + if(__ext.data_dict[_get_url]){ + html = __ext.data_dict[_get_url]; + }else{ + html = http.get(_get_url).text(); + if(/#EXTM3U/.test(html)){ + html = convertM3uToNormal(html); + } + __ext.data_dict[_get_url] = html; + } + // let arr = html.match(/.*?,#[\s\S].*?#/g); + let arr = html.match(/.*?[,,]#[\s\S].*?#/g); // 可能存在中文逗号 + let _list = []; + try { + arr.forEach(it=>{ + let vname = it.split(/[,,]/)[0]; + let vtab = it.match(/#(.*?)#/)[0]; + _list.push({ + vod_name:vname, + vod_id:_get_url+'$'+vname, + vod_pic:def_pic, + vod_remarks:vtab, + }); + }); + }catch (e) { + print('Live2cms获取首页推荐发送错误:'+e.message); + } + return JSON.stringify({ 'list': _list }); +} + +function category(tid, pg, filter, extend) { + let fl = filter?extend:{}; + if(fl.show){ + showMode = fl.show; + setItem('showMode',showMode); + } + if(parseInt(pg)>1){ + return JSON.stringify({ + 'list': [], + }); + } + let _get_url = tid; + let html; + if(__ext.data_dict[_get_url]){ + html = __ext.data_dict[_get_url]; + }else{ + html = http.get(_get_url).text(); + if(/#EXTM3U/.test(html)){ + html = convertM3uToNormal(html); + } + __ext.data_dict[_get_url] = html; + } + // let arr = html.match(/.*?[,,]#[\s\S].*?#/g); + let arr = html.match(/.*?[,,]#[\s\S].*?#/g); // 可能存在中文逗号 + let _list = []; + try { + arr.forEach(it=>{ + let vname = it.split(/[,,]/)[0]; + let vtab = it.match(/#(.*?)#/)[0]; + _list.push({ + // vod_name:it.split(',')[0], + vod_name:vname, + vod_id:_get_url+'$'+vname, + vod_pic:def_pic, + vod_remarks:vtab, + }); + }); + }catch (e) { + print('Live2cms获取一级分类页发生错误:'+e.message); + } + + return JSON.stringify({ + 'page': 1, + 'pagecount': 1, + 'limit': _list.length, + 'total': _list.length, + 'list': _list, + }); +} + +function detail(tid) { // ⛵ 港•澳•台 + let _get_url = tid.split('$')[0]; + let _tab = tid.split('$')[1]; + if(tid.includes('#search#')){ + let vod_name = _tab.replace('#search#',''); + let vod_play_from = '来自搜索'; + vod_play_from+=`:${_get_url}`; + + // let vod_play_url = vod_name+'$'+_get_url; + // print(vod_play_url); + + let vod_play_url = groupDict[_get_url].map(x=>x.replace(',','$')).join('#'); + + return JSON.stringify({ + list: [{ + vod_id: tid, + vod_name: '搜索:'+vod_name, + type_name: "直播列表", + vod_pic: def_pic, + vod_content: tid, + vod_play_from: vod_play_from, + vod_play_url: vod_play_url, + vod_director: tips, + vod_remarks: `道长直播转点播js-当前版本${VERSION}`, + }] + }); + } + let html; + if(__ext.data_dict[_get_url]){ + html = __ext.data_dict[_get_url]; + }else{ + html = http.get(_get_url).text(); + if(/#EXTM3U/.test(html)){ + html = convertM3uToNormal(html); + } + __ext.data_dict[_get_url] = html; + } + // let a = new RegExp(`.*?${_tab},#[\\s\\S].*?#`); + let a = new RegExp(`.*?${_tab.replace('(','\\(').replace(')','\\)')}[,,]#[\\s\\S].*?#`); + let b = html.match(a)[0]; + let c = html.split(b)[1]; + if(c.match(/.*?[,,]#[\s\S].*?#/)){ + let d = c.match(/.*?[,,]#[\s\S].*?#/)[0]; + c = c.split(d)[0]; + } + let arr = c.trim().split('\n'); + let _list = []; + arr.forEach((it)=>{ + if(it.trim()){ + let t = it.trim().split(',')[0]; + let u = it.trim().split(',')[1]; + _list.push(t+'$'+u); + } + }); + + let vod_name = __ext.data.find(x=>x.url===_get_url).name; + let vod_play_url; + let vod_play_from; + + if(showMode==='groups'){ + let groups = splitArray(_list,x=>x.split('$')[0]); + let tabs = []; + for(let i=0;iit.join('#')).join('$$$'); + vod_play_from = tabs.join('$$$'); + }else{ + vod_play_url = _list.join('#'); + vod_play_from = vod_name; + } + let vod = { + vod_id: tid, + vod_name: vod_name+'|'+_tab, + type_name: "直播列表", + vod_pic: def_pic, + vod_content: tid, + vod_play_from: vod_play_from, + vod_play_url: vod_play_url, + vod_director: tips, + vod_remarks: `道长直播转点播js-当前版本${VERSION}`, + }; + + return JSON.stringify({ + list: [vod] + }); +} + +function play(flag, id, flags) { + let vod = { + 'parse': /m3u8/.test(id)?0:1, + 'playUrl': '', + 'url': id + }; + print(vod); + return JSON.stringify(vod); +} + +function search(wd, quick) { + let _get_url = __ext.data[0].url; + let html; + if(__ext.data_dict[_get_url]){ + html = __ext.data_dict[_get_url]; + }else{ + html = http.get(_get_url).text(); + if(/#EXTM3U/.test(html)){ + html = convertM3uToNormal(html); + } + __ext.data_dict[_get_url] = html; + } + let str=''; + Object.keys(__ext.data_dict).forEach(()=>{ + str+=__ext.data_dict[_get_url]; + }); + let links = str.split('\n').filter(it=>it.trim() && it.includes(',') && it.split(',')[1].trim().startsWith('http')); + links = links.map(it=>it.trim()); + let plays = Array.from(new Set(links)); + print('搜索关键词:'+wd); + print('过滤前:'+plays.length); + plays = plays.filter(it=>it.includes(wd)); + print('过滤后:'+plays.length); + print(plays); + let new_group = gen_group_dict(plays); + groupDict = Object.assign(groupDict,new_group); + // 搜索分组结果存至本地方便二级调用 + setItem('groupDict',JSON.stringify(groupDict)); + let _list = []; + + + // plays.forEach((it)=>{ + // _list.push({ + // 'vod_name':it.split(',')[0], + // 'vod_id':it.split(',')[1].trim()+'$'+it.split(',')[0].trim()+'#search#', + // 'vod_pic':def_pic, + // }) + // }); + + Object.keys(groupDict).forEach((it)=>{ + _list.push({ + 'vod_name':it, + 'vod_id':it+'$'+wd+'#search#', + 'vod_pic':def_pic, + }); + }); + return JSON.stringify({ + 'list': _list + }); +} + +// 导出函数对象 +export default { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search +} diff --git a/drpy_t3/drpy_libs/mod.js b/drpy_t3/drpy_libs/mod.js new file mode 100644 index 0000000..719f2b8 --- /dev/null +++ b/drpy_t3/drpy_libs/mod.js @@ -0,0 +1,138 @@ +const peq = new Uint32Array(0x10000); +const myers_32 = (a, b) => { + const n = a.length; + const m = b.length; + const lst = 1 << (n - 1); + let pv = -1; + let mv = 0; + let sc = n; + let i = n; + while (i--) { + peq[a.charCodeAt(i)] |= 1 << i; + } + for (i = 0; i < m; i++) { + let eq = peq[b.charCodeAt(i)]; + const xv = eq | mv; + eq |= ((eq & pv) + pv) ^ pv; + mv |= ~(eq | pv); + pv &= eq; + if (mv & lst) { + sc++; + } + if (pv & lst) { + sc--; + } + mv = (mv << 1) | 1; + pv = (pv << 1) | ~(xv | mv); + mv &= xv; + } + i = n; + while (i--) { + peq[a.charCodeAt(i)] = 0; + } + return sc; +}; +const myers_x = (b, a) => { + const n = a.length; + const m = b.length; + const mhc = []; + const phc = []; + const hsize = Math.ceil(n / 32); + const vsize = Math.ceil(m / 32); + for (let i = 0; i < hsize; i++) { + phc[i] = -1; + mhc[i] = 0; + } + let j = 0; + for (; j < vsize - 1; j++) { + let mv = 0; + let pv = -1; + const start = j * 32; + const vlen = Math.min(32, m) + start; + for (let k = start; k < vlen; k++) { + peq[b.charCodeAt(k)] |= 1 << k; + } + for (let i = 0; i < n; i++) { + const eq = peq[a.charCodeAt(i)]; + const pb = (phc[(i / 32) | 0] >>> i) & 1; + const mb = (mhc[(i / 32) | 0] >>> i) & 1; + const xv = eq | mv; + const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb; + let ph = mv | ~(xh | pv); + let mh = pv & xh; + if ((ph >>> 31) ^ pb) { + phc[(i / 32) | 0] ^= 1 << i; + } + if ((mh >>> 31) ^ mb) { + mhc[(i / 32) | 0] ^= 1 << i; + } + ph = (ph << 1) | pb; + mh = (mh << 1) | mb; + pv = mh | ~(xv | ph); + mv = ph & xv; + } + for (let k = start; k < vlen; k++) { + peq[b.charCodeAt(k)] = 0; + } + } + let mv = 0; + let pv = -1; + const start = j * 32; + const vlen = Math.min(32, m - start) + start; + for (let k = start; k < vlen; k++) { + peq[b.charCodeAt(k)] |= 1 << k; + } + let score = m; + for (let i = 0; i < n; i++) { + const eq = peq[a.charCodeAt(i)]; + const pb = (phc[(i / 32) | 0] >>> i) & 1; + const mb = (mhc[(i / 32) | 0] >>> i) & 1; + const xv = eq | mv; + const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb; + let ph = mv | ~(xh | pv); + let mh = pv & xh; + score += (ph >>> (m - 1)) & 1; + score -= (mh >>> (m - 1)) & 1; + if ((ph >>> 31) ^ pb) { + phc[(i / 32) | 0] ^= 1 << i; + } + if ((mh >>> 31) ^ mb) { + mhc[(i / 32) | 0] ^= 1 << i; + } + ph = (ph << 1) | pb; + mh = (mh << 1) | mb; + pv = mh | ~(xv | ph); + mv = ph & xv; + } + for (let k = start; k < vlen; k++) { + peq[b.charCodeAt(k)] = 0; + } + return score; +}; +const distance = (a, b) => { + if (a.length < b.length) { + const tmp = b; + b = a; + a = tmp; + } + if (b.length === 0) { + return a.length; + } + if (a.length <= 32) { + return myers_32(a, b); + } + return myers_x(a, b); +}; +const closest = (str, arr) => { + let min_distance = Infinity; + let min_index = 0; + for (let i = 0; i < arr.length; i++) { + const dist = distance(str, arr[i]); + if (dist < min_distance) { + min_distance = dist; + min_index = i; + } + } + return arr[min_index]; +}; +export { closest, distance }; diff --git a/drpy_t3/drpy_libs/node-rsa-new.js b/drpy_t3/drpy_libs/node-rsa-new.js new file mode 100644 index 0000000..81507d3 --- /dev/null +++ b/drpy_t3/drpy_libs/node-rsa-new.js @@ -0,0 +1,5859 @@ +/*! For license information please see node-rsa.bundle.js.LICENSE.txt */ ! function(t, e) { +"object" == typeof exports && "object" == typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define([], e) : "object" == typeof exports ? exports.NODERSA = e() : t.NODERSA = e() +}(globalThis, (() => (() => { +var t = { +6395: t => { +t.exports = { +newInvalidAsn1Error: function(t) { +var e = new Error; +return e.name = "InvalidAsn1Error", e.message = t || "", e +} +} +}, +5670: (t, e, r) => { +var n = r(6395), +i = r(6299), +o = r(3319), +s = r(1431); +for (var a in t.exports = { +Reader: o, +Writer: s +}, i) i.hasOwnProperty(a) && (t.exports[a] = i[a]); +for (var f in n) n.hasOwnProperty(f) && (t.exports[f] = n[f]) +}, +3319: (t, e, r) => { +var n = r(4529), +i = r(4774) +.Buffer, +o = r(6299), +s = r(6395) +.newInvalidAsn1Error; + +function a(t) { +if (!t || !i.isBuffer(t)) throw new TypeError("data must be a node Buffer"); +this._buf = t, this._size = t.length, this._len = 0, this._offset = 0 +} +Object.defineProperty(a.prototype, "length", { +enumerable: !0, +get: function() { +return this._len +} +}), Object.defineProperty(a.prototype, "offset", { +enumerable: !0, +get: function() { +return this._offset +} +}), Object.defineProperty(a.prototype, "remain", { +get: function() { +return this._size - this._offset +} +}), Object.defineProperty(a.prototype, "buffer", { +get: function() { +return this._buf.slice(this._offset) +} +}), a.prototype.readByte = function(t) { +if (this._size - this._offset < 1) return null; +var e = 255 & this._buf[this._offset]; +return t || (this._offset += 1), e +}, a.prototype.peek = function() { +return this.readByte(!0) +}, a.prototype.readLength = function(t) { +if (void 0 === t && (t = this._offset), t >= this._size) return null; +var e = 255 & this._buf[t++]; +if (null === e) return null; +if (128 & ~e) this._len = e; +else { +if (0 == (e &= 127)) throw s("Indefinite length not supported"); +if (e > 4) throw s("encoding too long"); +if (this._size - t < e) return null; +this._len = 0; +for (var r = 0; r < e; r++) this._len = (this._len << 8) + (255 & this._buf[t++]) +} +return t +}, a.prototype.readSequence = function(t) { +var e = this.peek(); +if (null === e) return null; +if (void 0 !== t && t !== e) throw s("Expected 0x" + t.toString(16) + ": got 0x" + e.toString(16)); +var r = this.readLength(this._offset + 1); +return null === r ? null : (this._offset = r, e) +}, a.prototype.readInt = function() { +return this._readTag(o.Integer) +}, a.prototype.readBoolean = function() { +return 0 !== this._readTag(o.Boolean) +}, a.prototype.readEnumeration = function() { +return this._readTag(o.Enumeration) +}, a.prototype.readString = function(t, e) { +t || (t = o.OctetString); +var r = this.peek(); +if (null === r) return null; +if (r !== t) throw s("Expected 0x" + t.toString(16) + ": got 0x" + r.toString(16)); +var n = this.readLength(this._offset + 1); +if (null === n) return null; +if (this.length > this._size - n) return null; +if (this._offset = n, 0 === this.length) return e ? i.alloc(0) : ""; +var a = this._buf.slice(this._offset, this._offset + this.length); +return this._offset += this.length, e ? a : a.toString("utf8") +}, a.prototype.readOID = function(t) { +t || (t = o.OID); +var e = this.readString(t, !0); +if (null === e) return null; +for (var r = [], n = 0, i = 0; i < e.length; i++) { +var s = 255 & e[i]; +n <<= 7, n += 127 & s, 128 & s || (r.push(n), n = 0) +} +return n = r.shift(), r.unshift(n % 40), r.unshift(n / 40 | 0), r.join(".") +}, a.prototype._readTag = function(t) { +n.ok(void 0 !== t); +var e = this.peek(); +if (null === e) return null; +if (e !== t) throw s("Expected 0x" + t.toString(16) + ": got 0x" + e.toString(16)); +var r = this.readLength(this._offset + 1); +if (null === r) return null; +if (this.length > 4) throw s("Integer too long: " + this.length); +if (this.length > this._size - r) return null; +this._offset = r; +for (var i = this._buf[this._offset], o = 0, a = 0; a < this.length; a++) o <<= 8, o |= 255 & this._buf[this._offset++]; +return 128 & ~i || 4 === a || (o -= 1 << 8 * a), 0 | o +}, t.exports = a +}, +6299: t => { +t.exports = { +EOC: 0, +Boolean: 1, +Integer: 2, +BitString: 3, +OctetString: 4, +Null: 5, +OID: 6, +ObjectDescriptor: 7, +External: 8, +Real: 9, +Enumeration: 10, +PDV: 11, +Utf8String: 12, +RelativeOID: 13, +Sequence: 16, +Set: 17, +NumericString: 18, +PrintableString: 19, +T61String: 20, +VideotexString: 21, +IA5String: 22, +UTCTime: 23, +GeneralizedTime: 24, +GraphicString: 25, +VisibleString: 26, +GeneralString: 28, +UniversalString: 29, +CharacterString: 30, +BMPString: 31, +Constructor: 32, +Context: 128 +} +}, +1431: (t, e, r) => { +var n = r(4529), +i = r(4774) +.Buffer, +o = r(6299), +s = r(6395) +.newInvalidAsn1Error, +a = { +size: 1024, +growthFactor: 8 +}; + +function f(t) { +var e, r; +e = a, r = t || {}, n.ok(e), n.equal(typeof e, "object"), n.ok(r), n.equal(typeof r, "object"), Object.getOwnPropertyNames(e) +.forEach((function(t) { +if (!r[t]) { +var n = Object.getOwnPropertyDescriptor(e, t); +Object.defineProperty(r, t, n) +} +})), t = r, this._buf = i.alloc(t.size || 1024), this._size = this._buf.length, this._offset = 0, this._options = t, this._seq = [] +} +Object.defineProperty(f.prototype, "buffer", { +get: function() { +if (this._seq.length) throw s(this._seq.length + " unended sequence(s)"); +return this._buf.slice(0, this._offset) +} +}), f.prototype.writeByte = function(t) { +if ("number" != typeof t) throw new TypeError("argument must be a Number"); +this._ensure(1), this._buf[this._offset++] = t +}, f.prototype.writeInt = function(t, e) { +if ("number" != typeof t) throw new TypeError("argument must be a Number"); +"number" != typeof e && (e = o.Integer); +for (var r = 4; +(!(4286578688 & t) || -8388608 == (4286578688 & t)) && r > 1;) r--, t <<= 8; +if (r > 4) throw s("BER ints cannot be > 0xffffffff"); +for (this._ensure(2 + r), this._buf[this._offset++] = e, this._buf[this._offset++] = r; r-- > 0;) this._buf[this._offset++] = (4278190080 & t) >>> 24, t <<= 8 +}, f.prototype.writeNull = function() { +this.writeByte(o.Null), this.writeByte(0) +}, f.prototype.writeEnumeration = function(t, e) { +if ("number" != typeof t) throw new TypeError("argument must be a Number"); +return "number" != typeof e && (e = o.Enumeration), this.writeInt(t, e) +}, f.prototype.writeBoolean = function(t, e) { +if ("boolean" != typeof t) throw new TypeError("argument must be a Boolean"); +"number" != typeof e && (e = o.Boolean), this._ensure(3), this._buf[this._offset++] = e, this._buf[this._offset++] = 1, this._buf[this._offset++] = t ? 255 : 0 +}, f.prototype.writeString = function(t, e) { +if ("string" != typeof t) throw new TypeError("argument must be a string (was: " + typeof t + ")"); +"number" != typeof e && (e = o.OctetString); +var r = i.byteLength(t); +this.writeByte(e), this.writeLength(r), r && (this._ensure(r), this._buf.write(t, this._offset), this._offset += r) +}, f.prototype.writeBuffer = function(t, e) { +if ("number" != typeof e) throw new TypeError("tag must be a number"); +if (!i.isBuffer(t)) throw new TypeError("argument must be a buffer"); +this.writeByte(e), this.writeLength(t.length), this._ensure(t.length), t.copy(this._buf, this._offset, 0, t.length), this._offset += t.length +}, f.prototype.writeStringArray = function(t) { +if (!t instanceof Array) throw new TypeError("argument must be an Array[String]"); +var e = this; +t.forEach((function(t) { +e.writeString(t) +})) +}, f.prototype.writeOID = function(t, e) { +if ("string" != typeof t) throw new TypeError("argument must be a string"); +if ("number" != typeof e && (e = o.OID), !/^([0-9]+\.){3,}[0-9]+$/.test(t)) throw new Error("argument is not a valid OID string"); +var r = t.split("."), +n = []; +n.push(40 * parseInt(r[0], 10) + parseInt(r[1], 10)), r.slice(2) +.forEach((function(t) { +! function(t, e) { +e < 128 ? t.push(e) : e < 16384 ? (t.push(e >>> 7 | 128), t.push(127 & e)) : e < 2097152 ? (t.push(e >>> 14 | 128), t.push(e >>> 7 & 255 | 128), t.push(127 & e)) : e < 268435456 ? (t.push(e >>> 21 | 128), t.push(e >>> 14 & 255 | 128), t.push(e >>> 7 & 255 | 128), t.push(127 & e)) : (t.push(e >>> 28 & 255 | 128), t.push(e >>> 21 & 255 | 128), t.push(e >>> 14 & 255 | 128), t.push(e >>> 7 & 255 | 128), t.push(127 & e)) +}(n, parseInt(t, 10)) +})); +var i = this; +this._ensure(2 + n.length), this.writeByte(e), this.writeLength(n.length), n.forEach((function(t) { +i.writeByte(t) +})) +}, f.prototype.writeLength = function(t) { +if ("number" != typeof t) throw new TypeError("argument must be a Number"); +if (this._ensure(4), t <= 127) this._buf[this._offset++] = t; +else if (t <= 255) this._buf[this._offset++] = 129, this._buf[this._offset++] = t; +else if (t <= 65535) this._buf[this._offset++] = 130, this._buf[this._offset++] = t >> 8, this._buf[this._offset++] = t; +else { +if (!(t <= 16777215)) throw s("Length too long (> 4 bytes)"); +this._buf[this._offset++] = 131, this._buf[this._offset++] = t >> 16, this._buf[this._offset++] = t >> 8, this._buf[this._offset++] = t +} +}, f.prototype.startSequence = function(t) { +"number" != typeof t && (t = o.Sequence | o.Constructor), this.writeByte(t), this._seq.push(this._offset), this._ensure(3), this._offset += 3 +}, f.prototype.endSequence = function() { +var t = this._seq.pop(), +e = t + 3, +r = this._offset - e; +if (r <= 127) this._shift(e, r, -2), this._buf[t] = r; +else if (r <= 255) this._shift(e, r, -1), this._buf[t] = 129, this._buf[t + 1] = r; +else if (r <= 65535) this._buf[t] = 130, this._buf[t + 1] = r >> 8, this._buf[t + 2] = r; +else { +if (!(r <= 16777215)) throw s("Sequence too long"); +this._shift(e, r, 1), this._buf[t] = 131, this._buf[t + 1] = r >> 16, this._buf[t + 2] = r >> 8, this._buf[t + 3] = r +} +}, f.prototype._shift = function(t, e, r) { +n.ok(void 0 !== t), n.ok(void 0 !== e), n.ok(r), this._buf.copy(this._buf, t + r, t, t + e), this._offset += r +}, f.prototype._ensure = function(t) { +if (n.ok(t), this._size - this._offset < t) { +var e = this._size * this._options.growthFactor; +e - this._offset < t && (e += t); +var r = i.alloc(e); +this._buf.copy(r, 0, 0, this._offset), this._buf = r, this._size = e +} +}, t.exports = f +}, +3100: (t, e, r) => { +var n = r(5670); +t.exports = { +Ber: n, +BerReader: n.Reader, +BerWriter: n.Writer +} +}, +4529: (t, e, r) => { +"use strict"; +var n = r(1514)(); + +function i(t, e) { +if (t === e) return 0; +for (var r = t.length, n = e.length, i = 0, o = Math.min(r, n); i < o; ++i) if (t[i] !== e[i]) { +r = t[i], n = e[i]; +break +} +return r < n ? -1 : n < r ? 1 : 0 +} +function o(t) { +return r.g.Buffer && "function" == typeof r.g.Buffer.isBuffer ? r.g.Buffer.isBuffer(t) : !(null == t || !t._isBuffer) +} +var s = r(4591), +a = Object.prototype.hasOwnProperty, +f = Array.prototype.slice, +u = "foo" === function() {}.name; + +function c(t) { +return Object.prototype.toString.call(t) +} +function h(t) { +return !o(t) && "function" == typeof r.g.ArrayBuffer && ("function" == typeof ArrayBuffer.isView ? ArrayBuffer.isView(t) : !! t && (t instanceof DataView || !! (t.buffer && t.buffer instanceof ArrayBuffer))) +} +var p = t.exports = m, +l = /\s*function\s+([^\(\s]*)\s*/; + +function y(t) { +if (s.isFunction(t)) { +if (u) return t.name; +var e = t.toString() +.match(l); +return e && e[1] +} +} +function g(t, e) { +return "string" == typeof t ? t.length < e ? t : t.slice(0, e) : t +} +function d(t) { +if (u || !s.isFunction(t)) return s.inspect(t); +var e = y(t); +return "[Function" + (e ? ": " + e : "") + "]" +} +function v(t, e, r, n, i) { +throw new p.AssertionError({ +message: r, +actual: t, +expected: e, +operator: n, +stackStartFunction: i +}) +} +function m(t, e) { +t || v(t, !0, e, "==", p.ok) +} +function S(t, e, r, n) { +if (t === e) return !0; +if (o(t) && o(e)) return 0 === i(t, e); +if (s.isDate(t) && s.isDate(e)) return t.getTime() === e.getTime(); +if (s.isRegExp(t) && s.isRegExp(e)) return t.source === e.source && t.global === e.global && t.multiline === e.multiline && t.lastIndex === e.lastIndex && t.ignoreCase === e.ignoreCase; +if (null !== t && "object" == typeof t || null !== e && "object" == typeof e) { +if (h(t) && h(e) && c(t) === c(e) && !(t instanceof Float32Array || t instanceof Float64Array)) return 0 === i(new Uint8Array(t.buffer), new Uint8Array(e.buffer)); +if (o(t) !== o(e)) return !1; +var a = (n = n || { +actual: [], +expected: [] +}) +.actual.indexOf(t); +return -1 !== a && a === n.expected.indexOf(e) || (n.actual.push(t), n.expected.push(e), function(t, e, r, n) { +if (null == t || null == e) return !1; +if (s.isPrimitive(t) || s.isPrimitive(e)) return t === e; +if (r && Object.getPrototypeOf(t) !== Object.getPrototypeOf(e)) return !1; +var i = _(t), +o = _(e); +if (i && !o || !i && o) return !1; +if (i) return S(t = f.call(t), e = f.call(e), r); +var a, u, c = w(t), +h = w(e); +if (c.length !== h.length) return !1; +for (c.sort(), h.sort(), u = c.length - 1; u >= 0; u--) if (c[u] !== h[u]) return !1; +for (u = c.length - 1; u >= 0; u--) if (!S(t[a = c[u]], e[a], r, n)) return !1; +return !0 +}(t, e, r, n)) +} +return r ? t === e : t == e +} +function _(t) { +return "[object Arguments]" == Object.prototype.toString.call(t) +} +function b(t, e) { +if (!t || !e) return !1; +if ("[object RegExp]" == Object.prototype.toString.call(e)) return e.test(t); +try { +if (t instanceof e) return !0 +} catch (t) {} +return !Error.isPrototypeOf(e) && !0 === e.call({}, t) +} +function E(t, e, r, n) { +var i; +if ("function" != typeof e) throw new TypeError('"block" argument must be a function'); +"string" == typeof r && (n = r, r = null), i = function(t) { +var e; +try { +t() +} catch (t) { +e = t +} +return e +}(e), n = (r && r.name ? " (" + r.name + ")." : ".") + (n ? " " + n : "."), t && !i && v(i, r, "Missing expected exception" + n); +var o = "string" == typeof n, +a = !t && i && !r; +if ((!t && s.isError(i) && o && b(i, r) || a) && v(i, r, "Got unwanted exception" + n), t && i && r && !b(i, r) || !t && i) throw i +} +p.AssertionError = function(t) { +this.name = "AssertionError", this.actual = t.actual, this.expected = t.expected, this.operator = t.operator, t.message ? (this.message = t.message, this.generatedMessage = !1) : (this.message = g(d(this.actual), 128) + " " + this.operator + " " + g(d(this.expected), 128), this.generatedMessage = !0); +var e = t.stackStartFunction || v; +if (Error.captureStackTrace) Error.captureStackTrace(this, e); +else { +var r = new Error; +if (r.stack) { +var n = r.stack, +i = y(e), +o = n.indexOf("\n" + i); +if (o >= 0) { +var s = n.indexOf("\n", o + 1); +n = n.substring(s + 1) +} +this.stack = n +} +} +}, s.inherits(p.AssertionError, Error), p.fail = v, p.ok = m, p.equal = function(t, e, r) { +t != e && v(t, e, r, "==", p.equal) +}, p.notEqual = function(t, e, r) { +t == e && v(t, e, r, "!=", p.notEqual) +}, p.deepEqual = function(t, e, r) { +S(t, e, !1) || v(t, e, r, "deepEqual", p.deepEqual) +}, p.deepStrictEqual = function(t, e, r) { +S(t, e, !0) || v(t, e, r, "deepStrictEqual", p.deepStrictEqual) +}, p.notDeepEqual = function(t, e, r) { +S(t, e, !1) && v(t, e, r, "notDeepEqual", p.notDeepEqual) +}, p.notDeepStrictEqual = function t(e, r, n) { +S(e, r, !0) && v(e, r, n, "notDeepStrictEqual", t) +}, p.strictEqual = function(t, e, r) { +t !== e && v(t, e, r, "===", p.strictEqual) +}, p.notStrictEqual = function(t, e, r) { +t === e && v(t, e, r, "!==", p.notStrictEqual) +}, p.throws = function(t, e, r) { +E(!0, t, e, r) +}, p.doesNotThrow = function(t, e, r) { +E(!1, t, e, r) +}, p.ifError = function(t) { +if (t) throw t +}, p.strict = n((function t(e, r) { +e || v(e, !0, r, "==", t) +}), p, { +equal: p.strictEqual, +deepEqual: p.deepStrictEqual, +notEqual: p.notStrictEqual, +notDeepEqual: p.notDeepStrictEqual +}), p.strict.strict = p.strict; +var w = Object.keys || function(t) { +var e = []; +for (var r in t) a.call(t, r) && e.push(r); +return e +} +}, +6100: t => { +"function" == typeof Object.create ? t.exports = function(t, e) { +t.super_ = e, t.prototype = Object.create(e.prototype, { +constructor: { +value: t, +enumerable: !1, +writable: !0, +configurable: !0 +} +}) +} : t.exports = function(t, e) { +t.super_ = e; +var r = function() {}; +r.prototype = e.prototype, t.prototype = new r, t.prototype.constructor = t +} +}, +3845: t => { +t.exports = function(t) { +return t && "object" == typeof t && "function" == typeof t.copy && "function" == typeof t.fill && "function" == typeof t.readUInt8 +} +}, +4591: (t, e, r) => { +var n = r(5606), +i = /%[sdj%]/g; +e.format = function(t) { +if (!v(t)) { +for (var e = [], r = 0; r < arguments.length; r++) e.push(a(arguments[r])); +return e.join(" ") +} +r = 1; +for (var n = arguments, o = n.length, s = String(t) +.replace(i, (function(t) { +if ("%%" === t) return "%"; +if (r >= o) return t; +switch (t) { +case "%s": +return String(n[r++]); +case "%d": +return Number(n[r++]); +case "%j": +try { + return JSON.stringify(n[r++]) +} catch (t) { + return "[Circular]" +} +default: +return t +} +})), f = n[r]; r < o; f = n[++r]) g(f) || !_(f) ? s += " " + f : s += " " + a(f); +return s +}, e.deprecate = function(t, i) { +if (m(r.g.process)) return function() { +return e.deprecate(t, i) +.apply(this, arguments) +}; +if (!0 === n.noDeprecation) return t; +var o = !1; +return function() { +if (!o) { +if (n.throwDeprecation) throw new Error(i); +n.traceDeprecation ? console.trace(i) : console.error(i), o = !0 +} +return t.apply(this, arguments) +} +}; +var o, s = {}; + +function a(t, r) { +var n = { +seen: [], +stylize: u +}; +return arguments.length >= 3 && (n.depth = arguments[2]), arguments.length >= 4 && (n.colors = arguments[3]), y(r) ? n.showHidden = r : r && e._extend(n, r), m(n.showHidden) && (n.showHidden = !1), m(n.depth) && (n.depth = 2), m(n.colors) && (n.colors = !1), m(n.customInspect) && (n.customInspect = !0), n.colors && (n.stylize = f), c(n, t, n.depth) +} +function f(t, e) { +var r = a.styles[e]; +return r ? "[" + a.colors[r][0] + "m" + t + "[" + a.colors[r][1] + "m" : t +} +function u(t, e) { +return t +} +function c(t, r, n) { +if (t.customInspect && r && w(r.inspect) && r.inspect !== e.inspect && (!r.constructor || r.constructor.prototype !== r)) { +var i = r.inspect(n, t); +return v(i) || (i = c(t, i, n)), i +} +var o = function(t, e) { +if (m(e)) return t.stylize("undefined", "undefined"); +if (v(e)) { +var r = "'" + JSON.stringify(e) +.replace(/^"|"$/g, "") +.replace(/'/g, "\\'") +.replace(/\\"/g, '"') + "'"; +return t.stylize(r, "string") +} +return d(e) ? t.stylize("" + e, "number") : y(e) ? t.stylize("" + e, "boolean") : g(e) ? t.stylize("null", "null") : void 0 +}(t, r); +if (o) return o; +var s = Object.keys(r), +a = function(t) { +var e = {}; +return t.forEach((function(t, r) { +e[t] = !0 +})), e +}(s); +if (t.showHidden && (s = Object.getOwnPropertyNames(r)), E(r) && (s.indexOf("message") >= 0 || s.indexOf("description") >= 0)) return h(r); +if (0 === s.length) { +if (w(r)) { +var f = r.name ? ": " + r.name : ""; +return t.stylize("[Function" + f + "]", "special") +} +if (S(r)) return t.stylize(RegExp.prototype.toString.call(r), "regexp"); +if (b(r)) return t.stylize(Date.prototype.toString.call(r), "date"); +if (E(r)) return h(r) +} +var u, _ = "", +O = !1, +B = ["{", "}"]; +return l(r) && (O = !0, B = ["[", "]"]), w(r) && (_ = " [Function" + (r.name ? ": " + r.name : "") + "]"), S(r) && (_ = " " + RegExp.prototype.toString.call(r)), b(r) && (_ = " " + Date.prototype.toUTCString.call(r)), E(r) && (_ = " " + h(r)), 0 !== s.length || O && 0 != r.length ? n < 0 ? S(r) ? t.stylize(RegExp.prototype.toString.call(r), "regexp") : t.stylize("[Object]", "special") : (t.seen.push(r), u = O ? function(t, e, r, n, i) { +for (var o = [], s = 0, a = e.length; s < a; ++s) x(e, String(s)) ? o.push(p(t, e, r, n, String(s), !0)) : o.push(""); +return i.forEach((function(i) { +i.match(/^\d+$/) || o.push(p(t, e, r, n, i, !0)) +})), o +}(t, r, n, a, s) : s.map((function(e) { +return p(t, r, n, a, e, O) +})), t.seen.pop(), function(t, e, r) { +return t.reduce((function(t, e) { +return e.indexOf("\n"), t + e.replace(/\u001b\[\d\d?m/g, "") +.length + 1 +}), 0) > 60 ? r[0] + ("" === e ? "" : e + "\n ") + " " + t.join(",\n ") + " " + r[1] : r[0] + e + " " + t.join(", ") + " " + r[1] +}(u, _, B)) : B[0] + _ + B[1] +} +function h(t) { +return "[" + Error.prototype.toString.call(t) + "]" +} +function p(t, e, r, n, i, o) { +var s, a, f; +if ((f = Object.getOwnPropertyDescriptor(e, i) || { +value: e[i] +}) +.get ? a = f.set ? t.stylize("[Getter/Setter]", "special") : t.stylize("[Getter]", "special") : f.set && (a = t.stylize("[Setter]", "special")), x(n, i) || (s = "[" + i + "]"), a || (t.seen.indexOf(f.value) < 0 ? (a = g(r) ? c(t, f.value, null) : c(t, f.value, r - 1)) +.indexOf("\n") > -1 && (a = o ? a.split("\n") +.map((function(t) { +return " " + t +})) +.join("\n") +.substr(2) : "\n" + a.split("\n") +.map((function(t) { +return " " + t +})) +.join("\n")) : a = t.stylize("[Circular]", "special")), m(s)) { +if (o && i.match(/^\d+$/)) return a; +(s = JSON.stringify("" + i)) +.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/) ? (s = s.substr(1, s.length - 2), s = t.stylize(s, "name")) : (s = s.replace(/'/g, "\\'") +.replace(/\\"/g, '"') +.replace(/(^"|"$)/g, "'"), s = t.stylize(s, "string")) +} +return s + ": " + a +} +function l(t) { +return Array.isArray(t) +} +function y(t) { +return "boolean" == typeof t +} +function g(t) { +return null === t +} +function d(t) { +return "number" == typeof t +} +function v(t) { +return "string" == typeof t +} +function m(t) { +return void 0 === t +} +function S(t) { +return _(t) && "[object RegExp]" === O(t) +} +function _(t) { +return "object" == typeof t && null !== t +} +function b(t) { +return _(t) && "[object Date]" === O(t) +} +function E(t) { +return _(t) && ("[object Error]" === O(t) || t instanceof Error) +} +function w(t) { +return "function" == typeof t +} +function O(t) { +return Object.prototype.toString.call(t) +} +function B(t) { +return t < 10 ? "0" + t.toString(10) : t.toString(10) +} +e.debuglog = function(t) { +if (m(o) && (o = n.env.NODE_DEBUG || ""), t = t.toUpperCase(), !s[t]) if (new RegExp("\\b" + t + "\\b", "i") +.test(o)) { +var r = n.pid; +s[t] = function() { +var n = e.format.apply(e, arguments); +console.error("%s %d: %s", t, r, n) +} +} else s[t] = function() {}; +return s[t] +}, e.inspect = a, a.colors = { +bold: [1, 22], +italic: [3, 23], +underline: [4, 24], +inverse: [7, 27], +white: [37, 39], +grey: [90, 39], +black: [30, 39], +blue: [34, 39], +cyan: [36, 39], +green: [32, 39], +magenta: [35, 39], +red: [31, 39], +yellow: [33, 39] +}, a.styles = { +special: "cyan", +number: "yellow", +boolean: "yellow", +undefined: "grey", +null: "bold", +string: "green", +date: "magenta", +regexp: "red" +}, e.isArray = l, e.isBoolean = y, e.isNull = g, e.isNullOrUndefined = function(t) { +return null == t +}, e.isNumber = d, e.isString = v, e.isSymbol = function(t) { +return "symbol" == typeof t +}, e.isUndefined = m, e.isRegExp = S, e.isObject = _, e.isDate = b, e.isError = E, e.isFunction = w, e.isPrimitive = function(t) { +return null === t || "boolean" == typeof t || "number" == typeof t || "string" == typeof t || "symbol" == typeof t || void 0 === t +}, e.isBuffer = r(3845); +var A = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + +function x(t, e) { +return Object.prototype.hasOwnProperty.call(t, e) +} +e.log = function() { +var t, r; +console.log("%s - %s", (r = [B((t = new Date) +.getHours()), B(t.getMinutes()), B(t.getSeconds())].join(":"), [t.getDate(), A[t.getMonth()], r].join(" ")), e.format.apply(e, arguments)) +}, e.inherits = r(6100), e._extend = function(t, e) { +if (!e || !_(e)) return t; +for (var r = Object.keys(e), n = r.length; n--;) t[r[n]] = e[r[n]]; +return t +} +}, +7526: (t, e) => { +"use strict"; +e.byteLength = function(t) { +var e = a(t), +r = e[0], +n = e[1]; +return 3 * (r + n) / 4 - n +}, e.toByteArray = function(t) { +var e, r, o = a(t), +s = o[0], +f = o[1], +u = new i(function(t, e, r) { +return 3 * (e + r) / 4 - r +}(0, s, f)), +c = 0, +h = f > 0 ? s - 4 : s; +for (r = 0; r < h; r += 4) e = n[t.charCodeAt(r)] << 18 | n[t.charCodeAt(r + 1)] << 12 | n[t.charCodeAt(r + 2)] << 6 | n[t.charCodeAt(r + 3)], u[c++] = e >> 16 & 255, u[c++] = e >> 8 & 255, u[c++] = 255 & e; +return 2 === f && (e = n[t.charCodeAt(r)] << 2 | n[t.charCodeAt(r + 1)] >> 4, u[c++] = 255 & e), 1 === f && (e = n[t.charCodeAt(r)] << 10 | n[t.charCodeAt(r + 1)] << 4 | n[t.charCodeAt(r + 2)] >> 2, u[c++] = e >> 8 & 255, u[c++] = 255 & e), u +}, e.fromByteArray = function(t) { +for (var e, n = t.length, i = n % 3, o = [], s = 16383, a = 0, u = n - i; a < u; a += s) o.push(f(t, a, a + s > u ? u : a + s)); +return 1 === i ? (e = t[n - 1], o.push(r[e >> 2] + r[e << 4 & 63] + "==")) : 2 === i && (e = (t[n - 2] << 8) + t[n - 1], o.push(r[e >> 10] + r[e >> 4 & 63] + r[e << 2 & 63] + "=")), o.join("") +}; +for (var r = [], n = [], i = "undefined" != typeof Uint8Array ? Uint8Array : Array, o = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", s = 0; s < 64; ++s) r[s] = o[s], n[o.charCodeAt(s)] = s; + +function a(t) { +var e = t.length; +if (e % 4 > 0) throw new Error("Invalid string. Length must be a multiple of 4"); +var r = t.indexOf("="); +return -1 === r && (r = e), [r, r === e ? 0 : 4 - r % 4] +} +function f(t, e, n) { +for (var i, o, s = [], a = e; a < n; a += 3) i = (t[a] << 16 & 16711680) + (t[a + 1] << 8 & 65280) + (255 & t[a + 2]), s.push(r[(o = i) >> 18 & 63] + r[o >> 12 & 63] + r[o >> 6 & 63] + r[63 & o]); +return s.join("") +} +n["-".charCodeAt(0)] = 62, n["_".charCodeAt(0)] = 63 +}, +8287: (t, e, r) => { +"use strict"; +var n = r(7526), +i = r(251); +e.Buffer = a, e.SlowBuffer = function(t) { +return +t != t && (t = 0), a.alloc(+t) +}, e.INSPECT_MAX_BYTES = 50; +var o = 2147483647; + +function s(t) { +if (t > o) throw new RangeError('The value "' + t + '" is invalid for option "size"'); +var e = new Uint8Array(t); +return e.__proto__ = a.prototype, e +} +function a(t, e, r) { +if ("number" == typeof t) { +if ("string" == typeof e) throw new TypeError('The "string" argument must be of type string. Received type number'); +return c(t) +} +return f(t, e, r) +} +function f(t, e, r) { +if ("string" == typeof t) return function(t, e) { +if ("string" == typeof e && "" !== e || (e = "utf8"), !a.isEncoding(e)) throw new TypeError("Unknown encoding: " + e); +var r = 0 | l(t, e), +n = s(r), +i = n.write(t, e); +return i !== r && (n = n.slice(0, i)), n +}(t, e); +if (ArrayBuffer.isView(t)) return h(t); +if (null == t) throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof t); +if (H(t, ArrayBuffer) || t && H(t.buffer, ArrayBuffer)) return function(t, e, r) { +if (e < 0 || t.byteLength < e) throw new RangeError('"offset" is outside of buffer bounds'); +if (t.byteLength < e + (r || 0)) throw new RangeError('"length" is outside of buffer bounds'); +var n; +return (n = void 0 === e && void 0 === r ? new Uint8Array(t) : void 0 === r ? new Uint8Array(t, e) : new Uint8Array(t, e, r)) +.__proto__ = a.prototype, n +}(t, e, r); +if ("number" == typeof t) throw new TypeError('The "value" argument must not be of type number. Received type number'); +var n = t.valueOf && t.valueOf(); +if (null != n && n !== t) return a.from(n, e, r); +var i = function(t) { +if (a.isBuffer(t)) { +var e = 0 | p(t.length), +r = s(e); +return 0 === r.length || t.copy(r, 0, 0, e), r +} +return void 0 !== t.length ? "number" != typeof t.length || F(t.length) ? s(0) : h(t) : "Buffer" === t.type && Array.isArray(t.data) ? h(t.data) : void 0 +}(t); +if (i) return i; +if ("undefined" != typeof Symbol && null != Symbol.toPrimitive && "function" == typeof t[Symbol.toPrimitive]) return a.from(t[Symbol.toPrimitive]("string"), e, r); +throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof t) +} +function u(t) { +if ("number" != typeof t) throw new TypeError('"size" argument must be of type number'); +if (t < 0) throw new RangeError('The value "' + t + '" is invalid for option "size"') +} +function c(t) { +return u(t), s(t < 0 ? 0 : 0 | p(t)) +} +function h(t) { +for (var e = t.length < 0 ? 0 : 0 | p(t.length), r = s(e), n = 0; n < e; n += 1) r[n] = 255 & t[n]; +return r +} +function p(t) { +if (t >= o) throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + o.toString(16) + " bytes"); +return 0 | t +} +function l(t, e) { +if (a.isBuffer(t)) return t.length; +if (ArrayBuffer.isView(t) || H(t, ArrayBuffer)) return t.byteLength; +if ("string" != typeof t) throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type ' + typeof t); +var r = t.length, +n = arguments.length > 2 && !0 === arguments[2]; +if (!n && 0 === r) return 0; +for (var i = !1;;) switch (e) { +case "ascii": +case "latin1": +case "binary": +return r; +case "utf8": +case "utf-8": +return U(t) +.length; +case "ucs2": +case "ucs-2": +case "utf16le": +case "utf-16le": +return 2 * r; +case "hex": +return r >>> 1; +case "base64": +return M(t) +.length; +default: +if (i) return n ? -1 : U(t) +.length; +e = ("" + e) +.toLowerCase(), i = !0 +} +} +function y(t, e, r) { +var n = !1; +if ((void 0 === e || e < 0) && (e = 0), e > this.length) return ""; +if ((void 0 === r || r > this.length) && (r = this.length), r <= 0) return ""; +if ((r >>>= 0) <= (e >>>= 0)) return ""; +for (t || (t = "utf8");;) switch (t) { +case "hex": +return T(this, e, r); +case "utf8": +case "utf-8": +return B(this, e, r); +case "ascii": +return x(this, e, r); +case "latin1": +case "binary": +return P(this, e, r); +case "base64": +return O(this, e, r); +case "ucs2": +case "ucs-2": +case "utf16le": +case "utf-16le": +return I(this, e, r); +default: +if (n) throw new TypeError("Unknown encoding: " + t); +t = (t + "") +.toLowerCase(), n = !0 +} +} +function g(t, e, r) { +var n = t[e]; +t[e] = t[r], t[r] = n +} +function d(t, e, r, n, i) { +if (0 === t.length) return -1; +if ("string" == typeof r ? (n = r, r = 0) : r > 2147483647 ? r = 2147483647 : r < -2147483648 && (r = -2147483648), F(r = +r) && (r = i ? 0 : t.length - 1), r < 0 && (r = t.length + r), r >= t.length) { +if (i) return -1; +r = t.length - 1 +} else if (r < 0) { +if (!i) return -1; +r = 0 +} +if ("string" == typeof e && (e = a.from(e, n)), a.isBuffer(e)) return 0 === e.length ? -1 : v(t, e, r, n, i); +if ("number" == typeof e) return e &= 255, "function" == typeof Uint8Array.prototype.indexOf ? i ? Uint8Array.prototype.indexOf.call(t, e, r) : Uint8Array.prototype.lastIndexOf.call(t, e, r) : v(t, [e], r, n, i); +throw new TypeError("val must be string, number or Buffer") +} +function v(t, e, r, n, i) { +var o, s = 1, +a = t.length, +f = e.length; +if (void 0 !== n && ("ucs2" === (n = String(n) +.toLowerCase()) || "ucs-2" === n || "utf16le" === n || "utf-16le" === n)) { +if (t.length < 2 || e.length < 2) return -1; +s = 2, a /= 2, f /= 2, r /= 2 +} +function u(t, e) { +return 1 === s ? t[e] : t.readUInt16BE(e * s) +} +if (i) { +var c = -1; +for (o = r; o < a; o++) if (u(t, o) === u(e, -1 === c ? 0 : o - c)) { +if (-1 === c && (c = o), o - c + 1 === f) return c * s +} else -1 !== c && (o -= o - c), c = -1 +} else for (r + f > a && (r = a - f), o = r; o >= 0; o--) { +for (var h = !0, p = 0; p < f; p++) if (u(t, o + p) !== u(e, p)) { +h = !1; +break +} +if (h) return o +} +return -1 +} +function m(t, e, r, n) { +r = Number(r) || 0; +var i = t.length - r; +n ? (n = Number(n)) > i && (n = i) : n = i; +var o = e.length; +n > o / 2 && (n = o / 2); +for (var s = 0; s < n; ++s) { +var a = parseInt(e.substr(2 * s, 2), 16); +if (F(a)) return s; +t[r + s] = a +} +return s +} +function S(t, e, r, n) { +return j(U(e, t.length - r), t, r, n) +} +function _(t, e, r, n) { +return j(function(t) { +for (var e = [], r = 0; r < t.length; ++r) e.push(255 & t.charCodeAt(r)); +return e +}(e), t, r, n) +} +function b(t, e, r, n) { +return _(t, e, r, n) +} +function E(t, e, r, n) { +return j(M(e), t, r, n) +} +function w(t, e, r, n) { +return j(function(t, e) { +for (var r, n, i, o = [], s = 0; s < t.length && !((e -= 2) < 0); ++s) n = (r = t.charCodeAt(s)) >> 8, i = r % 256, o.push(i), o.push(n); +return o +}(e, t.length - r), t, r, n) +} +function O(t, e, r) { +return 0 === e && r === t.length ? n.fromByteArray(t) : n.fromByteArray(t.slice(e, r)) +} +function B(t, e, r) { +r = Math.min(t.length, r); +for (var n = [], i = e; i < r;) { +var o, s, a, f, u = t[i], +c = null, +h = u > 239 ? 4 : u > 223 ? 3 : u > 191 ? 2 : 1; +if (i + h <= r) switch (h) { +case 1: +u < 128 && (c = u); +break; +case 2: +128 == (192 & (o = t[i + 1])) && (f = (31 & u) << 6 | 63 & o) > 127 && (c = f); +break; +case 3: +o = t[i + 1], s = t[i + 2], 128 == (192 & o) && 128 == (192 & s) && (f = (15 & u) << 12 | (63 & o) << 6 | 63 & s) > 2047 && (f < 55296 || f > 57343) && (c = f); +break; +case 4: +o = t[i + 1], s = t[i + 2], a = t[i + 3], 128 == (192 & o) && 128 == (192 & s) && 128 == (192 & a) && (f = (15 & u) << 18 | (63 & o) << 12 | (63 & s) << 6 | 63 & a) > 65535 && f < 1114112 && (c = f) +} +null === c ? (c = 65533, h = 1) : c > 65535 && (c -= 65536, n.push(c >>> 10 & 1023 | 55296), c = 56320 | 1023 & c), n.push(c), i += h +} +return function(t) { +var e = t.length; +if (e <= A) return String.fromCharCode.apply(String, t); +for (var r = "", n = 0; n < e;) r += String.fromCharCode.apply(String, t.slice(n, n += A)); +return r +}(n) +} +e.kMaxLength = o, a.TYPED_ARRAY_SUPPORT = function() { +try { +var t = new Uint8Array(1); +return t.__proto__ = { +__proto__: Uint8Array.prototype, +foo: function() { +return 42 +} +}, 42 === t.foo() +} catch (t) { +return !1 +} +}(), a.TYPED_ARRAY_SUPPORT || "undefined" == typeof console || "function" != typeof console.error || console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."), Object.defineProperty(a.prototype, "parent", { +enumerable: !0, +get: function() { +if (a.isBuffer(this)) return this.buffer +} +}), Object.defineProperty(a.prototype, "offset", { +enumerable: !0, +get: function() { +if (a.isBuffer(this)) return this.byteOffset +} +}), "undefined" != typeof Symbol && null != Symbol.species && a[Symbol.species] === a && Object.defineProperty(a, Symbol.species, { +value: null, +configurable: !0, +enumerable: !1, +writable: !1 +}), a.poolSize = 8192, a.from = function(t, e, r) { +return f(t, e, r) +}, a.prototype.__proto__ = Uint8Array.prototype, a.__proto__ = Uint8Array, a.alloc = function(t, e, r) { +return function(t, e, r) { +return u(t), t <= 0 ? s(t) : void 0 !== e ? "string" == typeof r ? s(t) +.fill(e, r) : s(t) +.fill(e) : s(t) +}(t, e, r) +}, a.allocUnsafe = function(t) { +return c(t) +}, a.allocUnsafeSlow = function(t) { +return c(t) +}, a.isBuffer = function(t) { +return null != t && !0 === t._isBuffer && t !== a.prototype +}, a.compare = function(t, e) { +if (H(t, Uint8Array) && (t = a.from(t, t.offset, t.byteLength)), H(e, Uint8Array) && (e = a.from(e, e.offset, e.byteLength)), !a.isBuffer(t) || !a.isBuffer(e)) throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'); +if (t === e) return 0; +for (var r = t.length, n = e.length, i = 0, o = Math.min(r, n); i < o; ++i) if (t[i] !== e[i]) { +r = t[i], n = e[i]; +break +} +return r < n ? -1 : n < r ? 1 : 0 +}, a.isEncoding = function(t) { +switch (String(t) +.toLowerCase()) { +case "hex": +case "utf8": +case "utf-8": +case "ascii": +case "latin1": +case "binary": +case "base64": +case "ucs2": +case "ucs-2": +case "utf16le": +case "utf-16le": +return !0; +default: +return !1 +} +}, a.concat = function(t, e) { +if (!Array.isArray(t)) throw new TypeError('"list" argument must be an Array of Buffers'); +if (0 === t.length) return a.alloc(0); +var r; +if (void 0 === e) for (e = 0, r = 0; r < t.length; ++r) e += t[r].length; +var n = a.allocUnsafe(e), +i = 0; +for (r = 0; r < t.length; ++r) { +var o = t[r]; +if (H(o, Uint8Array) && (o = a.from(o)), !a.isBuffer(o)) throw new TypeError('"list" argument must be an Array of Buffers'); +o.copy(n, i), i += o.length +} +return n +}, a.byteLength = l, a.prototype._isBuffer = !0, a.prototype.swap16 = function() { +var t = this.length; +if (t % 2 != 0) throw new RangeError("Buffer size must be a multiple of 16-bits"); +for (var e = 0; e < t; e += 2) g(this, e, e + 1); +return this +}, a.prototype.swap32 = function() { +var t = this.length; +if (t % 4 != 0) throw new RangeError("Buffer size must be a multiple of 32-bits"); +for (var e = 0; e < t; e += 4) g(this, e, e + 3), g(this, e + 1, e + 2); +return this +}, a.prototype.swap64 = function() { +var t = this.length; +if (t % 8 != 0) throw new RangeError("Buffer size must be a multiple of 64-bits"); +for (var e = 0; e < t; e += 8) g(this, e, e + 7), g(this, e + 1, e + 6), g(this, e + 2, e + 5), g(this, e + 3, e + 4); +return this +}, a.prototype.toString = function() { +var t = this.length; +return 0 === t ? "" : 0 === arguments.length ? B(this, 0, t) : y.apply(this, arguments) +}, a.prototype.toLocaleString = a.prototype.toString, a.prototype.equals = function(t) { +if (!a.isBuffer(t)) throw new TypeError("Argument must be a Buffer"); +return this === t || 0 === a.compare(this, t) +}, a.prototype.inspect = function() { +var t = "", +r = e.INSPECT_MAX_BYTES; +return t = this.toString("hex", 0, r) +.replace(/(.{2})/g, "$1 ") +.trim(), this.length > r && (t += " ... "), "" +}, a.prototype.compare = function(t, e, r, n, i) { +if (H(t, Uint8Array) && (t = a.from(t, t.offset, t.byteLength)), !a.isBuffer(t)) throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type ' + typeof t); +if (void 0 === e && (e = 0), void 0 === r && (r = t ? t.length : 0), void 0 === n && (n = 0), void 0 === i && (i = this.length), e < 0 || r > t.length || n < 0 || i > this.length) throw new RangeError("out of range index"); +if (n >= i && e >= r) return 0; +if (n >= i) return -1; +if (e >= r) return 1; +if (this === t) return 0; +for (var o = (i >>>= 0) - (n >>>= 0), s = (r >>>= 0) - (e >>>= 0), f = Math.min(o, s), u = this.slice(n, i), c = t.slice(e, r), h = 0; h < f; ++h) if (u[h] !== c[h]) { +o = u[h], s = c[h]; +break +} +return o < s ? -1 : s < o ? 1 : 0 +}, a.prototype.includes = function(t, e, r) { +return -1 !== this.indexOf(t, e, r) +}, a.prototype.indexOf = function(t, e, r) { +return d(this, t, e, r, !0) +}, a.prototype.lastIndexOf = function(t, e, r) { +return d(this, t, e, r, !1) +}, a.prototype.write = function(t, e, r, n) { +if (void 0 === e) n = "utf8", r = this.length, e = 0; +else if (void 0 === r && "string" == typeof e) n = e, r = this.length, e = 0; +else { +if (!isFinite(e)) throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported"); +e >>>= 0, isFinite(r) ? (r >>>= 0, void 0 === n && (n = "utf8")) : (n = r, r = void 0) +} +var i = this.length - e; +if ((void 0 === r || r > i) && (r = i), t.length > 0 && (r < 0 || e < 0) || e > this.length) throw new RangeError("Attempt to write outside buffer bounds"); +n || (n = "utf8"); +for (var o = !1;;) switch (n) { +case "hex": +return m(this, t, e, r); +case "utf8": +case "utf-8": +return S(this, t, e, r); +case "ascii": +return _(this, t, e, r); +case "latin1": +case "binary": +return b(this, t, e, r); +case "base64": +return E(this, t, e, r); +case "ucs2": +case "ucs-2": +case "utf16le": +case "utf-16le": +return w(this, t, e, r); +default: +if (o) throw new TypeError("Unknown encoding: " + n); +n = ("" + n) +.toLowerCase(), o = !0 +} +}, a.prototype.toJSON = function() { +return { +type: "Buffer", +data: Array.prototype.slice.call(this._arr || this, 0) +} +}; +var A = 4096; + +function x(t, e, r) { +var n = ""; +r = Math.min(t.length, r); +for (var i = e; i < r; ++i) n += String.fromCharCode(127 & t[i]); +return n +} +function P(t, e, r) { +var n = ""; +r = Math.min(t.length, r); +for (var i = e; i < r; ++i) n += String.fromCharCode(t[i]); +return n +} +function T(t, e, r) { +var n, i = t.length; +(!e || e < 0) && (e = 0), (!r || r < 0 || r > i) && (r = i); +for (var o = "", s = e; s < r; ++s) o += (n = t[s]) < 16 ? "0" + n.toString(16) : n.toString(16); +return o +} +function I(t, e, r) { +for (var n = t.slice(e, r), i = "", o = 0; o < n.length; o += 2) i += String.fromCharCode(n[o] + 256 * n[o + 1]); +return i +} +function k(t, e, r) { +if (t % 1 != 0 || t < 0) throw new RangeError("offset is not uint"); +if (t + e > r) throw new RangeError("Trying to access beyond buffer length") +} +function D(t, e, r, n, i, o) { +if (!a.isBuffer(t)) throw new TypeError('"buffer" argument must be a Buffer instance'); +if (e > i || e < o) throw new RangeError('"value" argument is out of bounds'); +if (r + n > t.length) throw new RangeError("Index out of range") +} +function R(t, e, r, n, i, o) { +if (r + n > t.length) throw new RangeError("Index out of range"); +if (r < 0) throw new RangeError("Index out of range") +} +function N(t, e, r, n, o) { +return e = +e, r >>>= 0, o || R(t, 0, r, 4), i.write(t, e, r, n, 23, 4), r + 4 +} +function L(t, e, r, n, o) { +return e = +e, r >>>= 0, o || R(t, 0, r, 8), i.write(t, e, r, n, 52, 8), r + 8 +} +a.prototype.slice = function(t, e) { +var r = this.length; +(t = ~~t) < 0 ? (t += r) < 0 && (t = 0) : t > r && (t = r), (e = void 0 === e ? r : ~~e) < 0 ? (e += r) < 0 && (e = 0) : e > r && (e = r), e < t && (e = t); +var n = this.subarray(t, e); +return n.__proto__ = a.prototype, n +}, a.prototype.readUIntLE = function(t, e, r) { +t >>>= 0, e >>>= 0, r || k(t, e, this.length); +for (var n = this[t], i = 1, o = 0; ++o < e && (i *= 256);) n += this[t + o] * i; +return n +}, a.prototype.readUIntBE = function(t, e, r) { +t >>>= 0, e >>>= 0, r || k(t, e, this.length); +for (var n = this[t + --e], i = 1; e > 0 && (i *= 256);) n += this[t + --e] * i; +return n +}, a.prototype.readUInt8 = function(t, e) { +return t >>>= 0, e || k(t, 1, this.length), this[t] +}, a.prototype.readUInt16LE = function(t, e) { +return t >>>= 0, e || k(t, 2, this.length), this[t] | this[t + 1] << 8 +}, a.prototype.readUInt16BE = function(t, e) { +return t >>>= 0, e || k(t, 2, this.length), this[t] << 8 | this[t + 1] +}, a.prototype.readUInt32LE = function(t, e) { +return t >>>= 0, e || k(t, 4, this.length), (this[t] | this[t + 1] << 8 | this[t + 2] << 16) + 16777216 * this[t + 3] +}, a.prototype.readUInt32BE = function(t, e) { +return t >>>= 0, e || k(t, 4, this.length), 16777216 * this[t] + (this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3]) +}, a.prototype.readIntLE = function(t, e, r) { +t >>>= 0, e >>>= 0, r || k(t, e, this.length); +for (var n = this[t], i = 1, o = 0; ++o < e && (i *= 256);) n += this[t + o] * i; +return n >= (i *= 128) && (n -= Math.pow(2, 8 * e)), n +}, a.prototype.readIntBE = function(t, e, r) { +t >>>= 0, e >>>= 0, r || k(t, e, this.length); +for (var n = e, i = 1, o = this[t + --n]; n > 0 && (i *= 256);) o += this[t + --n] * i; +return o >= (i *= 128) && (o -= Math.pow(2, 8 * e)), o +}, a.prototype.readInt8 = function(t, e) { +return t >>>= 0, e || k(t, 1, this.length), 128 & this[t] ? -1 * (255 - this[t] + 1) : this[t] +}, a.prototype.readInt16LE = function(t, e) { +t >>>= 0, e || k(t, 2, this.length); +var r = this[t] | this[t + 1] << 8; +return 32768 & r ? 4294901760 | r : r +}, a.prototype.readInt16BE = function(t, e) { +t >>>= 0, e || k(t, 2, this.length); +var r = this[t + 1] | this[t] << 8; +return 32768 & r ? 4294901760 | r : r +}, a.prototype.readInt32LE = function(t, e) { +return t >>>= 0, e || k(t, 4, this.length), this[t] | this[t + 1] << 8 | this[t + 2] << 16 | this[t + 3] << 24 +}, a.prototype.readInt32BE = function(t, e) { +return t >>>= 0, e || k(t, 4, this.length), this[t] << 24 | this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3] +}, a.prototype.readFloatLE = function(t, e) { +return t >>>= 0, e || k(t, 4, this.length), i.read(this, t, !0, 23, 4) +}, a.prototype.readFloatBE = function(t, e) { +return t >>>= 0, e || k(t, 4, this.length), i.read(this, t, !1, 23, 4) +}, a.prototype.readDoubleLE = function(t, e) { +return t >>>= 0, e || k(t, 8, this.length), i.read(this, t, !0, 52, 8) +}, a.prototype.readDoubleBE = function(t, e) { +return t >>>= 0, e || k(t, 8, this.length), i.read(this, t, !1, 52, 8) +}, a.prototype.writeUIntLE = function(t, e, r, n) { +t = +t, e >>>= 0, r >>>= 0, n || D(this, t, e, r, Math.pow(2, 8 * r) - 1, 0); +var i = 1, +o = 0; +for (this[e] = 255 & t; ++o < r && (i *= 256);) this[e + o] = t / i & 255; +return e + r +}, a.prototype.writeUIntBE = function(t, e, r, n) { +t = +t, e >>>= 0, r >>>= 0, n || D(this, t, e, r, Math.pow(2, 8 * r) - 1, 0); +var i = r - 1, +o = 1; +for (this[e + i] = 255 & t; --i >= 0 && (o *= 256);) this[e + i] = t / o & 255; +return e + r +}, a.prototype.writeUInt8 = function(t, e, r) { +return t = +t, e >>>= 0, r || D(this, t, e, 1, 255, 0), this[e] = 255 & t, e + 1 +}, a.prototype.writeUInt16LE = function(t, e, r) { +return t = +t, e >>>= 0, r || D(this, t, e, 2, 65535, 0), this[e] = 255 & t, this[e + 1] = t >>> 8, e + 2 +}, a.prototype.writeUInt16BE = function(t, e, r) { +return t = +t, e >>>= 0, r || D(this, t, e, 2, 65535, 0), this[e] = t >>> 8, this[e + 1] = 255 & t, e + 2 +}, a.prototype.writeUInt32LE = function(t, e, r) { +return t = +t, e >>>= 0, r || D(this, t, e, 4, 4294967295, 0), this[e + 3] = t >>> 24, this[e + 2] = t >>> 16, this[e + 1] = t >>> 8, this[e] = 255 & t, e + 4 +}, a.prototype.writeUInt32BE = function(t, e, r) { +return t = +t, e >>>= 0, r || D(this, t, e, 4, 4294967295, 0), this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t, e + 4 +}, a.prototype.writeIntLE = function(t, e, r, n) { +if (t = +t, e >>>= 0, !n) { +var i = Math.pow(2, 8 * r - 1); +D(this, t, e, r, i - 1, -i) +} +var o = 0, +s = 1, +a = 0; +for (this[e] = 255 & t; ++o < r && (s *= 256);) t < 0 && 0 === a && 0 !== this[e + o - 1] && (a = 1), this[e + o] = (t / s | 0) - a & 255; +return e + r +}, a.prototype.writeIntBE = function(t, e, r, n) { +if (t = +t, e >>>= 0, !n) { +var i = Math.pow(2, 8 * r - 1); +D(this, t, e, r, i - 1, -i) +} +var o = r - 1, +s = 1, +a = 0; +for (this[e + o] = 255 & t; --o >= 0 && (s *= 256);) t < 0 && 0 === a && 0 !== this[e + o + 1] && (a = 1), this[e + o] = (t / s | 0) - a & 255; +return e + r +}, a.prototype.writeInt8 = function(t, e, r) { +return t = +t, e >>>= 0, r || D(this, t, e, 1, 127, -128), t < 0 && (t = 255 + t + 1), this[e] = 255 & t, e + 1 +}, a.prototype.writeInt16LE = function(t, e, r) { +return t = +t, e >>>= 0, r || D(this, t, e, 2, 32767, -32768), this[e] = 255 & t, this[e + 1] = t >>> 8, e + 2 +}, a.prototype.writeInt16BE = function(t, e, r) { +return t = +t, e >>>= 0, r || D(this, t, e, 2, 32767, -32768), this[e] = t >>> 8, this[e + 1] = 255 & t, e + 2 +}, a.prototype.writeInt32LE = function(t, e, r) { +return t = +t, e >>>= 0, r || D(this, t, e, 4, 2147483647, -2147483648), this[e] = 255 & t, this[e + 1] = t >>> 8, this[e + 2] = t >>> 16, this[e + 3] = t >>> 24, e + 4 +}, a.prototype.writeInt32BE = function(t, e, r) { +return t = +t, e >>>= 0, r || D(this, t, e, 4, 2147483647, -2147483648), t < 0 && (t = 4294967295 + t + 1), this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t, e + 4 +}, a.prototype.writeFloatLE = function(t, e, r) { +return N(this, t, e, !0, r) +}, a.prototype.writeFloatBE = function(t, e, r) { +return N(this, t, e, !1, r) +}, a.prototype.writeDoubleLE = function(t, e, r) { +return L(this, t, e, !0, r) +}, a.prototype.writeDoubleBE = function(t, e, r) { +return L(this, t, e, !1, r) +}, a.prototype.copy = function(t, e, r, n) { +if (!a.isBuffer(t)) throw new TypeError("argument should be a Buffer"); +if (r || (r = 0), n || 0 === n || (n = this.length), e >= t.length && (e = t.length), e || (e = 0), n > 0 && n < r && (n = r), n === r) return 0; +if (0 === t.length || 0 === this.length) return 0; +if (e < 0) throw new RangeError("targetStart out of bounds"); +if (r < 0 || r >= this.length) throw new RangeError("Index out of range"); +if (n < 0) throw new RangeError("sourceEnd out of bounds"); +n > this.length && (n = this.length), t.length - e < n - r && (n = t.length - e + r); +var i = n - r; +if (this === t && "function" == typeof Uint8Array.prototype.copyWithin) this.copyWithin(e, r, n); +else if (this === t && r < e && e < n) for (var o = i - 1; o >= 0; --o) t[o + e] = this[o + r]; +else Uint8Array.prototype.set.call(t, this.subarray(r, n), e); +return i +}, a.prototype.fill = function(t, e, r, n) { +if ("string" == typeof t) { +if ("string" == typeof e ? (n = e, e = 0, r = this.length) : "string" == typeof r && (n = r, r = this.length), void 0 !== n && "string" != typeof n) throw new TypeError("encoding must be a string"); +if ("string" == typeof n && !a.isEncoding(n)) throw new TypeError("Unknown encoding: " + n); +if (1 === t.length) { +var i = t.charCodeAt(0); +("utf8" === n && i < 128 || "latin1" === n) && (t = i) +} +} else "number" == typeof t && (t &= 255); +if (e < 0 || this.length < e || this.length < r) throw new RangeError("Out of range index"); +if (r <= e) return this; +var o; +if (e >>>= 0, r = void 0 === r ? this.length : r >>> 0, t || (t = 0), "number" == typeof t) for (o = e; o < r; ++o) this[o] = t; +else { +var s = a.isBuffer(t) ? t : a.from(t, n), +f = s.length; +if (0 === f) throw new TypeError('The value "' + t + '" is invalid for argument "value"'); +for (o = 0; o < r - e; ++o) this[o + e] = s[o % f] +} +return this +}; +var C = /[^+/0-9A-Za-z-_]/g; + +function U(t, e) { +var r; +e = e || 1 / 0; +for (var n = t.length, i = null, o = [], s = 0; s < n; ++s) { +if ((r = t.charCodeAt(s)) > 55295 && r < 57344) { +if (!i) { +if (r > 56319) { + (e -= 3) > -1 && o.push(239, 191, 189); + continue +} +if (s + 1 === n) { + (e -= 3) > -1 && o.push(239, 191, 189); + continue +} +i = r; +continue +} +if (r < 56320) { +(e -= 3) > -1 && o.push(239, 191, 189), i = r; +continue +} +r = 65536 + (i - 55296 << 10 | r - 56320) +} else i && (e -= 3) > -1 && o.push(239, 191, 189); +if (i = null, r < 128) { +if ((e -= 1) < 0) break; +o.push(r) +} else if (r < 2048) { +if ((e -= 2) < 0) break; +o.push(r >> 6 | 192, 63 & r | 128) +} else if (r < 65536) { +if ((e -= 3) < 0) break; +o.push(r >> 12 | 224, r >> 6 & 63 | 128, 63 & r | 128) +} else { +if (!(r < 1114112)) throw new Error("Invalid code point"); +if ((e -= 4) < 0) break; +o.push(r >> 18 | 240, r >> 12 & 63 | 128, r >> 6 & 63 | 128, 63 & r | 128) +} +} +return o +} +function M(t) { +return n.toByteArray(function(t) { +if ((t = (t = t.split("=")[0]) +.trim() +.replace(C, "")) +.length < 2) return ""; +for (; t.length % 4 != 0;) t += "="; +return t +}(t)) +} +function j(t, e, r, n) { +for (var i = 0; i < n && !(i + r >= e.length || i >= t.length); ++i) e[i + r] = t[i]; +return i +} +function H(t, e) { +return t instanceof e || null != t && null != t.constructor && null != t.constructor.name && t.constructor.name === e.name +} +function F(t) { +return t != t +} +}, +8075: (t, e, r) => { +"use strict"; +var n = r(453), +i = r(487), +o = i(n("String.prototype.indexOf")); +t.exports = function(t, e) { +var r = n(t, !! e); +return "function" == typeof r && o(t, ".prototype.") > -1 ? i(r) : r +} +}, +487: (t, e, r) => { +"use strict"; +var n = r(6743), +i = r(453), +o = r(6897), +s = r(9675), +a = i("%Function.prototype.apply%"), +f = i("%Function.prototype.call%"), +u = i("%Reflect.apply%", !0) || n.call(f, a), +c = r(655), +h = i("%Math.max%"); +t.exports = function(t) { +if ("function" != typeof t) throw new s("a function is required"); +var e = u(n, f, arguments); +return o(e, 1 + h(0, t.length - (arguments.length - 1)), !0) +}; +var p = function() { +return u(n, a, arguments) +}; +c ? c(t.exports, "apply", { +value: p +}) : t.exports.apply = p +}, +955: function(t, e, r) { +var n; +t.exports = (n = r(9021), r(754), r(4636), r(9506), r(7165), function() { +var t = n, +e = t.lib.BlockCipher, +r = t.algo, +i = [], +o = [], +s = [], +a = [], +f = [], +u = [], +c = [], +h = [], +p = [], +l = []; +! function() { +for (var t = [], e = 0; e < 256; e++) t[e] = e < 128 ? e << 1 : e << 1 ^ 283; +var r = 0, +n = 0; +for (e = 0; e < 256; e++) { +var y = n ^ n << 1 ^ n << 2 ^ n << 3 ^ n << 4; +y = y >>> 8 ^ 255 & y ^ 99, i[r] = y, o[y] = r; +var g = t[r], +d = t[g], +v = t[d], +m = 257 * t[y] ^ 16843008 * y; +s[r] = m << 24 | m >>> 8, a[r] = m << 16 | m >>> 16, f[r] = m << 8 | m >>> 24, u[r] = m, m = 16843009 * v ^ 65537 * d ^ 257 * g ^ 16843008 * r, c[y] = m << 24 | m >>> 8, h[y] = m << 16 | m >>> 16, p[y] = m << 8 | m >>> 24, l[y] = m, r ? (r = g ^ t[t[t[v ^ g]]], n ^= t[t[n]]) : r = n = 1 +} +}(); +var y = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54], +g = r.AES = e.extend({ +_doReset: function() { +if (!this._nRounds || this._keyPriorReset !== this._key) { + for (var t = this._keyPriorReset = this._key, e = t.words, r = t.sigBytes / 4, n = 4 * ((this._nRounds = r + 6) + 1), o = this._keySchedule = [], s = 0; s < n; s++) if (s < r) o[s] = e[s]; + else { + var a = o[s - 1]; + s % r ? r > 6 && s % r == 4 && (a = i[a >>> 24] << 24 | i[a >>> 16 & 255] << 16 | i[a >>> 8 & 255] << 8 | i[255 & a]) : (a = i[(a = a << 8 | a >>> 24) >>> 24] << 24 | i[a >>> 16 & 255] << 16 | i[a >>> 8 & 255] << 8 | i[255 & a], a ^= y[s / r | 0] << 24), o[s] = o[s - r] ^ a + } + for (var f = this._invKeySchedule = [], u = 0; u < n; u++) s = n - u, a = u % 4 ? o[s] : o[s - 4], f[u] = u < 4 || s <= 4 ? a : c[i[a >>> 24]] ^ h[i[a >>> 16 & 255]] ^ p[i[a >>> 8 & 255]] ^ l[i[255 & a]] +} +}, +encryptBlock: function(t, e) { +this._doCryptBlock(t, e, this._keySchedule, s, a, f, u, i) +}, +decryptBlock: function(t, e) { +var r = t[e + 1]; +t[e + 1] = t[e + 3], t[e + 3] = r, this._doCryptBlock(t, e, this._invKeySchedule, c, h, p, l, o), r = t[e + 1], t[e + 1] = t[e + 3], t[e + 3] = r +}, +_doCryptBlock: function(t, e, r, n, i, o, s, a) { +for (var f = this._nRounds, u = t[e] ^ r[0], c = t[e + 1] ^ r[1], h = t[e + 2] ^ r[2], p = t[e + 3] ^ r[3], l = 4, y = 1; y < f; y++) { + var g = n[u >>> 24] ^ i[c >>> 16 & 255] ^ o[h >>> 8 & 255] ^ s[255 & p] ^ r[l++], + d = n[c >>> 24] ^ i[h >>> 16 & 255] ^ o[p >>> 8 & 255] ^ s[255 & u] ^ r[l++], + v = n[h >>> 24] ^ i[p >>> 16 & 255] ^ o[u >>> 8 & 255] ^ s[255 & c] ^ r[l++], + m = n[p >>> 24] ^ i[u >>> 16 & 255] ^ o[c >>> 8 & 255] ^ s[255 & h] ^ r[l++]; + u = g, c = d, h = v, p = m +} +g = (a[u >>> 24] << 24 | a[c >>> 16 & 255] << 16 | a[h >>> 8 & 255] << 8 | a[255 & p]) ^ r[l++], d = (a[c >>> 24] << 24 | a[h >>> 16 & 255] << 16 | a[p >>> 8 & 255] << 8 | a[255 & u]) ^ r[l++], v = (a[h >>> 24] << 24 | a[p >>> 16 & 255] << 16 | a[u >>> 8 & 255] << 8 | a[255 & c]) ^ r[l++], m = (a[p >>> 24] << 24 | a[u >>> 16 & 255] << 16 | a[c >>> 8 & 255] << 8 | a[255 & h]) ^ r[l++], t[e] = g, t[e + 1] = d, t[e + 2] = v, t[e + 3] = m +}, +keySize: 8 +}); +t.AES = e._createHelper(g) +}(), n.AES) +}, +7165: function(t, e, r) { +var n, i, o, s, a, f, u, c, h, p, l, y, g, d, v, m, S, _, b; +t.exports = (n = r(9021), r(9506), void(n.lib.Cipher || (i = n, o = i.lib, s = o.Base, a = o.WordArray, f = o.BufferedBlockAlgorithm, u = i.enc, u.Utf8, c = u.Base64, h = i.algo.EvpKDF, p = o.Cipher = f.extend({ +cfg: s.extend(), +createEncryptor: function(t, e) { +return this.create(this._ENC_XFORM_MODE, t, e) +}, +createDecryptor: function(t, e) { +return this.create(this._DEC_XFORM_MODE, t, e) +}, +init: function(t, e, r) { +this.cfg = this.cfg.extend(r), this._xformMode = t, this._key = e, this.reset() +}, +reset: function() { +f.reset.call(this), this._doReset() +}, +process: function(t) { +return this._append(t), this._process() +}, +finalize: function(t) { +return t && this._append(t), this._doFinalize() +}, +keySize: 4, +ivSize: 4, +_ENC_XFORM_MODE: 1, +_DEC_XFORM_MODE: 2, +_createHelper: function() { +function t(t) { +return "string" == typeof t ? b : S +} +return function(e) { +return { +encrypt: function(r, n, i) { + return t(n) + .encrypt(e, r, n, i) +}, +decrypt: function(r, n, i) { + return t(n) + .decrypt(e, r, n, i) +} +} +} +}() +}), o.StreamCipher = p.extend({ +_doFinalize: function() { +return this._process(!0) +}, +blockSize: 1 +}), l = i.mode = {}, y = o.BlockCipherMode = s.extend({ +createEncryptor: function(t, e) { +return this.Encryptor.create(t, e) +}, +createDecryptor: function(t, e) { +return this.Decryptor.create(t, e) +}, +init: function(t, e) { +this._cipher = t, this._iv = e +} +}), g = l.CBC = function() { +var t = y.extend(); + +function e(t, e, r) { +var n = this._iv; +if (n) { +var i = n; +this._iv = void 0 +} else i = this._prevBlock; +for (var o = 0; o < r; o++) t[e + o] ^= i[o] +} +return t.Encryptor = t.extend({ +processBlock: function(t, r) { +var n = this._cipher, +i = n.blockSize; +e.call(this, t, r, i), n.encryptBlock(t, r), this._prevBlock = t.slice(r, r + i) +} +}), t.Decryptor = t.extend({ +processBlock: function(t, r) { +var n = this._cipher, +i = n.blockSize, +o = t.slice(r, r + i); +n.decryptBlock(t, r), e.call(this, t, r, i), this._prevBlock = o +} +}), t +}(), d = (i.pad = {}) +.Pkcs7 = { +pad: function(t, e) { +for (var r = 4 * e, n = r - t.sigBytes % r, i = n << 24 | n << 16 | n << 8 | n, o = [], s = 0; s < n; s += 4) o.push(i); +var f = a.create(o, n); +t.concat(f) +}, +unpad: function(t) { +var e = 255 & t.words[t.sigBytes - 1 >>> 2]; +t.sigBytes -= e +} +}, o.BlockCipher = p.extend({ +cfg: p.cfg.extend({ +mode: g, +padding: d +}), +reset: function() { +p.reset.call(this); +var t = this.cfg, +e = t.iv, +r = t.mode; +if (this._xformMode == this._ENC_XFORM_MODE) var n = r.createEncryptor; +else n = r.createDecryptor, this._minBufferSize = 1; +this._mode && this._mode.__creator == n ? this._mode.init(this, e && e.words) : (this._mode = n.call(r, this, e && e.words), this._mode.__creator = n) +}, +_doProcessBlock: function(t, e) { +this._mode.processBlock(t, e) +}, +_doFinalize: function() { +var t = this.cfg.padding; +if (this._xformMode == this._ENC_XFORM_MODE) { +t.pad(this._data, this.blockSize); +var e = this._process(!0) +} else e = this._process(!0), t.unpad(e); +return e +}, +blockSize: 4 +}), v = o.CipherParams = s.extend({ +init: function(t) { +this.mixIn(t) +}, +toString: function(t) { +return (t || this.formatter) +.stringify(this) +} +}), m = (i.format = {}) +.OpenSSL = { +stringify: function(t) { +var e = t.ciphertext, +r = t.salt; +if (r) var n = a.create([1398893684, 1701076831]) +.concat(r) +.concat(e); +else n = e; +return n.toString(c) +}, +parse: function(t) { +var e = c.parse(t), +r = e.words; +if (1398893684 == r[0] && 1701076831 == r[1]) { +var n = a.create(r.slice(2, 4)); +r.splice(0, 4), e.sigBytes -= 16 +} +return v.create({ +ciphertext: e, +salt: n +}) +} +}, S = o.SerializableCipher = s.extend({ +cfg: s.extend({ +format: m +}), +encrypt: function(t, e, r, n) { +n = this.cfg.extend(n); +var i = t.createEncryptor(r, n), +o = i.finalize(e), +s = i.cfg; +return v.create({ +ciphertext: o, +key: r, +iv: s.iv, +algorithm: t, +mode: s.mode, +padding: s.padding, +blockSize: t.blockSize, +formatter: n.format +}) +}, +decrypt: function(t, e, r, n) { +return n = this.cfg.extend(n), e = this._parse(e, n.format), t.createDecryptor(r, n) +.finalize(e.ciphertext) +}, +_parse: function(t, e) { +return "string" == typeof t ? e.parse(t, this) : t +} +}), _ = (i.kdf = {}) +.OpenSSL = { +execute: function(t, e, r, n) { +n || (n = a.random(8)); +var i = h.create({ +keySize: e + r +}) +.compute(t, n), +o = a.create(i.words.slice(e), 4 * r); +return i.sigBytes = 4 * e, v.create({ +key: i, +iv: o, +salt: n +}) +} +}, b = o.PasswordBasedCipher = S.extend({ +cfg: S.cfg.extend({ +kdf: _ +}), +encrypt: function(t, e, r, n) { +var i = (n = this.cfg.extend(n)) +.kdf.execute(r, t.keySize, t.ivSize); +n.iv = i.iv; +var o = S.encrypt.call(this, t, e, i.key, n); +return o.mixIn(i), o +}, +decrypt: function(t, e, r, n) { +n = this.cfg.extend(n), e = this._parse(e, n.format); +var i = n.kdf.execute(r, t.keySize, t.ivSize, e.salt); +return n.iv = i.iv, S.decrypt.call(this, t, e, i.key, n) +} +})))) +}, +9021: function(t, e) { +var r; +t.exports = (r = r || function(t, e) { +var r = Object.create || function() { +function t() {} +return function(e) { +var r; +return t.prototype = e, r = new t, t.prototype = null, r +} +}(), +n = {}, i = n.lib = {}, o = i.Base = { +extend: function(t) { +var e = r(this); +return t && e.mixIn(t), e.hasOwnProperty("init") && this.init !== e.init || (e.init = function() { + e.$super.init.apply(this, arguments) +}), e.init.prototype = e, e.$super = this, e +}, +create: function() { +var t = this.extend(); +return t.init.apply(t, arguments), t +}, +init: function() {}, +mixIn: function(t) { +for (var e in t) t.hasOwnProperty(e) && (this[e] = t[e]); +t.hasOwnProperty("toString") && (this.toString = t.toString) +}, +clone: function() { +return this.init.prototype.extend(this) +} +}, s = i.WordArray = o.extend({ +init: function(t, e) { +t = this.words = t || [], this.sigBytes = null != e ? e : 4 * t.length +}, +toString: function(t) { +return (t || f) + .stringify(this) +}, +concat: function(t) { +var e = this.words, + r = t.words, + n = this.sigBytes, + i = t.sigBytes; +if (this.clamp(), n % 4) for (var o = 0; o < i; o++) { + var s = r[o >>> 2] >>> 24 - o % 4 * 8 & 255; + e[n + o >>> 2] |= s << 24 - (n + o) % 4 * 8 +} else for (o = 0; o < i; o += 4) e[n + o >>> 2] = r[o >>> 2]; +return this.sigBytes += i, this +}, +clamp: function() { +var e = this.words, + r = this.sigBytes; +e[r >>> 2] &= 4294967295 << 32 - r % 4 * 8, e.length = t.ceil(r / 4) +}, +clone: function() { +var t = o.clone.call(this); +return t.words = this.words.slice(0), t +}, +random: function(e) { +for (var r, n = [], i = function(e) { + var r = 987654321, + n = 4294967295; + return function() { + var i = ((r = 36969 * (65535 & r) + (r >> 16) & n) << 16) + (e = 18e3 * (65535 & e) + (e >> 16) & n) & n; + return i /= 4294967296, (i += .5) * (t.random() > .5 ? 1 : -1) + } +}, o = 0; o < e; o += 4) { + var a = i(4294967296 * (r || t.random())); + r = 987654071 * a(), n.push(4294967296 * a() | 0) +} +return new s.init(n, e) +} +}), +a = n.enc = {}, f = a.Hex = { +stringify: function(t) { +for (var e = t.words, r = t.sigBytes, n = [], i = 0; i < r; i++) { + var o = e[i >>> 2] >>> 24 - i % 4 * 8 & 255; + n.push((o >>> 4) + .toString(16)), n.push((15 & o) + .toString(16)) +} +return n.join("") +}, +parse: function(t) { +for (var e = t.length, r = [], n = 0; n < e; n += 2) r[n >>> 3] |= parseInt(t.substr(n, 2), 16) << 24 - n % 8 * 4; +return new s.init(r, e / 2) +} +}, u = a.Latin1 = { +stringify: function(t) { +for (var e = t.words, r = t.sigBytes, n = [], i = 0; i < r; i++) { + var o = e[i >>> 2] >>> 24 - i % 4 * 8 & 255; + n.push(String.fromCharCode(o)) +} +return n.join("") +}, +parse: function(t) { +for (var e = t.length, r = [], n = 0; n < e; n++) r[n >>> 2] |= (255 & t.charCodeAt(n)) << 24 - n % 4 * 8; +return new s.init(r, e) +} +}, c = a.Utf8 = { +stringify: function(t) { +try { + return decodeURIComponent(escape(u.stringify(t))) +} catch (t) { + throw new Error("Malformed UTF-8 data") +} +}, +parse: function(t) { +return u.parse(unescape(encodeURIComponent(t))) +} +}, h = i.BufferedBlockAlgorithm = o.extend({ +reset: function() { +this._data = new s.init, this._nDataBytes = 0 +}, +_append: function(t) { +"string" == typeof t && (t = c.parse(t)), this._data.concat(t), this._nDataBytes += t.sigBytes +}, +_process: function(e) { +var r = this._data, + n = r.words, + i = r.sigBytes, + o = this.blockSize, + a = i / (4 * o), + f = (a = e ? t.ceil(a) : t.max((0 | a) - this._minBufferSize, 0)) * o, + u = t.min(4 * f, i); +if (f) { + for (var c = 0; c < f; c += o) this._doProcessBlock(n, c); + var h = n.splice(0, f); + r.sigBytes -= u +} +return new s.init(h, u) +}, +clone: function() { +var t = o.clone.call(this); +return t._data = this._data.clone(), t +}, +_minBufferSize: 0 +}), +p = (i.Hasher = h.extend({ +cfg: o.extend(), +init: function(t) { +this.cfg = this.cfg.extend(t), this.reset() +}, +reset: function() { +h.reset.call(this), this._doReset() +}, +update: function(t) { +return this._append(t), this._process(), this +}, +finalize: function(t) { +return t && this._append(t), this._doFinalize() +}, +blockSize: 16, +_createHelper: function(t) { +return function(e, r) { + return new t.init(r) + .finalize(e) +} +}, +_createHmacHelper: function(t) { +return function(e, r) { + return new p.HMAC.init(t, r) + .finalize(e) +} +} +}), n.algo = {}); +return n +}(Math), r) +}, +754: function(t, e, r) { +var n, i, o; +t.exports = (n = r(9021), o = (i = n) +.lib.WordArray, i.enc.Base64 = { +stringify: function(t) { +var e = t.words, +r = t.sigBytes, +n = this._map; +t.clamp(); +for (var i = [], o = 0; o < r; o += 3) for (var s = (e[o >>> 2] >>> 24 - o % 4 * 8 & 255) << 16 | (e[o + 1 >>> 2] >>> 24 - (o + 1) % 4 * 8 & 255) << 8 | e[o + 2 >>> 2] >>> 24 - (o + 2) % 4 * 8 & 255, a = 0; a < 4 && o + .75 * a < r; a++) i.push(n.charAt(s >>> 6 * (3 - a) & 63)); +var f = n.charAt(64); +if (f) for (; i.length % 4;) i.push(f); +return i.join("") +}, +parse: function(t) { +var e = t.length, +r = this._map, +n = this._reverseMap; +if (!n) { +n = this._reverseMap = []; +for (var i = 0; i < r.length; i++) n[r.charCodeAt(i)] = i +} +var s = r.charAt(64); +if (s) { +var a = t.indexOf(s); - 1 !== a && (e = a) +} +return function(t, e, r) { +for (var n = [], i = 0, s = 0; s < e; s++) if (s % 4) { +var a = r[t.charCodeAt(s - 1)] << s % 4 * 2, + f = r[t.charCodeAt(s)] >>> 6 - s % 4 * 2; +n[i >>> 2] |= (a | f) << 24 - i % 4 * 8, i++ +} +return o.create(n, i) +}(t, e, n) +}, +_map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" +}, n.enc.Base64) +}, +5503: function(t, e, r) { +var n; +t.exports = (n = r(9021), function() { +var t = n, +e = t.lib.WordArray, +r = t.enc; + +function i(t) { +return t << 8 & 4278255360 | t >>> 8 & 16711935 +} +r.Utf16 = r.Utf16BE = { +stringify: function(t) { +for (var e = t.words, r = t.sigBytes, n = [], i = 0; i < r; i += 2) { +var o = e[i >>> 2] >>> 16 - i % 4 * 8 & 65535; +n.push(String.fromCharCode(o)) +} +return n.join("") +}, +parse: function(t) { +for (var r = t.length, n = [], i = 0; i < r; i++) n[i >>> 1] |= t.charCodeAt(i) << 16 - i % 2 * 16; +return e.create(n, 2 * r) +} +}, r.Utf16LE = { +stringify: function(t) { +for (var e = t.words, r = t.sigBytes, n = [], o = 0; o < r; o += 2) { +var s = i(e[o >>> 2] >>> 16 - o % 4 * 8 & 65535); +n.push(String.fromCharCode(s)) +} +return n.join("") +}, +parse: function(t) { +for (var r = t.length, n = [], o = 0; o < r; o++) n[o >>> 1] |= i(t.charCodeAt(o) << 16 - o % 2 * 16); +return e.create(n, 2 * r) +} +} +}(), n.enc.Utf16) +}, +9506: function(t, e, r) { +var n, i, o, s, a, f, u, c; +t.exports = (c = r(9021), r(5471), r(1025), o = (i = (n = c) +.lib) +.Base, s = i.WordArray, f = (a = n.algo) +.MD5, u = a.EvpKDF = o.extend({ +cfg: o.extend({ +keySize: 4, +hasher: f, +iterations: 1 +}), +init: function(t) { +this.cfg = this.cfg.extend(t) +}, +compute: function(t, e) { +for (var r = this.cfg, n = r.hasher.create(), i = s.create(), o = i.words, a = r.keySize, f = r.iterations; o.length < a;) { +u && n.update(u); +var u = n.update(t) +.finalize(e); +n.reset(); +for (var c = 1; c < f; c++) u = n.finalize(u), n.reset(); +i.concat(u) +} +return i.sigBytes = 4 * a, i +} +}), n.EvpKDF = function(t, e, r) { +return u.create(r) +.compute(t, e) +}, c.EvpKDF) +}, +25: function(t, e, r) { +var n, i, o, s; +t.exports = (s = r(9021), r(7165), i = (n = s) +.lib.CipherParams, o = n.enc.Hex, n.format.Hex = { +stringify: function(t) { +return t.ciphertext.toString(o) +}, +parse: function(t) { +var e = o.parse(t); +return i.create({ +ciphertext: e +}) +} +}, s.format.Hex) +}, +1025: function(t, e, r) { +var n, i, o; +t.exports = (i = (n = r(9021)) +.lib.Base, o = n.enc.Utf8, void(n.algo.HMAC = i.extend({ +init: function(t, e) { +t = this._hasher = new t.init, "string" == typeof e && (e = o.parse(e)); +var r = t.blockSize, +n = 4 * r; +e.sigBytes > n && (e = t.finalize(e)), e.clamp(); +for (var i = this._oKey = e.clone(), s = this._iKey = e.clone(), a = i.words, f = s.words, u = 0; u < r; u++) a[u] ^= 1549556828, f[u] ^= 909522486; +i.sigBytes = s.sigBytes = n, this.reset() +}, +reset: function() { +var t = this._hasher; +t.reset(), t.update(this._iKey) +}, +update: function(t) { +return this._hasher.update(t), this +}, +finalize: function(t) { +var e = this._hasher, +r = e.finalize(t); +return e.reset(), e.finalize(this._oKey.clone() +.concat(r)) +} +}))) +}, +1396: function(t, e, r) { +var n; +t.exports = (n = r(9021), r(3240), r(6440), r(5503), r(754), r(4636), r(5471), r(3009), r(6308), r(1380), r(9557), r(5953), r(8056), r(1025), r(19), r(9506), r(7165), r(2169), r(6939), r(6372), r(3797), r(8454), r(2073), r(4905), r(482), r(2155), r(8124), r(25), r(955), r(7628), r(7193), r(6298), r(2696), n) +}, +6440: function(t, e, r) { +var n; +t.exports = (n = r(9021), function() { +if ("function" == typeof ArrayBuffer) { +var t = n.lib.WordArray, +e = t.init, +r = t.init = function(t) { +if (t instanceof ArrayBuffer && (t = new Uint8Array(t)), (t instanceof Int8Array || "undefined" != typeof Uint8ClampedArray && t instanceof Uint8ClampedArray || t instanceof Int16Array || t instanceof Uint16Array || t instanceof Int32Array || t instanceof Uint32Array || t instanceof Float32Array || t instanceof Float64Array) && (t = new Uint8Array(t.buffer, t.byteOffset, t.byteLength)), t instanceof Uint8Array) { + for (var r = t.byteLength, n = [], i = 0; i < r; i++) n[i >>> 2] |= t[i] << 24 - i % 4 * 8; + e.call(this, n, r) +} else e.apply(this, arguments) +}; +r.prototype = t +} +}(), n.lib.WordArray) +}, +4636: function(t, e, r) { +var n; +t.exports = (n = r(9021), function(t) { +var e = n, +r = e.lib, +i = r.WordArray, +o = r.Hasher, +s = e.algo, +a = []; +! function() { +for (var e = 0; e < 64; e++) a[e] = 4294967296 * t.abs(t.sin(e + 1)) | 0 +}(); +var f = s.MD5 = o.extend({ +_doReset: function() { +this._hash = new i.init([1732584193, 4023233417, 2562383102, 271733878]) +}, +_doProcessBlock: function(t, e) { +for (var r = 0; r < 16; r++) { +var n = e + r, + i = t[n]; +t[n] = 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> 8) +} +var o = this._hash.words, +s = t[e + 0], +f = t[e + 1], +l = t[e + 2], +y = t[e + 3], +g = t[e + 4], +d = t[e + 5], +v = t[e + 6], +m = t[e + 7], +S = t[e + 8], +_ = t[e + 9], +b = t[e + 10], +E = t[e + 11], +w = t[e + 12], +O = t[e + 13], +B = t[e + 14], +A = t[e + 15], +x = o[0], +P = o[1], +T = o[2], +I = o[3]; +x = u(x, P, T, I, s, 7, a[0]), I = u(I, x, P, T, f, 12, a[1]), T = u(T, I, x, P, l, 17, a[2]), P = u(P, T, I, x, y, 22, a[3]), x = u(x, P, T, I, g, 7, a[4]), I = u(I, x, P, T, d, 12, a[5]), T = u(T, I, x, P, v, 17, a[6]), P = u(P, T, I, x, m, 22, a[7]), x = u(x, P, T, I, S, 7, a[8]), I = u(I, x, P, T, _, 12, a[9]), T = u(T, I, x, P, b, 17, a[10]), P = u(P, T, I, x, E, 22, a[11]), x = u(x, P, T, I, w, 7, a[12]), I = u(I, x, P, T, O, 12, a[13]), T = u(T, I, x, P, B, 17, a[14]), x = c(x, P = u(P, T, I, x, A, 22, a[15]), T, I, f, 5, a[16]), I = c(I, x, P, T, v, 9, a[17]), T = c(T, I, x, P, E, 14, a[18]), P = c(P, T, I, x, s, 20, a[19]), x = c(x, P, T, I, d, 5, a[20]), I = c(I, x, P, T, b, 9, a[21]), T = c(T, I, x, P, A, 14, a[22]), P = c(P, T, I, x, g, 20, a[23]), x = c(x, P, T, I, _, 5, a[24]), I = c(I, x, P, T, B, 9, a[25]), T = c(T, I, x, P, y, 14, a[26]), P = c(P, T, I, x, S, 20, a[27]), x = c(x, P, T, I, O, 5, a[28]), I = c(I, x, P, T, l, 9, a[29]), T = c(T, I, x, P, m, 14, a[30]), x = h(x, P = c(P, T, I, x, w, 20, a[31]), T, I, d, 4, a[32]), I = h(I, x, P, T, S, 11, a[33]), T = h(T, I, x, P, E, 16, a[34]), P = h(P, T, I, x, B, 23, a[35]), x = h(x, P, T, I, f, 4, a[36]), I = h(I, x, P, T, g, 11, a[37]), T = h(T, I, x, P, m, 16, a[38]), P = h(P, T, I, x, b, 23, a[39]), x = h(x, P, T, I, O, 4, a[40]), I = h(I, x, P, T, s, 11, a[41]), T = h(T, I, x, P, y, 16, a[42]), P = h(P, T, I, x, v, 23, a[43]), x = h(x, P, T, I, _, 4, a[44]), I = h(I, x, P, T, w, 11, a[45]), T = h(T, I, x, P, A, 16, a[46]), x = p(x, P = h(P, T, I, x, l, 23, a[47]), T, I, s, 6, a[48]), I = p(I, x, P, T, m, 10, a[49]), T = p(T, I, x, P, B, 15, a[50]), P = p(P, T, I, x, d, 21, a[51]), x = p(x, P, T, I, w, 6, a[52]), I = p(I, x, P, T, y, 10, a[53]), T = p(T, I, x, P, b, 15, a[54]), P = p(P, T, I, x, f, 21, a[55]), x = p(x, P, T, I, S, 6, a[56]), I = p(I, x, P, T, A, 10, a[57]), T = p(T, I, x, P, v, 15, a[58]), P = p(P, T, I, x, O, 21, a[59]), x = p(x, P, T, I, g, 6, a[60]), I = p(I, x, P, T, E, 10, a[61]), T = p(T, I, x, P, l, 15, a[62]), P = p(P, T, I, x, _, 21, a[63]), o[0] = o[0] + x | 0, o[1] = o[1] + P | 0, o[2] = o[2] + T | 0, o[3] = o[3] + I | 0 +}, +_doFinalize: function() { +var e = this._data, +r = e.words, +n = 8 * this._nDataBytes, +i = 8 * e.sigBytes; +r[i >>> 5] |= 128 << 24 - i % 32; +var o = t.floor(n / 4294967296), +s = n; +r[15 + (i + 64 >>> 9 << 4)] = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8), r[14 + (i + 64 >>> 9 << 4)] = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8), e.sigBytes = 4 * (r.length + 1), this._process(); +for (var a = this._hash, f = a.words, u = 0; u < 4; u++) { +var c = f[u]; +f[u] = 16711935 & (c << 8 | c >>> 24) | 4278255360 & (c << 24 | c >>> 8) +} +return a +}, +clone: function() { +var t = o.clone.call(this); +return t._hash = this._hash.clone(), t +} +}); + +function u(t, e, r, n, i, o, s) { +var a = t + (e & r | ~e & n) + i + s; +return (a << o | a >>> 32 - o) + e +} +function c(t, e, r, n, i, o, s) { +var a = t + (e & n | r & ~n) + i + s; +return (a << o | a >>> 32 - o) + e +} +function h(t, e, r, n, i, o, s) { +var a = t + (e ^ r ^ n) + i + s; +return (a << o | a >>> 32 - o) + e +} +function p(t, e, r, n, i, o, s) { +var a = t + (r ^ (e | ~n)) + i + s; +return (a << o | a >>> 32 - o) + e +} +e.MD5 = o._createHelper(f), e.HmacMD5 = o._createHmacHelper(f) +}(Math), n.MD5) +}, +2169: function(t, e, r) { +var n; +t.exports = (n = r(9021), r(7165), n.mode.CFB = function() { +var t = n.lib.BlockCipherMode.extend(); + +function e(t, e, r, n) { +var i = this._iv; +if (i) { +var o = i.slice(0); +this._iv = void 0 +} else o = this._prevBlock; +n.encryptBlock(o, 0); +for (var s = 0; s < r; s++) t[e + s] ^= o[s] +} +return t.Encryptor = t.extend({ +processBlock: function(t, r) { +var n = this._cipher, +i = n.blockSize; +e.call(this, t, r, i, n), this._prevBlock = t.slice(r, r + i) +} +}), t.Decryptor = t.extend({ +processBlock: function(t, r) { +var n = this._cipher, +i = n.blockSize, +o = t.slice(r, r + i); +e.call(this, t, r, i, n), this._prevBlock = o +} +}), t +}(), n.mode.CFB) +}, +6372: function(t, e, r) { +var n; +t.exports = (n = r(9021), r(7165), n.mode.CTRGladman = function() { +var t = n.lib.BlockCipherMode.extend(); + +function e(t) { +if (255 & ~ (t >> 24)) t += 1 << 24; +else { +var e = t >> 16 & 255, +r = t >> 8 & 255, +n = 255 & t; +255 === e ? (e = 0, 255 === r ? (r = 0, 255 === n ? n = 0 : ++n) : ++r) : ++e, t = 0, t += e << 16, t += r << 8, t += n +} +return t +} +var r = t.Encryptor = t.extend({ +processBlock: function(t, r) { +var n = this._cipher, +i = n.blockSize, +o = this._iv, +s = this._counter; +o && (s = this._counter = o.slice(0), this._iv = void 0), +function(t) { +0 === (t[0] = e(t[0])) && (t[1] = e(t[1])) +}(s); +var a = s.slice(0); +n.encryptBlock(a, 0); +for (var f = 0; f < i; f++) t[r + f] ^= a[f] +} +}); +return t.Decryptor = r, t +}(), n.mode.CTRGladman) +}, +6939: function(t, e, r) { +var n, i, o; +t.exports = (o = r(9021), r(7165), o.mode.CTR = (i = (n = o.lib.BlockCipherMode.extend()) +.Encryptor = n.extend({ +processBlock: function(t, e) { +var r = this._cipher, +n = r.blockSize, +i = this._iv, +o = this._counter; +i && (o = this._counter = i.slice(0), this._iv = void 0); +var s = o.slice(0); +r.encryptBlock(s, 0), o[n - 1] = o[n - 1] + 1 | 0; +for (var a = 0; a < n; a++) t[e + a] ^= s[a] +} +}), n.Decryptor = i, n), o.mode.CTR) +}, +8454: function(t, e, r) { +var n, i; +t.exports = (i = r(9021), r(7165), i.mode.ECB = ((n = i.lib.BlockCipherMode.extend()) +.Encryptor = n.extend({ +processBlock: function(t, e) { +this._cipher.encryptBlock(t, e) +} +}), n.Decryptor = n.extend({ +processBlock: function(t, e) { +this._cipher.decryptBlock(t, e) +} +}), n), i.mode.ECB) +}, +3797: function(t, e, r) { +var n, i, o; +t.exports = (o = r(9021), r(7165), o.mode.OFB = (i = (n = o.lib.BlockCipherMode.extend()) +.Encryptor = n.extend({ +processBlock: function(t, e) { +var r = this._cipher, +n = r.blockSize, +i = this._iv, +o = this._keystream; +i && (o = this._keystream = i.slice(0), this._iv = void 0), r.encryptBlock(o, 0); +for (var s = 0; s < n; s++) t[e + s] ^= o[s] +} +}), n.Decryptor = i, n), o.mode.OFB) +}, +2073: function(t, e, r) { +var n; +t.exports = (n = r(9021), r(7165), n.pad.AnsiX923 = { +pad: function(t, e) { +var r = t.sigBytes, +n = 4 * e, +i = n - r % n, +o = r + i - 1; +t.clamp(), t.words[o >>> 2] |= i << 24 - o % 4 * 8, t.sigBytes += i +}, +unpad: function(t) { +var e = 255 & t.words[t.sigBytes - 1 >>> 2]; +t.sigBytes -= e +} +}, n.pad.Ansix923) +}, +4905: function(t, e, r) { +var n; +t.exports = (n = r(9021), r(7165), n.pad.Iso10126 = { +pad: function(t, e) { +var r = 4 * e, +i = r - t.sigBytes % r; +t.concat(n.lib.WordArray.random(i - 1)) +.concat(n.lib.WordArray.create([i << 24], 1)) +}, +unpad: function(t) { +var e = 255 & t.words[t.sigBytes - 1 >>> 2]; +t.sigBytes -= e +} +}, n.pad.Iso10126) +}, +482: function(t, e, r) { +var n; +t.exports = (n = r(9021), r(7165), n.pad.Iso97971 = { +pad: function(t, e) { +t.concat(n.lib.WordArray.create([2147483648], 1)), n.pad.ZeroPadding.pad(t, e) +}, +unpad: function(t) { +n.pad.ZeroPadding.unpad(t), t.sigBytes-- +} +}, n.pad.Iso97971) +}, +8124: function(t, e, r) { +var n; +t.exports = (n = r(9021), r(7165), n.pad.NoPadding = { +pad: function() {}, +unpad: function() {} +}, n.pad.NoPadding) +}, +2155: function(t, e, r) { +var n; +t.exports = (n = r(9021), r(7165), n.pad.ZeroPadding = { +pad: function(t, e) { +var r = 4 * e; +t.clamp(), t.sigBytes += r - (t.sigBytes % r || r) +}, +unpad: function(t) { +for (var e = t.words, r = t.sigBytes - 1; !(e[r >>> 2] >>> 24 - r % 4 * 8 & 255);) r--; +t.sigBytes = r + 1 +} +}, n.pad.ZeroPadding) +}, +19: function(t, e, r) { +var n, i, o, s, a, f, u, c, h; +t.exports = (h = r(9021), r(5471), r(1025), o = (i = (n = h) +.lib) +.Base, s = i.WordArray, f = (a = n.algo) +.SHA1, u = a.HMAC, c = a.PBKDF2 = o.extend({ +cfg: o.extend({ +keySize: 4, +hasher: f, +iterations: 1 +}), +init: function(t) { +this.cfg = this.cfg.extend(t) +}, +compute: function(t, e) { +for (var r = this.cfg, n = u.create(r.hasher, t), i = s.create(), o = s.create([1]), a = i.words, f = o.words, c = r.keySize, h = r.iterations; a.length < c;) { +var p = n.update(e) +.finalize(o); +n.reset(); +for (var l = p.words, y = l.length, g = p, d = 1; d < h; d++) { +g = n.finalize(g), n.reset(); +for (var v = g.words, m = 0; m < y; m++) l[m] ^= v[m] +} +i.concat(p), f[0]++ +} +return i.sigBytes = 4 * c, i +} +}), n.PBKDF2 = function(t, e, r) { +return c.create(r) +.compute(t, e) +}, h.PBKDF2) +}, +2696: function(t, e, r) { +var n; +t.exports = (n = r(9021), r(754), r(4636), r(9506), r(7165), function() { +var t = n, +e = t.lib.StreamCipher, +r = t.algo, +i = [], +o = [], +s = [], +a = r.RabbitLegacy = e.extend({ +_doReset: function() { +var t = this._key.words, + e = this.cfg.iv, + r = this._X = [t[0], t[3] << 16 | t[2] >>> 16, t[1], t[0] << 16 | t[3] >>> 16, t[2], t[1] << 16 | t[0] >>> 16, t[3], t[2] << 16 | t[1] >>> 16], + n = this._C = [t[2] << 16 | t[2] >>> 16, 4294901760 & t[0] | 65535 & t[1], t[3] << 16 | t[3] >>> 16, 4294901760 & t[1] | 65535 & t[2], t[0] << 16 | t[0] >>> 16, 4294901760 & t[2] | 65535 & t[3], t[1] << 16 | t[1] >>> 16, 4294901760 & t[3] | 65535 & t[0]]; +this._b = 0; +for (var i = 0; i < 4; i++) f.call(this); +for (i = 0; i < 8; i++) n[i] ^= r[i + 4 & 7]; +if (e) { + var o = e.words, + s = o[0], + a = o[1], + u = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8), + c = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8), + h = u >>> 16 | 4294901760 & c, + p = c << 16 | 65535 & u; + for (n[0] ^= u, n[1] ^= h, n[2] ^= c, n[3] ^= p, n[4] ^= u, n[5] ^= h, n[6] ^= c, n[7] ^= p, i = 0; i < 4; i++) f.call(this) +} +}, +_doProcessBlock: function(t, e) { +var r = this._X; +f.call(this), i[0] = r[0] ^ r[5] >>> 16 ^ r[3] << 16, i[1] = r[2] ^ r[7] >>> 16 ^ r[5] << 16, i[2] = r[4] ^ r[1] >>> 16 ^ r[7] << 16, i[3] = r[6] ^ r[3] >>> 16 ^ r[1] << 16; +for (var n = 0; n < 4; n++) i[n] = 16711935 & (i[n] << 8 | i[n] >>> 24) | 4278255360 & (i[n] << 24 | i[n] >>> 8), t[e + n] ^= i[n] +}, +blockSize: 4, +ivSize: 2 +}); + +function f() { +for (var t = this._X, e = this._C, r = 0; r < 8; r++) o[r] = e[r]; +for (e[0] = e[0] + 1295307597 + this._b | 0, e[1] = e[1] + 3545052371 + (e[0] >>> 0 < o[0] >>> 0 ? 1 : 0) | 0, e[2] = e[2] + 886263092 + (e[1] >>> 0 < o[1] >>> 0 ? 1 : 0) | 0, e[3] = e[3] + 1295307597 + (e[2] >>> 0 < o[2] >>> 0 ? 1 : 0) | 0, e[4] = e[4] + 3545052371 + (e[3] >>> 0 < o[3] >>> 0 ? 1 : 0) | 0, e[5] = e[5] + 886263092 + (e[4] >>> 0 < o[4] >>> 0 ? 1 : 0) | 0, e[6] = e[6] + 1295307597 + (e[5] >>> 0 < o[5] >>> 0 ? 1 : 0) | 0, e[7] = e[7] + 3545052371 + (e[6] >>> 0 < o[6] >>> 0 ? 1 : 0) | 0, this._b = e[7] >>> 0 < o[7] >>> 0 ? 1 : 0, r = 0; r < 8; r++) { +var n = t[r] + e[r], +i = 65535 & n, +a = n >>> 16, +f = ((i * i >>> 17) + i * a >>> 15) + a * a, +u = ((4294901760 & n) * n | 0) + ((65535 & n) * n | 0); +s[r] = f ^ u +} +t[0] = s[0] + (s[7] << 16 | s[7] >>> 16) + (s[6] << 16 | s[6] >>> 16) | 0, t[1] = s[1] + (s[0] << 8 | s[0] >>> 24) + s[7] | 0, t[2] = s[2] + (s[1] << 16 | s[1] >>> 16) + (s[0] << 16 | s[0] >>> 16) | 0, t[3] = s[3] + (s[2] << 8 | s[2] >>> 24) + s[1] | 0, t[4] = s[4] + (s[3] << 16 | s[3] >>> 16) + (s[2] << 16 | s[2] >>> 16) | 0, t[5] = s[5] + (s[4] << 8 | s[4] >>> 24) + s[3] | 0, t[6] = s[6] + (s[5] << 16 | s[5] >>> 16) + (s[4] << 16 | s[4] >>> 16) | 0, t[7] = s[7] + (s[6] << 8 | s[6] >>> 24) + s[5] | 0 +} +t.RabbitLegacy = e._createHelper(a) +}(), n.RabbitLegacy) +}, +6298: function(t, e, r) { +var n; +t.exports = (n = r(9021), r(754), r(4636), r(9506), r(7165), function() { +var t = n, +e = t.lib.StreamCipher, +r = t.algo, +i = [], +o = [], +s = [], +a = r.Rabbit = e.extend({ +_doReset: function() { +for (var t = this._key.words, e = this.cfg.iv, r = 0; r < 4; r++) t[r] = 16711935 & (t[r] << 8 | t[r] >>> 24) | 4278255360 & (t[r] << 24 | t[r] >>> 8); +var n = this._X = [t[0], t[3] << 16 | t[2] >>> 16, t[1], t[0] << 16 | t[3] >>> 16, t[2], t[1] << 16 | t[0] >>> 16, t[3], t[2] << 16 | t[1] >>> 16], + i = this._C = [t[2] << 16 | t[2] >>> 16, 4294901760 & t[0] | 65535 & t[1], t[3] << 16 | t[3] >>> 16, 4294901760 & t[1] | 65535 & t[2], t[0] << 16 | t[0] >>> 16, 4294901760 & t[2] | 65535 & t[3], t[1] << 16 | t[1] >>> 16, 4294901760 & t[3] | 65535 & t[0]]; +for (this._b = 0, r = 0; r < 4; r++) f.call(this); +for (r = 0; r < 8; r++) i[r] ^= n[r + 4 & 7]; +if (e) { + var o = e.words, + s = o[0], + a = o[1], + u = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8), + c = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8), + h = u >>> 16 | 4294901760 & c, + p = c << 16 | 65535 & u; + for (i[0] ^= u, i[1] ^= h, i[2] ^= c, i[3] ^= p, i[4] ^= u, i[5] ^= h, i[6] ^= c, i[7] ^= p, r = 0; r < 4; r++) f.call(this) +} +}, +_doProcessBlock: function(t, e) { +var r = this._X; +f.call(this), i[0] = r[0] ^ r[5] >>> 16 ^ r[3] << 16, i[1] = r[2] ^ r[7] >>> 16 ^ r[5] << 16, i[2] = r[4] ^ r[1] >>> 16 ^ r[7] << 16, i[3] = r[6] ^ r[3] >>> 16 ^ r[1] << 16; +for (var n = 0; n < 4; n++) i[n] = 16711935 & (i[n] << 8 | i[n] >>> 24) | 4278255360 & (i[n] << 24 | i[n] >>> 8), t[e + n] ^= i[n] +}, +blockSize: 4, +ivSize: 2 +}); + +function f() { +for (var t = this._X, e = this._C, r = 0; r < 8; r++) o[r] = e[r]; +for (e[0] = e[0] + 1295307597 + this._b | 0, e[1] = e[1] + 3545052371 + (e[0] >>> 0 < o[0] >>> 0 ? 1 : 0) | 0, e[2] = e[2] + 886263092 + (e[1] >>> 0 < o[1] >>> 0 ? 1 : 0) | 0, e[3] = e[3] + 1295307597 + (e[2] >>> 0 < o[2] >>> 0 ? 1 : 0) | 0, e[4] = e[4] + 3545052371 + (e[3] >>> 0 < o[3] >>> 0 ? 1 : 0) | 0, e[5] = e[5] + 886263092 + (e[4] >>> 0 < o[4] >>> 0 ? 1 : 0) | 0, e[6] = e[6] + 1295307597 + (e[5] >>> 0 < o[5] >>> 0 ? 1 : 0) | 0, e[7] = e[7] + 3545052371 + (e[6] >>> 0 < o[6] >>> 0 ? 1 : 0) | 0, this._b = e[7] >>> 0 < o[7] >>> 0 ? 1 : 0, r = 0; r < 8; r++) { +var n = t[r] + e[r], +i = 65535 & n, +a = n >>> 16, +f = ((i * i >>> 17) + i * a >>> 15) + a * a, +u = ((4294901760 & n) * n | 0) + ((65535 & n) * n | 0); +s[r] = f ^ u +} +t[0] = s[0] + (s[7] << 16 | s[7] >>> 16) + (s[6] << 16 | s[6] >>> 16) | 0, t[1] = s[1] + (s[0] << 8 | s[0] >>> 24) + s[7] | 0, t[2] = s[2] + (s[1] << 16 | s[1] >>> 16) + (s[0] << 16 | s[0] >>> 16) | 0, t[3] = s[3] + (s[2] << 8 | s[2] >>> 24) + s[1] | 0, t[4] = s[4] + (s[3] << 16 | s[3] >>> 16) + (s[2] << 16 | s[2] >>> 16) | 0, t[5] = s[5] + (s[4] << 8 | s[4] >>> 24) + s[3] | 0, t[6] = s[6] + (s[5] << 16 | s[5] >>> 16) + (s[4] << 16 | s[4] >>> 16) | 0, t[7] = s[7] + (s[6] << 8 | s[6] >>> 24) + s[5] | 0 +} +t.Rabbit = e._createHelper(a) +}(), n.Rabbit) +}, +7193: function(t, e, r) { +var n; +t.exports = (n = r(9021), r(754), r(4636), r(9506), r(7165), function() { +var t = n, +e = t.lib.StreamCipher, +r = t.algo, +i = r.RC4 = e.extend({ +_doReset: function() { +for (var t = this._key, e = t.words, r = t.sigBytes, n = this._S = [], i = 0; i < 256; i++) n[i] = i; +i = 0; +for (var o = 0; i < 256; i++) { + var s = i % r, + a = e[s >>> 2] >>> 24 - s % 4 * 8 & 255; + o = (o + n[i] + a) % 256; + var f = n[i]; + n[i] = n[o], n[o] = f +} +this._i = this._j = 0 +}, +_doProcessBlock: function(t, e) { +t[e] ^= o.call(this) +}, +keySize: 8, +ivSize: 0 +}); + +function o() { +for (var t = this._S, e = this._i, r = this._j, n = 0, i = 0; i < 4; i++) { +r = (r + t[e = (e + 1) % 256]) % 256; +var o = t[e]; +t[e] = t[r], t[r] = o, n |= t[(t[e] + t[r]) % 256] << 24 - 8 * i +} +return this._i = e, this._j = r, n +} +t.RC4 = e._createHelper(i); +var s = r.RC4Drop = i.extend({ +cfg: i.cfg.extend({ +drop: 192 +}), +_doReset: function() { +i._doReset.call(this); +for (var t = this.cfg.drop; t > 0; t--) o.call(this) +} +}); +t.RC4Drop = e._createHelper(s) +}(), n.RC4) +}, +8056: function(t, e, r) { +var n; +t.exports = (n = r(9021), function(t) { +var e = n, +r = e.lib, +i = r.WordArray, +o = r.Hasher, +s = e.algo, +a = i.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]), +f = i.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]), +u = i.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]), +c = i.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]), +h = i.create([0, 1518500249, 1859775393, 2400959708, 2840853838]), +p = i.create([1352829926, 1548603684, 1836072691, 2053994217, 0]), +l = s.RIPEMD160 = o.extend({ +_doReset: function() { +this._hash = i.create([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) +}, +_doProcessBlock: function(t, e) { +for (var r = 0; r < 16; r++) { + var n = e + r, + i = t[n]; + t[n] = 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> 8) +} +var o, s, l, _, b, E, w, O, B, A, x, P = this._hash.words, + T = h.words, + I = p.words, + k = a.words, + D = f.words, + R = u.words, + N = c.words; +for (E = o = P[0], w = s = P[1], O = l = P[2], B = _ = P[3], A = b = P[4], r = 0; r < 80; r += 1) x = o + t[e + k[r]] | 0, x += r < 16 ? y(s, l, _) + T[0] : r < 32 ? g(s, l, _) + T[1] : r < 48 ? d(s, l, _) + T[2] : r < 64 ? v(s, l, _) + T[3] : m(s, l, _) + T[4], x = (x = S(x |= 0, R[r])) + b | 0, o = b, b = _, _ = S(l, 10), l = s, s = x, x = E + t[e + D[r]] | 0, x += r < 16 ? m(w, O, B) + I[0] : r < 32 ? v(w, O, B) + I[1] : r < 48 ? d(w, O, B) + I[2] : r < 64 ? g(w, O, B) + I[3] : y(w, O, B) + I[4], x = (x = S(x |= 0, N[r])) + A | 0, E = A, A = B, B = S(O, 10), O = w, w = x; +x = P[1] + l + B | 0, P[1] = P[2] + _ + A | 0, P[2] = P[3] + b + E | 0, P[3] = P[4] + o + w | 0, P[4] = P[0] + s + O | 0, P[0] = x +}, +_doFinalize: function() { +var t = this._data, + e = t.words, + r = 8 * this._nDataBytes, + n = 8 * t.sigBytes; +e[n >>> 5] |= 128 << 24 - n % 32, e[14 + (n + 64 >>> 9 << 4)] = 16711935 & (r << 8 | r >>> 24) | 4278255360 & (r << 24 | r >>> 8), t.sigBytes = 4 * (e.length + 1), this._process(); +for (var i = this._hash, o = i.words, s = 0; s < 5; s++) { + var a = o[s]; + o[s] = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8) +} +return i +}, +clone: function() { +var t = o.clone.call(this); +return t._hash = this._hash.clone(), t +} +}); + +function y(t, e, r) { +return t ^ e ^ r +} +function g(t, e, r) { +return t & e | ~t & r +} +function d(t, e, r) { +return (t | ~e) ^ r +} +function v(t, e, r) { +return t & r | e & ~r +} +function m(t, e, r) { +return t ^ (e | ~r) +} +function S(t, e) { +return t << e | t >>> 32 - e +} +e.RIPEMD160 = o._createHelper(l), e.HmacRIPEMD160 = o._createHmacHelper(l) +}(Math), n.RIPEMD160) +}, +5471: function(t, e, r) { +var n, i, o, s, a, f, u, c; +t.exports = (i = (n = c = r(9021)) +.lib, o = i.WordArray, s = i.Hasher, a = n.algo, f = [], u = a.SHA1 = s.extend({ +_doReset: function() { +this._hash = new o.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) +}, +_doProcessBlock: function(t, e) { +for (var r = this._hash.words, n = r[0], i = r[1], o = r[2], s = r[3], a = r[4], u = 0; u < 80; u++) { +if (u < 16) f[u] = 0 | t[e + u]; +else { +var c = f[u - 3] ^ f[u - 8] ^ f[u - 14] ^ f[u - 16]; +f[u] = c << 1 | c >>> 31 +} +var h = (n << 5 | n >>> 27) + a + f[u]; +h += u < 20 ? 1518500249 + (i & o | ~i & s) : u < 40 ? 1859775393 + (i ^ o ^ s) : u < 60 ? (i & o | i & s | o & s) - 1894007588 : (i ^ o ^ s) - 899497514, a = s, s = o, o = i << 30 | i >>> 2, i = n, n = h +} +r[0] = r[0] + n | 0, r[1] = r[1] + i | 0, r[2] = r[2] + o | 0, r[3] = r[3] + s | 0, r[4] = r[4] + a | 0 +}, +_doFinalize: function() { +var t = this._data, +e = t.words, +r = 8 * this._nDataBytes, +n = 8 * t.sigBytes; +return e[n >>> 5] |= 128 << 24 - n % 32, e[14 + (n + 64 >>> 9 << 4)] = Math.floor(r / 4294967296), e[15 + (n + 64 >>> 9 << 4)] = r, t.sigBytes = 4 * e.length, this._process(), this._hash +}, +clone: function() { +var t = s.clone.call(this); +return t._hash = this._hash.clone(), t +} +}), n.SHA1 = s._createHelper(u), n.HmacSHA1 = s._createHmacHelper(u), c.SHA1) +}, +6308: function(t, e, r) { +var n, i, o, s, a, f; +t.exports = (f = r(9021), r(3009), i = (n = f) +.lib.WordArray, o = n.algo, s = o.SHA256, a = o.SHA224 = s.extend({ +_doReset: function() { +this._hash = new i.init([3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428]) +}, +_doFinalize: function() { +var t = s._doFinalize.call(this); +return t.sigBytes -= 4, t +} +}), n.SHA224 = s._createHelper(a), n.HmacSHA224 = s._createHmacHelper(a), f.SHA224) +}, +3009: function(t, e, r) { +var n; +t.exports = (n = r(9021), function(t) { +var e = n, +r = e.lib, +i = r.WordArray, +o = r.Hasher, +s = e.algo, +a = [], +f = []; +! function() { +function e(e) { +for (var r = t.sqrt(e), n = 2; n <= r; n++) if (!(e % n)) return !1; +return !0 +} +function r(t) { +return 4294967296 * (t - (0 | t)) | 0 +} +for (var n = 2, i = 0; i < 64;) e(n) && (i < 8 && (a[i] = r(t.pow(n, .5))), f[i] = r(t.pow(n, 1 / 3)), i++), n++ +}(); +var u = [], +c = s.SHA256 = o.extend({ +_doReset: function() { +this._hash = new i.init(a.slice(0)) +}, +_doProcessBlock: function(t, e) { +for (var r = this._hash.words, n = r[0], i = r[1], o = r[2], s = r[3], a = r[4], c = r[5], h = r[6], p = r[7], l = 0; l < 64; l++) { + if (l < 16) u[l] = 0 | t[e + l]; + else { + var y = u[l - 15], + g = (y << 25 | y >>> 7) ^ (y << 14 | y >>> 18) ^ y >>> 3, + d = u[l - 2], + v = (d << 15 | d >>> 17) ^ (d << 13 | d >>> 19) ^ d >>> 10; + u[l] = g + u[l - 7] + v + u[l - 16] + } + var m = n & i ^ n & o ^ i & o, + S = (n << 30 | n >>> 2) ^ (n << 19 | n >>> 13) ^ (n << 10 | n >>> 22), + _ = p + ((a << 26 | a >>> 6) ^ (a << 21 | a >>> 11) ^ (a << 7 | a >>> 25)) + (a & c ^ ~a & h) + f[l] + u[l]; + p = h, h = c, c = a, a = s + _ | 0, s = o, o = i, i = n, n = _ + (S + m) | 0 +} +r[0] = r[0] + n | 0, r[1] = r[1] + i | 0, r[2] = r[2] + o | 0, r[3] = r[3] + s | 0, r[4] = r[4] + a | 0, r[5] = r[5] + c | 0, r[6] = r[6] + h | 0, r[7] = r[7] + p | 0 +}, +_doFinalize: function() { +var e = this._data, + r = e.words, + n = 8 * this._nDataBytes, + i = 8 * e.sigBytes; +return r[i >>> 5] |= 128 << 24 - i % 32, r[14 + (i + 64 >>> 9 << 4)] = t.floor(n / 4294967296), r[15 + (i + 64 >>> 9 << 4)] = n, e.sigBytes = 4 * r.length, this._process(), this._hash +}, +clone: function() { +var t = o.clone.call(this); +return t._hash = this._hash.clone(), t +} +}); +e.SHA256 = o._createHelper(c), e.HmacSHA256 = o._createHmacHelper(c) +}(Math), n.SHA256) +}, +5953: function(t, e, r) { +var n; +t.exports = (n = r(9021), r(3240), function(t) { +var e = n, +r = e.lib, +i = r.WordArray, +o = r.Hasher, +s = e.x64.Word, +a = e.algo, +f = [], +u = [], +c = []; +! function() { +for (var t = 1, e = 0, r = 0; r < 24; r++) { +f[t + 5 * e] = (r + 1) * (r + 2) / 2 % 64; +var n = (2 * t + 3 * e) % 5; +t = e % 5, e = n +} +for (t = 0; t < 5; t++) for (e = 0; e < 5; e++) u[t + 5 * e] = e + (2 * t + 3 * e) % 5 * 5; +for (var i = 1, o = 0; o < 24; o++) { +for (var a = 0, h = 0, p = 0; p < 7; p++) { +if (1 & i) { + var l = (1 << p) - 1; + l < 32 ? h ^= 1 << l : a ^= 1 << l - 32 +} +128 & i ? i = i << 1 ^ 113 : i <<= 1 +} +c[o] = s.create(a, h) +} +}(); +var h = []; +! function() { +for (var t = 0; t < 25; t++) h[t] = s.create() +}(); +var p = a.SHA3 = o.extend({ +cfg: o.cfg.extend({ +outputLength: 512 +}), +_doReset: function() { +for (var t = this._state = [], e = 0; e < 25; e++) t[e] = new s.init; +this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32 +}, +_doProcessBlock: function(t, e) { +for (var r = this._state, n = this.blockSize / 2, i = 0; i < n; i++) { +var o = t[e + 2 * i], + s = t[e + 2 * i + 1]; +o = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8), s = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8), (P = r[i]) + .high ^= s, P.low ^= o +} +for (var a = 0; a < 24; a++) { +for (var p = 0; p < 5; p++) { + for (var l = 0, y = 0, g = 0; g < 5; g++) l ^= (P = r[p + 5 * g]) + .high, y ^= P.low; + var d = h[p]; + d.high = l, d.low = y +} +for (p = 0; p < 5; p++) { + var v = h[(p + 4) % 5], + m = h[(p + 1) % 5], + S = m.high, + _ = m.low; + for (l = v.high ^ (S << 1 | _ >>> 31), y = v.low ^ (_ << 1 | S >>> 31), g = 0; g < 5; g++)(P = r[p + 5 * g]) + .high ^= l, P.low ^= y +} +for (var b = 1; b < 25; b++) { + var E = (P = r[b]) + .high, + w = P.low, + O = f[b]; + O < 32 ? (l = E << O | w >>> 32 - O, y = w << O | E >>> 32 - O) : (l = w << O - 32 | E >>> 64 - O, y = E << O - 32 | w >>> 64 - O); + var B = h[u[b]]; + B.high = l, B.low = y +} +var A = h[0], + x = r[0]; +for (A.high = x.high, A.low = x.low, p = 0; p < 5; p++) for (g = 0; g < 5; g++) { + var P = r[b = p + 5 * g], + T = h[b], + I = h[(p + 1) % 5 + 5 * g], + k = h[(p + 2) % 5 + 5 * g]; + P.high = T.high ^ ~I.high & k.high, P.low = T.low ^ ~I.low & k.low +} +P = r[0]; +var D = c[a]; +P.high ^= D.high, P.low ^= D.low +} +}, +_doFinalize: function() { +var e = this._data, +r = e.words, +n = (this._nDataBytes, 8 * e.sigBytes), +o = 32 * this.blockSize; +r[n >>> 5] |= 1 << 24 - n % 32, r[(t.ceil((n + 1) / o) * o >>> 5) - 1] |= 128, e.sigBytes = 4 * r.length, this._process(); +for (var s = this._state, a = this.cfg.outputLength / 8, f = a / 8, u = [], c = 0; c < f; c++) { +var h = s[c], + p = h.high, + l = h.low; +p = 16711935 & (p << 8 | p >>> 24) | 4278255360 & (p << 24 | p >>> 8), l = 16711935 & (l << 8 | l >>> 24) | 4278255360 & (l << 24 | l >>> 8), u.push(l), u.push(p) +} +return new i.init(u, a) +}, +clone: function() { +for (var t = o.clone.call(this), e = t._state = this._state.slice(0), r = 0; r < 25; r++) e[r] = e[r].clone(); +return t +} +}); +e.SHA3 = o._createHelper(p), e.HmacSHA3 = o._createHmacHelper(p) +}(Math), n.SHA3) +}, +9557: function(t, e, r) { +var n, i, o, s, a, f, u, c; +t.exports = (c = r(9021), r(3240), r(1380), i = (n = c) +.x64, o = i.Word, s = i.WordArray, a = n.algo, f = a.SHA512, u = a.SHA384 = f.extend({ +_doReset: function() { +this._hash = new s.init([new o.init(3418070365, 3238371032), new o.init(1654270250, 914150663), new o.init(2438529370, 812702999), new o.init(355462360, 4144912697), new o.init(1731405415, 4290775857), new o.init(2394180231, 1750603025), new o.init(3675008525, 1694076839), new o.init(1203062813, 3204075428)]) +}, +_doFinalize: function() { +var t = f._doFinalize.call(this); +return t.sigBytes -= 16, t +} +}), n.SHA384 = f._createHelper(u), n.HmacSHA384 = f._createHmacHelper(u), c.SHA384) +}, +1380: function(t, e, r) { +var n; +t.exports = (n = r(9021), r(3240), function() { +var t = n, +e = t.lib.Hasher, +r = t.x64, +i = r.Word, +o = r.WordArray, +s = t.algo; + +function a() { +return i.create.apply(i, arguments) +} +var f = [a(1116352408, 3609767458), a(1899447441, 602891725), a(3049323471, 3964484399), a(3921009573, 2173295548), a(961987163, 4081628472), a(1508970993, 3053834265), a(2453635748, 2937671579), a(2870763221, 3664609560), a(3624381080, 2734883394), a(310598401, 1164996542), a(607225278, 1323610764), a(1426881987, 3590304994), a(1925078388, 4068182383), a(2162078206, 991336113), a(2614888103, 633803317), a(3248222580, 3479774868), a(3835390401, 2666613458), a(4022224774, 944711139), a(264347078, 2341262773), a(604807628, 2007800933), a(770255983, 1495990901), a(1249150122, 1856431235), a(1555081692, 3175218132), a(1996064986, 2198950837), a(2554220882, 3999719339), a(2821834349, 766784016), a(2952996808, 2566594879), a(3210313671, 3203337956), a(3336571891, 1034457026), a(3584528711, 2466948901), a(113926993, 3758326383), a(338241895, 168717936), a(666307205, 1188179964), a(773529912, 1546045734), a(1294757372, 1522805485), a(1396182291, 2643833823), a(1695183700, 2343527390), a(1986661051, 1014477480), a(2177026350, 1206759142), a(2456956037, 344077627), a(2730485921, 1290863460), a(2820302411, 3158454273), a(3259730800, 3505952657), a(3345764771, 106217008), a(3516065817, 3606008344), a(3600352804, 1432725776), a(4094571909, 1467031594), a(275423344, 851169720), a(430227734, 3100823752), a(506948616, 1363258195), a(659060556, 3750685593), a(883997877, 3785050280), a(958139571, 3318307427), a(1322822218, 3812723403), a(1537002063, 2003034995), a(1747873779, 3602036899), a(1955562222, 1575990012), a(2024104815, 1125592928), a(2227730452, 2716904306), a(2361852424, 442776044), a(2428436474, 593698344), a(2756734187, 3733110249), a(3204031479, 2999351573), a(3329325298, 3815920427), a(3391569614, 3928383900), a(3515267271, 566280711), a(3940187606, 3454069534), a(4118630271, 4000239992), a(116418474, 1914138554), a(174292421, 2731055270), a(289380356, 3203993006), a(460393269, 320620315), a(685471733, 587496836), a(852142971, 1086792851), a(1017036298, 365543100), a(1126000580, 2618297676), a(1288033470, 3409855158), a(1501505948, 4234509866), a(1607167915, 987167468), a(1816402316, 1246189591)], +u = []; +! function() { +for (var t = 0; t < 80; t++) u[t] = a() +}(); +var c = s.SHA512 = e.extend({ +_doReset: function() { +this._hash = new o.init([new i.init(1779033703, 4089235720), new i.init(3144134277, 2227873595), new i.init(1013904242, 4271175723), new i.init(2773480762, 1595750129), new i.init(1359893119, 2917565137), new i.init(2600822924, 725511199), new i.init(528734635, 4215389547), new i.init(1541459225, 327033209)]) +}, +_doProcessBlock: function(t, e) { +for (var r = this._hash.words, n = r[0], i = r[1], o = r[2], s = r[3], a = r[4], c = r[5], h = r[6], p = r[7], l = n.high, y = n.low, g = i.high, d = i.low, v = o.high, m = o.low, S = s.high, _ = s.low, b = a.high, E = a.low, w = c.high, O = c.low, B = h.high, A = h.low, x = p.high, P = p.low, T = l, I = y, k = g, D = d, R = v, N = m, L = S, C = _, U = b, M = E, j = w, H = O, F = B, z = A, G = x, q = P, $ = 0; $ < 80; $++) { +var K = u[$]; +if ($ < 16) var W = K.high = 0 | t[e + 2 * $], + V = K.low = 0 | t[e + 2 * $ + 1]; +else { + var Y = u[$ - 15], + X = Y.high, + Z = Y.low, + J = (X >>> 1 | Z << 31) ^ (X >>> 8 | Z << 24) ^ X >>> 7, + Q = (Z >>> 1 | X << 31) ^ (Z >>> 8 | X << 24) ^ (Z >>> 7 | X << 25), + tt = u[$ - 2], + et = tt.high, + rt = tt.low, + nt = (et >>> 19 | rt << 13) ^ (et << 3 | rt >>> 29) ^ et >>> 6, + it = (rt >>> 19 | et << 13) ^ (rt << 3 | et >>> 29) ^ (rt >>> 6 | et << 26), + ot = u[$ - 7], + st = ot.high, + at = ot.low, + ft = u[$ - 16], + ut = ft.high, + ct = ft.low; + W = (W = (W = J + st + ((V = Q + at) >>> 0 < Q >>> 0 ? 1 : 0)) + nt + ((V += it) >>> 0 < it >>> 0 ? 1 : 0)) + ut + ((V += ct) >>> 0 < ct >>> 0 ? 1 : 0), K.high = W, K.low = V +} +var ht, pt = U & j ^ ~U & F, + lt = M & H ^ ~M & z, + yt = T & k ^ T & R ^ k & R, + gt = I & D ^ I & N ^ D & N, + dt = (T >>> 28 | I << 4) ^ (T << 30 | I >>> 2) ^ (T << 25 | I >>> 7), + vt = (I >>> 28 | T << 4) ^ (I << 30 | T >>> 2) ^ (I << 25 | T >>> 7), + mt = (U >>> 14 | M << 18) ^ (U >>> 18 | M << 14) ^ (U << 23 | M >>> 9), + St = (M >>> 14 | U << 18) ^ (M >>> 18 | U << 14) ^ (M << 23 | U >>> 9), + _t = f[$], + bt = _t.high, + Et = _t.low, + wt = G + mt + ((ht = q + St) >>> 0 < q >>> 0 ? 1 : 0), + Ot = vt + gt; +G = F, q = z, F = j, z = H, j = U, H = M, U = L + (wt = (wt = (wt = wt + pt + ((ht += lt) >>> 0 < lt >>> 0 ? 1 : 0)) + bt + ((ht += Et) >>> 0 < Et >>> 0 ? 1 : 0)) + W + ((ht += V) >>> 0 < V >>> 0 ? 1 : 0)) + ((M = C + ht | 0) >>> 0 < C >>> 0 ? 1 : 0) | 0, L = R, C = N, R = k, N = D, k = T, D = I, T = wt + (dt + yt + (Ot >>> 0 < vt >>> 0 ? 1 : 0)) + ((I = ht + Ot | 0) >>> 0 < ht >>> 0 ? 1 : 0) | 0 +} +y = n.low = y + I, n.high = l + T + (y >>> 0 < I >>> 0 ? 1 : 0), d = i.low = d + D, i.high = g + k + (d >>> 0 < D >>> 0 ? 1 : 0), m = o.low = m + N, o.high = v + R + (m >>> 0 < N >>> 0 ? 1 : 0), _ = s.low = _ + C, s.high = S + L + (_ >>> 0 < C >>> 0 ? 1 : 0), E = a.low = E + M, a.high = b + U + (E >>> 0 < M >>> 0 ? 1 : 0), O = c.low = O + H, c.high = w + j + (O >>> 0 < H >>> 0 ? 1 : 0), A = h.low = A + z, h.high = B + F + (A >>> 0 < z >>> 0 ? 1 : 0), P = p.low = P + q, p.high = x + G + (P >>> 0 < q >>> 0 ? 1 : 0) +}, +_doFinalize: function() { +var t = this._data, +e = t.words, +r = 8 * this._nDataBytes, +n = 8 * t.sigBytes; +return e[n >>> 5] |= 128 << 24 - n % 32, e[30 + (n + 128 >>> 10 << 5)] = Math.floor(r / 4294967296), e[31 + (n + 128 >>> 10 << 5)] = r, t.sigBytes = 4 * e.length, this._process(), this._hash.toX32() +}, +clone: function() { +var t = e.clone.call(this); +return t._hash = this._hash.clone(), t +}, +blockSize: 32 +}); +t.SHA512 = e._createHelper(c), t.HmacSHA512 = e._createHmacHelper(c) +}(), n.SHA512) +}, +7628: function(t, e, r) { +var n; +t.exports = (n = r(9021), r(754), r(4636), r(9506), r(7165), function() { +var t = n, +e = t.lib, +r = e.WordArray, +i = e.BlockCipher, +o = t.algo, +s = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4], +a = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32], +f = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28], +u = [{ +0: 8421888, +268435456: 32768, +536870912: 8421378, +805306368: 2, +1073741824: 512, +1342177280: 8421890, +1610612736: 8389122, +1879048192: 8388608, +2147483648: 514, +2415919104: 8389120, +2684354560: 33280, +2952790016: 8421376, +3221225472: 32770, +3489660928: 8388610, +3758096384: 0, +4026531840: 33282, +134217728: 0, +402653184: 8421890, +671088640: 33282, +939524096: 32768, +1207959552: 8421888, +1476395008: 512, +1744830464: 8421378, +2013265920: 2, +2281701376: 8389120, +2550136832: 33280, +2818572288: 8421376, +3087007744: 8389122, +3355443200: 8388610, +3623878656: 32770, +3892314112: 514, +4160749568: 8388608, +1: 32768, +268435457: 2, +536870913: 8421888, +805306369: 8388608, +1073741825: 8421378, +1342177281: 33280, +1610612737: 512, +1879048193: 8389122, +2147483649: 8421890, +2415919105: 8421376, +2684354561: 8388610, +2952790017: 33282, +3221225473: 514, +3489660929: 8389120, +3758096385: 32770, +4026531841: 0, +134217729: 8421890, +402653185: 8421376, +671088641: 8388608, +939524097: 512, +1207959553: 32768, +1476395009: 8388610, +1744830465: 2, +2013265921: 33282, +2281701377: 32770, +2550136833: 8389122, +2818572289: 514, +3087007745: 8421888, +3355443201: 8389120, +3623878657: 0, +3892314113: 33280, +4160749569: 8421378 +}, { +0: 1074282512, +16777216: 16384, +33554432: 524288, +50331648: 1074266128, +67108864: 1073741840, +83886080: 1074282496, +100663296: 1073758208, +117440512: 16, +134217728: 540672, +150994944: 1073758224, +167772160: 1073741824, +184549376: 540688, +201326592: 524304, +218103808: 0, +234881024: 16400, +251658240: 1074266112, +8388608: 1073758208, +25165824: 540688, +41943040: 16, +58720256: 1073758224, +75497472: 1074282512, +92274688: 1073741824, +109051904: 524288, +125829120: 1074266128, +142606336: 524304, +159383552: 0, +176160768: 16384, +192937984: 1074266112, +209715200: 1073741840, +226492416: 540672, +243269632: 1074282496, +260046848: 16400, +268435456: 0, +285212672: 1074266128, +301989888: 1073758224, +318767104: 1074282496, +335544320: 1074266112, +352321536: 16, +369098752: 540688, +385875968: 16384, +402653184: 16400, +419430400: 524288, +436207616: 524304, +452984832: 1073741840, +469762048: 540672, +486539264: 1073758208, +503316480: 1073741824, +520093696: 1074282512, +276824064: 540688, +293601280: 524288, +310378496: 1074266112, +327155712: 16384, +343932928: 1073758208, +360710144: 1074282512, +377487360: 16, +394264576: 1073741824, +411041792: 1074282496, +427819008: 1073741840, +444596224: 1073758224, +461373440: 524304, +478150656: 0, +494927872: 16400, +511705088: 1074266128, +528482304: 540672 +}, { +0: 260, +1048576: 0, +2097152: 67109120, +3145728: 65796, +4194304: 65540, +5242880: 67108868, +6291456: 67174660, +7340032: 67174400, +8388608: 67108864, +9437184: 67174656, +10485760: 65792, +11534336: 67174404, +12582912: 67109124, +13631488: 65536, +14680064: 4, +15728640: 256, +524288: 67174656, +1572864: 67174404, +2621440: 0, +3670016: 67109120, +4718592: 67108868, +5767168: 65536, +6815744: 65540, +7864320: 260, +8912896: 4, +9961472: 256, +11010048: 67174400, +12058624: 65796, +13107200: 65792, +14155776: 67109124, +15204352: 67174660, +16252928: 67108864, +16777216: 67174656, +17825792: 65540, +18874368: 65536, +19922944: 67109120, +20971520: 256, +22020096: 67174660, +23068672: 67108868, +24117248: 0, +25165824: 67109124, +26214400: 67108864, +27262976: 4, +28311552: 65792, +29360128: 67174400, +30408704: 260, +31457280: 65796, +32505856: 67174404, +17301504: 67108864, +18350080: 260, +19398656: 67174656, +20447232: 0, +21495808: 65540, +22544384: 67109120, +23592960: 256, +24641536: 67174404, +25690112: 65536, +26738688: 67174660, +27787264: 65796, +28835840: 67108868, +29884416: 67109124, +30932992: 67174400, +31981568: 4, +33030144: 65792 +}, { +0: 2151682048, +65536: 2147487808, +131072: 4198464, +196608: 2151677952, +262144: 0, +327680: 4198400, +393216: 2147483712, +458752: 4194368, +524288: 2147483648, +589824: 4194304, +655360: 64, +720896: 2147487744, +786432: 2151678016, +851968: 4160, +917504: 4096, +983040: 2151682112, +32768: 2147487808, +98304: 64, +163840: 2151678016, +229376: 2147487744, +294912: 4198400, +360448: 2151682112, +425984: 0, +491520: 2151677952, +557056: 4096, +622592: 2151682048, +688128: 4194304, +753664: 4160, +819200: 2147483648, +884736: 4194368, +950272: 4198464, +1015808: 2147483712, +1048576: 4194368, +1114112: 4198400, +1179648: 2147483712, +1245184: 0, +1310720: 4160, +1376256: 2151678016, +1441792: 2151682048, +1507328: 2147487808, +1572864: 2151682112, +1638400: 2147483648, +1703936: 2151677952, +1769472: 4198464, +1835008: 2147487744, +1900544: 4194304, +1966080: 64, +2031616: 4096, +1081344: 2151677952, +1146880: 2151682112, +1212416: 0, +1277952: 4198400, +1343488: 4194368, +1409024: 2147483648, +1474560: 2147487808, +1540096: 64, +1605632: 2147483712, +1671168: 4096, +1736704: 2147487744, +1802240: 2151678016, +1867776: 4160, +1933312: 2151682048, +1998848: 4194304, +2064384: 4198464 +}, { +0: 128, +4096: 17039360, +8192: 262144, +12288: 536870912, +16384: 537133184, +20480: 16777344, +24576: 553648256, +28672: 262272, +32768: 16777216, +36864: 537133056, +40960: 536871040, +45056: 553910400, +49152: 553910272, +53248: 0, +57344: 17039488, +61440: 553648128, +2048: 17039488, +6144: 553648256, +10240: 128, +14336: 17039360, +18432: 262144, +22528: 537133184, +26624: 553910272, +30720: 536870912, +34816: 537133056, +38912: 0, +43008: 553910400, +47104: 16777344, +51200: 536871040, +55296: 553648128, +59392: 16777216, +63488: 262272, +65536: 262144, +69632: 128, +73728: 536870912, +77824: 553648256, +81920: 16777344, +86016: 553910272, +90112: 537133184, +94208: 16777216, +98304: 553910400, +102400: 553648128, +106496: 17039360, +110592: 537133056, +114688: 262272, +118784: 536871040, +122880: 0, +126976: 17039488, +67584: 553648256, +71680: 16777216, +75776: 17039360, +79872: 537133184, +83968: 536870912, +88064: 17039488, +92160: 128, +96256: 553910272, +100352: 262272, +104448: 553910400, +108544: 0, +112640: 553648128, +116736: 16777344, +120832: 262144, +124928: 537133056, +129024: 536871040 +}, { +0: 268435464, +256: 8192, +512: 270532608, +768: 270540808, +1024: 268443648, +1280: 2097152, +1536: 2097160, +1792: 268435456, +2048: 0, +2304: 268443656, +2560: 2105344, +2816: 8, +3072: 270532616, +3328: 2105352, +3584: 8200, +3840: 270540800, +128: 270532608, +384: 270540808, +640: 8, +896: 2097152, +1152: 2105352, +1408: 268435464, +1664: 268443648, +1920: 8200, +2176: 2097160, +2432: 8192, +2688: 268443656, +2944: 270532616, +3200: 0, +3456: 270540800, +3712: 2105344, +3968: 268435456, +4096: 268443648, +4352: 270532616, +4608: 270540808, +4864: 8200, +5120: 2097152, +5376: 268435456, +5632: 268435464, +5888: 2105344, +6144: 2105352, +6400: 0, +6656: 8, +6912: 270532608, +7168: 8192, +7424: 268443656, +7680: 270540800, +7936: 2097160, +4224: 8, +4480: 2105344, +4736: 2097152, +4992: 268435464, +5248: 268443648, +5504: 8200, +5760: 270540808, +6016: 270532608, +6272: 270540800, +6528: 270532616, +6784: 8192, +7040: 2105352, +7296: 2097160, +7552: 0, +7808: 268435456, +8064: 268443656 +}, { +0: 1048576, +16: 33555457, +32: 1024, +48: 1049601, +64: 34604033, +80: 0, +96: 1, +112: 34603009, +128: 33555456, +144: 1048577, +160: 33554433, +176: 34604032, +192: 34603008, +208: 1025, +224: 1049600, +240: 33554432, +8: 34603009, +24: 0, +40: 33555457, +56: 34604032, +72: 1048576, +88: 33554433, +104: 33554432, +120: 1025, +136: 1049601, +152: 33555456, +168: 34603008, +184: 1048577, +200: 1024, +216: 34604033, +232: 1, +248: 1049600, +256: 33554432, +272: 1048576, +288: 33555457, +304: 34603009, +320: 1048577, +336: 33555456, +352: 34604032, +368: 1049601, +384: 1025, +400: 34604033, +416: 1049600, +432: 1, +448: 0, +464: 34603008, +480: 33554433, +496: 1024, +264: 1049600, +280: 33555457, +296: 34603009, +312: 1, +328: 33554432, +344: 1048576, +360: 1025, +376: 34604032, +392: 33554433, +408: 34603008, +424: 0, +440: 34604033, +456: 1049601, +472: 1024, +488: 33555456, +504: 1048577 +}, { +0: 134219808, +1: 131072, +2: 134217728, +3: 32, +4: 131104, +5: 134350880, +6: 134350848, +7: 2048, +8: 134348800, +9: 134219776, +10: 133120, +11: 134348832, +12: 2080, +13: 0, +14: 134217760, +15: 133152, +2147483648: 2048, +2147483649: 134350880, +2147483650: 134219808, +2147483651: 134217728, +2147483652: 134348800, +2147483653: 133120, +2147483654: 133152, +2147483655: 32, +2147483656: 134217760, +2147483657: 2080, +2147483658: 131104, +2147483659: 134350848, +2147483660: 0, +2147483661: 134348832, +2147483662: 134219776, +2147483663: 131072, +16: 133152, +17: 134350848, +18: 32, +19: 2048, +20: 134219776, +21: 134217760, +22: 134348832, +23: 131072, +24: 0, +25: 131104, +26: 134348800, +27: 134219808, +28: 134350880, +29: 133120, +30: 2080, +31: 134217728, +2147483664: 131072, +2147483665: 2048, +2147483666: 134348832, +2147483667: 133152, +2147483668: 32, +2147483669: 134348800, +2147483670: 134217728, +2147483671: 134219808, +2147483672: 134350880, +2147483673: 134217760, +2147483674: 134219776, +2147483675: 0, +2147483676: 133120, +2147483677: 2080, +2147483678: 131104, +2147483679: 134350848 +}], +c = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679], +h = o.DES = i.extend({ +_doReset: function() { +for (var t = this._key.words, e = [], r = 0; r < 56; r++) { + var n = s[r] - 1; + e[r] = t[n >>> 5] >>> 31 - n % 32 & 1 +} +for (var i = this._subKeys = [], o = 0; o < 16; o++) { + var u = i[o] = [], + c = f[o]; + for (r = 0; r < 24; r++) u[r / 6 | 0] |= e[(a[r] - 1 + c) % 28] << 31 - r % 6, u[4 + (r / 6 | 0)] |= e[28 + (a[r + 24] - 1 + c) % 28] << 31 - r % 6; + for (u[0] = u[0] << 1 | u[0] >>> 31, r = 1; r < 7; r++) u[r] = u[r] >>> 4 * (r - 1) + 3; + u[7] = u[7] << 5 | u[7] >>> 27 +} +var h = this._invSubKeys = []; +for (r = 0; r < 16; r++) h[r] = i[15 - r] +}, +encryptBlock: function(t, e) { +this._doCryptBlock(t, e, this._subKeys) +}, +decryptBlock: function(t, e) { +this._doCryptBlock(t, e, this._invSubKeys) +}, +_doCryptBlock: function(t, e, r) { +this._lBlock = t[e], this._rBlock = t[e + 1], p.call(this, 4, 252645135), p.call(this, 16, 65535), l.call(this, 2, 858993459), l.call(this, 8, 16711935), p.call(this, 1, 1431655765); +for (var n = 0; n < 16; n++) { + for (var i = r[n], o = this._lBlock, s = this._rBlock, a = 0, f = 0; f < 8; f++) a |= u[f][((s ^ i[f]) & c[f]) >>> 0]; + this._lBlock = s, this._rBlock = o ^ a +} +var h = this._lBlock; +this._lBlock = this._rBlock, this._rBlock = h, p.call(this, 1, 1431655765), l.call(this, 8, 16711935), l.call(this, 2, 858993459), p.call(this, 16, 65535), p.call(this, 4, 252645135), t[e] = this._lBlock, t[e + 1] = this._rBlock +}, +keySize: 2, +ivSize: 2, +blockSize: 2 +}); + +function p(t, e) { +var r = (this._lBlock >>> t ^ this._rBlock) & e; +this._rBlock ^= r, this._lBlock ^= r << t +} +function l(t, e) { +var r = (this._rBlock >>> t ^ this._lBlock) & e; +this._lBlock ^= r, this._rBlock ^= r << t +} +t.DES = i._createHelper(h); +var y = o.TripleDES = i.extend({ +_doReset: function() { +var t = this._key.words; +this._des1 = h.createEncryptor(r.create(t.slice(0, 2))), this._des2 = h.createEncryptor(r.create(t.slice(2, 4))), this._des3 = h.createEncryptor(r.create(t.slice(4, 6))) +}, +encryptBlock: function(t, e) { +this._des1.encryptBlock(t, e), this._des2.decryptBlock(t, e), this._des3.encryptBlock(t, e) +}, +decryptBlock: function(t, e) { +this._des3.decryptBlock(t, e), this._des2.encryptBlock(t, e), this._des1.decryptBlock(t, e) +}, +keySize: 6, +ivSize: 2, +blockSize: 2 +}); +t.TripleDES = i._createHelper(y) +}(), n.TripleDES) +}, +3240: function(t, e, r) { +var n, i, o, s, a, f; +t.exports = (n = r(9021), o = (i = n) +.lib, s = o.Base, a = o.WordArray, (f = i.x64 = {}) +.Word = s.extend({ +init: function(t, e) { +this.high = t, this.low = e +} +}), f.WordArray = s.extend({ +init: function(t, e) { +t = this.words = t || [], this.sigBytes = null != e ? e : 8 * t.length +}, +toX32: function() { +for (var t = this.words, e = t.length, r = [], n = 0; n < e; n++) { +var i = t[n]; +r.push(i.high), r.push(i.low) +} +return a.create(r, this.sigBytes) +}, +clone: function() { +for (var t = s.clone.call(this), e = t.words = this.words.slice(0), r = e.length, n = 0; n < r; n++) e[n] = e[n].clone(); +return t +} +}), n) +}, +41: (t, e, r) => { +"use strict"; +var n = r(655), +i = r(8068), +o = r(9675), +s = r(5795); +t.exports = function(t, e, r) { +if (!t || "object" != typeof t && "function" != typeof t) throw new o("`obj` must be an object or a function`"); +if ("string" != typeof e && "symbol" != typeof e) throw new o("`property` must be a string or a symbol`"); +if (arguments.length > 3 && "boolean" != typeof arguments[3] && null !== arguments[3]) throw new o("`nonEnumerable`, if provided, must be a boolean or null"); +if (arguments.length > 4 && "boolean" != typeof arguments[4] && null !== arguments[4]) throw new o("`nonWritable`, if provided, must be a boolean or null"); +if (arguments.length > 5 && "boolean" != typeof arguments[5] && null !== arguments[5]) throw new o("`nonConfigurable`, if provided, must be a boolean or null"); +if (arguments.length > 6 && "boolean" != typeof arguments[6]) throw new o("`loose`, if provided, must be a boolean"); +var a = arguments.length > 3 ? arguments[3] : null, +f = arguments.length > 4 ? arguments[4] : null, +u = arguments.length > 5 ? arguments[5] : null, +c = arguments.length > 6 && arguments[6], +h = !! s && s(t, e); +if (n) n(t, e, { +configurable: null === u && h ? h.configurable : !u, +enumerable: null === a && h ? h.enumerable : !a, +value: r, +writable: null === f && h ? h.writable : !f +}); +else { +if (!c && (a || f || u)) throw new i("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable."); +t[e] = r +} +} +}, +655: (t, e, r) => { +"use strict"; +var n = r(453)("%Object.defineProperty%", !0) || !1; +if (n) try { +n({}, "a", { +value: 1 +}) +} catch (t) { +n = !1 +} +t.exports = n +}, +1237: t => { +"use strict"; +t.exports = EvalError +}, +9383: t => { +"use strict"; +t.exports = Error +}, +9290: t => { +"use strict"; +t.exports = RangeError +}, +9538: t => { +"use strict"; +t.exports = ReferenceError +}, +8068: t => { +"use strict"; +t.exports = SyntaxError +}, +9675: t => { +"use strict"; +t.exports = TypeError +}, +5345: t => { +"use strict"; +t.exports = URIError +}, +9353: t => { +"use strict"; +var e = Object.prototype.toString, +r = Math.max, +n = function(t, e) { +for (var r = [], n = 0; n < t.length; n += 1) r[n] = t[n]; +for (var i = 0; i < e.length; i += 1) r[i + t.length] = e[i]; +return r +}; +t.exports = function(t) { +var i = this; +if ("function" != typeof i || "[object Function]" !== e.apply(i)) throw new TypeError("Function.prototype.bind called on incompatible " + i); +for (var o, s = function(t, e) { +for (var r = [], n = 1, i = 0; n < t.length; n += 1, i += 1) r[i] = t[n]; +return r +}(arguments), a = r(0, i.length - s.length), f = [], u = 0; u < a; u++) f[u] = "$" + u; +if (o = Function("binder", "return function (" + function(t, e) { +for (var r = "", n = 0; n < t.length; n += 1) r += t[n], n + 1 < t.length && (r += ","); +return r +}(f) + "){ return binder.apply(this,arguments); }")((function() { +if (this instanceof o) { +var e = i.apply(this, n(s, arguments)); +return Object(e) === e ? e : this +} +return i.apply(t, n(s, arguments)) +})), i.prototype) { +var c = function() {}; +c.prototype = i.prototype, o.prototype = new c, c.prototype = null +} +return o +} +}, +6743: (t, e, r) => { +"use strict"; +var n = r(9353); +t.exports = Function.prototype.bind || n +}, +453: (t, e, r) => { +"use strict"; +var n, i = r(9383), +o = r(1237), +s = r(9290), +a = r(9538), +f = r(8068), +u = r(9675), +c = r(5345), +h = Function, +p = function(t) { +try { +return h('"use strict"; return (' + t + ").constructor;")() +} catch (t) {} +}, l = Object.getOwnPropertyDescriptor; +if (l) try { +l({}, "") +} catch (t) { +l = null +} +var y = function() { +throw new u +}, g = l ? function() { +try { +return y +} catch (t) { +try { +return l(arguments, "callee") + .get +} catch (t) { +return y +} +} +}() : y, +d = r(4039)(), +v = r(24)(), +m = Object.getPrototypeOf || (v ? function(t) { +return t.__proto__ +} : null), +S = {}, _ = "undefined" != typeof Uint8Array && m ? m(Uint8Array) : n, +b = { +__proto__: null, +"%AggregateError%": "undefined" == typeof AggregateError ? n : AggregateError, +"%Array%": Array, +"%ArrayBuffer%": "undefined" == typeof ArrayBuffer ? n : ArrayBuffer, +"%ArrayIteratorPrototype%": d && m ? m([][Symbol.iterator]()) : n, +"%AsyncFromSyncIteratorPrototype%": n, +"%AsyncFunction%": S, +"%AsyncGenerator%": S, +"%AsyncGeneratorFunction%": S, +"%AsyncIteratorPrototype%": S, +"%Atomics%": "undefined" == typeof Atomics ? n : Atomics, +"%BigInt%": "undefined" == typeof BigInt ? n : BigInt, +"%BigInt64Array%": "undefined" == typeof BigInt64Array ? n : BigInt64Array, +"%BigUint64Array%": "undefined" == typeof BigUint64Array ? n : BigUint64Array, +"%Boolean%": Boolean, +"%DataView%": "undefined" == typeof DataView ? n : DataView, +"%Date%": Date, +"%decodeURI%": decodeURI, +"%decodeURIComponent%": decodeURIComponent, +"%encodeURI%": encodeURI, +"%encodeURIComponent%": encodeURIComponent, +"%Error%": i, +"%eval%": eval, +"%EvalError%": o, +"%Float32Array%": "undefined" == typeof Float32Array ? n : Float32Array, +"%Float64Array%": "undefined" == typeof Float64Array ? n : Float64Array, +"%FinalizationRegistry%": "undefined" == typeof FinalizationRegistry ? n : FinalizationRegistry, +"%Function%": h, +"%GeneratorFunction%": S, +"%Int8Array%": "undefined" == typeof Int8Array ? n : Int8Array, +"%Int16Array%": "undefined" == typeof Int16Array ? n : Int16Array, +"%Int32Array%": "undefined" == typeof Int32Array ? n : Int32Array, +"%isFinite%": isFinite, +"%isNaN%": isNaN, +"%IteratorPrototype%": d && m ? m(m([][Symbol.iterator]())) : n, +"%JSON%": "object" == typeof JSON ? JSON : n, +"%Map%": "undefined" == typeof Map ? n : Map, +"%MapIteratorPrototype%": "undefined" != typeof Map && d && m ? m((new Map)[Symbol.iterator]()) : n, +"%Math%": Math, +"%Number%": Number, +"%Object%": Object, +"%parseFloat%": parseFloat, +"%parseInt%": parseInt, +"%Promise%": "undefined" == typeof Promise ? n : Promise, +"%Proxy%": "undefined" == typeof Proxy ? n : Proxy, +"%RangeError%": s, +"%ReferenceError%": a, +"%Reflect%": "undefined" == typeof Reflect ? n : Reflect, +"%RegExp%": RegExp, +"%Set%": "undefined" == typeof Set ? n : Set, +"%SetIteratorPrototype%": "undefined" != typeof Set && d && m ? m((new Set)[Symbol.iterator]()) : n, +"%SharedArrayBuffer%": "undefined" == typeof SharedArrayBuffer ? n : SharedArrayBuffer, +"%String%": String, +"%StringIteratorPrototype%": d && m ? m("" [Symbol.iterator]()) : n, +"%Symbol%": d ? Symbol : n, +"%SyntaxError%": f, +"%ThrowTypeError%": g, +"%TypedArray%": _, +"%TypeError%": u, +"%Uint8Array%": "undefined" == typeof Uint8Array ? n : Uint8Array, +"%Uint8ClampedArray%": "undefined" == typeof Uint8ClampedArray ? n : Uint8ClampedArray, +"%Uint16Array%": "undefined" == typeof Uint16Array ? n : Uint16Array, +"%Uint32Array%": "undefined" == typeof Uint32Array ? n : Uint32Array, +"%URIError%": c, +"%WeakMap%": "undefined" == typeof WeakMap ? n : WeakMap, +"%WeakRef%": "undefined" == typeof WeakRef ? n : WeakRef, +"%WeakSet%": "undefined" == typeof WeakSet ? n : WeakSet +}; +if (m) try { +null.error +} catch (t) { +var E = m(m(t)); +b["%Error.prototype%"] = E +} +var w = function t(e) { +var r; +if ("%AsyncFunction%" === e) r = p("async function () {}"); +else if ("%GeneratorFunction%" === e) r = p("function* () {}"); +else if ("%AsyncGeneratorFunction%" === e) r = p("async function* () {}"); +else if ("%AsyncGenerator%" === e) { +var n = t("%AsyncGeneratorFunction%"); +n && (r = n.prototype) +} else if ("%AsyncIteratorPrototype%" === e) { +var i = t("%AsyncGenerator%"); +i && m && (r = m(i.prototype)) +} +return b[e] = r, r +}, O = { +__proto__: null, +"%ArrayBufferPrototype%": ["ArrayBuffer", "prototype"], +"%ArrayPrototype%": ["Array", "prototype"], +"%ArrayProto_entries%": ["Array", "prototype", "entries"], +"%ArrayProto_forEach%": ["Array", "prototype", "forEach"], +"%ArrayProto_keys%": ["Array", "prototype", "keys"], +"%ArrayProto_values%": ["Array", "prototype", "values"], +"%AsyncFunctionPrototype%": ["AsyncFunction", "prototype"], +"%AsyncGenerator%": ["AsyncGeneratorFunction", "prototype"], +"%AsyncGeneratorPrototype%": ["AsyncGeneratorFunction", "prototype", "prototype"], +"%BooleanPrototype%": ["Boolean", "prototype"], +"%DataViewPrototype%": ["DataView", "prototype"], +"%DatePrototype%": ["Date", "prototype"], +"%ErrorPrototype%": ["Error", "prototype"], +"%EvalErrorPrototype%": ["EvalError", "prototype"], +"%Float32ArrayPrototype%": ["Float32Array", "prototype"], +"%Float64ArrayPrototype%": ["Float64Array", "prototype"], +"%FunctionPrototype%": ["Function", "prototype"], +"%Generator%": ["GeneratorFunction", "prototype"], +"%GeneratorPrototype%": ["GeneratorFunction", "prototype", "prototype"], +"%Int8ArrayPrototype%": ["Int8Array", "prototype"], +"%Int16ArrayPrototype%": ["Int16Array", "prototype"], +"%Int32ArrayPrototype%": ["Int32Array", "prototype"], +"%JSONParse%": ["JSON", "parse"], +"%JSONStringify%": ["JSON", "stringify"], +"%MapPrototype%": ["Map", "prototype"], +"%NumberPrototype%": ["Number", "prototype"], +"%ObjectPrototype%": ["Object", "prototype"], +"%ObjProto_toString%": ["Object", "prototype", "toString"], +"%ObjProto_valueOf%": ["Object", "prototype", "valueOf"], +"%PromisePrototype%": ["Promise", "prototype"], +"%PromiseProto_then%": ["Promise", "prototype", "then"], +"%Promise_all%": ["Promise", "all"], +"%Promise_reject%": ["Promise", "reject"], +"%Promise_resolve%": ["Promise", "resolve"], +"%RangeErrorPrototype%": ["RangeError", "prototype"], +"%ReferenceErrorPrototype%": ["ReferenceError", "prototype"], +"%RegExpPrototype%": ["RegExp", "prototype"], +"%SetPrototype%": ["Set", "prototype"], +"%SharedArrayBufferPrototype%": ["SharedArrayBuffer", "prototype"], +"%StringPrototype%": ["String", "prototype"], +"%SymbolPrototype%": ["Symbol", "prototype"], +"%SyntaxErrorPrototype%": ["SyntaxError", "prototype"], +"%TypedArrayPrototype%": ["TypedArray", "prototype"], +"%TypeErrorPrototype%": ["TypeError", "prototype"], +"%Uint8ArrayPrototype%": ["Uint8Array", "prototype"], +"%Uint8ClampedArrayPrototype%": ["Uint8ClampedArray", "prototype"], +"%Uint16ArrayPrototype%": ["Uint16Array", "prototype"], +"%Uint32ArrayPrototype%": ["Uint32Array", "prototype"], +"%URIErrorPrototype%": ["URIError", "prototype"], +"%WeakMapPrototype%": ["WeakMap", "prototype"], +"%WeakSetPrototype%": ["WeakSet", "prototype"] +}, B = r(6743), +A = r(9957), +x = B.call(Function.call, Array.prototype.concat), +P = B.call(Function.apply, Array.prototype.splice), +T = B.call(Function.call, String.prototype.replace), +I = B.call(Function.call, String.prototype.slice), +k = B.call(Function.call, RegExp.prototype.exec), +D = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g, +R = /\\(\\)?/g, +N = function(t, e) { +var r, n = t; +if (A(O, n) && (n = "%" + (r = O[n])[0] + "%"), A(b, n)) { +var i = b[n]; +if (i === S && (i = w(n)), void 0 === i && !e) throw new u("intrinsic " + t + " exists, but is not available. Please file an issue!"); +return { +alias: r, +name: n, +value: i +} +} +throw new f("intrinsic " + t + " does not exist!") +}; +t.exports = function(t, e) { +if ("string" != typeof t || 0 === t.length) throw new u("intrinsic name must be a non-empty string"); +if (arguments.length > 1 && "boolean" != typeof e) throw new u('"allowMissing" argument must be a boolean'); +if (null === k(/^%?[^%]*%?$/, t)) throw new f("`%` may not be present anywhere but at the beginning and end of the intrinsic name"); +var r = function(t) { +var e = I(t, 0, 1), +r = I(t, -1); +if ("%" === e && "%" !== r) throw new f("invalid intrinsic syntax, expected closing `%`"); +if ("%" === r && "%" !== e) throw new f("invalid intrinsic syntax, expected opening `%`"); +var n = []; +return T(t, D, (function(t, e, r, i) { +n[n.length] = r ? T(i, R, "$1") : e || t +})), n +}(t), +n = r.length > 0 ? r[0] : "", +i = N("%" + n + "%", e), +o = i.name, +s = i.value, +a = !1, +c = i.alias; +c && (n = c[0], P(r, x([0, 1], c))); +for (var h = 1, p = !0; h < r.length; h += 1) { +var y = r[h], +g = I(y, 0, 1), +d = I(y, -1); +if (('"' === g || "'" === g || "`" === g || '"' === d || "'" === d || "`" === d) && g !== d) throw new f("property names with quotes must have matching quotes"); +if ("constructor" !== y && p || (a = !0), A(b, o = "%" + (n += "." + y) + "%")) s = b[o]; +else if (null != s) { +if (!(y in s)) { +if (!e) throw new u("base intrinsic for " + t + " exists, but the property is not available."); +return +} +if (l && h + 1 >= r.length) { +var v = l(s, y); +s = (p = !! v) && "get" in v && !("originalValue" in v.get) ? v.get : s[y] +} else p = A(s, y), s = s[y]; +p && !a && (b[o] = s) +} +} +return s +} +}, +5795: (t, e, r) => { +"use strict"; +var n = r(453)("%Object.getOwnPropertyDescriptor%", !0); +if (n) try { +n([], "length") +} catch (t) { +n = null +} +t.exports = n +}, +592: (t, e, r) => { +"use strict"; +var n = r(655), +i = function() { +return !!n +}; +i.hasArrayLengthDefineBug = function() { +if (!n) return null; +try { +return 1 !== n([], "length", { +value: 1 +}) +.length +} catch (t) { +return !0 +} +}, t.exports = i +}, +24: t => { +"use strict"; +var e = { +__proto__: null, +foo: {} +}, r = Object; +t.exports = function() { +return { +__proto__: e +}.foo === e.foo && !(e instanceof r) +} +}, +4039: (t, e, r) => { +"use strict"; +var n = "undefined" != typeof Symbol && Symbol, +i = r(1333); +t.exports = function() { +return "function" == typeof n && "function" == typeof Symbol && "symbol" == typeof n("foo") && "symbol" == typeof Symbol("bar") && i() +} +}, +1333: t => { +"use strict"; +t.exports = function() { +if ("function" != typeof Symbol || "function" != typeof Object.getOwnPropertySymbols) return !1; +if ("symbol" == typeof Symbol.iterator) return !0; +var t = {}, e = Symbol("test"), +r = Object(e); +if ("string" == typeof e) return !1; +if ("[object Symbol]" !== Object.prototype.toString.call(e)) return !1; +if ("[object Symbol]" !== Object.prototype.toString.call(r)) return !1; +for (e in t[e] = 42, t) return !1; +if ("function" == typeof Object.keys && 0 !== Object.keys(t) +.length) return !1; +if ("function" == typeof Object.getOwnPropertyNames && 0 !== Object.getOwnPropertyNames(t) +.length) return !1; +var n = Object.getOwnPropertySymbols(t); +if (1 !== n.length || n[0] !== e) return !1; +if (!Object.prototype.propertyIsEnumerable.call(t, e)) return !1; +if ("function" == typeof Object.getOwnPropertyDescriptor) { +var i = Object.getOwnPropertyDescriptor(t, e); +if (42 !== i.value || !0 !== i.enumerable) return !1 +} +return !0 +} +}, +9957: (t, e, r) => { +"use strict"; +var n = Function.prototype.call, +i = Object.prototype.hasOwnProperty, +o = r(6743); +t.exports = o.call(n, i) +}, +251: (t, e) => { +e.read = function(t, e, r, n, i) { +var o, s, a = 8 * i - n - 1, +f = (1 << a) - 1, +u = f >> 1, +c = -7, +h = r ? i - 1 : 0, +p = r ? -1 : 1, +l = t[e + h]; +for (h += p, o = l & (1 << -c) - 1, l >>= -c, c += a; c > 0; o = 256 * o + t[e + h], h += p, c -= 8); +for (s = o & (1 << -c) - 1, o >>= -c, c += n; c > 0; s = 256 * s + t[e + h], h += p, c -= 8); +if (0 === o) o = 1 - u; +else { +if (o === f) return s ? NaN : 1 / 0 * (l ? -1 : 1); +s += Math.pow(2, n), o -= u +} +return (l ? -1 : 1) * s * Math.pow(2, o - n) +}, e.write = function(t, e, r, n, i, o) { +var s, a, f, u = 8 * o - i - 1, +c = (1 << u) - 1, +h = c >> 1, +p = 23 === i ? Math.pow(2, -24) - Math.pow(2, -77) : 0, +l = n ? 0 : o - 1, +y = n ? 1 : -1, +g = e < 0 || 0 === e && 1 / e < 0 ? 1 : 0; +for (e = Math.abs(e), isNaN(e) || e === 1 / 0 ? (a = isNaN(e) ? 1 : 0, s = c) : (s = Math.floor(Math.log(e) / Math.LN2), e * (f = Math.pow(2, -s)) < 1 && (s--, f *= 2), (e += s + h >= 1 ? p / f : p * Math.pow(2, 1 - h)) * f >= 2 && (s++, f /= 2), s + h >= c ? (a = 0, s = c) : s + h >= 1 ? (a = (e * f - 1) * Math.pow(2, i), s += h) : (a = e * Math.pow(2, h - 1) * Math.pow(2, i), s = 0)); i >= 8; t[r + l] = 255 & a, l += y, a /= 256, i -= 8); +for (s = s << i | a, u += i; u > 0; t[r + l] = 255 & s, l += y, s /= 256, u -= 8); +t[r + l - y] |= 128 * g +} +}, +3229: (t, e, r) => { +var n = r(8287) +.Buffer, +i = r(7449), +o = r(5682), +s = (r(3200), r(3100) +.Ber, r(8226) +._), +a = r(8226), +f = r(1768), +u = r(7460); +void 0 === i.RSA_NO_PADDING && (i.RSA_NO_PADDING = 3), t.exports = function() { +var t = { +node10: ["md4", "md5", "ripemd160", "sha1", "sha224", "sha256", "sha384", "sha512"], +node: ["md4", "md5", "ripemd160", "sha1", "sha224", "sha256", "sha384", "sha512"], +iojs: ["md4", "md5", "ripemd160", "sha1", "sha224", "sha256", "sha384", "sha512"], +browser: ["md5", "ripemd160", "sha1", "sha256", "sha512"] +}, e = "pkcs1_oaep", +r = "pkcs1", +i = { +private: "pkcs1-private-pem", +"private-der": "pkcs1-private-der", +public: "pkcs8-public-pem", +"public-der": "pkcs8-public-der" +}; + +function c(t, i, f) { +if (!(this instanceof c)) return new c(t, i, f); +s.isObject(i) && (f = i, i = void 0), this.$options = { +signingScheme: r, +signingSchemeOptions: { +hash: "sha256", +saltLength: null +}, +encryptionScheme: e, +encryptionSchemeOptions: { +hash: "sha1", +label: null +}, +environment: a.detectEnvironment(), +rsaUtils: this +}, this.keyPair = new o.Key, this.$cache = {}, n.isBuffer(t) || s.isString(t) ? this.importKey(t, i) : s.isObject(t) && this.generateKeyPair(t.b, t.e), this.setOptions(f) +} +return c.prototype.setOptions = function(n) { +if ((n = n || {}) +.environment && (this.$options.environment = n.environment), n.signingScheme) { +if (s.isString(n.signingScheme)) { +var i = n.signingScheme.toLowerCase() + .split("-"); +1 == i.length ? t.node.indexOf(i[0]) > -1 ? (this.$options.signingSchemeOptions = { + hash: i[0] +}, this.$options.signingScheme = r) : (this.$options.signingScheme = i[0], this.$options.signingSchemeOptions = { + hash: null +}) : (this.$options.signingSchemeOptions = { + hash: i[1] +}, this.$options.signingScheme = i[0]) +} else s.isObject(n.signingScheme) && (this.$options.signingScheme = n.signingScheme.scheme || r, this.$options.signingSchemeOptions = s.omit(n.signingScheme, "scheme")); +if (!f.isSignature(this.$options.signingScheme)) throw Error("Unsupported signing scheme"); +if (this.$options.signingSchemeOptions.hash && -1 === t[this.$options.environment].indexOf(this.$options.signingSchemeOptions.hash)) throw Error("Unsupported hashing algorithm for " + this.$options.environment + " environment") +} +if (n.encryptionScheme) { +if (s.isString(n.encryptionScheme) ? (this.$options.encryptionScheme = n.encryptionScheme.toLowerCase(), this.$options.encryptionSchemeOptions = {}) : s.isObject(n.encryptionScheme) && (this.$options.encryptionScheme = n.encryptionScheme.scheme || e, this.$options.encryptionSchemeOptions = s.omit(n.encryptionScheme, "scheme")), !f.isEncryption(this.$options.encryptionScheme)) throw Error("Unsupported encryption scheme"); +if (this.$options.encryptionSchemeOptions.hash && -1 === t[this.$options.environment].indexOf(this.$options.encryptionSchemeOptions.hash)) throw Error("Unsupported hashing algorithm for " + this.$options.environment + " environment") +} +this.keyPair.setOptions(this.$options) +}, c.prototype.generateKeyPair = function(t, e) { +if (e = e || 65537, (t = t || 2048) % 8 != 0) throw Error("Key size must be a multiple of 8."); +return this.keyPair.generate(t, e.toString(16)), this.$cache = {}, this +}, c.prototype.importKey = function(t, e) { +if (!t) throw Error("Empty key given"); +if (e && (e = i[e] || e), !u.detectAndImport(this.keyPair, t, e) && void 0 === e) throw Error("Key format must be specified"); +return this.$cache = {}, this +}, c.prototype.exportKey = function(t) { +return t = i[t = t || "private"] || t, this.$cache[t] || (this.$cache[t] = u.detectAndExport(this.keyPair, t)), this.$cache[t] +}, c.prototype.isPrivate = function() { +return this.keyPair.isPrivate() +}, c.prototype.isPublic = function(t) { +return this.keyPair.isPublic(t) +}, c.prototype.isEmpty = function(t) { +return !(this.keyPair.n || this.keyPair.e || this.keyPair.d) +}, c.prototype.encrypt = function(t, e, r) { +return this.$$encryptKey(!1, t, e, r) +}, c.prototype.decrypt = function(t, e) { +return this.$$decryptKey(!1, t, e) +}, c.prototype.encryptPrivate = function(t, e, r) { +return this.$$encryptKey(!0, t, e, r) +}, c.prototype.decryptPublic = function(t, e) { +return this.$$decryptKey(!0, t, e) +}, c.prototype.$$encryptKey = function(t, e, r, n) { +try { +var i = this.keyPair.encrypt(this.$getDataForEncrypt(e, n), t); +return "buffer" != r && r ? i.toString(r) : i +} catch (t) { +throw Error("Error during encryption. Original error: " + t) +} +}, c.prototype.$$decryptKey = function(t, e, r) { +try { +e = s.isString(e) ? n.from(e, "base64") : e; +var i = this.keyPair.decrypt(e, t); +if (null === i) throw Error("Key decrypt method returns null."); +return this.$getDecryptedData(i, r) +} catch (t) { +throw Error("Error during decryption (probably incorrect key). Original error: " + t) +} +}, c.prototype.sign = function(t, e, r) { +if (!this.isPrivate()) throw Error("This is not private key"); +var n = this.keyPair.sign(this.$getDataForEncrypt(t, r)); +return e && "buffer" != e && (n = n.toString(e)), n +}, c.prototype.verify = function(t, e, r, n) { +if (!this.isPublic()) throw Error("This is not public key"); +return n = n && "buffer" != n ? n : null, this.keyPair.verify(this.$getDataForEncrypt(t, r), e, n) +}, c.prototype.getKeySize = function() { +return this.keyPair.keySize +}, c.prototype.getMaxMessageSize = function() { +return this.keyPair.maxMessageLength +}, c.prototype.$getDataForEncrypt = function(t, e) { +if (s.isString(t) || s.isNumber(t)) return n.from("" + t, e || "utf8"); +if (n.isBuffer(t)) return t; +if (s.isObject(t)) return n.from(JSON.stringify(t)); +throw Error("Unexpected data type") +}, c.prototype.$getDecryptedData = function(t, e) { +return "buffer" == (e = e || "buffer") ? t : "json" == e ? JSON.parse(t.toString()) : t.toString(e) +}, c +}() +}, +4538: (t, e, r) => { +var n = r(3200); +t.exports = { +getEngine: function(t, e) { +var i = r(7469); +return "node" === e.environment && "function" == typeof n.publicEncrypt && "function" == typeof n.privateDecrypt && (i = "function" == typeof n.privateEncrypt && "function" == typeof n.publicDecrypt ? r(2418) : r(1957)), i(t, e) +} +} +}, +2418: (t, e, r) => { +var n = r(3200), +i = r(7449), +o = r(1768); +t.exports = function(t, e) { +var r = o.pkcs1.makeScheme(t, e); +return { +encrypt: function(t, o) { +var s; +if (o) return s = i.RSA_PKCS1_PADDING, e.encryptionSchemeOptions && e.encryptionSchemeOptions.padding && (s = e.encryptionSchemeOptions.padding), n.privateEncrypt({ +key: e.rsaUtils.exportKey("private"), +padding: s +}, t); +s = i.RSA_PKCS1_OAEP_PADDING, "pkcs1" === e.encryptionScheme && (s = i.RSA_PKCS1_PADDING), e.encryptionSchemeOptions && e.encryptionSchemeOptions.padding && (s = e.encryptionSchemeOptions.padding); +var a = t; +return s === i.RSA_NO_PADDING && (a = r.pkcs0pad(t)), n.publicEncrypt({ +key: e.rsaUtils.exportKey("public"), +padding: s +}, a) +}, +decrypt: function(t, o) { +var s; +if (o) return s = i.RSA_PKCS1_PADDING, e.encryptionSchemeOptions && e.encryptionSchemeOptions.padding && (s = e.encryptionSchemeOptions.padding), n.publicDecrypt({ +key: e.rsaUtils.exportKey("public"), +padding: s +}, t); +s = i.RSA_PKCS1_OAEP_PADDING, "pkcs1" === e.encryptionScheme && (s = i.RSA_PKCS1_PADDING), e.encryptionSchemeOptions && e.encryptionSchemeOptions.padding && (s = e.encryptionSchemeOptions.padding); +var a = n.privateDecrypt({ +key: e.rsaUtils.exportKey("private"), +padding: s +}, t); +return s === i.RSA_NO_PADDING ? r.pkcs0unpad(a) : a +} +} +} +}, +7469: (t, e, r) => { +var n = r(1973), +i = r(1768); +t.exports = function(t, e) { +var r = i.pkcs1.makeScheme(t, e); +return { +encrypt: function(e, i) { +var o, s; +return i ? (o = new n(r.encPad(e, { +type: 1 +})), s = t.$doPrivate(o)) : (o = new n(t.encryptionScheme.encPad(e)), s = t.$doPublic(o)), s.toBuffer(t.encryptedDataLength) +}, +decrypt: function(e, i) { +var o, s = new n(e); +return i ? (o = t.$doPublic(s), r.encUnPad(o.toBuffer(t.encryptedDataLength), { +type: 1 +})) : (o = t.$doPrivate(s), t.encryptionScheme.encUnPad(o.toBuffer(t.encryptedDataLength))) +} +} +} +}, +1957: (t, e, r) => { +var n = r(3200), +i = r(7449), +o = r(1768); +t.exports = function(t, e) { +var s = r(7469)(t, e), +a = o.pkcs1.makeScheme(t, e); +return { +encrypt: function(t, r) { +if (r) return s.encrypt(t, r); +var o = i.RSA_PKCS1_OAEP_PADDING; +"pkcs1" === e.encryptionScheme && (o = i.RSA_PKCS1_PADDING), e.encryptionSchemeOptions && e.encryptionSchemeOptions.padding && (o = e.encryptionSchemeOptions.padding); +var f = t; +return o === i.RSA_NO_PADDING && (f = a.pkcs0pad(t)), n.publicEncrypt({ +key: e.rsaUtils.exportKey("public"), +padding: o +}, f) +}, +decrypt: function(t, r) { +if (r) return s.decrypt(t, r); +var o = i.RSA_PKCS1_OAEP_PADDING; +"pkcs1" === e.encryptionScheme && (o = i.RSA_PKCS1_PADDING), e.encryptionSchemeOptions && e.encryptionSchemeOptions.padding && (o = e.encryptionSchemeOptions.padding); +var f = n.privateDecrypt({ +key: e.rsaUtils.exportKey("private"), +padding: o +}, t); +return o === i.RSA_NO_PADDING ? a.pkcs0unpad(f) : f +} +} +} +}, +3374: (t, e, r) => { +r(8226) +._, r(8226), t.exports = { +privateExport: function(t, e) { +return { +n: t.n.toBuffer(), +e: t.e, +d: t.d.toBuffer(), +p: t.p.toBuffer(), +q: t.q.toBuffer(), +dmp1: t.dmp1.toBuffer(), +dmq1: t.dmq1.toBuffer(), +coeff: t.coeff.toBuffer() +} +}, +privateImport: function(t, e, r) { +if (!(e.n && e.e && e.d && e.p && e.q && e.dmp1 && e.dmq1 && e.coeff)) throw Error("Invalid key data"); +t.setPrivate(e.n, e.e, e.d, e.p, e.q, e.dmp1, e.dmq1, e.coeff) +}, +publicExport: function(t, e) { +return { +n: t.n.toBuffer(), +e: t.e +} +}, +publicImport: function(t, e, r) { +if (!e.n || !e.e) throw Error("Invalid key data"); +t.setPublic(e.n, e.e) +}, +autoImport: function(e, r) { +return !(!r.n || !r.e || (r.d && r.p && r.q && r.dmp1 && r.dmq1 && r.coeff ? (t.exports.privateImport(e, r), 0) : (t.exports.publicImport(e, r), 0))) +} +} +}, +7460: (t, e, r) => { +function n(t) { +t = t.split("-"); +for (var e = "private", r = { +type: "default" +}, n = 1; n < t.length; n++) if (t[n]) switch (t[n]) { +case "public": +case "private": +e = t[n]; +break; +case "pem": +case "der": +r.type = t[n] +} +return { +scheme: t[0], +keyType: e, +keyOpt: r +} +} +r(8226) +._, t.exports = { +pkcs1: r(6566), +pkcs8: r(8573), +components: r(3374), +openssh: r(3194), +isPrivateExport: function(e) { +return t.exports[e] && "function" == typeof t.exports[e].privateExport +}, +isPrivateImport: function(e) { +return t.exports[e] && "function" == typeof t.exports[e].privateImport +}, +isPublicExport: function(e) { +return t.exports[e] && "function" == typeof t.exports[e].publicExport +}, +isPublicImport: function(e) { +return t.exports[e] && "function" == typeof t.exports[e].publicImport +}, +detectAndImport: function(e, r, i) { +if (void 0 === i) { +for (var o in t.exports) if ("function" == typeof t.exports[o].autoImport && t.exports[o].autoImport(e, r)) return !0 +} else if (i) { +var s = n(i); +if (!t.exports[s.scheme]) throw Error("Unsupported key format"); +"private" === s.keyType ? t.exports[s.scheme].privateImport(e, r, s.keyOpt) : t.exports[s.scheme].publicImport(e, r, s.keyOpt) +} +return !1 +}, +detectAndExport: function(e, r) { +if (r) { +var i = n(r); +if (t.exports[i.scheme]) { +if ("private" === i.keyType) { + if (!e.isPrivate()) throw Error("This is not private key"); + return t.exports[i.scheme].privateExport(e, i.keyOpt) +} +if (!e.isPublic()) throw Error("This is not public key"); +return t.exports[i.scheme].publicExport(e, i.keyOpt) +} +throw Error("Unsupported key format") +} +} +} +}, +3194: (t, e, r) => { +var n = r(8287) +.Buffer, +i = r(8226) +._, +o = r(8226), +s = r(1973); +const a = "-----BEGIN OPENSSH PRIVATE KEY-----", f = "-----END OPENSSH PRIVATE KEY-----"; + +function u(t) { +const e = t.buf.readInt32BE(t.off); +t.off += 4; +const r = t.buf.slice(t.off, t.off + e); +return t.off += e, r +} +function c(t, e) { +t.buf.writeInt32BE(e.byteLength, t.off), t.off += 4, t.off += e.copy(t.buf, t.off) +} +t.exports = { +privateExport: function(t, e) { +const r = t.n.toBuffer(); +let i = n.alloc(4); +for (i.writeUInt32BE(t.e, 0); 0 === i[0];) i = i.slice(1); +const s = t.d.toBuffer(), u = t.coeff.toBuffer(), h = t.p.toBuffer(), p = t.q.toBuffer(); +let l; +l = void 0 !== t.sshcomment ? n.from(t.sshcomment) : n.from([]); +const y = 15 + i.byteLength + 4 + r.byteLength, g = 23 + r.byteLength + 4 + i.byteLength + 4 + s.byteLength + 4 + u.byteLength + 4 + h.byteLength + 4 + p.byteLength + 4 + l.byteLength; +let d = 43 + y + 4 + g; +d += 8 * Math.ceil(g / 8) - g; +const v = n.alloc(d), m = { +buf: v, +off: 0 +}; +v.write("openssh-key-v1", "utf8"), v.writeUInt8(0, 14), m.off += 15, c(m, n.from("none")), c(m, n.from("none")), c(m, n.from("")), m.off = m.buf.writeUInt32BE(1, m.off), m.off = m.buf.writeUInt32BE(y, m.off), c(m, n.from("ssh-rsa")), c(m, i), c(m, r), m.off = m.buf.writeUInt32BE(d - 47 - y, m.off), m.off += 8, c(m, n.from("ssh-rsa")), c(m, r), c(m, i), c(m, s), c(m, u), c(m, h), c(m, p), c(m, l); +let S = 1; +for (; m.off < d;) m.off = m.buf.writeUInt8(S++, m.off); +return "der" === e.type ? m.buf : a + "\n" + o.linebrk(v.toString("base64"), 70) + "\n" + f + "\n" +}, +privateImport: function(t, e, r) { +var c; +if ("der" !== (r = r || {}) +.type) { +if (n.isBuffer(e) && (e = e.toString("utf8")), !i.isString(e)) throw Error("Unsupported key format"); +var h = o.trimSurroundingText(e, a, f) +.replace(/\s+|\n\r|\n|\r$/gm, ""); +c = n.from(h, "base64") +} else { +if (!n.isBuffer(e)) throw Error("Unsupported key format"); +c = e +} +const p = { +buf: c, +off: 0 +}; +if ("openssh-key-v1" !== c.slice(0, 14) +.toString("ascii")) throw "Invalid file format."; +if (p.off += 15, "none" !== u(p) +.toString("ascii")) throw Error("Unsupported key type"); +if ("none" !== u(p) +.toString("ascii")) throw Error("Unsupported key type"); +if ("" !== u(p) +.toString("ascii")) throw Error("Unsupported key type"); +if (p.off += 4, p.off += 4, "ssh-rsa" !== u(p) +.toString("ascii")) throw Error("Unsupported key type"); +if (u(p), u(p), p.off += 12, "ssh-rsa" !== u(p) +.toString("ascii")) throw Error("Unsupported key type"); +const l = u(p), y = u(p), g = u(p), d = u(p), v = u(p), m = u(p), S = new s(g), _ = new s(m), b = new s(v), E = S.mod(b.subtract(s.ONE)), w = S.mod(_.subtract(s.ONE)); +t.setPrivate(l, y, g, v, m, E.toBuffer(), w.toBuffer(), d), t.sshcomment = u(p) +.toString("ascii") +}, +publicExport: function(t, e) { +let r = n.alloc(4); +for (r.writeUInt32BE(t.e, 0); 0 === r[0];) r = r.slice(1); +const i = t.n.toBuffer(), o = n.alloc(r.byteLength + 4 + i.byteLength + 4 + 7 + 4), s = { +buf: o, +off: 0 +}; +c(s, n.from("ssh-rsa")), c(s, r), c(s, i); +let a = t.sshcomment || ""; +return "der" === e.type ? s.buf : "ssh-rsa " + o.toString("base64") + " " + a + "\n" +}, +publicImport: function(t, e, r) { +var o; +if ("der" !== (r = r || {}) +.type) { +if (n.isBuffer(e) && (e = e.toString("utf8")), !i.isString(e)) throw Error("Unsupported key format"); { +if ("ssh-rsa " !== e.substring(0, 8)) throw Error("Unsupported key format"); +let r = e.indexOf(" ", 8); - 1 === r ? r = e.length : t.sshcomment = e.substring(r + 1) + .replace(/\s+|\n\r|\n|\r$/gm, ""); +const i = e.substring(8, r) + .replace(/\s+|\n\r|\n|\r$/gm, ""); +o = n.from(i, "base64") +} +} else { +if (!n.isBuffer(e)) throw Error("Unsupported key format"); +o = e +} +const s = { +buf: o, +off: 0 +}, a = u(s) +.toString("ascii"); +if ("ssh-rsa" !== a) throw Error("Invalid key type: " + a); +const f = u(s), c = u(s); +t.setPublic(c, f) +}, +autoImport: function(e, r) { +return /^[\S\s]*-----BEGIN OPENSSH PRIVATE KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END OPENSSH PRIVATE KEY-----[\S\s]*$/g.test(r) ? (t.exports.privateImport(e, r), !0) : !! /^[\S\s]*ssh-rsa \s*(?=(([A-Za-z0-9+/=]+\s*)+))\1[\S\s]*$/g.test(r) && (t.exports.publicImport(e, r), !0) +} +} +}, +6566: (t, e, r) => { +var n = r(8287) +.Buffer, +i = r(3100) +.Ber, +o = r(8226) +._, +s = r(8226); +const a = "-----BEGIN RSA PRIVATE KEY-----", f = "-----END RSA PRIVATE KEY-----", u = "-----BEGIN RSA PUBLIC KEY-----", c = "-----END RSA PUBLIC KEY-----"; +t.exports = { +privateExport: function(t, e) { +e = e || {}; +var r = t.n.toBuffer(), +n = t.d.toBuffer(), +o = t.p.toBuffer(), +u = t.q.toBuffer(), +c = t.dmp1.toBuffer(), +h = t.dmq1.toBuffer(), +p = t.coeff.toBuffer(), +l = r.length + n.length + o.length + u.length + c.length + h.length + p.length + 512, +y = new i.Writer({ +size: l +}); +return y.startSequence(), y.writeInt(0), y.writeBuffer(r, 2), y.writeInt(t.e), y.writeBuffer(n, 2), y.writeBuffer(o, 2), y.writeBuffer(u, 2), y.writeBuffer(c, 2), y.writeBuffer(h, 2), y.writeBuffer(p, 2), y.endSequence(), "der" === e.type ? y.buffer : a + "\n" + s.linebrk(y.buffer.toString("base64"), 64) + "\n" + f +}, +privateImport: function(t, e, r) { +var u; +if ("der" !== (r = r || {}) +.type) { +if (n.isBuffer(e) && (e = e.toString("utf8")), !o.isString(e)) throw Error("Unsupported key format"); +var c = s.trimSurroundingText(e, a, f) +.replace(/\s+|\n\r|\n|\r$/gm, ""); +u = n.from(c, "base64") +} else { +if (!n.isBuffer(e)) throw Error("Unsupported key format"); +u = e +} +var h = new i.Reader(u); +h.readSequence(), h.readString(2, !0), t.setPrivate(h.readString(2, !0), h.readString(2, !0), h.readString(2, !0), h.readString(2, !0), h.readString(2, !0), h.readString(2, !0), h.readString(2, !0), h.readString(2, !0)) +}, +publicExport: function(t, e) { +e = e || {}; +var r = t.n.toBuffer(), +n = r.length + 512, +o = new i.Writer({ +size: n +}); +return o.startSequence(), o.writeBuffer(r, 2), o.writeInt(t.e), o.endSequence(), "der" === e.type ? o.buffer : u + "\n" + s.linebrk(o.buffer.toString("base64"), 64) + "\n" + c +}, +publicImport: function(t, e, r) { +var a; +if ("der" !== (r = r || {}) +.type) { +if (n.isBuffer(e) && (e = e.toString("utf8")), o.isString(e)) { +var f = s.trimSurroundingText(e, u, c) + .replace(/\s+|\n\r|\n|\r$/gm, ""); +a = n.from(f, "base64") +} +} else { +if (!n.isBuffer(e)) throw Error("Unsupported key format"); +a = e +} +var h = new i.Reader(a); +h.readSequence(), t.setPublic(h.readString(2, !0), h.readString(2, !0)) +}, +autoImport: function(e, r) { +return /^[\S\s]*-----BEGIN RSA PRIVATE KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END RSA PRIVATE KEY-----[\S\s]*$/g.test(r) ? (t.exports.privateImport(e, r), !0) : !! /^[\S\s]*-----BEGIN RSA PUBLIC KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END RSA PUBLIC KEY-----[\S\s]*$/g.test(r) && (t.exports.publicImport(e, r), !0) +} +} +}, +8573: (t, e, r) => { +var n = r(8287) +.Buffer, +i = r(3100) +.Ber, +o = r(8226) +._, +s = "1.2.840.113549.1.1.1", +a = r(8226); +const f = "-----BEGIN PRIVATE KEY-----", u = "-----END PRIVATE KEY-----", c = "-----BEGIN PUBLIC KEY-----", h = "-----END PUBLIC KEY-----"; +t.exports = { +privateExport: function(t, e) { +e = e || {}; +var r = t.n.toBuffer(), +n = t.d.toBuffer(), +o = t.p.toBuffer(), +c = t.q.toBuffer(), +h = t.dmp1.toBuffer(), +p = t.dmq1.toBuffer(), +l = t.coeff.toBuffer(), +y = r.length + n.length + o.length + c.length + h.length + p.length + l.length + 512, +g = new i.Writer({ +size: y +}); +g.startSequence(), g.writeInt(0), g.writeBuffer(r, 2), g.writeInt(t.e), g.writeBuffer(n, 2), g.writeBuffer(o, 2), g.writeBuffer(c, 2), g.writeBuffer(h, 2), g.writeBuffer(p, 2), g.writeBuffer(l, 2), g.endSequence(); +var d = new i.Writer({ +size: y +}); +return d.startSequence(), d.writeInt(0), d.startSequence(), d.writeOID(s), d.writeNull(), d.endSequence(), d.writeBuffer(g.buffer, 4), d.endSequence(), "der" === e.type ? d.buffer : f + "\n" + a.linebrk(d.buffer.toString("base64"), 64) + "\n" + u +}, +privateImport: function(t, e, r) { +var c; +if ("der" !== (r = r || {}) +.type) { +if (n.isBuffer(e) && (e = e.toString("utf8")), !o.isString(e)) throw Error("Unsupported key format"); +var h = a.trimSurroundingText(e, f, u) +.replace("-----END PRIVATE KEY-----", "") +.replace(/\s+|\n\r|\n|\r$/gm, ""); +c = n.from(h, "base64") +} else { +if (!n.isBuffer(e)) throw Error("Unsupported key format"); +c = e +} +var p = new i.Reader(c); +if (p.readSequence(), p.readInt(0), new i.Reader(p.readString(48, !0)) +.readOID(6, !0) !== s) throw Error("Invalid Public key format"); +var l = new i.Reader(p.readString(4, !0)); +l.readSequence(), l.readString(2, !0), t.setPrivate(l.readString(2, !0), l.readString(2, !0), l.readString(2, !0), l.readString(2, !0), l.readString(2, !0), l.readString(2, !0), l.readString(2, !0), l.readString(2, !0)) +}, +publicExport: function(t, e) { +e = e || {}; +var r = t.n.toBuffer(), +n = r.length + 512, +o = new i.Writer({ +size: n +}); +o.writeByte(0), o.startSequence(), o.writeBuffer(r, 2), o.writeInt(t.e), o.endSequence(); +var f = new i.Writer({ +size: n +}); +return f.startSequence(), f.startSequence(), f.writeOID(s), f.writeNull(), f.endSequence(), f.writeBuffer(o.buffer, 3), f.endSequence(), "der" === e.type ? f.buffer : c + "\n" + a.linebrk(f.buffer.toString("base64"), 64) + "\n" + h +}, +publicImport: function(t, e, r) { +var f; +if ("der" !== (r = r || {}) +.type) { +if (n.isBuffer(e) && (e = e.toString("utf8")), o.isString(e)) { +var u = a.trimSurroundingText(e, c, h) + .replace(/\s+|\n\r|\n|\r$/gm, ""); +f = n.from(u, "base64") +} +} else { +if (!n.isBuffer(e)) throw Error("Unsupported key format"); +f = e +} +var p = new i.Reader(f); +if (p.readSequence(), new i.Reader(p.readString(48, !0)) +.readOID(6, !0) !== s) throw Error("Invalid Public key format"); +var l = new i.Reader(p.readString(3, !0)); +l.readByte(), l.readSequence(), t.setPublic(l.readString(2, !0), l.readString(2, !0)) +}, +autoImport: function(e, r) { +return /^[\S\s]*-----BEGIN PRIVATE KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END PRIVATE KEY-----[\S\s]*$/g.test(r) ? (t.exports.privateImport(e, r), !0) : !! /^[\S\s]*-----BEGIN PUBLIC KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END PUBLIC KEY-----[\S\s]*$/g.test(r) && (t.exports.publicImport(e, r), !0) +} +} +}, +1973: (t, e, r) => { +var n = r(8287) +.Buffer, +i = r(3200), +o = r(8226) +._; + +function s(t, e) { +null != t && ("number" == typeof t ? this.fromNumber(t, e) : n.isBuffer(t) ? this.fromBuffer(t) : null == e && "string" != typeof t ? this.fromByteArray(t) : this.fromString(t, e)) +} +function a() { +return new s(null) +} +s.prototype.am = function(t, e, r, n, i, o) { +for (var s = 16383 & e, a = e >> 14; --o >= 0;) { +var f = 16383 & this[t], +u = this[t++] >> 14, +c = a * f + u * s; +i = ((f = s * f + ((16383 & c) << 14) + r[n] + i) >> 28) + (c >> 14) + a * u, r[n++] = 268435455 & f +} +return i +}, s.prototype.DB = 28, s.prototype.DM = 268435455, s.prototype.DV = 1 << 28, s.prototype.FV = Math.pow(2, 52), s.prototype.F1 = 24, s.prototype.F2 = 4; +var f, u, c = new Array; +for (f = "0".charCodeAt(0), u = 0; u <= 9; ++u) c[f++] = u; +for (f = "a".charCodeAt(0), u = 10; u < 36; ++u) c[f++] = u; +for (f = "A".charCodeAt(0), u = 10; u < 36; ++u) c[f++] = u; + +function h(t) { +return "0123456789abcdefghijklmnopqrstuvwxyz".charAt(t) +} +function p(t, e) { +var r = c[t.charCodeAt(e)]; +return null == r ? -1 : r +} +function l(t) { +var e = a(); +return e.fromInt(t), e +} +function y(t) { +var e, r = 1; +return 0 != (e = t >>> 16) && (t = e, r += 16), 0 != (e = t >> 8) && (t = e, r += 8), 0 != (e = t >> 4) && (t = e, r += 4), 0 != (e = t >> 2) && (t = e, r += 2), 0 != (e = t >> 1) && (t = e, r += 1), r +} +function g(t) { +this.m = t +} +function d(t) { +this.m = t, this.mp = t.invDigit(), this.mpl = 32767 & this.mp, this.mph = this.mp >> 15, this.um = (1 << t.DB - 15) - 1, this.mt2 = 2 * t.t +} +function v(t, e) { +return t & e +} +function m(t, e) { +return t | e +} +function S(t, e) { +return t ^ e +} +function _(t, e) { +return t & ~e +} +function b(t) { +if (0 === t) return -1; +var e = 0; +return 65535 & t || (t >>= 16, e += 16), 255 & t || (t >>= 8, e += 8), 15 & t || (t >>= 4, e += 4), 3 & t || (t >>= 2, e += 2), 1 & t || ++e, e +} +function E(t) { +for (var e = 0; 0 != t;) t &= t - 1, ++e; +return e +} +function w() {} +function O(t) { +return t +} +function B(t) { +this.r2 = a(), this.q3 = a(), s.ONE.dlShiftTo(2 * t.t, this.r2), this.mu = this.r2.divide(t), this.m = t +} +g.prototype.convert = function(t) { +return t.s < 0 || t.compareTo(this.m) >= 0 ? t.mod(this.m) : t +}, g.prototype.revert = function(t) { +return t +}, g.prototype.reduce = function(t) { +t.divRemTo(this.m, null, t) +}, g.prototype.mulTo = function(t, e, r) { +t.multiplyTo(e, r), this.reduce(r) +}, g.prototype.sqrTo = function(t, e) { +t.squareTo(e), this.reduce(e) +}, d.prototype.convert = function(t) { +var e = a(); +return t.abs() +.dlShiftTo(this.m.t, e), e.divRemTo(this.m, null, e), t.s < 0 && e.compareTo(s.ZERO) > 0 && this.m.subTo(e, e), e +}, d.prototype.revert = function(t) { +var e = a(); +return t.copyTo(e), this.reduce(e), e +}, d.prototype.reduce = function(t) { +for (; t.t <= this.mt2;) t[t.t++] = 0; +for (var e = 0; e < this.m.t; ++e) { +var r = 32767 & t[e], +n = r * this.mpl + ((r * this.mph + (t[e] >> 15) * this.mpl & this.um) << 15) & t.DM; +for (t[r = e + this.m.t] += this.m.am(0, n, t, e, 0, this.m.t); t[r] >= t.DV;) t[r] -= t.DV, t[++r]++ +} +t.clamp(), t.drShiftTo(this.m.t, t), t.compareTo(this.m) >= 0 && t.subTo(this.m, t) +}, d.prototype.mulTo = function(t, e, r) { +t.multiplyTo(e, r), this.reduce(r) +}, d.prototype.sqrTo = function(t, e) { +t.squareTo(e), this.reduce(e) +}, w.prototype.convert = O, w.prototype.revert = O, w.prototype.mulTo = function(t, e, r) { +t.multiplyTo(e, r) +}, w.prototype.sqrTo = function(t, e) { +t.squareTo(e) +}, B.prototype.convert = function(t) { +if (t.s < 0 || t.t > 2 * this.m.t) return t.mod(this.m); +if (t.compareTo(this.m) < 0) return t; +var e = a(); +return t.copyTo(e), this.reduce(e), e +}, B.prototype.revert = function(t) { +return t +}, B.prototype.reduce = function(t) { +for (t.drShiftTo(this.m.t - 1, this.r2), t.t > this.m.t + 1 && (t.t = this.m.t + 1, t.clamp()), this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3), this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); t.compareTo(this.r2) < 0;) t.dAddOffset(1, this.m.t + 1); +for (t.subTo(this.r2, t); t.compareTo(this.m) >= 0;) t.subTo(this.m, t) +}, B.prototype.mulTo = function(t, e, r) { +t.multiplyTo(e, r), this.reduce(r) +}, B.prototype.sqrTo = function(t, e) { +t.squareTo(e), this.reduce(e) +}; +var A = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997], +x = (1 << 26) / A[A.length - 1]; +s.prototype.copyTo = function(t) { +for (var e = this.t - 1; e >= 0; --e) t[e] = this[e]; +t.t = this.t, t.s = this.s +}, s.prototype.fromInt = function(t) { +this.t = 1, this.s = t < 0 ? -1 : 0, t > 0 ? this[0] = t : t < -1 ? this[0] = t + DV : this.t = 0 +}, s.prototype.fromString = function(t, e, r) { +var n; +switch (e) { +case 2: +n = 1; +break; +case 4: +n = 2; +break; +case 8: +n = 3; +break; +case 16: +n = 4; +break; +case 32: +n = 5; +break; +case 256: +n = 8; +break; +default: +return void this.fromRadix(t, e) +} +this.t = 0, this.s = 0; +for (var i = t.length, o = !1, a = 0; --i >= 0;) { +var f = 8 == n ? 255 & t[i] : p(t, i); +f < 0 ? "-" == t.charAt(i) && (o = !0) : (o = !1, 0 === a ? this[this.t++] = f : a + n > this.DB ? (this[this.t - 1] |= (f & (1 << this.DB - a) - 1) << a, this[this.t++] = f >> this.DB - a) : this[this.t - 1] |= f << a, (a += n) >= this.DB && (a -= this.DB)) +}!r && 8 == n && 128 & t[0] && (this.s = -1, a > 0 && (this[this.t - 1] |= (1 << this.DB - a) - 1 << a)), this.clamp(), o && s.ZERO.subTo(this, this) +}, s.prototype.fromByteArray = function(t, e) { +this.fromString(t, 256, e) +}, s.prototype.fromBuffer = function(t) { +this.fromString(t, 256, !0) +}, s.prototype.clamp = function() { +for (var t = this.s & this.DM; this.t > 0 && this[this.t - 1] == t;)--this.t +}, s.prototype.dlShiftTo = function(t, e) { +var r; +for (r = this.t - 1; r >= 0; --r) e[r + t] = this[r]; +for (r = t - 1; r >= 0; --r) e[r] = 0; +e.t = this.t + t, e.s = this.s +}, s.prototype.drShiftTo = function(t, e) { +for (var r = t; r < this.t; ++r) e[r - t] = this[r]; +e.t = Math.max(this.t - t, 0), e.s = this.s +}, s.prototype.lShiftTo = function(t, e) { +var r, n = t % this.DB, +i = this.DB - n, +o = (1 << i) - 1, +s = Math.floor(t / this.DB), +a = this.s << n & this.DM; +for (r = this.t - 1; r >= 0; --r) e[r + s + 1] = this[r] >> i | a, a = (this[r] & o) << n; +for (r = s - 1; r >= 0; --r) e[r] = 0; +e[s] = a, e.t = this.t + s + 1, e.s = this.s, e.clamp() +}, s.prototype.rShiftTo = function(t, e) { +e.s = this.s; +var r = Math.floor(t / this.DB); +if (r >= this.t) e.t = 0; +else { +var n = t % this.DB, +i = this.DB - n, +o = (1 << n) - 1; +e[0] = this[r] >> n; +for (var s = r + 1; s < this.t; ++s) e[s - r - 1] |= (this[s] & o) << i, e[s - r] = this[s] >> n; +n > 0 && (e[this.t - r - 1] |= (this.s & o) << i), e.t = this.t - r, e.clamp() +} +}, s.prototype.subTo = function(t, e) { +for (var r = 0, n = 0, i = Math.min(t.t, this.t); r < i;) n += this[r] - t[r], e[r++] = n & this.DM, n >>= this.DB; +if (t.t < this.t) { +for (n -= t.s; r < this.t;) n += this[r], e[r++] = n & this.DM, n >>= this.DB; +n += this.s +} else { +for (n += this.s; r < t.t;) n -= t[r], e[r++] = n & this.DM, n >>= this.DB; +n -= t.s +} +e.s = n < 0 ? -1 : 0, n < -1 ? e[r++] = this.DV + n : n > 0 && (e[r++] = n), e.t = r, e.clamp() +}, s.prototype.multiplyTo = function(t, e) { +var r = this.abs(), +n = t.abs(), +i = r.t; +for (e.t = i + n.t; --i >= 0;) e[i] = 0; +for (i = 0; i < n.t; ++i) e[i + r.t] = r.am(0, n[i], e, i, 0, r.t); +e.s = 0, e.clamp(), this.s != t.s && s.ZERO.subTo(e, e) +}, s.prototype.squareTo = function(t) { +for (var e = this.abs(), r = t.t = 2 * e.t; --r >= 0;) t[r] = 0; +for (r = 0; r < e.t - 1; ++r) { +var n = e.am(r, e[r], t, 2 * r, 0, 1); +(t[r + e.t] += e.am(r + 1, 2 * e[r], t, 2 * r + 1, n, e.t - r - 1)) >= e.DV && (t[r + e.t] -= e.DV, t[r + e.t + 1] = 1) +} +t.t > 0 && (t[t.t - 1] += e.am(r, e[r], t, 2 * r, 0, 1)), t.s = 0, t.clamp() +}, s.prototype.divRemTo = function(t, e, r) { +var n = t.abs(); +if (!(n.t <= 0)) { +var i = this.abs(); +if (i.t < n.t) return null != e && e.fromInt(0), void(null != r && this.copyTo(r)); +null == r && (r = a()); +var o = a(), +f = this.s, +u = t.s, +c = this.DB - y(n[n.t - 1]); +c > 0 ? (n.lShiftTo(c, o), i.lShiftTo(c, r)) : (n.copyTo(o), i.copyTo(r)); +var h = o.t, +p = o[h - 1]; +if (0 !== p) { +var l = p * (1 << this.F1) + (h > 1 ? o[h - 2] >> this.F2 : 0), +g = this.FV / l, +d = (1 << this.F1) / l, +v = 1 << this.F2, +m = r.t, +S = m - h, +_ = null == e ? a() : e; +for (o.dlShiftTo(S, _), r.compareTo(_) >= 0 && (r[r.t++] = 1, r.subTo(_, r)), s.ONE.dlShiftTo(h, _), _.subTo(o, o); o.t < h;) o[o.t++] = 0; +for (; --S >= 0;) { +var b = r[--m] == p ? this.DM : Math.floor(r[m] * g + (r[m - 1] + v) * d); +if ((r[m] += o.am(0, b, r, S, 0, h)) < b) for (o.dlShiftTo(S, _), r.subTo(_, r); r[m] < --b;) r.subTo(_, r) +} +null != e && (r.drShiftTo(h, e), f != u && s.ZERO.subTo(e, e)), r.t = h, r.clamp(), c > 0 && r.rShiftTo(c, r), f < 0 && s.ZERO.subTo(r, r) +} +} +}, s.prototype.invDigit = function() { +if (this.t < 1) return 0; +var t = this[0]; +if (!(1 & t)) return 0; +var e = 3 & t; +return (e = (e = (e = (e = e * (2 - (15 & t) * e) & 15) * (2 - (255 & t) * e) & 255) * (2 - ((65535 & t) * e & 65535)) & 65535) * (2 - t * e % this.DV) % this.DV) > 0 ? this.DV - e : -e +}, s.prototype.isEven = function() { +return 0 === (this.t > 0 ? 1 & this[0] : this.s) +}, s.prototype.exp = function(t, e) { +if (t > 4294967295 || t < 1) return s.ONE; +var r = a(), +n = a(), +i = e.convert(this), +o = y(t) - 1; +for (i.copyTo(r); --o >= 0;) if (e.sqrTo(r, n), (t & 1 << o) > 0) e.mulTo(n, i, r); +else { +var f = r; +r = n, n = f +} +return e.revert(r) +}, s.prototype.chunkSize = function(t) { +return Math.floor(Math.LN2 * this.DB / Math.log(t)) +}, s.prototype.toRadix = function(t) { +if (null == t && (t = 10), 0 === this.signum() || t < 2 || t > 36) return "0"; +var e = this.chunkSize(t), +r = Math.pow(t, e), +n = l(r), +i = a(), +o = a(), +s = ""; +for (this.divRemTo(n, i, o); i.signum() > 0;) s = (r + o.intValue()) +.toString(t) +.substr(1) + s, i.divRemTo(n, i, o); +return o.intValue() +.toString(t) + s +}, s.prototype.fromRadix = function(t, e) { +this.fromInt(0), null == e && (e = 10); +for (var r = this.chunkSize(e), n = Math.pow(e, r), i = !1, o = 0, a = 0, f = 0; f < t.length; ++f) { +var u = p(t, f); +u < 0 ? "-" == t.charAt(f) && 0 === this.signum() && (i = !0) : (a = e * a + u, ++o >= r && (this.dMultiply(n), this.dAddOffset(a, 0), o = 0, a = 0)) +} +o > 0 && (this.dMultiply(Math.pow(e, o)), this.dAddOffset(a, 0)), i && s.ZERO.subTo(this, this) +}, s.prototype.fromNumber = function(t, e) { +if ("number" == typeof e) if (t < 2) this.fromInt(1); +else for (this.fromNumber(t), this.testBit(t - 1) || this.bitwiseTo(s.ONE.shiftLeft(t - 1), m, this), this.isEven() && this.dAddOffset(1, 0); !this.isProbablePrime(e);) this.dAddOffset(2, 0), this.bitLength() > t && this.subTo(s.ONE.shiftLeft(t - 1), this); +else { +var r = i.randomBytes(1 + (t >> 3)), +n = 7 & t; +n > 0 ? r[0] &= (1 << n) - 1 : r[0] = 0, this.fromByteArray(r) +} +}, s.prototype.bitwiseTo = function(t, e, r) { +var n, i, o = Math.min(t.t, this.t); +for (n = 0; n < o; ++n) r[n] = e(this[n], t[n]); +if (t.t < this.t) { +for (i = t.s & this.DM, n = o; n < this.t; ++n) r[n] = e(this[n], i); +r.t = this.t +} else { +for (i = this.s & this.DM, n = o; n < t.t; ++n) r[n] = e(i, t[n]); +r.t = t.t +} +r.s = e(this.s, t.s), r.clamp() +}, s.prototype.changeBit = function(t, e) { +var r = s.ONE.shiftLeft(t); +return this.bitwiseTo(r, e, r), r +}, s.prototype.addTo = function(t, e) { +for (var r = 0, n = 0, i = Math.min(t.t, this.t); r < i;) n += this[r] + t[r], e[r++] = n & this.DM, n >>= this.DB; +if (t.t < this.t) { +for (n += t.s; r < this.t;) n += this[r], e[r++] = n & this.DM, n >>= this.DB; +n += this.s +} else { +for (n += this.s; r < t.t;) n += t[r], e[r++] = n & this.DM, n >>= this.DB; +n += t.s +} +e.s = n < 0 ? -1 : 0, n > 0 ? e[r++] = n : n < -1 && (e[r++] = this.DV + n), e.t = r, e.clamp() +}, s.prototype.dMultiply = function(t) { +this[this.t] = this.am(0, t - 1, this, 0, 0, this.t), ++this.t, this.clamp() +}, s.prototype.dAddOffset = function(t, e) { +if (0 !== t) { +for (; this.t <= e;) this[this.t++] = 0; +for (this[e] += t; this[e] >= this.DV;) this[e] -= this.DV, ++e >= this.t && (this[this.t++] = 0), ++this[e] +} +}, s.prototype.multiplyLowerTo = function(t, e, r) { +var n, i = Math.min(this.t + t.t, e); +for (r.s = 0, r.t = i; i > 0;) r[--i] = 0; +for (n = r.t - this.t; i < n; ++i) r[i + this.t] = this.am(0, t[i], r, i, 0, this.t); +for (n = Math.min(t.t, e); i < n; ++i) this.am(0, t[i], r, i, 0, e - i); +r.clamp() +}, s.prototype.multiplyUpperTo = function(t, e, r) { +--e; +var n = r.t = this.t + t.t - e; +for (r.s = 0; --n >= 0;) r[n] = 0; +for (n = Math.max(e - this.t, 0); n < t.t; ++n) r[this.t + n - e] = this.am(e - n, t[n], r, 0, 0, this.t + n - e); +r.clamp(), r.drShiftTo(1, r) +}, s.prototype.modInt = function(t) { +if (t <= 0) return 0; +var e = this.DV % t, +r = this.s < 0 ? t - 1 : 0; +if (this.t > 0) if (0 === e) r = this[0] % t; +else for (var n = this.t - 1; n >= 0; --n) r = (e * r + this[n]) % t; +return r +}, s.prototype.millerRabin = function(t) { +var e = this.subtract(s.ONE), +r = e.getLowestSetBit(); +if (r <= 0) return !1; +var n = e.shiftRight(r); +(t = t + 1 >> 1) > A.length && (t = A.length); +for (var i = a(), o = 0; o < t; ++o) { +i.fromInt(A[Math.floor(Math.random() * A.length)]); +var f = i.modPow(n, this); +if (0 != f.compareTo(s.ONE) && 0 != f.compareTo(e)) { +for (var u = 1; u++ < r && 0 != f.compareTo(e);) if (0 === (f = f.modPowInt(2, this)) +.compareTo(s.ONE)) return !1; +if (0 != f.compareTo(e)) return !1 +} +} +return !0 +}, s.prototype.toString = function(t) { +if (this.s < 0) return "-" + this.negate() +.toString(t); +var e; +if (16 == t) e = 4; +else if (8 == t) e = 3; +else if (2 == t) e = 1; +else if (32 == t) e = 5; +else { +if (4 != t) return this.toRadix(t); +e = 2 +} +var r, n = (1 << e) - 1, +i = !1, +o = "", +s = this.t, +a = this.DB - s * this.DB % e; +if (s-- > 0) for (a < this.DB && (r = this[s] >> a) > 0 && (i = !0, o = h(r)); s >= 0;) a < e ? (r = (this[s] & (1 << a) - 1) << e - a, r |= this[--s] >> (a += this.DB - e)) : (r = this[s] >> (a -= e) & n, a <= 0 && (a += this.DB, --s)), r > 0 && (i = !0), i && (o += h(r)); +return i ? o : "0" +}, s.prototype.negate = function() { +var t = a(); +return s.ZERO.subTo(this, t), t +}, s.prototype.abs = function() { +return this.s < 0 ? this.negate() : this +}, s.prototype.compareTo = function(t) { +var e = this.s - t.s; +if (0 != e) return e; +var r = this.t; +if (0 != (e = r - t.t)) return this.s < 0 ? -e : e; +for (; --r >= 0;) if (0 != (e = this[r] - t[r])) return e; +return 0 +}, s.prototype.bitLength = function() { +return this.t <= 0 ? 0 : this.DB * (this.t - 1) + y(this[this.t - 1] ^ this.s & this.DM) +}, s.prototype.mod = function(t) { +var e = a(); +return this.abs() +.divRemTo(t, null, e), this.s < 0 && e.compareTo(s.ZERO) > 0 && t.subTo(e, e), e +}, s.prototype.modPowInt = function(t, e) { +var r; +return r = t < 256 || e.isEven() ? new g(e) : new d(e), this.exp(t, r) +}, s.prototype.clone = function() { +var t = a(); +return this.copyTo(t), t +}, s.prototype.intValue = function() { +if (this.s < 0) { +if (1 == this.t) return this[0] - this.DV; +if (0 === this.t) return -1 +} else { +if (1 == this.t) return this[0]; +if (0 === this.t) return 0 +} +return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0] +}, s.prototype.byteValue = function() { +return 0 == this.t ? this.s : this[0] << 24 >> 24 +}, s.prototype.shortValue = function() { +return 0 == this.t ? this.s : this[0] << 16 >> 16 +}, s.prototype.signum = function() { +return this.s < 0 ? -1 : this.t <= 0 || 1 == this.t && this[0] <= 0 ? 0 : 1 +}, s.prototype.toByteArray = function() { +var t = this.t, +e = new Array; +e[0] = this.s; +var r, n = this.DB - t * this.DB % 8, +i = 0; +if (t-- > 0) for (n < this.DB && (r = this[t] >> n) != (this.s & this.DM) >> n && (e[i++] = r | this.s << this.DB - n); t >= 0;) n < 8 ? (r = (this[t] & (1 << n) - 1) << 8 - n, r |= this[--t] >> (n += this.DB - 8)) : (r = this[t] >> (n -= 8) & 255, n <= 0 && (n += this.DB, --t)), 128 & r && (r |= -256), 0 === i && (128 & this.s) != (128 & r) && ++i, (i > 0 || r != this.s) && (e[i++] = r); +return e +}, s.prototype.toBuffer = function(t) { +var e = n.from(this.toByteArray()); +if (!0 === t && 0 === e[0]) e = e.slice(1); +else if (o.isNumber(t)) { +if (e.length > t) { +for (var r = 0; r < e.length - t; r++) if (0 !== e[r]) return null; +return e.slice(e.length - t) +} +if (e.length < t) { +var i = n.alloc(t); +return i.fill(0, 0, t - e.length), e.copy(i, t - e.length), i +} +} +return e +}, s.prototype.equals = function(t) { +return 0 == this.compareTo(t) +}, s.prototype.min = function(t) { +return this.compareTo(t) < 0 ? this : t +}, s.prototype.max = function(t) { +return this.compareTo(t) > 0 ? this : t +}, s.prototype.and = function(t) { +var e = a(); +return this.bitwiseTo(t, v, e), e +}, s.prototype.or = function(t) { +var e = a(); +return this.bitwiseTo(t, m, e), e +}, s.prototype.xor = function(t) { +var e = a(); +return this.bitwiseTo(t, S, e), e +}, s.prototype.andNot = function(t) { +var e = a(); +return this.bitwiseTo(t, _, e), e +}, s.prototype.not = function() { +for (var t = a(), e = 0; e < this.t; ++e) t[e] = this.DM & ~this[e]; +return t.t = this.t, t.s = ~this.s, t +}, s.prototype.shiftLeft = function(t) { +var e = a(); +return t < 0 ? this.rShiftTo(-t, e) : this.lShiftTo(t, e), e +}, s.prototype.shiftRight = function(t) { +var e = a(); +return t < 0 ? this.lShiftTo(-t, e) : this.rShiftTo(t, e), e +}, s.prototype.getLowestSetBit = function() { +for (var t = 0; t < this.t; ++t) if (0 != this[t]) return t * this.DB + b(this[t]); +return this.s < 0 ? this.t * this.DB : -1 +}, s.prototype.bitCount = function() { +for (var t = 0, e = this.s & this.DM, r = 0; r < this.t; ++r) t += E(this[r] ^ e); +return t +}, s.prototype.testBit = function(t) { +var e = Math.floor(t / this.DB); +return e >= this.t ? 0 != this.s : !! (this[e] & 1 << t % this.DB) +}, s.prototype.setBit = function(t) { +return this.changeBit(t, m) +}, s.prototype.clearBit = function(t) { +return this.changeBit(t, _) +}, s.prototype.flipBit = function(t) { +return this.changeBit(t, S) +}, s.prototype.add = function(t) { +var e = a(); +return this.addTo(t, e), e +}, s.prototype.subtract = function(t) { +var e = a(); +return this.subTo(t, e), e +}, s.prototype.multiply = function(t) { +var e = a(); +return this.multiplyTo(t, e), e +}, s.prototype.divide = function(t) { +var e = a(); +return this.divRemTo(t, e, null), e +}, s.prototype.remainder = function(t) { +var e = a(); +return this.divRemTo(t, null, e), e +}, s.prototype.divideAndRemainder = function(t) { +var e = a(), +r = a(); +return this.divRemTo(t, e, r), new Array(e, r) +}, s.prototype.modPow = function(t, e) { +var r, n, i = t.bitLength(), +o = l(1); +if (i <= 0) return o; +r = i < 18 ? 1 : i < 48 ? 3 : i < 144 ? 4 : i < 768 ? 5 : 6, n = i < 8 ? new g(e) : e.isEven() ? new B(e) : new d(e); +var s = new Array, +f = 3, +u = r - 1, +c = (1 << r) - 1; +if (s[1] = n.convert(this), r > 1) { +var h = a(); +for (n.sqrTo(s[1], h); f <= c;) s[f] = a(), n.mulTo(h, s[f - 2], s[f]), f += 2 +} +var p, v, m = t.t - 1, +S = !0, +_ = a(); +for (i = y(t[m]) - 1; m >= 0;) { +for (i >= u ? p = t[m] >> i - u & c : (p = (t[m] & (1 << i + 1) - 1) << u - i, m > 0 && (p |= t[m - 1] >> this.DB + i - u)), f = r; !(1 & p);) p >>= 1, --f; +if ((i -= f) < 0 && (i += this.DB, --m), S) s[p].copyTo(o), S = !1; +else { +for (; f > 1;) n.sqrTo(o, _), n.sqrTo(_, o), f -= 2; +f > 0 ? n.sqrTo(o, _) : (v = o, o = _, _ = v), n.mulTo(_, s[p], o) +} +for (; m >= 0 && !(t[m] & 1 << i);) n.sqrTo(o, _), v = o, o = _, _ = v, --i < 0 && (i = this.DB - 1, --m) +} +return n.revert(o) +}, s.prototype.modInverse = function(t) { +var e = t.isEven(); +if (this.isEven() && e || 0 === t.signum()) return s.ZERO; +for (var r = t.clone(), n = this.clone(), i = l(1), o = l(0), a = l(0), f = l(1); 0 != r.signum();) { +for (; r.isEven();) r.rShiftTo(1, r), e ? (i.isEven() && o.isEven() || (i.addTo(this, i), o.subTo(t, o)), i.rShiftTo(1, i)) : o.isEven() || o.subTo(t, o), o.rShiftTo(1, o); +for (; n.isEven();) n.rShiftTo(1, n), e ? (a.isEven() && f.isEven() || (a.addTo(this, a), f.subTo(t, f)), a.rShiftTo(1, a)) : f.isEven() || f.subTo(t, f), f.rShiftTo(1, f); +r.compareTo(n) >= 0 ? (r.subTo(n, r), e && i.subTo(a, i), o.subTo(f, o)) : (n.subTo(r, n), e && a.subTo(i, a), f.subTo(o, f)) +} +return 0 != n.compareTo(s.ONE) ? s.ZERO : f.compareTo(t) >= 0 ? f.subtract(t) : f.signum() < 0 ? (f.addTo(t, f), f.signum() < 0 ? f.add(t) : f) : f +}, s.prototype.pow = function(t) { +return this.exp(t, new w) +}, s.prototype.gcd = function(t) { +var e = this.s < 0 ? this.negate() : this.clone(), +r = t.s < 0 ? t.negate() : t.clone(); +if (e.compareTo(r) < 0) { +var n = e; +e = r, r = n +} +var i = e.getLowestSetBit(), +o = r.getLowestSetBit(); +if (o < 0) return e; +for (i < o && (o = i), o > 0 && (e.rShiftTo(o, e), r.rShiftTo(o, r)); e.signum() > 0;)(i = e.getLowestSetBit()) > 0 && e.rShiftTo(i, e), (i = r.getLowestSetBit()) > 0 && r.rShiftTo(i, r), e.compareTo(r) >= 0 ? (e.subTo(r, e), e.rShiftTo(1, e)) : (r.subTo(e, r), r.rShiftTo(1, r)); +return o > 0 && r.lShiftTo(o, r), r +}, s.prototype.isProbablePrime = function(t) { +var e, r = this.abs(); +if (1 == r.t && r[0] <= A[A.length - 1]) { +for (e = 0; e < A.length; ++e) if (r[0] == A[e]) return !0; +return !1 +} +if (r.isEven()) return !1; +for (e = 1; e < A.length;) { +for (var n = A[e], i = e + 1; i < A.length && n < x;) n *= A[i++]; +for (n = r.modInt(n); e < i;) if (n % A[e++] == 0) return !1 +} +return r.millerRabin(t) +}, s.int2char = h, s.ZERO = l(0), s.ONE = l(1), s.prototype.square = function() { +var t = a(); +return this.squareTo(t), t +}, t.exports = s +}, +5682: (t, e, r) => { +var n = r(8287) +.Buffer, +i = r(8226) +._, +o = (r(3200), r(1973)), +s = r(8226), +a = r(1768), +f = r(4538); +e.BigInteger = o, t.exports.Key = function() { +function t() { +this.n = null, this.e = 0, this.d = null, this.p = null, this.q = null, this.dmp1 = null, this.dmq1 = null, this.coeff = null +} +return t.prototype.setOptions = function(t) { +var e = a[t.signingScheme], +r = a[t.encryptionScheme]; +e === r ? this.signingScheme = this.encryptionScheme = r.makeScheme(this, t) : (this.encryptionScheme = r.makeScheme(this, t), this.signingScheme = e.makeScheme(this, t)), this.encryptEngine = f.getEngine(this, t) +}, t.prototype.generate = function(t, e) { +var r = t >> 1; +this.e = parseInt(e, 16); +for (var n = new o(e, 16);;) { +for (; this.p = new o(t - r, 1), 0 !== this.p.subtract(o.ONE) +.gcd(n) +.compareTo(o.ONE) || !this.p.isProbablePrime(10);); +for (; this.q = new o(r, 1), 0 !== this.q.subtract(o.ONE) +.gcd(n) +.compareTo(o.ONE) || !this.q.isProbablePrime(10);); +if (this.p.compareTo(this.q) <= 0) { +var i = this.p; +this.p = this.q, this.q = i +} +var s = this.p.subtract(o.ONE), +a = this.q.subtract(o.ONE), +f = s.multiply(a); +if (0 === f.gcd(n) +.compareTo(o.ONE)) { +if (this.n = this.p.multiply(this.q), this.n.bitLength() < t) continue; +this.d = n.modInverse(f), this.dmp1 = this.d.mod(s), this.dmq1 = this.d.mod(a), this.coeff = this.q.modInverse(this.p); +break +} +} +this.$$recalculateCache() +}, t.prototype.setPrivate = function(t, e, r, n, a, f, u, c) { +if (!(t && e && r && t.length > 0 && (i.isNumber(e) || e.length > 0) && r.length > 0)) throw Error("Invalid RSA private key"); +this.n = new o(t), this.e = i.isNumber(e) ? e : s.get32IntFromBuffer(e, 0), this.d = new o(r), n && a && f && u && c && (this.p = new o(n), this.q = new o(a), this.dmp1 = new o(f), this.dmq1 = new o(u), this.coeff = new o(c)), this.$$recalculateCache() +}, t.prototype.setPublic = function(t, e) { +if (!(t && e && t.length > 0 && (i.isNumber(e) || e.length > 0))) throw Error("Invalid RSA public key"); +this.n = new o(t), this.e = i.isNumber(e) ? e : s.get32IntFromBuffer(e, 0), this.$$recalculateCache() +}, t.prototype.$doPrivate = function(t) { +if (this.p || this.q) return t.modPow(this.d, this.n); +for (var e = t.mod(this.p) +.modPow(this.dmp1, this.p), r = t.mod(this.q) +.modPow(this.dmq1, this.q); e.compareTo(r) < 0;) e = e.add(this.p); +return e.subtract(r) +.multiply(this.coeff) +.mod(this.p) +.multiply(this.q) +.add(r) +}, t.prototype.$doPublic = function(t) { +return t.modPowInt(this.e, this.n) +}, t.prototype.encrypt = function(t, e) { +var r = [], +i = [], +o = t.length, +s = Math.ceil(o / this.maxMessageLength) || 1, +a = Math.ceil(o / s || 1); +if (1 == s) r.push(t); +else for (var f = 0; f < s; f++) r.push(t.slice(f * a, (f + 1) * a)); +for (var u = 0; u < r.length; u++) i.push(this.encryptEngine.encrypt(r[u], e)); +return n.concat(i) +}, t.prototype.decrypt = function(t, e) { +if (t.length % this.encryptedDataLength > 0) throw Error("Incorrect data or key"); +for (var r = [], i = 0, o = 0, s = t.length / this.encryptedDataLength, a = 0; a < s; a++) o = (i = a * this.encryptedDataLength) + this.encryptedDataLength, r.push(this.encryptEngine.decrypt(t.slice(i, Math.min(o, t.length)), e)); +return n.concat(r) +}, t.prototype.sign = function(t) { +return this.signingScheme.sign.apply(this.signingScheme, arguments) +}, t.prototype.verify = function(t, e, r) { +return this.signingScheme.verify.apply(this.signingScheme, arguments) +}, t.prototype.isPrivate = function() { +return !!(this.n && this.e && this.d) +}, t.prototype.isPublic = function(t) { +return this.n && this.e && !(t && this.d) || !1 +}, Object.defineProperty(t.prototype, "keySize", { +get: function() { +return this.cache.keyBitLength +} +}), Object.defineProperty(t.prototype, "encryptedDataLength", { +get: function() { +return this.cache.keyByteLength +} +}), Object.defineProperty(t.prototype, "maxMessageLength", { +get: function() { +return this.encryptionScheme.maxMessageLength() +} +}), t.prototype.$$recalculateCache = function() { +this.cache = this.cache || {}, this.cache.keyBitLength = this.n.bitLength(), this.cache.keyByteLength = this.cache.keyBitLength + 6 >> 3 +}, t +}() +}, +2487: (t, e, r) => { +var n = r(8287) +.Buffer, +i = (r(1973), r(3200)); +t.exports = { +isEncryption: !0, +isSignature: !1 +}, t.exports.digestLength = { +md4: 16, +md5: 16, +ripemd160: 20, +rmd160: 20, +sha1: 20, +sha224: 28, +sha256: 32, +sha384: 48, +sha512: 64 +}; +var o = "sha1"; +t.exports.eme_oaep_mgf1 = function(e, r, s) { +s = s || o; +for (var a = t.exports.digestLength[s], f = Math.ceil(r / a), u = n.alloc(a * f), c = n.alloc(4), h = 0; h < f; ++h) { +var p = i.createHash(s); +p.update(e), c.writeUInt32BE(h, 0), p.update(c), p.digest() +.copy(u, h * a) +} +return u.slice(0, r) +}, t.exports.makeScheme = function(e, r) { +function s(t, e) { +this.key = t, this.options = e +} +return s.prototype.maxMessageLength = function() { +return this.key.encryptedDataLength - 2 * t.exports.digestLength[this.options.encryptionSchemeOptions.hash || o] - 2 +}, s.prototype.encPad = function(e) { +var r = this.options.encryptionSchemeOptions.hash || o, +s = this.options.encryptionSchemeOptions.mgf || t.exports.eme_oaep_mgf1, +a = this.options.encryptionSchemeOptions.label || n.alloc(0), +f = this.key.encryptedDataLength, +u = t.exports.digestLength[r]; +if (e.length > f - 2 * u - 2) throw new Error("Message is too long to encode into an encoded message with a length of " + f + " bytes, increaseemLen to fix this error (minimum value for given parameters and options: " + (f - 2 * u - 2) + ")"); +var c = i.createHash(r); +c.update(a), c = c.digest(); +var h = n.alloc(f - e.length - 2 * u - 1); +h.fill(0), h[h.length - 1] = 1; +for (var p = n.concat([c, h, e]), l = i.randomBytes(u), y = s(l, p.length, r), g = 0; g < p.length; g++) p[g] ^= y[g]; +for (y = s(p, u, r), g = 0; g < l.length; g++) l[g] ^= y[g]; +var d = n.alloc(1 + l.length + p.length); +return d[0] = 0, l.copy(d, 1), p.copy(d, 1 + l.length), d +}, s.prototype.encUnPad = function(e) { +var r = this.options.encryptionSchemeOptions.hash || o, +s = this.options.encryptionSchemeOptions.mgf || t.exports.eme_oaep_mgf1, +a = this.options.encryptionSchemeOptions.label || n.alloc(0), +f = t.exports.digestLength[r]; +if (e.length < 2 * f + 2) throw new Error("Error decoding message, the supplied message is not long enough to be a valid OAEP encoded message"); +for (var u = e.slice(1, f + 1), c = e.slice(1 + f), h = s(c, f, r), p = 0; p < u.length; p++) u[p] ^= h[p]; +for (h = s(u, c.length, r), p = 0; p < c.length; p++) c[p] ^= h[p]; +var l = i.createHash(r); +if (l.update(a), l = l.digest(), c.slice(0, f) +.toString("hex") != l.toString("hex")) throw new Error("Error decoding message, the lHash calculated from the label provided and the lHash in the encrypted data do not match."); +for (p = f; 0 === c[p++] && p < c.length;); +if (1 != c[p - 1]) throw new Error("Error decoding message, there is no padding message separator byte"); +return c.slice(p) +}, new s(e, r) +} +}, +8290: (t, e, r) => { +var n = r(8287) +.Buffer, +i = r(1973), +o = r(3200), +s = r(7449), +a = { +md2: n.from("3020300c06082a864886f70d020205000410", "hex"), +md5: n.from("3020300c06082a864886f70d020505000410", "hex"), +sha1: n.from("3021300906052b0e03021a05000414", "hex"), +sha224: n.from("302d300d06096086480165030402040500041c", "hex"), +sha256: n.from("3031300d060960864801650304020105000420", "hex"), +sha384: n.from("3041300d060960864801650304020205000430", "hex"), +sha512: n.from("3051300d060960864801650304020305000440", "hex"), +ripemd160: n.from("3021300906052b2403020105000414", "hex"), +rmd160: n.from("3021300906052b2403020105000414", "hex") +}, f = { +ripemd160: "rmd160" +}, u = "sha256"; +t.exports = { +isEncryption: !0, +isSignature: !0 +}, t.exports.makeScheme = function(t, e) { +function r(t, e) { +this.key = t, this.options = e +} +return r.prototype.maxMessageLength = function() { +return this.options.encryptionSchemeOptions && this.options.encryptionSchemeOptions.padding == s.RSA_NO_PADDING ? this.key.encryptedDataLength : this.key.encryptedDataLength - 11 +}, r.prototype.encPad = function(t, e) { +var r; +if (e = e || {}, t.length > this.key.maxMessageLength) throw new Error("Message too long for RSA (n=" + this.key.encryptedDataLength + ", l=" + t.length + ")"); +if (this.options.encryptionSchemeOptions && this.options.encryptionSchemeOptions.padding == s.RSA_NO_PADDING) return (r = n.alloc(this.key.maxMessageLength - t.length)) +.fill(0), n.concat([r, t]); +if (1 === e.type) return (r = n.alloc(this.key.encryptedDataLength - t.length - 1)) +.fill(255, 0, r.length - 1), r[0] = 1, r[r.length - 1] = 0, n.concat([r, t]); +(r = n.alloc(this.key.encryptedDataLength - t.length))[0] = 0, r[1] = 2; +for (var i = o.randomBytes(r.length - 3), a = 0; a < i.length; a++) { +for (var f = i[a]; 0 === f;) f = o.randomBytes(1)[0]; +r[a + 2] = f +} +return r[r.length - 1] = 0, n.concat([r, t]) +}, r.prototype.encUnPad = function(t, e) { +e = e || {}; +var r = 0; +if (this.options.encryptionSchemeOptions && this.options.encryptionSchemeOptions.padding == s.RSA_NO_PADDING) return "function" == typeof t.lastIndexOf ? t.slice(t.lastIndexOf("\0") + 1, t.length) : t.slice(String.prototype.lastIndexOf.call(t, "\0") + 1, t.length); +if (t.length < 4) return null; +if (1 === e.type) { +if (0 !== t[0] || 1 !== t[1]) return null; +for (r = 3; 0 !== t[r];) if (255 != t[r] || ++r >= t.length) return null +} else { +if (0 !== t[0] || 2 !== t[1]) return null; +for (r = 3; 0 !== t[r];) if (++r >= t.length) return null +} +return t.slice(r + 1, t.length) +}, r.prototype.sign = function(t) { +var e = this.options.signingSchemeOptions.hash || u; +if ("browser" === this.options.environment) { +e = f[e] || e; +var r = o.createHash(e); +r.update(t); +var n = this.pkcs1pad(r.digest(), e); +return this.key.$doPrivate(new i(n)) +.toBuffer(this.key.encryptedDataLength) +} +var s = o.createSign("RSA-" + e.toUpperCase()); +return s.update(t), s.sign(this.options.rsaUtils.exportKey("private")) +}, r.prototype.verify = function(t, e, r) { +if (this.options.encryptionSchemeOptions && this.options.encryptionSchemeOptions.padding == s.RSA_NO_PADDING) return !1; +var a = this.options.signingSchemeOptions.hash || u; +if ("browser" === this.options.environment) { +a = f[a] || a, r && (e = n.from(e, r)); +var c = o.createHash(a); +c.update(t); +var h = this.pkcs1pad(c.digest(), a); +return this.key.$doPublic(new i(e)) +.toBuffer() +.toString("hex") == h.toString("hex") +} +var p = o.createVerify("RSA-" + a.toUpperCase()); +return p.update(t), p.verify(this.options.rsaUtils.exportKey("public"), e, r) +}, r.prototype.pkcs0pad = function(t) { +var e = n.alloc(this.key.maxMessageLength - t.length); +return e.fill(0), n.concat([e, t]) +}, r.prototype.pkcs0unpad = function(t) { +return "function" == typeof t.lastIndexOf ? t.slice(t.lastIndexOf("\0") + 1, t.length) : t.slice(String.prototype.lastIndexOf.call(t, "\0") + 1, t.length) +}, r.prototype.pkcs1pad = function(t, e) { +var r = a[e]; +if (!r) throw Error("Unsupported hash algorithm"); +var i = n.concat([r, t]); +if (i.length + 10 > this.key.encryptedDataLength) throw Error("Key is too short for signing algorithm (" + e + ")"); +var o = n.alloc(this.key.encryptedDataLength - i.length - 1); +return o.fill(255, 0, o.length - 1), o[0] = 1, o[o.length - 1] = 0, n.concat([o, i]) +}, new r(t, e) +} +}, +4414: (t, e, r) => { +var n = r(8287) +.Buffer, +i = r(1973), +o = r(3200); +t.exports = { +isEncryption: !1, +isSignature: !0 +}; +var s = "sha1"; +t.exports.makeScheme = function(t, e) { +var a = r(1768) +.pkcs1_oaep; + +function f(t, e) { +this.key = t, this.options = e +} +return f.prototype.sign = function(t) { +var e = o.createHash(this.options.signingSchemeOptions.hash || s); +e.update(t); +var r = this.emsa_pss_encode(e.digest(), this.key.keySize - 1); +return this.key.$doPrivate(new i(r)) +.toBuffer(this.key.encryptedDataLength) +}, f.prototype.verify = function(t, e, r) { +r && (e = n.from(e, r)), e = new i(e); +var a = Math.ceil((this.key.keySize - 1) / 8), +f = this.key.$doPublic(e) +.toBuffer(a), +u = o.createHash(this.options.signingSchemeOptions.hash || s); +return u.update(t), this.emsa_pss_verify(u.digest(), f, this.key.keySize - 1) +}, f.prototype.emsa_pss_encode = function(t, e) { +var r = this.options.signingSchemeOptions.hash || s, +i = this.options.signingSchemeOptions.mgf || a.eme_oaep_mgf1, +f = this.options.signingSchemeOptions.saltLength || 20, +u = a.digestLength[r], +c = Math.ceil(e / 8); +if (c < u + f + 2) throw new Error("Output length passed to emBits(" + e + ") is too small for the options specified(" + r + ", " + f + "). To fix this issue increase the value of emBits. (minimum size: " + (8 * u + 8 * f + 9) + ")"); +var h = o.randomBytes(f), +p = n.alloc(8 + u + f); +p.fill(0, 0, 8), t.copy(p, 8), h.copy(p, 8 + t.length); +var l = o.createHash(r); +l.update(p), l = l.digest(); +var y = n.alloc(c - h.length - u - 2); +y.fill(0); +var g = n.alloc(y.length + 1 + h.length); +y.copy(g), g[y.length] = 1, h.copy(g, y.length + 1); +for (var d = i(l, g.length, r), v = n.alloc(g.length), m = 0; m < d.length; m++) v[m] = g[m] ^ d[m]; +var S = 8 * c - e, +_ = 255 ^ 255 >> 8 - S << 8 - S; +v[0] = v[0] & _; +var b = n.alloc(v.length + l.length + 1); +return v.copy(b, 0), l.copy(b, v.length), b[b.length - 1] = 188, b +}, f.prototype.emsa_pss_verify = function(t, e, r) { +var i = this.options.signingSchemeOptions.hash || s, +f = this.options.signingSchemeOptions.mgf || a.eme_oaep_mgf1, +u = this.options.signingSchemeOptions.saltLength || 20, +c = a.digestLength[i], +h = Math.ceil(r / 8); +if (h < c + u + 2 || 188 != e[e.length - 1]) return !1; +var p = n.alloc(h - c - 1); +e.copy(p, 0, 0, h - c - 1); +for (var l = 0, y = 0, g = 8 * h - r; y < g; y++) l |= 1 << 7 - y; +if (p[0] & l) return !1; +var d = e.slice(h - c - 1, h - 1), +v = f(d, p.length, i); +for (y = 0; y < p.length; y++) p[y] ^= v[y]; +for (l = 255 ^ 255 >> 8 - (g = 8 * h - r) << 8 - g, p[0] = p[0] & l, y = 0; 0 === p[y] && y < p.length; y++); +if (1 != p[y]) return !1; +var m = p.slice(p.length - u), +S = n.alloc(8 + c + u); +S.fill(0, 0, 8), t.copy(S, 8), m.copy(S, 8 + t.length); +var _ = o.createHash(i); +return _.update(S), _ = _.digest(), d.toString("hex") === _.toString("hex") +}, new f(t, e) +} +}, +1768: (t, e, r) => { +t.exports = { +pkcs1: r(8290), +pkcs1_oaep: r(2487), +pss: r(4414), +isEncryption: function(e) { +return t.exports[e] && t.exports[e].isEncryption +}, +isSignature: function(e) { +return t.exports[e] && t.exports[e].isSignature +} +} +}, +8226: (t, e, r) => { +var n = r(5606); +r(3200), t.exports.linebrk = function(t, e) { +for (var r = "", n = 0; n + e < t.length;) r += t.substring(n, n + e) + "\n", n += e; +return r + t.substring(n, t.length) +}, t.exports.detectEnvironment = function() { +return "browser"; +"undefined" == typeof window || !window || n && "node" === n.title ? "node" : "browser" +}, t.exports.get32IntFromBuffer = function(t, e) { +var r; +if (e = e || 0, (r = t.length - e) > 0) { +if (r >= 4) return t.readUIntBE(e, r); +for (var n = 0, i = e + r, o = 0; i > e; i--, o += 2) n += t[i - 1] * Math.pow(16, o); +return n +} +return NaN +}, t.exports._ = { +isObject: function(t) { +var e = typeof t; +return !!t && ("object" == e || "function" == e) +}, +isString: function(t) { +return "string" == typeof t || t instanceof String +}, +isNumber: function(t) { +return "number" == typeof t || !isNaN(parseFloat(t)) && isFinite(t) +}, +omit: function(t, e) { +var r = {}; +for (var n in t) t.hasOwnProperty(n) && n !== e && (r[n] = t[n]); +return r +} +}, t.exports.trimSurroundingText = function(t, e, r) { +var n = 0, +i = t.length, +o = t.indexOf(e); +o >= 0 && (n = o + e.length); +var s = t.indexOf(r, o); +return s >= 0 && (i = s), t.substring(n, i) +} +}, +8875: (t, e, r) => { +"use strict"; +var n; +if (!Object.keys) { +var i = Object.prototype.hasOwnProperty, +o = Object.prototype.toString, +s = r(1093), +a = Object.prototype.propertyIsEnumerable, +f = !a.call({ +toString: null +}, "toString"), +u = a.call((function() {}), "prototype"), +c = ["toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor"], +h = function(t) { +var e = t.constructor; +return e && e.prototype === t +}, p = { +$applicationCache: !0, +$console: !0, +$external: !0, +$frame: !0, +$frameElement: !0, +$frames: !0, +$innerHeight: !0, +$innerWidth: !0, +$onmozfullscreenchange: !0, +$onmozfullscreenerror: !0, +$outerHeight: !0, +$outerWidth: !0, +$pageXOffset: !0, +$pageYOffset: !0, +$parent: !0, +$scrollLeft: !0, +$scrollTop: !0, +$scrollX: !0, +$scrollY: !0, +$self: !0, +$webkitIndexedDB: !0, +$webkitStorageInfo: !0, +$window: !0 +}, l = function() { +if ("undefined" == typeof window) return !1; +for (var t in window) try { +if (!p["$" + t] && i.call(window, t) && null !== window[t] && "object" == typeof window[t]) try { + h(window[t]) +} catch (t) { + return !0 +} +} catch (t) { +return !0 +} +return !1 +}(); +n = function(t) { +var e = null !== t && "object" == typeof t, +r = "[object Function]" === o.call(t), +n = s(t), +a = e && "[object String]" === o.call(t), +p = []; +if (!e && !r && !n) throw new TypeError("Object.keys called on a non-object"); +var y = u && r; +if (a && t.length > 0 && !i.call(t, 0)) for (var g = 0; g < t.length; ++g) p.push(String(g)); +if (n && t.length > 0) for (var d = 0; d < t.length; ++d) p.push(String(d)); +else for (var v in t) y && "prototype" === v || !i.call(t, v) || p.push(String(v)); +if (f) for (var m = function(t) { +if ("undefined" == typeof window || !l) return h(t); +try { +return h(t) +} catch (t) { +return !1 +} +}(t), S = 0; S < c.length; ++S) m && "constructor" === c[S] || !i.call(t, c[S]) || p.push(c[S]); +return p +} +} +t.exports = n +}, +1189: (t, e, r) => { +"use strict"; +var n = Array.prototype.slice, +i = r(1093), +o = Object.keys, +s = o ? function(t) { +return o(t) +} : r(8875), +a = Object.keys; +s.shim = function() { +if (Object.keys) { +var t = function() { +var t = Object.keys(arguments); +return t && t.length === arguments.length +}(1, 2); +t || (Object.keys = function(t) { +return i(t) ? a(n.call(t)) : a(t) +}) +} else Object.keys = s; +return Object.keys || s +}, t.exports = s +}, +1093: t => { +"use strict"; +var e = Object.prototype.toString; +t.exports = function(t) { +var r = e.call(t), +n = "[object Arguments]" === r; +return n || (n = "[object Array]" !== r && null !== t && "object" == typeof t && "number" == typeof t.length && t.length >= 0 && "[object Function]" === e.call(t.callee)), n +} +}, +8403: (t, e, r) => { +"use strict"; +var n = r(1189), +i = r(1333)(), +o = r(8075), +s = Object, +a = o("Array.prototype.push"), +f = o("Object.prototype.propertyIsEnumerable"), +u = i ? Object.getOwnPropertySymbols : null; +t.exports = function(t, e) { +if (null == t) throw new TypeError("target must be an object"); +var r = s(t); +if (1 === arguments.length) return r; +for (var o = 1; o < arguments.length; ++o) { +var c = s(arguments[o]), +h = n(c), +p = i && (Object.getOwnPropertySymbols || u); +if (p) for (var l = p(c), y = 0; y < l.length; ++y) { +var g = l[y]; +f(c, g) && a(h, g) +} +for (var d = 0; d < h.length; ++d) { +var v = h[d]; +if (f(c, v)) { +var m = c[v]; +r[v] = m +} +} +} +return r +} +}, +1514: (t, e, r) => { +"use strict"; +var n = r(8403); +t.exports = function() { +return Object.assign ? function() { +if (!Object.assign) return !1; +for (var t = "abcdefghijklmnopqrst", e = t.split(""), r = {}, n = 0; n < e.length; ++n) r[e[n]] = e[n]; +var i = Object.assign({}, r), +o = ""; +for (var s in i) o += s; +return t !== o +}() || function() { +if (!Object.assign || !Object.preventExtensions) return !1; +var t = Object.preventExtensions({ +1: 2 +}); +try { +Object.assign(t, "xy") +} catch (e) { +return "y" === t[1] +} +return !1 +}() ? n : Object.assign : n +} +}, +5606: t => { +var e, r, n = t.exports = {}; + +function i() { +throw new Error("setTimeout has not been defined") +} +function o() { +throw new Error("clearTimeout has not been defined") +} +function s(t) { +if (e === setTimeout) return setTimeout(t, 0); +if ((e === i || !e) && setTimeout) return e = setTimeout, setTimeout(t, 0); +try { +return e(t, 0) +} catch (r) { +try { +return e.call(null, t, 0) +} catch (r) { +return e.call(this, t, 0) +} +} +}! function() { +try { +e = "function" == typeof setTimeout ? setTimeout : i +} catch (t) { +e = i +} +try { +r = "function" == typeof clearTimeout ? clearTimeout : o +} catch (t) { +r = o +} +}(); +var a, f = [], +u = !1, +c = -1; + +function h() { +u && a && (u = !1, a.length ? f = a.concat(f) : c = -1, f.length && p()) +} +function p() { +if (!u) { +var t = s(h); +u = !0; +for (var e = f.length; e;) { +for (a = f, f = []; ++c < e;) a && a[c].run(); +c = -1, e = f.length +} +a = null, u = !1, +function(t) { +if (r === clearTimeout) return clearTimeout(t); +if ((r === o || !r) && clearTimeout) return r = clearTimeout, clearTimeout(t); +try { +return r(t) +} catch (e) { +try { + return r.call(null, t) +} catch (e) { + return r.call(this, t) +} +} +}(t) +} +} +function l(t, e) { +this.fun = t, this.array = e +} +function y() {} +n.nextTick = function(t) { +var e = new Array(arguments.length - 1); +if (arguments.length > 1) for (var r = 1; r < arguments.length; r++) e[r - 1] = arguments[r]; +f.push(new l(t, e)), 1 !== f.length || u || s(p) +}, l.prototype.run = function() { +this.fun.apply(null, this.array) +}, n.title = "browser", n.browser = !0, n.env = {}, n.argv = [], n.version = "", n.versions = {}, n.on = y, n.addListener = y, n.once = y, n.off = y, n.removeListener = y, n.removeAllListeners = y, n.emit = y, n.prependListener = y, n.prependOnceListener = y, n.listeners = function(t) { +return [] +}, n.binding = function(t) { +throw new Error("process.binding is not supported") +}, n.cwd = function() { +return "/" +}, n.chdir = function(t) { +throw new Error("process.chdir is not supported") +}, n.umask = function() { +return 0 +} +}, +4774: (t, e, r) => { +"use strict"; +var n, i = r(5606), +o = r(8287), +s = o.Buffer, +a = {}; +for (n in o) o.hasOwnProperty(n) && "SlowBuffer" !== n && "Buffer" !== n && (a[n] = o[n]); +var f = a.Buffer = {}; +for (n in s) s.hasOwnProperty(n) && "allocUnsafe" !== n && "allocUnsafeSlow" !== n && (f[n] = s[n]); +if (a.Buffer.prototype = s.prototype, f.from && f.from !== Uint8Array.from || (f.from = function(t, e, r) { +if ("number" == typeof t) throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof t); +if (t && void 0 === t.length) throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof t); +return s(t, e, r) +}), f.alloc || (f.alloc = function(t, e, r) { +if ("number" != typeof t) throw new TypeError('The "size" argument must be of type number. Received type ' + typeof t); +if (t < 0 || t >= 2 * (1 << 30)) throw new RangeError('The value "' + t + '" is invalid for option "size"'); +var n = s(t); +return e && 0 !== e.length ? "string" == typeof r ? n.fill(e, r) : n.fill(e) : n.fill(0), n +}), !a.kStringMaxLength) try { +a.kStringMaxLength = i.binding("buffer") +.kStringMaxLength +} catch (t) {} +a.constants || (a.constants = { +MAX_LENGTH: a.kMaxLength +}, a.kStringMaxLength && (a.constants.MAX_STRING_LENGTH = a.kStringMaxLength)), t.exports = a +}, +6897: (t, e, r) => { +"use strict"; +var n = r(453), +i = r(41), +o = r(592)(), +s = r(5795), +a = r(9675), +f = n("%Math.floor%"); +t.exports = function(t, e) { +if ("function" != typeof t) throw new a("`fn` is not a function"); +if ("number" != typeof e || e < 0 || e > 4294967295 || f(e) !== e) throw new a("`length` must be a positive 32-bit integer"); +var r = arguments.length > 2 && !! arguments[2], +n = !0, +u = !0; +if ("length" in t && s) { +var c = s(t, "length"); +c && !c.configurable && (n = !1), c && !c.writable && (u = !1) +} +return (n || u || !r) && (o ? i(t, "length", e, !0, !0) : i(t, "length", e)), t +} +}, +3200: (t, e, r) => { +var n = r(8287) +.Buffer, +i = r(1396), +o = { +randomBytes: function(t) { +for (var e = [], r = 0; r < t; r++) e.push(Math.floor(256 * Math.random())); +return n.from(e) +}, +createHash(t) { +let e = n.from([]); +return { +update: function(t) { + return e = n.concat([e, t]), this +}, +digest: function() { + let r = i[t.toUpperCase()](i.lib.WordArray.create(new Uint8Array(e))) + .toString(); + return n.from(r, "hex") +} +} +} +}; +t.exports = o +}, +7033: (t, e, r) => { +var n = r(8287) +.Buffer; +const i = r(3229); +let o = { +outputEncoding: "", +PublicFormat: "pkcs1-public", +PrivateFormat: "pkcs1-private", +options: { +environment: "browser", +encryptionScheme: "pkcs1" +} +}; +t.exports = { +NodeRSA: i, +encryptRSAWithPublicKey: function(t, e, r) { +r=r||{}; +return r = Object.assign({}, o, r), new i(e, r.PublicFormat, r.options) +.encrypt(t, r.outEncoding || "base64") +}, +encryptRSAWithPrivateKey: function(t, e, r) { +r=r||{}; +return r = Object.assign({}, o, r), new i(e, r.PrivateFormat, r.options) +.encryptPrivate(t, r.outputEncoding || "base64") +}, +decryptRSAWithPublicKey: function(t, e, r) { +r=r||{}; +return r = Object.assign({}, o, r), new i(e, r.PublicEncoding, r.options) +.decryptPublic(t, r.outEncoding || "utf8") +}, +decryptRSAWithPrivateKey: function(t, e, r ) { +r=r||{}; +return r = Object.assign({}, o, r), new i(e, r.PrivateEncoding, r.options) +.decrypt(t, r.outEncoding || "utf8") +}, +sign: function(t, e, r) { +r=r||{}; +return r = Object.assign({}, o, r), new i(e, r.PrivateEncoding, r.options) +.sign(t, r.outEncoding || "base64") +}, +verify: function(t, e, r, s) { +s=s||{}; +return "string" == typeof e && e.match(/^([0-9a-fA-F]{2})*$/) ? e = n.from(e, "hex") : "string" == typeof e && (e = n.from(e, "base64")), s = Object.assign({}, o, s), new i(r, s.PublicEncoding, s.options) +.verify(t, e) +} +} +}, +7449: t => { +"use strict"; +t.exports = JSON.parse('{"O_RDONLY":0,"O_WRONLY":1,"O_RDWR":2,"S_IFMT":61440,"S_IFREG":32768,"S_IFDIR":16384,"S_IFCHR":8192,"S_IFBLK":24576,"S_IFIFO":4096,"S_IFLNK":40960,"S_IFSOCK":49152,"O_CREAT":512,"O_EXCL":2048,"O_NOCTTY":131072,"O_TRUNC":1024,"O_APPEND":8,"O_DIRECTORY":1048576,"O_NOFOLLOW":256,"O_SYNC":128,"O_SYMLINK":2097152,"O_NONBLOCK":4,"S_IRWXU":448,"S_IRUSR":256,"S_IWUSR":128,"S_IXUSR":64,"S_IRWXG":56,"S_IRGRP":32,"S_IWGRP":16,"S_IXGRP":8,"S_IRWXO":7,"S_IROTH":4,"S_IWOTH":2,"S_IXOTH":1,"E2BIG":7,"EACCES":13,"EADDRINUSE":48,"EADDRNOTAVAIL":49,"EAFNOSUPPORT":47,"EAGAIN":35,"EALREADY":37,"EBADF":9,"EBADMSG":94,"EBUSY":16,"ECANCELED":89,"ECHILD":10,"ECONNABORTED":53,"ECONNREFUSED":61,"ECONNRESET":54,"EDEADLK":11,"EDESTADDRREQ":39,"EDOM":33,"EDQUOT":69,"EEXIST":17,"EFAULT":14,"EFBIG":27,"EHOSTUNREACH":65,"EIDRM":90,"EILSEQ":92,"EINPROGRESS":36,"EINTR":4,"EINVAL":22,"EIO":5,"EISCONN":56,"EISDIR":21,"ELOOP":62,"EMFILE":24,"EMLINK":31,"EMSGSIZE":40,"EMULTIHOP":95,"ENAMETOOLONG":63,"ENETDOWN":50,"ENETRESET":52,"ENETUNREACH":51,"ENFILE":23,"ENOBUFS":55,"ENODATA":96,"ENODEV":19,"ENOENT":2,"ENOEXEC":8,"ENOLCK":77,"ENOLINK":97,"ENOMEM":12,"ENOMSG":91,"ENOPROTOOPT":42,"ENOSPC":28,"ENOSR":98,"ENOSTR":99,"ENOSYS":78,"ENOTCONN":57,"ENOTDIR":20,"ENOTEMPTY":66,"ENOTSOCK":38,"ENOTSUP":45,"ENOTTY":25,"ENXIO":6,"EOPNOTSUPP":102,"EOVERFLOW":84,"EPERM":1,"EPIPE":32,"EPROTO":100,"EPROTONOSUPPORT":43,"EPROTOTYPE":41,"ERANGE":34,"EROFS":30,"ESPIPE":29,"ESRCH":3,"ESTALE":70,"ETIME":101,"ETIMEDOUT":60,"ETXTBSY":26,"EWOULDBLOCK":35,"EXDEV":18,"SIGHUP":1,"SIGINT":2,"SIGQUIT":3,"SIGILL":4,"SIGTRAP":5,"SIGABRT":6,"SIGIOT":6,"SIGBUS":10,"SIGFPE":8,"SIGKILL":9,"SIGUSR1":30,"SIGSEGV":11,"SIGUSR2":31,"SIGPIPE":13,"SIGALRM":14,"SIGTERM":15,"SIGCHLD":20,"SIGCONT":19,"SIGSTOP":17,"SIGTSTP":18,"SIGTTIN":21,"SIGTTOU":22,"SIGURG":16,"SIGXCPU":24,"SIGXFSZ":25,"SIGVTALRM":26,"SIGPROF":27,"SIGWINCH":28,"SIGIO":23,"SIGSYS":12,"SSL_OP_ALL":2147486719,"SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION":262144,"SSL_OP_CIPHER_SERVER_PREFERENCE":4194304,"SSL_OP_CISCO_ANYCONNECT":32768,"SSL_OP_COOKIE_EXCHANGE":8192,"SSL_OP_CRYPTOPRO_TLSEXT_BUG":2147483648,"SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS":2048,"SSL_OP_EPHEMERAL_RSA":0,"SSL_OP_LEGACY_SERVER_CONNECT":4,"SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER":32,"SSL_OP_MICROSOFT_SESS_ID_BUG":1,"SSL_OP_MSIE_SSLV2_RSA_PADDING":0,"SSL_OP_NETSCAPE_CA_DN_BUG":536870912,"SSL_OP_NETSCAPE_CHALLENGE_BUG":2,"SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG":1073741824,"SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG":8,"SSL_OP_NO_COMPRESSION":131072,"SSL_OP_NO_QUERY_MTU":4096,"SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION":65536,"SSL_OP_NO_SSLv2":16777216,"SSL_OP_NO_SSLv3":33554432,"SSL_OP_NO_TICKET":16384,"SSL_OP_NO_TLSv1":67108864,"SSL_OP_NO_TLSv1_1":268435456,"SSL_OP_NO_TLSv1_2":134217728,"SSL_OP_PKCS1_CHECK_1":0,"SSL_OP_PKCS1_CHECK_2":0,"SSL_OP_SINGLE_DH_USE":1048576,"SSL_OP_SINGLE_ECDH_USE":524288,"SSL_OP_SSLEAY_080_CLIENT_DH_BUG":128,"SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG":0,"SSL_OP_TLS_BLOCK_PADDING_BUG":512,"SSL_OP_TLS_D5_BUG":256,"SSL_OP_TLS_ROLLBACK_BUG":8388608,"ENGINE_METHOD_DSA":2,"ENGINE_METHOD_DH":4,"ENGINE_METHOD_RAND":8,"ENGINE_METHOD_ECDH":16,"ENGINE_METHOD_ECDSA":32,"ENGINE_METHOD_CIPHERS":64,"ENGINE_METHOD_DIGESTS":128,"ENGINE_METHOD_STORE":256,"ENGINE_METHOD_PKEY_METHS":512,"ENGINE_METHOD_PKEY_ASN1_METHS":1024,"ENGINE_METHOD_ALL":65535,"ENGINE_METHOD_NONE":0,"DH_CHECK_P_NOT_SAFE_PRIME":2,"DH_CHECK_P_NOT_PRIME":1,"DH_UNABLE_TO_CHECK_GENERATOR":4,"DH_NOT_SUITABLE_GENERATOR":8,"NPN_ENABLED":1,"RSA_PKCS1_PADDING":1,"RSA_SSLV23_PADDING":2,"RSA_NO_PADDING":3,"RSA_PKCS1_OAEP_PADDING":4,"RSA_X931_PADDING":5,"RSA_PKCS1_PSS_PADDING":6,"POINT_CONVERSION_COMPRESSED":2,"POINT_CONVERSION_UNCOMPRESSED":4,"POINT_CONVERSION_HYBRID":6,"F_OK":0,"R_OK":4,"W_OK":2,"X_OK":1,"UV_UDP_REUSEADDR":4}') +} +}, e = {}; + +function r(n) { +var i = e[n]; +if (void 0 !== i) return i.exports; +var o = e[n] = { +exports: {} +}; +return t[n].call(o.exports, o, o.exports, r), o.exports +} +return r.g = function() { +if ("object" == typeof globalThis) return globalThis; +try { +return this || new Function("return this")() +} catch (t) { +if ("object" == typeof window) return window +} +}(), r(7033) +})())); \ No newline at end of file diff --git a/drpy_t3/drpy_libs/node-rsa.js b/drpy_t3/drpy_libs/node-rsa.js new file mode 100644 index 0000000..b5ca093 --- /dev/null +++ b/drpy_t3/drpy_libs/node-rsa.js @@ -0,0 +1,2 @@ +/*! For license information please see node-rsa.bundle.js.LICENSE.txt */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.NODERSA=e():t.NODERSA=e()}(globalThis,(()=>(()=>{var t={6395:t=>{t.exports={newInvalidAsn1Error:function(t){var e=new Error;return e.name="InvalidAsn1Error",e.message=t||"",e}}},5670:(t,e,r)=>{var n=r(6395),i=r(6299),o=r(3319),s=r(1431);for(var a in t.exports={Reader:o,Writer:s},i)i.hasOwnProperty(a)&&(t.exports[a]=i[a]);for(var f in n)n.hasOwnProperty(f)&&(t.exports[f]=n[f])},3319:(t,e,r)=>{var n=r(4529),i=r(4774).Buffer,o=r(6299),s=r(6395).newInvalidAsn1Error;function a(t){if(!t||!i.isBuffer(t))throw new TypeError("data must be a node Buffer");this._buf=t,this._size=t.length,this._len=0,this._offset=0}Object.defineProperty(a.prototype,"length",{enumerable:!0,get:function(){return this._len}}),Object.defineProperty(a.prototype,"offset",{enumerable:!0,get:function(){return this._offset}}),Object.defineProperty(a.prototype,"remain",{get:function(){return this._size-this._offset}}),Object.defineProperty(a.prototype,"buffer",{get:function(){return this._buf.slice(this._offset)}}),a.prototype.readByte=function(t){if(this._size-this._offset<1)return null;var e=255&this._buf[this._offset];return t||(this._offset+=1),e},a.prototype.peek=function(){return this.readByte(!0)},a.prototype.readLength=function(t){if(void 0===t&&(t=this._offset),t>=this._size)return null;var e=255&this._buf[t++];if(null===e)return null;if(128&~e)this._len=e;else{if(0==(e&=127))throw s("Indefinite length not supported");if(e>4)throw s("encoding too long");if(this._size-tthis._size-n)return null;if(this._offset=n,0===this.length)return e?i.alloc(0):"";var a=this._buf.slice(this._offset,this._offset+this.length);return this._offset+=this.length,e?a:a.toString("utf8")},a.prototype.readOID=function(t){t||(t=o.OID);var e=this.readString(t,!0);if(null===e)return null;for(var r=[],n=0,i=0;i4)throw s("Integer too long: "+this.length);if(this.length>this._size-r)return null;this._offset=r;for(var i=this._buf[this._offset],o=0,a=0;a{t.exports={EOC:0,Boolean:1,Integer:2,BitString:3,OctetString:4,Null:5,OID:6,ObjectDescriptor:7,External:8,Real:9,Enumeration:10,PDV:11,Utf8String:12,RelativeOID:13,Sequence:16,Set:17,NumericString:18,PrintableString:19,T61String:20,VideotexString:21,IA5String:22,UTCTime:23,GeneralizedTime:24,GraphicString:25,VisibleString:26,GeneralString:28,UniversalString:29,CharacterString:30,BMPString:31,Constructor:32,Context:128}},1431:(t,e,r)=>{var n=r(4529),i=r(4774).Buffer,o=r(6299),s=r(6395).newInvalidAsn1Error,a={size:1024,growthFactor:8};function f(t){var e,r;e=a,r=t||{},n.ok(e),n.equal(typeof e,"object"),n.ok(r),n.equal(typeof r,"object"),Object.getOwnPropertyNames(e).forEach((function(t){if(!r[t]){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n)}})),t=r,this._buf=i.alloc(t.size||1024),this._size=this._buf.length,this._offset=0,this._options=t,this._seq=[]}Object.defineProperty(f.prototype,"buffer",{get:function(){if(this._seq.length)throw s(this._seq.length+" unended sequence(s)");return this._buf.slice(0,this._offset)}}),f.prototype.writeByte=function(t){if("number"!=typeof t)throw new TypeError("argument must be a Number");this._ensure(1),this._buf[this._offset++]=t},f.prototype.writeInt=function(t,e){if("number"!=typeof t)throw new TypeError("argument must be a Number");"number"!=typeof e&&(e=o.Integer);for(var r=4;(!(4286578688&t)||-8388608==(4286578688&t))&&r>1;)r--,t<<=8;if(r>4)throw s("BER ints cannot be > 0xffffffff");for(this._ensure(2+r),this._buf[this._offset++]=e,this._buf[this._offset++]=r;r-- >0;)this._buf[this._offset++]=(4278190080&t)>>>24,t<<=8},f.prototype.writeNull=function(){this.writeByte(o.Null),this.writeByte(0)},f.prototype.writeEnumeration=function(t,e){if("number"!=typeof t)throw new TypeError("argument must be a Number");return"number"!=typeof e&&(e=o.Enumeration),this.writeInt(t,e)},f.prototype.writeBoolean=function(t,e){if("boolean"!=typeof t)throw new TypeError("argument must be a Boolean");"number"!=typeof e&&(e=o.Boolean),this._ensure(3),this._buf[this._offset++]=e,this._buf[this._offset++]=1,this._buf[this._offset++]=t?255:0},f.prototype.writeString=function(t,e){if("string"!=typeof t)throw new TypeError("argument must be a string (was: "+typeof t+")");"number"!=typeof e&&(e=o.OctetString);var r=i.byteLength(t);this.writeByte(e),this.writeLength(r),r&&(this._ensure(r),this._buf.write(t,this._offset),this._offset+=r)},f.prototype.writeBuffer=function(t,e){if("number"!=typeof e)throw new TypeError("tag must be a number");if(!i.isBuffer(t))throw new TypeError("argument must be a buffer");this.writeByte(e),this.writeLength(t.length),this._ensure(t.length),t.copy(this._buf,this._offset,0,t.length),this._offset+=t.length},f.prototype.writeStringArray=function(t){if(!t instanceof Array)throw new TypeError("argument must be an Array[String]");var e=this;t.forEach((function(t){e.writeString(t)}))},f.prototype.writeOID=function(t,e){if("string"!=typeof t)throw new TypeError("argument must be a string");if("number"!=typeof e&&(e=o.OID),!/^([0-9]+\.){3,}[0-9]+$/.test(t))throw new Error("argument is not a valid OID string");var r=t.split("."),n=[];n.push(40*parseInt(r[0],10)+parseInt(r[1],10)),r.slice(2).forEach((function(t){!function(t,e){e<128?t.push(e):e<16384?(t.push(e>>>7|128),t.push(127&e)):e<2097152?(t.push(e>>>14|128),t.push(e>>>7&255|128),t.push(127&e)):e<268435456?(t.push(e>>>21|128),t.push(e>>>14&255|128),t.push(e>>>7&255|128),t.push(127&e)):(t.push(e>>>28&255|128),t.push(e>>>21&255|128),t.push(e>>>14&255|128),t.push(e>>>7&255|128),t.push(127&e))}(n,parseInt(t,10))}));var i=this;this._ensure(2+n.length),this.writeByte(e),this.writeLength(n.length),n.forEach((function(t){i.writeByte(t)}))},f.prototype.writeLength=function(t){if("number"!=typeof t)throw new TypeError("argument must be a Number");if(this._ensure(4),t<=127)this._buf[this._offset++]=t;else if(t<=255)this._buf[this._offset++]=129,this._buf[this._offset++]=t;else if(t<=65535)this._buf[this._offset++]=130,this._buf[this._offset++]=t>>8,this._buf[this._offset++]=t;else{if(!(t<=16777215))throw s("Length too long (> 4 bytes)");this._buf[this._offset++]=131,this._buf[this._offset++]=t>>16,this._buf[this._offset++]=t>>8,this._buf[this._offset++]=t}},f.prototype.startSequence=function(t){"number"!=typeof t&&(t=o.Sequence|o.Constructor),this.writeByte(t),this._seq.push(this._offset),this._ensure(3),this._offset+=3},f.prototype.endSequence=function(){var t=this._seq.pop(),e=t+3,r=this._offset-e;if(r<=127)this._shift(e,r,-2),this._buf[t]=r;else if(r<=255)this._shift(e,r,-1),this._buf[t]=129,this._buf[t+1]=r;else if(r<=65535)this._buf[t]=130,this._buf[t+1]=r>>8,this._buf[t+2]=r;else{if(!(r<=16777215))throw s("Sequence too long");this._shift(e,r,1),this._buf[t]=131,this._buf[t+1]=r>>16,this._buf[t+2]=r>>8,this._buf[t+3]=r}},f.prototype._shift=function(t,e,r){n.ok(void 0!==t),n.ok(void 0!==e),n.ok(r),this._buf.copy(this._buf,t+r,t,t+e),this._offset+=r},f.prototype._ensure=function(t){if(n.ok(t),this._size-this._offset{var n=r(5670);t.exports={Ber:n,BerReader:n.Reader,BerWriter:n.Writer}},4529:(t,e,r)=>{"use strict";var n=r(1514)();function i(t,e){if(t===e)return 0;for(var r=t.length,n=e.length,i=0,o=Math.min(r,n);i=0;u--)if(c[u]!==h[u])return!1;for(u=c.length-1;u>=0;u--)if(!S(t[a=c[u]],e[a],r,n))return!1;return!0}(t,e,r,n))}return r?t===e:t==e}function _(t){return"[object Arguments]"==Object.prototype.toString.call(t)}function b(t,e){if(!t||!e)return!1;if("[object RegExp]"==Object.prototype.toString.call(e))return e.test(t);try{if(t instanceof e)return!0}catch(t){}return!Error.isPrototypeOf(e)&&!0===e.call({},t)}function E(t,e,r,n){var i;if("function"!=typeof e)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(n=r,r=null),i=function(t){var e;try{t()}catch(t){e=t}return e}(e),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),t&&!i&&v(i,r,"Missing expected exception"+n);var o="string"==typeof n,a=!t&&i&&!r;if((!t&&s.isError(i)&&o&&b(i,r)||a)&&v(i,r,"Got unwanted exception"+n),t&&i&&r&&!b(i,r)||!t&&i)throw i}p.AssertionError=function(t){this.name="AssertionError",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=g(d(this.actual),128)+" "+this.operator+" "+g(d(this.expected),128),this.generatedMessage=!0);var e=t.stackStartFunction||v;if(Error.captureStackTrace)Error.captureStackTrace(this,e);else{var r=new Error;if(r.stack){var n=r.stack,i=y(e),o=n.indexOf("\n"+i);if(o>=0){var s=n.indexOf("\n",o+1);n=n.substring(s+1)}this.stack=n}}},s.inherits(p.AssertionError,Error),p.fail=v,p.ok=m,p.equal=function(t,e,r){t!=e&&v(t,e,r,"==",p.equal)},p.notEqual=function(t,e,r){t==e&&v(t,e,r,"!=",p.notEqual)},p.deepEqual=function(t,e,r){S(t,e,!1)||v(t,e,r,"deepEqual",p.deepEqual)},p.deepStrictEqual=function(t,e,r){S(t,e,!0)||v(t,e,r,"deepStrictEqual",p.deepStrictEqual)},p.notDeepEqual=function(t,e,r){S(t,e,!1)&&v(t,e,r,"notDeepEqual",p.notDeepEqual)},p.notDeepStrictEqual=function t(e,r,n){S(e,r,!0)&&v(e,r,n,"notDeepStrictEqual",t)},p.strictEqual=function(t,e,r){t!==e&&v(t,e,r,"===",p.strictEqual)},p.notStrictEqual=function(t,e,r){t===e&&v(t,e,r,"!==",p.notStrictEqual)},p.throws=function(t,e,r){E(!0,t,e,r)},p.doesNotThrow=function(t,e,r){E(!1,t,e,r)},p.ifError=function(t){if(t)throw t},p.strict=n((function t(e,r){e||v(e,!0,r,"==",t)}),p,{equal:p.strictEqual,deepEqual:p.deepStrictEqual,notEqual:p.notStrictEqual,notDeepEqual:p.notDeepStrictEqual}),p.strict.strict=p.strict;var w=Object.keys||function(t){var e=[];for(var r in t)a.call(t,r)&&e.push(r);return e}},6100:t=>{"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},3845:t=>{t.exports=function(t){return t&&"object"==typeof t&&"function"==typeof t.copy&&"function"==typeof t.fill&&"function"==typeof t.readUInt8}},4591:(t,e,r)=>{var n=r(5606),i=/%[sdj%]/g;e.format=function(t){if(!v(t)){for(var e=[],r=0;r=o)return t;switch(t){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(t){return"[Circular]"}default:return t}})),f=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),y(r)?n.showHidden=r:r&&e._extend(n,r),m(n.showHidden)&&(n.showHidden=!1),m(n.depth)&&(n.depth=2),m(n.colors)&&(n.colors=!1),m(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=f),c(n,t,n.depth)}function f(t,e){var r=a.styles[e];return r?"["+a.colors[r][0]+"m"+t+"["+a.colors[r][1]+"m":t}function u(t,e){return t}function c(t,r,n){if(t.customInspect&&r&&w(r.inspect)&&r.inspect!==e.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,t);return v(i)||(i=c(t,i,n)),i}var o=function(t,e){if(m(e))return t.stylize("undefined","undefined");if(v(e)){var r="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(r,"string")}return d(e)?t.stylize(""+e,"number"):y(e)?t.stylize(""+e,"boolean"):g(e)?t.stylize("null","null"):void 0}(t,r);if(o)return o;var s=Object.keys(r),a=function(t){var e={};return t.forEach((function(t,r){e[t]=!0})),e}(s);if(t.showHidden&&(s=Object.getOwnPropertyNames(r)),E(r)&&(s.indexOf("message")>=0||s.indexOf("description")>=0))return h(r);if(0===s.length){if(w(r)){var f=r.name?": "+r.name:"";return t.stylize("[Function"+f+"]","special")}if(S(r))return t.stylize(RegExp.prototype.toString.call(r),"regexp");if(b(r))return t.stylize(Date.prototype.toString.call(r),"date");if(E(r))return h(r)}var u,_="",O=!1,B=["{","}"];return l(r)&&(O=!0,B=["[","]"]),w(r)&&(_=" [Function"+(r.name?": "+r.name:"")+"]"),S(r)&&(_=" "+RegExp.prototype.toString.call(r)),b(r)&&(_=" "+Date.prototype.toUTCString.call(r)),E(r)&&(_=" "+h(r)),0!==s.length||O&&0!=r.length?n<0?S(r)?t.stylize(RegExp.prototype.toString.call(r),"regexp"):t.stylize("[Object]","special"):(t.seen.push(r),u=O?function(t,e,r,n,i){for(var o=[],s=0,a=e.length;s60?r[0]+(""===e?"":e+"\n ")+" "+t.join(",\n ")+" "+r[1]:r[0]+e+" "+t.join(", ")+" "+r[1]}(u,_,B)):B[0]+_+B[1]}function h(t){return"["+Error.prototype.toString.call(t)+"]"}function p(t,e,r,n,i,o){var s,a,f;if((f=Object.getOwnPropertyDescriptor(e,i)||{value:e[i]}).get?a=f.set?t.stylize("[Getter/Setter]","special"):t.stylize("[Getter]","special"):f.set&&(a=t.stylize("[Setter]","special")),x(n,i)||(s="["+i+"]"),a||(t.seen.indexOf(f.value)<0?(a=g(r)?c(t,f.value,null):c(t,f.value,r-1)).indexOf("\n")>-1&&(a=o?a.split("\n").map((function(t){return" "+t})).join("\n").substr(2):"\n"+a.split("\n").map((function(t){return" "+t})).join("\n")):a=t.stylize("[Circular]","special")),m(s)){if(o&&i.match(/^\d+$/))return a;(s=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=t.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=t.stylize(s,"string"))}return s+": "+a}function l(t){return Array.isArray(t)}function y(t){return"boolean"==typeof t}function g(t){return null===t}function d(t){return"number"==typeof t}function v(t){return"string"==typeof t}function m(t){return void 0===t}function S(t){return _(t)&&"[object RegExp]"===O(t)}function _(t){return"object"==typeof t&&null!==t}function b(t){return _(t)&&"[object Date]"===O(t)}function E(t){return _(t)&&("[object Error]"===O(t)||t instanceof Error)}function w(t){return"function"==typeof t}function O(t){return Object.prototype.toString.call(t)}function B(t){return t<10?"0"+t.toString(10):t.toString(10)}e.debuglog=function(t){if(m(o)&&(o=n.env.NODE_DEBUG||""),t=t.toUpperCase(),!s[t])if(new RegExp("\\b"+t+"\\b","i").test(o)){var r=n.pid;s[t]=function(){var n=e.format.apply(e,arguments);console.error("%s %d: %s",t,r,n)}}else s[t]=function(){};return s[t]},e.inspect=a,a.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},a.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},e.isArray=l,e.isBoolean=y,e.isNull=g,e.isNullOrUndefined=function(t){return null==t},e.isNumber=d,e.isString=v,e.isSymbol=function(t){return"symbol"==typeof t},e.isUndefined=m,e.isRegExp=S,e.isObject=_,e.isDate=b,e.isError=E,e.isFunction=w,e.isPrimitive=function(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t},e.isBuffer=r(3845);var A=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function x(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.log=function(){var t,r;console.log("%s - %s",(r=[B((t=new Date).getHours()),B(t.getMinutes()),B(t.getSeconds())].join(":"),[t.getDate(),A[t.getMonth()],r].join(" ")),e.format.apply(e,arguments))},e.inherits=r(6100),e._extend=function(t,e){if(!e||!_(e))return t;for(var r=Object.keys(e),n=r.length;n--;)t[r[n]]=e[r[n]];return t}},7526:(t,e)=>{"use strict";e.byteLength=function(t){var e=a(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,o=a(t),s=o[0],f=o[1],u=new i(function(t,e,r){return 3*(e+r)/4-r}(0,s,f)),c=0,h=f>0?s-4:s;for(r=0;r>16&255,u[c++]=e>>8&255,u[c++]=255&e;return 2===f&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,u[c++]=255&e),1===f&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,u[c++]=e>>8&255,u[c++]=255&e),u},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],s=16383,a=0,u=n-i;au?u:a+s));return 1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"=")),o.join("")};for(var r=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0;s<64;++s)r[s]=o[s],n[o.charCodeAt(s)]=s;function a(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function f(t,e,n){for(var i,o,s=[],a=e;a>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return s.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},8287:(t,e,r)=>{"use strict";var n=r(7526),i=r(251);e.Buffer=a,e.SlowBuffer=function(t){return+t!=t&&(t=0),a.alloc(+t)},e.INSPECT_MAX_BYTES=50;var o=2147483647;function s(t){if(t>o)throw new RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return e.__proto__=a.prototype,e}function a(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return c(t)}return f(t,e,r)}function f(t,e,r){if("string"==typeof t)return function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!a.isEncoding(e))throw new TypeError("Unknown encoding: "+e);var r=0|l(t,e),n=s(r),i=n.write(t,e);return i!==r&&(n=n.slice(0,i)),n}(t,e);if(ArrayBuffer.isView(t))return h(t);if(null==t)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(H(t,ArrayBuffer)||t&&H(t.buffer,ArrayBuffer))return function(t,e,r){if(e<0||t.byteLength=o)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o.toString(16)+" bytes");return 0|t}function l(t,e){if(a.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||H(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return U(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return M(t).length;default:if(i)return n?-1:U(t).length;e=(""+e).toLowerCase(),i=!0}}function y(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return T(this,e,r);case"utf8":case"utf-8":return B(this,e,r);case"ascii":return x(this,e,r);case"latin1":case"binary":return P(this,e,r);case"base64":return O(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function g(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function d(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),F(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=a.from(e,n)),a.isBuffer(e))return 0===e.length?-1:v(t,e,r,n,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):v(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function v(t,e,r,n,i){var o,s=1,a=t.length,f=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,a/=2,f/=2,r/=2}function u(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var c=-1;for(o=r;oa&&(r=a-f),o=r;o>=0;o--){for(var h=!0,p=0;pi&&(n=i):n=i;var o=e.length;n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function O(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function B(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:u>223?3:u>191?2:1;if(i+h<=r)switch(h){case 1:u<128&&(c=u);break;case 2:128==(192&(o=t[i+1]))&&(f=(31&u)<<6|63&o)>127&&(c=f);break;case 3:o=t[i+1],s=t[i+2],128==(192&o)&&128==(192&s)&&(f=(15&u)<<12|(63&o)<<6|63&s)>2047&&(f<55296||f>57343)&&(c=f);break;case 4:o=t[i+1],s=t[i+2],a=t[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(f=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&f<1114112&&(c=f)}null===c?(c=65533,h=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),i+=h}return function(t){var e=t.length;if(e<=A)return String.fromCharCode.apply(String,t);for(var r="",n=0;nr&&(t+=" ... "),""},a.prototype.compare=function(t,e,r,n,i){if(H(t,Uint8Array)&&(t=a.from(t,t.offset,t.byteLength)),!a.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(n>>>=0),s=(r>>>=0)-(e>>>=0),f=Math.min(o,s),u=this.slice(n,i),c=t.slice(e,r),h=0;h>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return m(this,t,e,r);case"utf8":case"utf-8":return S(this,t,e,r);case"ascii":return _(this,t,e,r);case"latin1":case"binary":return b(this,t,e,r);case"base64":return E(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return w(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var A=4096;function x(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;ii)&&(r=i);for(var o="",s=e;sr)throw new RangeError("Trying to access beyond buffer length")}function D(t,e,r,n,i,o){if(!a.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function R(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function N(t,e,r,n,o){return e=+e,r>>>=0,o||R(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function L(t,e,r,n,o){return e=+e,r>>>=0,o||R(t,0,r,8),i.write(t,e,r,n,52,8),r+8}a.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||k(t,e,this.length);for(var n=this[t],i=1,o=0;++o>>=0,e>>>=0,r||k(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},a.prototype.readUInt8=function(t,e){return t>>>=0,e||k(t,1,this.length),this[t]},a.prototype.readUInt16LE=function(t,e){return t>>>=0,e||k(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUInt16BE=function(t,e){return t>>>=0,e||k(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUInt32LE=function(t,e){return t>>>=0,e||k(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},a.prototype.readUInt32BE=function(t,e){return t>>>=0,e||k(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||k(t,e,this.length);for(var n=this[t],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*e)),n},a.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||k(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},a.prototype.readInt8=function(t,e){return t>>>=0,e||k(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},a.prototype.readInt16LE=function(t,e){t>>>=0,e||k(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt16BE=function(t,e){t>>>=0,e||k(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt32LE=function(t,e){return t>>>=0,e||k(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},a.prototype.readInt32BE=function(t,e){return t>>>=0,e||k(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},a.prototype.readFloatLE=function(t,e){return t>>>=0,e||k(t,4,this.length),i.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,e){return t>>>=0,e||k(t,4,this.length),i.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,e){return t>>>=0,e||k(t,8,this.length),i.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,e){return t>>>=0,e||k(t,8,this.length),i.read(this,t,!1,52,8)},a.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||D(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[e]=255&t;++o>>=0,r>>>=0,n||D(this,t,e,r,Math.pow(2,8*r)-1,0);var i=r-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+r},a.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,1,255,0),this[e]=255&t,e+1},a.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},a.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);D(this,t,e,r,i-1,-i)}var o=0,s=1,a=0;for(this[e]=255&t;++o>>=0,!n){var i=Math.pow(2,8*r-1);D(this,t,e,r,i-1,-i)}var o=r-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s|0)-a&255;return e+r},a.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},a.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},a.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeFloatLE=function(t,e,r){return N(this,t,e,!0,r)},a.prototype.writeFloatBE=function(t,e,r){return N(this,t,e,!1,r)},a.prototype.writeDoubleLE=function(t,e,r){return L(this,t,e,!0,r)},a.prototype.writeDoubleBE=function(t,e,r){return L(this,t,e,!1,r)},a.prototype.copy=function(t,e,r,n){if(!a.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--o)t[o+e]=this[o+r];else Uint8Array.prototype.set.call(t,this.subarray(r,n),e);return i},a.prototype.fill=function(t,e,r,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!a.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===t.length){var i=t.charCodeAt(0);("utf8"===n&&i<128||"latin1"===n)&&(t=i)}}else"number"==typeof t&&(t&=255);if(e<0||this.length>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function M(t){return n.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(C,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function j(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function H(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function F(t){return t!=t}},8075:(t,e,r)=>{"use strict";var n=r(453),i=r(487),o=i(n("String.prototype.indexOf"));t.exports=function(t,e){var r=n(t,!!e);return"function"==typeof r&&o(t,".prototype.")>-1?i(r):r}},487:(t,e,r)=>{"use strict";var n=r(6743),i=r(453),o=r(6897),s=r(9675),a=i("%Function.prototype.apply%"),f=i("%Function.prototype.call%"),u=i("%Reflect.apply%",!0)||n.call(f,a),c=r(655),h=i("%Math.max%");t.exports=function(t){if("function"!=typeof t)throw new s("a function is required");var e=u(n,f,arguments);return o(e,1+h(0,t.length-(arguments.length-1)),!0)};var p=function(){return u(n,a,arguments)};c?c(t.exports,"apply",{value:p}):t.exports.apply=p},955:function(t,e,r){var n;t.exports=(n=r(9021),r(754),r(4636),r(9506),r(7165),function(){var t=n,e=t.lib.BlockCipher,r=t.algo,i=[],o=[],s=[],a=[],f=[],u=[],c=[],h=[],p=[],l=[];!function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;var r=0,n=0;for(e=0;e<256;e++){var y=n^n<<1^n<<2^n<<3^n<<4;y=y>>>8^255&y^99,i[r]=y,o[y]=r;var g=t[r],d=t[g],v=t[d],m=257*t[y]^16843008*y;s[r]=m<<24|m>>>8,a[r]=m<<16|m>>>16,f[r]=m<<8|m>>>24,u[r]=m,m=16843009*v^65537*d^257*g^16843008*r,c[y]=m<<24|m>>>8,h[y]=m<<16|m>>>16,p[y]=m<<8|m>>>24,l[y]=m,r?(r=g^t[t[t[v^g]]],n^=t[t[n]]):r=n=1}}();var y=[0,1,2,4,8,16,32,64,128,27,54],g=r.AES=e.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,n=4*((this._nRounds=r+6)+1),o=this._keySchedule=[],s=0;s6&&s%r==4&&(a=i[a>>>24]<<24|i[a>>>16&255]<<16|i[a>>>8&255]<<8|i[255&a]):(a=i[(a=a<<8|a>>>24)>>>24]<<24|i[a>>>16&255]<<16|i[a>>>8&255]<<8|i[255&a],a^=y[s/r|0]<<24),o[s]=o[s-r]^a}for(var f=this._invKeySchedule=[],u=0;u>>24]]^h[i[a>>>16&255]]^p[i[a>>>8&255]]^l[i[255&a]]}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,a,f,u,i)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,c,h,p,l,o),r=t[e+1],t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,n,i,o,s,a){for(var f=this._nRounds,u=t[e]^r[0],c=t[e+1]^r[1],h=t[e+2]^r[2],p=t[e+3]^r[3],l=4,y=1;y>>24]^i[c>>>16&255]^o[h>>>8&255]^s[255&p]^r[l++],d=n[c>>>24]^i[h>>>16&255]^o[p>>>8&255]^s[255&u]^r[l++],v=n[h>>>24]^i[p>>>16&255]^o[u>>>8&255]^s[255&c]^r[l++],m=n[p>>>24]^i[u>>>16&255]^o[c>>>8&255]^s[255&h]^r[l++];u=g,c=d,h=v,p=m}g=(a[u>>>24]<<24|a[c>>>16&255]<<16|a[h>>>8&255]<<8|a[255&p])^r[l++],d=(a[c>>>24]<<24|a[h>>>16&255]<<16|a[p>>>8&255]<<8|a[255&u])^r[l++],v=(a[h>>>24]<<24|a[p>>>16&255]<<16|a[u>>>8&255]<<8|a[255&c])^r[l++],m=(a[p>>>24]<<24|a[u>>>16&255]<<16|a[c>>>8&255]<<8|a[255&h])^r[l++],t[e]=g,t[e+1]=d,t[e+2]=v,t[e+3]=m},keySize:8});t.AES=e._createHelper(g)}(),n.AES)},7165:function(t,e,r){var n,i,o,s,a,f,u,c,h,p,l,y,g,d,v,m,S,_,b;t.exports=(n=r(9021),r(9506),void(n.lib.Cipher||(i=n,o=i.lib,s=o.Base,a=o.WordArray,f=o.BufferedBlockAlgorithm,u=i.enc,u.Utf8,c=u.Base64,h=i.algo.EvpKDF,p=o.Cipher=f.extend({cfg:s.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,r){this.cfg=this.cfg.extend(r),this._xformMode=t,this._key=e,this.reset()},reset:function(){f.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){return t&&this._append(t),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function t(t){return"string"==typeof t?b:S}return function(e){return{encrypt:function(r,n,i){return t(n).encrypt(e,r,n,i)},decrypt:function(r,n,i){return t(n).decrypt(e,r,n,i)}}}}()}),o.StreamCipher=p.extend({_doFinalize:function(){return this._process(!0)},blockSize:1}),l=i.mode={},y=o.BlockCipherMode=s.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}}),g=l.CBC=function(){var t=y.extend();function e(t,e,r){var n=this._iv;if(n){var i=n;this._iv=void 0}else i=this._prevBlock;for(var o=0;o>>2];t.sigBytes-=e}},o.BlockCipher=p.extend({cfg:p.cfg.extend({mode:g,padding:d}),reset:function(){p.reset.call(this);var t=this.cfg,e=t.iv,r=t.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=r.createEncryptor;else n=r.createDecryptor,this._minBufferSize=1;this._mode&&this._mode.__creator==n?this._mode.init(this,e&&e.words):(this._mode=n.call(r,this,e&&e.words),this._mode.__creator=n)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){t.pad(this._data,this.blockSize);var e=this._process(!0)}else e=this._process(!0),t.unpad(e);return e},blockSize:4}),v=o.CipherParams=s.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}}),m=(i.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;if(r)var n=a.create([1398893684,1701076831]).concat(r).concat(e);else n=e;return n.toString(c)},parse:function(t){var e=c.parse(t),r=e.words;if(1398893684==r[0]&&1701076831==r[1]){var n=a.create(r.slice(2,4));r.splice(0,4),e.sigBytes-=16}return v.create({ciphertext:e,salt:n})}},S=o.SerializableCipher=s.extend({cfg:s.extend({format:m}),encrypt:function(t,e,r,n){n=this.cfg.extend(n);var i=t.createEncryptor(r,n),o=i.finalize(e),s=i.cfg;return v.create({ciphertext:o,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,r,n){return n=this.cfg.extend(n),e=this._parse(e,n.format),t.createDecryptor(r,n).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),_=(i.kdf={}).OpenSSL={execute:function(t,e,r,n){n||(n=a.random(8));var i=h.create({keySize:e+r}).compute(t,n),o=a.create(i.words.slice(e),4*r);return i.sigBytes=4*e,v.create({key:i,iv:o,salt:n})}},b=o.PasswordBasedCipher=S.extend({cfg:S.cfg.extend({kdf:_}),encrypt:function(t,e,r,n){var i=(n=this.cfg.extend(n)).kdf.execute(r,t.keySize,t.ivSize);n.iv=i.iv;var o=S.encrypt.call(this,t,e,i.key,n);return o.mixIn(i),o},decrypt:function(t,e,r,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var i=n.kdf.execute(r,t.keySize,t.ivSize,e.salt);return n.iv=i.iv,S.decrypt.call(this,t,e,i.key,n)}}))))},9021:function(t,e){var r;t.exports=(r=r||function(t,e){var r=Object.create||function(){function t(){}return function(e){var r;return t.prototype=e,r=new t,t.prototype=null,r}}(),n={},i=n.lib={},o=i.Base={extend:function(t){var e=r(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},s=i.WordArray=o.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:4*t.length},toString:function(t){return(t||f).stringify(this)},concat:function(t){var e=this.words,r=t.words,n=this.sigBytes,i=t.sigBytes;if(this.clamp(),n%4)for(var o=0;o>>2]>>>24-o%4*8&255;e[n+o>>>2]|=s<<24-(n+o)%4*8}else for(o=0;o>>2]=r[o>>>2];return this.sigBytes+=i,this},clamp:function(){var e=this.words,r=this.sigBytes;e[r>>>2]&=4294967295<<32-r%4*8,e.length=t.ceil(r/4)},clone:function(){var t=o.clone.call(this);return t.words=this.words.slice(0),t},random:function(e){for(var r,n=[],i=function(e){var r=987654321,n=4294967295;return function(){var i=((r=36969*(65535&r)+(r>>16)&n)<<16)+(e=18e3*(65535&e)+(e>>16)&n)&n;return i/=4294967296,(i+=.5)*(t.random()>.5?1:-1)}},o=0;o>>2]>>>24-i%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;n>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new s.init(r,e/2)}},u=a.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],i=0;i>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(o))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;n>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new s.init(r,e)}},c=a.Utf8={stringify:function(t){try{return decodeURIComponent(escape(u.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return u.parse(unescape(encodeURIComponent(t)))}},h=i.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=c.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var r=this._data,n=r.words,i=r.sigBytes,o=this.blockSize,a=i/(4*o),f=(a=e?t.ceil(a):t.max((0|a)-this._minBufferSize,0))*o,u=t.min(4*f,i);if(f){for(var c=0;c>>2]>>>24-o%4*8&255)<<16|(e[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|e[o+2>>>2]>>>24-(o+2)%4*8&255,a=0;a<4&&o+.75*a>>6*(3-a)&63));var f=n.charAt(64);if(f)for(;i.length%4;)i.push(f);return i.join("")},parse:function(t){var e=t.length,r=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var i=0;i>>6-s%4*2;n[i>>>2]|=(a|f)<<24-i%4*8,i++}return o.create(n,i)}(t,e,n)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},n.enc.Base64)},5503:function(t,e,r){var n;t.exports=(n=r(9021),function(){var t=n,e=t.lib.WordArray,r=t.enc;function i(t){return t<<8&4278255360|t>>>8&16711935}r.Utf16=r.Utf16BE={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],i=0;i>>2]>>>16-i%4*8&65535;n.push(String.fromCharCode(o))}return n.join("")},parse:function(t){for(var r=t.length,n=[],i=0;i>>1]|=t.charCodeAt(i)<<16-i%2*16;return e.create(n,2*r)}},r.Utf16LE={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],o=0;o>>2]>>>16-o%4*8&65535);n.push(String.fromCharCode(s))}return n.join("")},parse:function(t){for(var r=t.length,n=[],o=0;o>>1]|=i(t.charCodeAt(o)<<16-o%2*16);return e.create(n,2*r)}}}(),n.enc.Utf16)},9506:function(t,e,r){var n,i,o,s,a,f,u,c;t.exports=(c=r(9021),r(5471),r(1025),o=(i=(n=c).lib).Base,s=i.WordArray,f=(a=n.algo).MD5,u=a.EvpKDF=o.extend({cfg:o.extend({keySize:4,hasher:f,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,n=r.hasher.create(),i=s.create(),o=i.words,a=r.keySize,f=r.iterations;o.lengthn&&(e=t.finalize(e)),e.clamp();for(var i=this._oKey=e.clone(),s=this._iKey=e.clone(),a=i.words,f=s.words,u=0;u>>2]|=t[i]<<24-i%4*8;e.call(this,n,r)}else e.apply(this,arguments)};r.prototype=t}}(),n.lib.WordArray)},4636:function(t,e,r){var n;t.exports=(n=r(9021),function(t){var e=n,r=e.lib,i=r.WordArray,o=r.Hasher,s=e.algo,a=[];!function(){for(var e=0;e<64;e++)a[e]=4294967296*t.abs(t.sin(e+1))|0}();var f=s.MD5=o.extend({_doReset:function(){this._hash=new i.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var n=e+r,i=t[n];t[n]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var o=this._hash.words,s=t[e+0],f=t[e+1],l=t[e+2],y=t[e+3],g=t[e+4],d=t[e+5],v=t[e+6],m=t[e+7],S=t[e+8],_=t[e+9],b=t[e+10],E=t[e+11],w=t[e+12],O=t[e+13],B=t[e+14],A=t[e+15],x=o[0],P=o[1],T=o[2],I=o[3];x=u(x,P,T,I,s,7,a[0]),I=u(I,x,P,T,f,12,a[1]),T=u(T,I,x,P,l,17,a[2]),P=u(P,T,I,x,y,22,a[3]),x=u(x,P,T,I,g,7,a[4]),I=u(I,x,P,T,d,12,a[5]),T=u(T,I,x,P,v,17,a[6]),P=u(P,T,I,x,m,22,a[7]),x=u(x,P,T,I,S,7,a[8]),I=u(I,x,P,T,_,12,a[9]),T=u(T,I,x,P,b,17,a[10]),P=u(P,T,I,x,E,22,a[11]),x=u(x,P,T,I,w,7,a[12]),I=u(I,x,P,T,O,12,a[13]),T=u(T,I,x,P,B,17,a[14]),x=c(x,P=u(P,T,I,x,A,22,a[15]),T,I,f,5,a[16]),I=c(I,x,P,T,v,9,a[17]),T=c(T,I,x,P,E,14,a[18]),P=c(P,T,I,x,s,20,a[19]),x=c(x,P,T,I,d,5,a[20]),I=c(I,x,P,T,b,9,a[21]),T=c(T,I,x,P,A,14,a[22]),P=c(P,T,I,x,g,20,a[23]),x=c(x,P,T,I,_,5,a[24]),I=c(I,x,P,T,B,9,a[25]),T=c(T,I,x,P,y,14,a[26]),P=c(P,T,I,x,S,20,a[27]),x=c(x,P,T,I,O,5,a[28]),I=c(I,x,P,T,l,9,a[29]),T=c(T,I,x,P,m,14,a[30]),x=h(x,P=c(P,T,I,x,w,20,a[31]),T,I,d,4,a[32]),I=h(I,x,P,T,S,11,a[33]),T=h(T,I,x,P,E,16,a[34]),P=h(P,T,I,x,B,23,a[35]),x=h(x,P,T,I,f,4,a[36]),I=h(I,x,P,T,g,11,a[37]),T=h(T,I,x,P,m,16,a[38]),P=h(P,T,I,x,b,23,a[39]),x=h(x,P,T,I,O,4,a[40]),I=h(I,x,P,T,s,11,a[41]),T=h(T,I,x,P,y,16,a[42]),P=h(P,T,I,x,v,23,a[43]),x=h(x,P,T,I,_,4,a[44]),I=h(I,x,P,T,w,11,a[45]),T=h(T,I,x,P,A,16,a[46]),x=p(x,P=h(P,T,I,x,l,23,a[47]),T,I,s,6,a[48]),I=p(I,x,P,T,m,10,a[49]),T=p(T,I,x,P,B,15,a[50]),P=p(P,T,I,x,d,21,a[51]),x=p(x,P,T,I,w,6,a[52]),I=p(I,x,P,T,y,10,a[53]),T=p(T,I,x,P,b,15,a[54]),P=p(P,T,I,x,f,21,a[55]),x=p(x,P,T,I,S,6,a[56]),I=p(I,x,P,T,A,10,a[57]),T=p(T,I,x,P,v,15,a[58]),P=p(P,T,I,x,O,21,a[59]),x=p(x,P,T,I,g,6,a[60]),I=p(I,x,P,T,E,10,a[61]),T=p(T,I,x,P,l,15,a[62]),P=p(P,T,I,x,_,21,a[63]),o[0]=o[0]+x|0,o[1]=o[1]+P|0,o[2]=o[2]+T|0,o[3]=o[3]+I|0},_doFinalize:function(){var e=this._data,r=e.words,n=8*this._nDataBytes,i=8*e.sigBytes;r[i>>>5]|=128<<24-i%32;var o=t.floor(n/4294967296),s=n;r[15+(i+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),r[14+(i+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),e.sigBytes=4*(r.length+1),this._process();for(var a=this._hash,f=a.words,u=0;u<4;u++){var c=f[u];f[u]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}return a},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t}});function u(t,e,r,n,i,o,s){var a=t+(e&r|~e&n)+i+s;return(a<>>32-o)+e}function c(t,e,r,n,i,o,s){var a=t+(e&n|r&~n)+i+s;return(a<>>32-o)+e}function h(t,e,r,n,i,o,s){var a=t+(e^r^n)+i+s;return(a<>>32-o)+e}function p(t,e,r,n,i,o,s){var a=t+(r^(e|~n))+i+s;return(a<>>32-o)+e}e.MD5=o._createHelper(f),e.HmacMD5=o._createHmacHelper(f)}(Math),n.MD5)},2169:function(t,e,r){var n;t.exports=(n=r(9021),r(7165),n.mode.CFB=function(){var t=n.lib.BlockCipherMode.extend();function e(t,e,r,n){var i=this._iv;if(i){var o=i.slice(0);this._iv=void 0}else o=this._prevBlock;n.encryptBlock(o,0);for(var s=0;s>24))t+=1<<24;else{var e=t>>16&255,r=t>>8&255,n=255&t;255===e?(e=0,255===r?(r=0,255===n?n=0:++n):++r):++e,t=0,t+=e<<16,t+=r<<8,t+=n}return t}var r=t.Encryptor=t.extend({processBlock:function(t,r){var n=this._cipher,i=n.blockSize,o=this._iv,s=this._counter;o&&(s=this._counter=o.slice(0),this._iv=void 0),function(t){0===(t[0]=e(t[0]))&&(t[1]=e(t[1]))}(s);var a=s.slice(0);n.encryptBlock(a,0);for(var f=0;f>>2]|=i<<24-o%4*8,t.sigBytes+=i},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},n.pad.Ansix923)},4905:function(t,e,r){var n;t.exports=(n=r(9021),r(7165),n.pad.Iso10126={pad:function(t,e){var r=4*e,i=r-t.sigBytes%r;t.concat(n.lib.WordArray.random(i-1)).concat(n.lib.WordArray.create([i<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},n.pad.Iso10126)},482:function(t,e,r){var n;t.exports=(n=r(9021),r(7165),n.pad.Iso97971={pad:function(t,e){t.concat(n.lib.WordArray.create([2147483648],1)),n.pad.ZeroPadding.pad(t,e)},unpad:function(t){n.pad.ZeroPadding.unpad(t),t.sigBytes--}},n.pad.Iso97971)},8124:function(t,e,r){var n;t.exports=(n=r(9021),r(7165),n.pad.NoPadding={pad:function(){},unpad:function(){}},n.pad.NoPadding)},2155:function(t,e,r){var n;t.exports=(n=r(9021),r(7165),n.pad.ZeroPadding={pad:function(t,e){var r=4*e;t.clamp(),t.sigBytes+=r-(t.sigBytes%r||r)},unpad:function(t){for(var e=t.words,r=t.sigBytes-1;!(e[r>>>2]>>>24-r%4*8&255);)r--;t.sigBytes=r+1}},n.pad.ZeroPadding)},19:function(t,e,r){var n,i,o,s,a,f,u,c,h;t.exports=(h=r(9021),r(5471),r(1025),o=(i=(n=h).lib).Base,s=i.WordArray,f=(a=n.algo).SHA1,u=a.HMAC,c=a.PBKDF2=o.extend({cfg:o.extend({keySize:4,hasher:f,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,n=u.create(r.hasher,t),i=s.create(),o=s.create([1]),a=i.words,f=o.words,c=r.keySize,h=r.iterations;a.length>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var i=0;i<4;i++)f.call(this);for(i=0;i<8;i++)n[i]^=r[i+4&7];if(e){var o=e.words,s=o[0],a=o[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),c=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),h=u>>>16|4294901760&c,p=c<<16|65535&u;for(n[0]^=u,n[1]^=h,n[2]^=c,n[3]^=p,n[4]^=u,n[5]^=h,n[6]^=c,n[7]^=p,i=0;i<4;i++)f.call(this)}},_doProcessBlock:function(t,e){var r=this._X;f.call(this),i[0]=r[0]^r[5]>>>16^r[3]<<16,i[1]=r[2]^r[7]>>>16^r[5]<<16,i[2]=r[4]^r[1]>>>16^r[7]<<16,i[3]=r[6]^r[3]>>>16^r[1]<<16;for(var n=0;n<4;n++)i[n]=16711935&(i[n]<<8|i[n]>>>24)|4278255360&(i[n]<<24|i[n]>>>8),t[e+n]^=i[n]},blockSize:4,ivSize:2});function f(){for(var t=this._X,e=this._C,r=0;r<8;r++)o[r]=e[r];for(e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0,r=0;r<8;r++){var n=t[r]+e[r],i=65535&n,a=n>>>16,f=((i*i>>>17)+i*a>>>15)+a*a,u=((4294901760&n)*n|0)+((65535&n)*n|0);s[r]=f^u}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}t.RabbitLegacy=e._createHelper(a)}(),n.RabbitLegacy)},6298:function(t,e,r){var n;t.exports=(n=r(9021),r(754),r(4636),r(9506),r(7165),function(){var t=n,e=t.lib.StreamCipher,r=t.algo,i=[],o=[],s=[],a=r.Rabbit=e.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,r=0;r<4;r++)t[r]=16711935&(t[r]<<8|t[r]>>>24)|4278255360&(t[r]<<24|t[r]>>>8);var n=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];for(this._b=0,r=0;r<4;r++)f.call(this);for(r=0;r<8;r++)i[r]^=n[r+4&7];if(e){var o=e.words,s=o[0],a=o[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),c=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),h=u>>>16|4294901760&c,p=c<<16|65535&u;for(i[0]^=u,i[1]^=h,i[2]^=c,i[3]^=p,i[4]^=u,i[5]^=h,i[6]^=c,i[7]^=p,r=0;r<4;r++)f.call(this)}},_doProcessBlock:function(t,e){var r=this._X;f.call(this),i[0]=r[0]^r[5]>>>16^r[3]<<16,i[1]=r[2]^r[7]>>>16^r[5]<<16,i[2]=r[4]^r[1]>>>16^r[7]<<16,i[3]=r[6]^r[3]>>>16^r[1]<<16;for(var n=0;n<4;n++)i[n]=16711935&(i[n]<<8|i[n]>>>24)|4278255360&(i[n]<<24|i[n]>>>8),t[e+n]^=i[n]},blockSize:4,ivSize:2});function f(){for(var t=this._X,e=this._C,r=0;r<8;r++)o[r]=e[r];for(e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0,r=0;r<8;r++){var n=t[r]+e[r],i=65535&n,a=n>>>16,f=((i*i>>>17)+i*a>>>15)+a*a,u=((4294901760&n)*n|0)+((65535&n)*n|0);s[r]=f^u}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}t.Rabbit=e._createHelper(a)}(),n.Rabbit)},7193:function(t,e,r){var n;t.exports=(n=r(9021),r(754),r(4636),r(9506),r(7165),function(){var t=n,e=t.lib.StreamCipher,r=t.algo,i=r.RC4=e.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,n=this._S=[],i=0;i<256;i++)n[i]=i;i=0;for(var o=0;i<256;i++){var s=i%r,a=e[s>>>2]>>>24-s%4*8&255;o=(o+n[i]+a)%256;var f=n[i];n[i]=n[o],n[o]=f}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=o.call(this)},keySize:8,ivSize:0});function o(){for(var t=this._S,e=this._i,r=this._j,n=0,i=0;i<4;i++){r=(r+t[e=(e+1)%256])%256;var o=t[e];t[e]=t[r],t[r]=o,n|=t[(t[e]+t[r])%256]<<24-8*i}return this._i=e,this._j=r,n}t.RC4=e._createHelper(i);var s=r.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)o.call(this)}});t.RC4Drop=e._createHelper(s)}(),n.RC4)},8056:function(t,e,r){var n;t.exports=(n=r(9021),function(t){var e=n,r=e.lib,i=r.WordArray,o=r.Hasher,s=e.algo,a=i.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),f=i.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),u=i.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),c=i.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),h=i.create([0,1518500249,1859775393,2400959708,2840853838]),p=i.create([1352829926,1548603684,1836072691,2053994217,0]),l=s.RIPEMD160=o.extend({_doReset:function(){this._hash=i.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var n=e+r,i=t[n];t[n]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var o,s,l,_,b,E,w,O,B,A,x,P=this._hash.words,T=h.words,I=p.words,k=a.words,D=f.words,R=u.words,N=c.words;for(E=o=P[0],w=s=P[1],O=l=P[2],B=_=P[3],A=b=P[4],r=0;r<80;r+=1)x=o+t[e+k[r]]|0,x+=r<16?y(s,l,_)+T[0]:r<32?g(s,l,_)+T[1]:r<48?d(s,l,_)+T[2]:r<64?v(s,l,_)+T[3]:m(s,l,_)+T[4],x=(x=S(x|=0,R[r]))+b|0,o=b,b=_,_=S(l,10),l=s,s=x,x=E+t[e+D[r]]|0,x+=r<16?m(w,O,B)+I[0]:r<32?v(w,O,B)+I[1]:r<48?d(w,O,B)+I[2]:r<64?g(w,O,B)+I[3]:y(w,O,B)+I[4],x=(x=S(x|=0,N[r]))+A|0,E=A,A=B,B=S(O,10),O=w,w=x;x=P[1]+l+B|0,P[1]=P[2]+_+A|0,P[2]=P[3]+b+E|0,P[3]=P[4]+o+w|0,P[4]=P[0]+s+O|0,P[0]=x},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process();for(var i=this._hash,o=i.words,s=0;s<5;s++){var a=o[s];o[s]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)}return i},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t}});function y(t,e,r){return t^e^r}function g(t,e,r){return t&e|~t&r}function d(t,e,r){return(t|~e)^r}function v(t,e,r){return t&r|e&~r}function m(t,e,r){return t^(e|~r)}function S(t,e){return t<>>32-e}e.RIPEMD160=o._createHelper(l),e.HmacRIPEMD160=o._createHmacHelper(l)}(Math),n.RIPEMD160)},5471:function(t,e,r){var n,i,o,s,a,f,u,c;t.exports=(i=(n=c=r(9021)).lib,o=i.WordArray,s=i.Hasher,a=n.algo,f=[],u=a.SHA1=s.extend({_doReset:function(){this._hash=new o.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],u=0;u<80;u++){if(u<16)f[u]=0|t[e+u];else{var c=f[u-3]^f[u-8]^f[u-14]^f[u-16];f[u]=c<<1|c>>>31}var h=(n<<5|n>>>27)+a+f[u];h+=u<20?1518500249+(i&o|~i&s):u<40?1859775393+(i^o^s):u<60?(i&o|i&s|o&s)-1894007588:(i^o^s)-899497514,a=s,s=o,o=i<<30|i>>>2,i=n,n=h}r[0]=r[0]+n|0,r[1]=r[1]+i|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+a|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=Math.floor(r/4294967296),e[15+(n+64>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=s.clone.call(this);return t._hash=this._hash.clone(),t}}),n.SHA1=s._createHelper(u),n.HmacSHA1=s._createHmacHelper(u),c.SHA1)},6308:function(t,e,r){var n,i,o,s,a,f;t.exports=(f=r(9021),r(3009),i=(n=f).lib.WordArray,o=n.algo,s=o.SHA256,a=o.SHA224=s.extend({_doReset:function(){this._hash=new i.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=s._doFinalize.call(this);return t.sigBytes-=4,t}}),n.SHA224=s._createHelper(a),n.HmacSHA224=s._createHmacHelper(a),f.SHA224)},3009:function(t,e,r){var n;t.exports=(n=r(9021),function(t){var e=n,r=e.lib,i=r.WordArray,o=r.Hasher,s=e.algo,a=[],f=[];!function(){function e(e){for(var r=t.sqrt(e),n=2;n<=r;n++)if(!(e%n))return!1;return!0}function r(t){return 4294967296*(t-(0|t))|0}for(var n=2,i=0;i<64;)e(n)&&(i<8&&(a[i]=r(t.pow(n,.5))),f[i]=r(t.pow(n,1/3)),i++),n++}();var u=[],c=s.SHA256=o.extend({_doReset:function(){this._hash=new i.init(a.slice(0))},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],c=r[5],h=r[6],p=r[7],l=0;l<64;l++){if(l<16)u[l]=0|t[e+l];else{var y=u[l-15],g=(y<<25|y>>>7)^(y<<14|y>>>18)^y>>>3,d=u[l-2],v=(d<<15|d>>>17)^(d<<13|d>>>19)^d>>>10;u[l]=g+u[l-7]+v+u[l-16]}var m=n&i^n&o^i&o,S=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),_=p+((a<<26|a>>>6)^(a<<21|a>>>11)^(a<<7|a>>>25))+(a&c^~a&h)+f[l]+u[l];p=h,h=c,c=a,a=s+_|0,s=o,o=i,i=n,n=_+(S+m)|0}r[0]=r[0]+n|0,r[1]=r[1]+i|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+a|0,r[5]=r[5]+c|0,r[6]=r[6]+h|0,r[7]=r[7]+p|0},_doFinalize:function(){var e=this._data,r=e.words,n=8*this._nDataBytes,i=8*e.sigBytes;return r[i>>>5]|=128<<24-i%32,r[14+(i+64>>>9<<4)]=t.floor(n/4294967296),r[15+(i+64>>>9<<4)]=n,e.sigBytes=4*r.length,this._process(),this._hash},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA256=o._createHelper(c),e.HmacSHA256=o._createHmacHelper(c)}(Math),n.SHA256)},5953:function(t,e,r){var n;t.exports=(n=r(9021),r(3240),function(t){var e=n,r=e.lib,i=r.WordArray,o=r.Hasher,s=e.x64.Word,a=e.algo,f=[],u=[],c=[];!function(){for(var t=1,e=0,r=0;r<24;r++){f[t+5*e]=(r+1)*(r+2)/2%64;var n=(2*t+3*e)%5;t=e%5,e=n}for(t=0;t<5;t++)for(e=0;e<5;e++)u[t+5*e]=e+(2*t+3*e)%5*5;for(var i=1,o=0;o<24;o++){for(var a=0,h=0,p=0;p<7;p++){if(1&i){var l=(1<>>24)|4278255360&(o<<24|o>>>8),s=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),(P=r[i]).high^=s,P.low^=o}for(var a=0;a<24;a++){for(var p=0;p<5;p++){for(var l=0,y=0,g=0;g<5;g++)l^=(P=r[p+5*g]).high,y^=P.low;var d=h[p];d.high=l,d.low=y}for(p=0;p<5;p++){var v=h[(p+4)%5],m=h[(p+1)%5],S=m.high,_=m.low;for(l=v.high^(S<<1|_>>>31),y=v.low^(_<<1|S>>>31),g=0;g<5;g++)(P=r[p+5*g]).high^=l,P.low^=y}for(var b=1;b<25;b++){var E=(P=r[b]).high,w=P.low,O=f[b];O<32?(l=E<>>32-O,y=w<>>32-O):(l=w<>>64-O,y=E<>>64-O);var B=h[u[b]];B.high=l,B.low=y}var A=h[0],x=r[0];for(A.high=x.high,A.low=x.low,p=0;p<5;p++)for(g=0;g<5;g++){var P=r[b=p+5*g],T=h[b],I=h[(p+1)%5+5*g],k=h[(p+2)%5+5*g];P.high=T.high^~I.high&k.high,P.low=T.low^~I.low&k.low}P=r[0];var D=c[a];P.high^=D.high,P.low^=D.low}},_doFinalize:function(){var e=this._data,r=e.words,n=(this._nDataBytes,8*e.sigBytes),o=32*this.blockSize;r[n>>>5]|=1<<24-n%32,r[(t.ceil((n+1)/o)*o>>>5)-1]|=128,e.sigBytes=4*r.length,this._process();for(var s=this._state,a=this.cfg.outputLength/8,f=a/8,u=[],c=0;c>>24)|4278255360&(p<<24|p>>>8),l=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8),u.push(l),u.push(p)}return new i.init(u,a)},clone:function(){for(var t=o.clone.call(this),e=t._state=this._state.slice(0),r=0;r<25;r++)e[r]=e[r].clone();return t}});e.SHA3=o._createHelper(p),e.HmacSHA3=o._createHmacHelper(p)}(Math),n.SHA3)},9557:function(t,e,r){var n,i,o,s,a,f,u,c;t.exports=(c=r(9021),r(3240),r(1380),i=(n=c).x64,o=i.Word,s=i.WordArray,a=n.algo,f=a.SHA512,u=a.SHA384=f.extend({_doReset:function(){this._hash=new s.init([new o.init(3418070365,3238371032),new o.init(1654270250,914150663),new o.init(2438529370,812702999),new o.init(355462360,4144912697),new o.init(1731405415,4290775857),new o.init(2394180231,1750603025),new o.init(3675008525,1694076839),new o.init(1203062813,3204075428)])},_doFinalize:function(){var t=f._doFinalize.call(this);return t.sigBytes-=16,t}}),n.SHA384=f._createHelper(u),n.HmacSHA384=f._createHmacHelper(u),c.SHA384)},1380:function(t,e,r){var n;t.exports=(n=r(9021),r(3240),function(){var t=n,e=t.lib.Hasher,r=t.x64,i=r.Word,o=r.WordArray,s=t.algo;function a(){return i.create.apply(i,arguments)}var f=[a(1116352408,3609767458),a(1899447441,602891725),a(3049323471,3964484399),a(3921009573,2173295548),a(961987163,4081628472),a(1508970993,3053834265),a(2453635748,2937671579),a(2870763221,3664609560),a(3624381080,2734883394),a(310598401,1164996542),a(607225278,1323610764),a(1426881987,3590304994),a(1925078388,4068182383),a(2162078206,991336113),a(2614888103,633803317),a(3248222580,3479774868),a(3835390401,2666613458),a(4022224774,944711139),a(264347078,2341262773),a(604807628,2007800933),a(770255983,1495990901),a(1249150122,1856431235),a(1555081692,3175218132),a(1996064986,2198950837),a(2554220882,3999719339),a(2821834349,766784016),a(2952996808,2566594879),a(3210313671,3203337956),a(3336571891,1034457026),a(3584528711,2466948901),a(113926993,3758326383),a(338241895,168717936),a(666307205,1188179964),a(773529912,1546045734),a(1294757372,1522805485),a(1396182291,2643833823),a(1695183700,2343527390),a(1986661051,1014477480),a(2177026350,1206759142),a(2456956037,344077627),a(2730485921,1290863460),a(2820302411,3158454273),a(3259730800,3505952657),a(3345764771,106217008),a(3516065817,3606008344),a(3600352804,1432725776),a(4094571909,1467031594),a(275423344,851169720),a(430227734,3100823752),a(506948616,1363258195),a(659060556,3750685593),a(883997877,3785050280),a(958139571,3318307427),a(1322822218,3812723403),a(1537002063,2003034995),a(1747873779,3602036899),a(1955562222,1575990012),a(2024104815,1125592928),a(2227730452,2716904306),a(2361852424,442776044),a(2428436474,593698344),a(2756734187,3733110249),a(3204031479,2999351573),a(3329325298,3815920427),a(3391569614,3928383900),a(3515267271,566280711),a(3940187606,3454069534),a(4118630271,4000239992),a(116418474,1914138554),a(174292421,2731055270),a(289380356,3203993006),a(460393269,320620315),a(685471733,587496836),a(852142971,1086792851),a(1017036298,365543100),a(1126000580,2618297676),a(1288033470,3409855158),a(1501505948,4234509866),a(1607167915,987167468),a(1816402316,1246189591)],u=[];!function(){for(var t=0;t<80;t++)u[t]=a()}();var c=s.SHA512=e.extend({_doReset:function(){this._hash=new o.init([new i.init(1779033703,4089235720),new i.init(3144134277,2227873595),new i.init(1013904242,4271175723),new i.init(2773480762,1595750129),new i.init(1359893119,2917565137),new i.init(2600822924,725511199),new i.init(528734635,4215389547),new i.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],c=r[5],h=r[6],p=r[7],l=n.high,y=n.low,g=i.high,d=i.low,v=o.high,m=o.low,S=s.high,_=s.low,b=a.high,E=a.low,w=c.high,O=c.low,B=h.high,A=h.low,x=p.high,P=p.low,T=l,I=y,k=g,D=d,R=v,N=m,L=S,C=_,U=b,M=E,j=w,H=O,F=B,z=A,G=x,q=P,$=0;$<80;$++){var K=u[$];if($<16)var W=K.high=0|t[e+2*$],V=K.low=0|t[e+2*$+1];else{var Y=u[$-15],X=Y.high,Z=Y.low,J=(X>>>1|Z<<31)^(X>>>8|Z<<24)^X>>>7,Q=(Z>>>1|X<<31)^(Z>>>8|X<<24)^(Z>>>7|X<<25),tt=u[$-2],et=tt.high,rt=tt.low,nt=(et>>>19|rt<<13)^(et<<3|rt>>>29)^et>>>6,it=(rt>>>19|et<<13)^(rt<<3|et>>>29)^(rt>>>6|et<<26),ot=u[$-7],st=ot.high,at=ot.low,ft=u[$-16],ut=ft.high,ct=ft.low;W=(W=(W=J+st+((V=Q+at)>>>0>>0?1:0))+nt+((V+=it)>>>0>>0?1:0))+ut+((V+=ct)>>>0>>0?1:0),K.high=W,K.low=V}var ht,pt=U&j^~U&F,lt=M&H^~M&z,yt=T&k^T&R^k&R,gt=I&D^I&N^D&N,dt=(T>>>28|I<<4)^(T<<30|I>>>2)^(T<<25|I>>>7),vt=(I>>>28|T<<4)^(I<<30|T>>>2)^(I<<25|T>>>7),mt=(U>>>14|M<<18)^(U>>>18|M<<14)^(U<<23|M>>>9),St=(M>>>14|U<<18)^(M>>>18|U<<14)^(M<<23|U>>>9),_t=f[$],bt=_t.high,Et=_t.low,wt=G+mt+((ht=q+St)>>>0>>0?1:0),Ot=vt+gt;G=F,q=z,F=j,z=H,j=U,H=M,U=L+(wt=(wt=(wt=wt+pt+((ht+=lt)>>>0>>0?1:0))+bt+((ht+=Et)>>>0>>0?1:0))+W+((ht+=V)>>>0>>0?1:0))+((M=C+ht|0)>>>0>>0?1:0)|0,L=R,C=N,R=k,N=D,k=T,D=I,T=wt+(dt+yt+(Ot>>>0>>0?1:0))+((I=ht+Ot|0)>>>0>>0?1:0)|0}y=n.low=y+I,n.high=l+T+(y>>>0>>0?1:0),d=i.low=d+D,i.high=g+k+(d>>>0>>0?1:0),m=o.low=m+N,o.high=v+R+(m>>>0>>0?1:0),_=s.low=_+C,s.high=S+L+(_>>>0>>0?1:0),E=a.low=E+M,a.high=b+U+(E>>>0>>0?1:0),O=c.low=O+H,c.high=w+j+(O>>>0>>0?1:0),A=h.low=A+z,h.high=B+F+(A>>>0>>0?1:0),P=p.low=P+q,p.high=x+G+(P>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[30+(n+128>>>10<<5)]=Math.floor(r/4294967296),e[31+(n+128>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function(){var t=e.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});t.SHA512=e._createHelper(c),t.HmacSHA512=e._createHmacHelper(c)}(),n.SHA512)},7628:function(t,e,r){var n;t.exports=(n=r(9021),r(754),r(4636),r(9506),r(7165),function(){var t=n,e=t.lib,r=e.WordArray,i=e.BlockCipher,o=t.algo,s=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],a=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],f=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],u=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],c=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],h=o.DES=i.extend({_doReset:function(){for(var t=this._key.words,e=[],r=0;r<56;r++){var n=s[r]-1;e[r]=t[n>>>5]>>>31-n%32&1}for(var i=this._subKeys=[],o=0;o<16;o++){var u=i[o]=[],c=f[o];for(r=0;r<24;r++)u[r/6|0]|=e[(a[r]-1+c)%28]<<31-r%6,u[4+(r/6|0)]|=e[28+(a[r+24]-1+c)%28]<<31-r%6;for(u[0]=u[0]<<1|u[0]>>>31,r=1;r<7;r++)u[r]=u[r]>>>4*(r-1)+3;u[7]=u[7]<<5|u[7]>>>27}var h=this._invSubKeys=[];for(r=0;r<16;r++)h[r]=i[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,r){this._lBlock=t[e],this._rBlock=t[e+1],p.call(this,4,252645135),p.call(this,16,65535),l.call(this,2,858993459),l.call(this,8,16711935),p.call(this,1,1431655765);for(var n=0;n<16;n++){for(var i=r[n],o=this._lBlock,s=this._rBlock,a=0,f=0;f<8;f++)a|=u[f][((s^i[f])&c[f])>>>0];this._lBlock=s,this._rBlock=o^a}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,p.call(this,1,1431655765),l.call(this,8,16711935),l.call(this,2,858993459),p.call(this,16,65535),p.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function p(t,e){var r=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=r,this._lBlock^=r<>>t^this._lBlock)&e;this._lBlock^=r,this._rBlock^=r<{"use strict";var n=r(655),i=r(8068),o=r(9675),s=r(5795);t.exports=function(t,e,r){if(!t||"object"!=typeof t&&"function"!=typeof t)throw new o("`obj` must be an object or a function`");if("string"!=typeof e&&"symbol"!=typeof e)throw new o("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!=typeof arguments[3]&&null!==arguments[3])throw new o("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!=typeof arguments[4]&&null!==arguments[4])throw new o("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!=typeof arguments[5]&&null!==arguments[5])throw new o("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!=typeof arguments[6])throw new o("`loose`, if provided, must be a boolean");var a=arguments.length>3?arguments[3]:null,f=arguments.length>4?arguments[4]:null,u=arguments.length>5?arguments[5]:null,c=arguments.length>6&&arguments[6],h=!!s&&s(t,e);if(n)n(t,e,{configurable:null===u&&h?h.configurable:!u,enumerable:null===a&&h?h.enumerable:!a,value:r,writable:null===f&&h?h.writable:!f});else{if(!c&&(a||f||u))throw new i("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");t[e]=r}}},655:(t,e,r)=>{"use strict";var n=r(453)("%Object.defineProperty%",!0)||!1;if(n)try{n({},"a",{value:1})}catch(t){n=!1}t.exports=n},1237:t=>{"use strict";t.exports=EvalError},9383:t=>{"use strict";t.exports=Error},9290:t=>{"use strict";t.exports=RangeError},9538:t=>{"use strict";t.exports=ReferenceError},8068:t=>{"use strict";t.exports=SyntaxError},9675:t=>{"use strict";t.exports=TypeError},5345:t=>{"use strict";t.exports=URIError},9353:t=>{"use strict";var e=Object.prototype.toString,r=Math.max,n=function(t,e){for(var r=[],n=0;n{"use strict";var n=r(9353);t.exports=Function.prototype.bind||n},453:(t,e,r)=>{"use strict";var n,i=r(9383),o=r(1237),s=r(9290),a=r(9538),f=r(8068),u=r(9675),c=r(5345),h=Function,p=function(t){try{return h('"use strict"; return ('+t+").constructor;")()}catch(t){}},l=Object.getOwnPropertyDescriptor;if(l)try{l({},"")}catch(t){l=null}var y=function(){throw new u},g=l?function(){try{return y}catch(t){try{return l(arguments,"callee").get}catch(t){return y}}}():y,d=r(4039)(),v=r(24)(),m=Object.getPrototypeOf||(v?function(t){return t.__proto__}:null),S={},_="undefined"!=typeof Uint8Array&&m?m(Uint8Array):n,b={__proto__:null,"%AggregateError%":"undefined"==typeof AggregateError?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?n:ArrayBuffer,"%ArrayIteratorPrototype%":d&&m?m([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":S,"%AsyncGenerator%":S,"%AsyncGeneratorFunction%":S,"%AsyncIteratorPrototype%":S,"%Atomics%":"undefined"==typeof Atomics?n:Atomics,"%BigInt%":"undefined"==typeof BigInt?n:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?n:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?n:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":i,"%eval%":eval,"%EvalError%":o,"%Float32Array%":"undefined"==typeof Float32Array?n:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?n:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?n:FinalizationRegistry,"%Function%":h,"%GeneratorFunction%":S,"%Int8Array%":"undefined"==typeof Int8Array?n:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?n:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":d&&m?m(m([][Symbol.iterator]())):n,"%JSON%":"object"==typeof JSON?JSON:n,"%Map%":"undefined"==typeof Map?n:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&d&&m?m((new Map)[Symbol.iterator]()):n,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?n:Promise,"%Proxy%":"undefined"==typeof Proxy?n:Proxy,"%RangeError%":s,"%ReferenceError%":a,"%Reflect%":"undefined"==typeof Reflect?n:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?n:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&d&&m?m((new Set)[Symbol.iterator]()):n,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":d&&m?m(""[Symbol.iterator]()):n,"%Symbol%":d?Symbol:n,"%SyntaxError%":f,"%ThrowTypeError%":g,"%TypedArray%":_,"%TypeError%":u,"%Uint8Array%":"undefined"==typeof Uint8Array?n:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?n:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?n:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?n:Uint32Array,"%URIError%":c,"%WeakMap%":"undefined"==typeof WeakMap?n:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?n:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?n:WeakSet};if(m)try{null.error}catch(t){var E=m(m(t));b["%Error.prototype%"]=E}var w=function t(e){var r;if("%AsyncFunction%"===e)r=p("async function () {}");else if("%GeneratorFunction%"===e)r=p("function* () {}");else if("%AsyncGeneratorFunction%"===e)r=p("async function* () {}");else if("%AsyncGenerator%"===e){var n=t("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===e){var i=t("%AsyncGenerator%");i&&m&&(r=m(i.prototype))}return b[e]=r,r},O={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},B=r(6743),A=r(9957),x=B.call(Function.call,Array.prototype.concat),P=B.call(Function.apply,Array.prototype.splice),T=B.call(Function.call,String.prototype.replace),I=B.call(Function.call,String.prototype.slice),k=B.call(Function.call,RegExp.prototype.exec),D=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,R=/\\(\\)?/g,N=function(t,e){var r,n=t;if(A(O,n)&&(n="%"+(r=O[n])[0]+"%"),A(b,n)){var i=b[n];if(i===S&&(i=w(n)),void 0===i&&!e)throw new u("intrinsic "+t+" exists, but is not available. Please file an issue!");return{alias:r,name:n,value:i}}throw new f("intrinsic "+t+" does not exist!")};t.exports=function(t,e){if("string"!=typeof t||0===t.length)throw new u("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof e)throw new u('"allowMissing" argument must be a boolean');if(null===k(/^%?[^%]*%?$/,t))throw new f("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=function(t){var e=I(t,0,1),r=I(t,-1);if("%"===e&&"%"!==r)throw new f("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==e)throw new f("invalid intrinsic syntax, expected opening `%`");var n=[];return T(t,D,(function(t,e,r,i){n[n.length]=r?T(i,R,"$1"):e||t})),n}(t),n=r.length>0?r[0]:"",i=N("%"+n+"%",e),o=i.name,s=i.value,a=!1,c=i.alias;c&&(n=c[0],P(r,x([0,1],c)));for(var h=1,p=!0;h=r.length){var v=l(s,y);s=(p=!!v)&&"get"in v&&!("originalValue"in v.get)?v.get:s[y]}else p=A(s,y),s=s[y];p&&!a&&(b[o]=s)}}return s}},5795:(t,e,r)=>{"use strict";var n=r(453)("%Object.getOwnPropertyDescriptor%",!0);if(n)try{n([],"length")}catch(t){n=null}t.exports=n},592:(t,e,r)=>{"use strict";var n=r(655),i=function(){return!!n};i.hasArrayLengthDefineBug=function(){if(!n)return null;try{return 1!==n([],"length",{value:1}).length}catch(t){return!0}},t.exports=i},24:t=>{"use strict";var e={__proto__:null,foo:{}},r=Object;t.exports=function(){return{__proto__:e}.foo===e.foo&&!(e instanceof r)}},4039:(t,e,r)=>{"use strict";var n="undefined"!=typeof Symbol&&Symbol,i=r(1333);t.exports=function(){return"function"==typeof n&&"function"==typeof Symbol&&"symbol"==typeof n("foo")&&"symbol"==typeof Symbol("bar")&&i()}},1333:t=>{"use strict";t.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var t={},e=Symbol("test"),r=Object(e);if("string"==typeof e)return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(e in t[e]=42,t)return!1;if("function"==typeof Object.keys&&0!==Object.keys(t).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(t).length)return!1;var n=Object.getOwnPropertySymbols(t);if(1!==n.length||n[0]!==e)return!1;if(!Object.prototype.propertyIsEnumerable.call(t,e))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var i=Object.getOwnPropertyDescriptor(t,e);if(42!==i.value||!0!==i.enumerable)return!1}return!0}},9957:(t,e,r)=>{"use strict";var n=Function.prototype.call,i=Object.prototype.hasOwnProperty,o=r(6743);t.exports=o.call(n,i)},251:(t,e)=>{e.read=function(t,e,r,n,i){var o,s,a=8*i-n-1,f=(1<>1,c=-7,h=r?i-1:0,p=r?-1:1,l=t[e+h];for(h+=p,o=l&(1<<-c)-1,l>>=-c,c+=a;c>0;o=256*o+t[e+h],h+=p,c-=8);for(s=o&(1<<-c)-1,o>>=-c,c+=n;c>0;s=256*s+t[e+h],h+=p,c-=8);if(0===o)o=1-u;else{if(o===f)return s?NaN:1/0*(l?-1:1);s+=Math.pow(2,n),o-=u}return(l?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,f,u=8*o-i-1,c=(1<>1,p=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:o-1,y=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=c):(s=Math.floor(Math.log(e)/Math.LN2),e*(f=Math.pow(2,-s))<1&&(s--,f*=2),(e+=s+h>=1?p/f:p*Math.pow(2,1-h))*f>=2&&(s++,f/=2),s+h>=c?(a=0,s=c):s+h>=1?(a=(e*f-1)*Math.pow(2,i),s+=h):(a=e*Math.pow(2,h-1)*Math.pow(2,i),s=0));i>=8;t[r+l]=255&a,l+=y,a/=256,i-=8);for(s=s<0;t[r+l]=255&s,l+=y,s/=256,u-=8);t[r+l-y]|=128*g}},3229:(t,e,r)=>{var n=r(8287).Buffer,i=r(7449),o=r(5682),s=(r(3200),r(3100).Ber,r(8226)._),a=r(8226),f=r(1768),u=r(7460);void 0===i.RSA_NO_PADDING&&(i.RSA_NO_PADDING=3),t.exports=function(){var t={node10:["md4","md5","ripemd160","sha1","sha224","sha256","sha384","sha512"],node:["md4","md5","ripemd160","sha1","sha224","sha256","sha384","sha512"],iojs:["md4","md5","ripemd160","sha1","sha224","sha256","sha384","sha512"],browser:["md5","ripemd160","sha1","sha256","sha512"]},e="pkcs1_oaep",r="pkcs1",i={private:"pkcs1-private-pem","private-der":"pkcs1-private-der",public:"pkcs8-public-pem","public-der":"pkcs8-public-der"};function c(t,i,f){if(!(this instanceof c))return new c(t,i,f);s.isObject(i)&&(f=i,i=void 0),this.$options={signingScheme:r,signingSchemeOptions:{hash:"sha256",saltLength:null},encryptionScheme:e,encryptionSchemeOptions:{hash:"sha1",label:null},environment:a.detectEnvironment(),rsaUtils:this},this.keyPair=new o.Key,this.$cache={},n.isBuffer(t)||s.isString(t)?this.importKey(t,i):s.isObject(t)&&this.generateKeyPair(t.b,t.e),this.setOptions(f)}return c.prototype.setOptions=function(n){if((n=n||{}).environment&&(this.$options.environment=n.environment),n.signingScheme){if(s.isString(n.signingScheme)){var i=n.signingScheme.toLowerCase().split("-");1==i.length?t.node.indexOf(i[0])>-1?(this.$options.signingSchemeOptions={hash:i[0]},this.$options.signingScheme=r):(this.$options.signingScheme=i[0],this.$options.signingSchemeOptions={hash:null}):(this.$options.signingSchemeOptions={hash:i[1]},this.$options.signingScheme=i[0])}else s.isObject(n.signingScheme)&&(this.$options.signingScheme=n.signingScheme.scheme||r,this.$options.signingSchemeOptions=s.omit(n.signingScheme,"scheme"));if(!f.isSignature(this.$options.signingScheme))throw Error("Unsupported signing scheme");if(this.$options.signingSchemeOptions.hash&&-1===t[this.$options.environment].indexOf(this.$options.signingSchemeOptions.hash))throw Error("Unsupported hashing algorithm for "+this.$options.environment+" environment")}if(n.encryptionScheme){if(s.isString(n.encryptionScheme)?(this.$options.encryptionScheme=n.encryptionScheme.toLowerCase(),this.$options.encryptionSchemeOptions={}):s.isObject(n.encryptionScheme)&&(this.$options.encryptionScheme=n.encryptionScheme.scheme||e,this.$options.encryptionSchemeOptions=s.omit(n.encryptionScheme,"scheme")),!f.isEncryption(this.$options.encryptionScheme))throw Error("Unsupported encryption scheme");if(this.$options.encryptionSchemeOptions.hash&&-1===t[this.$options.environment].indexOf(this.$options.encryptionSchemeOptions.hash))throw Error("Unsupported hashing algorithm for "+this.$options.environment+" environment")}this.keyPair.setOptions(this.$options)},c.prototype.generateKeyPair=function(t,e){if(e=e||65537,(t=t||2048)%8!=0)throw Error("Key size must be a multiple of 8.");return this.keyPair.generate(t,e.toString(16)),this.$cache={},this},c.prototype.importKey=function(t,e){if(!t)throw Error("Empty key given");if(e&&(e=i[e]||e),!u.detectAndImport(this.keyPair,t,e)&&void 0===e)throw Error("Key format must be specified");return this.$cache={},this},c.prototype.exportKey=function(t){return t=i[t=t||"private"]||t,this.$cache[t]||(this.$cache[t]=u.detectAndExport(this.keyPair,t)),this.$cache[t]},c.prototype.isPrivate=function(){return this.keyPair.isPrivate()},c.prototype.isPublic=function(t){return this.keyPair.isPublic(t)},c.prototype.isEmpty=function(t){return!(this.keyPair.n||this.keyPair.e||this.keyPair.d)},c.prototype.encrypt=function(t,e,r){return this.$$encryptKey(!1,t,e,r)},c.prototype.decrypt=function(t,e){return this.$$decryptKey(!1,t,e)},c.prototype.encryptPrivate=function(t,e,r){return this.$$encryptKey(!0,t,e,r)},c.prototype.decryptPublic=function(t,e){return this.$$decryptKey(!0,t,e)},c.prototype.$$encryptKey=function(t,e,r,n){try{var i=this.keyPair.encrypt(this.$getDataForEncrypt(e,n),t);return"buffer"!=r&&r?i.toString(r):i}catch(t){throw Error("Error during encryption. Original error: "+t)}},c.prototype.$$decryptKey=function(t,e,r){try{e=s.isString(e)?n.from(e,"base64"):e;var i=this.keyPair.decrypt(e,t);if(null===i)throw Error("Key decrypt method returns null.");return this.$getDecryptedData(i,r)}catch(t){throw Error("Error during decryption (probably incorrect key). Original error: "+t)}},c.prototype.sign=function(t,e,r){if(!this.isPrivate())throw Error("This is not private key");var n=this.keyPair.sign(this.$getDataForEncrypt(t,r));return e&&"buffer"!=e&&(n=n.toString(e)),n},c.prototype.verify=function(t,e,r,n){if(!this.isPublic())throw Error("This is not public key");return n=n&&"buffer"!=n?n:null,this.keyPair.verify(this.$getDataForEncrypt(t,r),e,n)},c.prototype.getKeySize=function(){return this.keyPair.keySize},c.prototype.getMaxMessageSize=function(){return this.keyPair.maxMessageLength},c.prototype.$getDataForEncrypt=function(t,e){if(s.isString(t)||s.isNumber(t))return n.from(""+t,e||"utf8");if(n.isBuffer(t))return t;if(s.isObject(t))return n.from(JSON.stringify(t));throw Error("Unexpected data type")},c.prototype.$getDecryptedData=function(t,e){return"buffer"==(e=e||"buffer")?t:"json"==e?JSON.parse(t.toString()):t.toString(e)},c}()},4538:(t,e,r)=>{var n=r(3200);t.exports={getEngine:function(t,e){var i=r(7469);return"node"===e.environment&&"function"==typeof n.publicEncrypt&&"function"==typeof n.privateDecrypt&&(i="function"==typeof n.privateEncrypt&&"function"==typeof n.publicDecrypt?r(2418):r(1957)),i(t,e)}}},2418:(t,e,r)=>{var n=r(3200),i=r(7449),o=r(1768);t.exports=function(t,e){var r=o.pkcs1.makeScheme(t,e);return{encrypt:function(t,o){var s;if(o)return s=i.RSA_PKCS1_PADDING,e.encryptionSchemeOptions&&e.encryptionSchemeOptions.padding&&(s=e.encryptionSchemeOptions.padding),n.privateEncrypt({key:e.rsaUtils.exportKey("private"),padding:s},t);s=i.RSA_PKCS1_OAEP_PADDING,"pkcs1"===e.encryptionScheme&&(s=i.RSA_PKCS1_PADDING),e.encryptionSchemeOptions&&e.encryptionSchemeOptions.padding&&(s=e.encryptionSchemeOptions.padding);var a=t;return s===i.RSA_NO_PADDING&&(a=r.pkcs0pad(t)),n.publicEncrypt({key:e.rsaUtils.exportKey("public"),padding:s},a)},decrypt:function(t,o){var s;if(o)return s=i.RSA_PKCS1_PADDING,e.encryptionSchemeOptions&&e.encryptionSchemeOptions.padding&&(s=e.encryptionSchemeOptions.padding),n.publicDecrypt({key:e.rsaUtils.exportKey("public"),padding:s},t);s=i.RSA_PKCS1_OAEP_PADDING,"pkcs1"===e.encryptionScheme&&(s=i.RSA_PKCS1_PADDING),e.encryptionSchemeOptions&&e.encryptionSchemeOptions.padding&&(s=e.encryptionSchemeOptions.padding);var a=n.privateDecrypt({key:e.rsaUtils.exportKey("private"),padding:s},t);return s===i.RSA_NO_PADDING?r.pkcs0unpad(a):a}}}},7469:(t,e,r)=>{var n=r(1973),i=r(1768);t.exports=function(t,e){var r=i.pkcs1.makeScheme(t,e);return{encrypt:function(e,i){var o,s;return i?(o=new n(r.encPad(e,{type:1})),s=t.$doPrivate(o)):(o=new n(t.encryptionScheme.encPad(e)),s=t.$doPublic(o)),s.toBuffer(t.encryptedDataLength)},decrypt:function(e,i){var o,s=new n(e);return i?(o=t.$doPublic(s),r.encUnPad(o.toBuffer(t.encryptedDataLength),{type:1})):(o=t.$doPrivate(s),t.encryptionScheme.encUnPad(o.toBuffer(t.encryptedDataLength)))}}}},1957:(t,e,r)=>{var n=r(3200),i=r(7449),o=r(1768);t.exports=function(t,e){var s=r(7469)(t,e),a=o.pkcs1.makeScheme(t,e);return{encrypt:function(t,r){if(r)return s.encrypt(t,r);var o=i.RSA_PKCS1_OAEP_PADDING;"pkcs1"===e.encryptionScheme&&(o=i.RSA_PKCS1_PADDING),e.encryptionSchemeOptions&&e.encryptionSchemeOptions.padding&&(o=e.encryptionSchemeOptions.padding);var f=t;return o===i.RSA_NO_PADDING&&(f=a.pkcs0pad(t)),n.publicEncrypt({key:e.rsaUtils.exportKey("public"),padding:o},f)},decrypt:function(t,r){if(r)return s.decrypt(t,r);var o=i.RSA_PKCS1_OAEP_PADDING;"pkcs1"===e.encryptionScheme&&(o=i.RSA_PKCS1_PADDING),e.encryptionSchemeOptions&&e.encryptionSchemeOptions.padding&&(o=e.encryptionSchemeOptions.padding);var f=n.privateDecrypt({key:e.rsaUtils.exportKey("private"),padding:o},t);return o===i.RSA_NO_PADDING?a.pkcs0unpad(f):f}}}},3374:(t,e,r)=>{r(8226)._,r(8226),t.exports={privateExport:function(t,e){return{n:t.n.toBuffer(),e:t.e,d:t.d.toBuffer(),p:t.p.toBuffer(),q:t.q.toBuffer(),dmp1:t.dmp1.toBuffer(),dmq1:t.dmq1.toBuffer(),coeff:t.coeff.toBuffer()}},privateImport:function(t,e,r){if(!(e.n&&e.e&&e.d&&e.p&&e.q&&e.dmp1&&e.dmq1&&e.coeff))throw Error("Invalid key data");t.setPrivate(e.n,e.e,e.d,e.p,e.q,e.dmp1,e.dmq1,e.coeff)},publicExport:function(t,e){return{n:t.n.toBuffer(),e:t.e}},publicImport:function(t,e,r){if(!e.n||!e.e)throw Error("Invalid key data");t.setPublic(e.n,e.e)},autoImport:function(e,r){return!(!r.n||!r.e||(r.d&&r.p&&r.q&&r.dmp1&&r.dmq1&&r.coeff?(t.exports.privateImport(e,r),0):(t.exports.publicImport(e,r),0)))}}},7460:(t,e,r)=>{function n(t){t=t.split("-");for(var e="private",r={type:"default"},n=1;n{var n=r(8287).Buffer,i=r(8226)._,o=r(8226),s=r(1973);const a="-----BEGIN OPENSSH PRIVATE KEY-----",f="-----END OPENSSH PRIVATE KEY-----";function u(t){const e=t.buf.readInt32BE(t.off);t.off+=4;const r=t.buf.slice(t.off,t.off+e);return t.off+=e,r}function c(t,e){t.buf.writeInt32BE(e.byteLength,t.off),t.off+=4,t.off+=e.copy(t.buf,t.off)}t.exports={privateExport:function(t,e){const r=t.n.toBuffer();let i=n.alloc(4);for(i.writeUInt32BE(t.e,0);0===i[0];)i=i.slice(1);const s=t.d.toBuffer(),u=t.coeff.toBuffer(),h=t.p.toBuffer(),p=t.q.toBuffer();let l;l=void 0!==t.sshcomment?n.from(t.sshcomment):n.from([]);const y=15+i.byteLength+4+r.byteLength,g=23+r.byteLength+4+i.byteLength+4+s.byteLength+4+u.byteLength+4+h.byteLength+4+p.byteLength+4+l.byteLength;let d=43+y+4+g;d+=8*Math.ceil(g/8)-g;const v=n.alloc(d),m={buf:v,off:0};v.write("openssh-key-v1","utf8"),v.writeUInt8(0,14),m.off+=15,c(m,n.from("none")),c(m,n.from("none")),c(m,n.from("")),m.off=m.buf.writeUInt32BE(1,m.off),m.off=m.buf.writeUInt32BE(y,m.off),c(m,n.from("ssh-rsa")),c(m,i),c(m,r),m.off=m.buf.writeUInt32BE(d-47-y,m.off),m.off+=8,c(m,n.from("ssh-rsa")),c(m,r),c(m,i),c(m,s),c(m,u),c(m,h),c(m,p),c(m,l);let S=1;for(;m.off{var n=r(8287).Buffer,i=r(3100).Ber,o=r(8226)._,s=r(8226);const a="-----BEGIN RSA PRIVATE KEY-----",f="-----END RSA PRIVATE KEY-----",u="-----BEGIN RSA PUBLIC KEY-----",c="-----END RSA PUBLIC KEY-----";t.exports={privateExport:function(t,e){e=e||{};var r=t.n.toBuffer(),n=t.d.toBuffer(),o=t.p.toBuffer(),u=t.q.toBuffer(),c=t.dmp1.toBuffer(),h=t.dmq1.toBuffer(),p=t.coeff.toBuffer(),l=r.length+n.length+o.length+u.length+c.length+h.length+p.length+512,y=new i.Writer({size:l});return y.startSequence(),y.writeInt(0),y.writeBuffer(r,2),y.writeInt(t.e),y.writeBuffer(n,2),y.writeBuffer(o,2),y.writeBuffer(u,2),y.writeBuffer(c,2),y.writeBuffer(h,2),y.writeBuffer(p,2),y.endSequence(),"der"===e.type?y.buffer:a+"\n"+s.linebrk(y.buffer.toString("base64"),64)+"\n"+f},privateImport:function(t,e,r){var u;if("der"!==(r=r||{}).type){if(n.isBuffer(e)&&(e=e.toString("utf8")),!o.isString(e))throw Error("Unsupported key format");var c=s.trimSurroundingText(e,a,f).replace(/\s+|\n\r|\n|\r$/gm,"");u=n.from(c,"base64")}else{if(!n.isBuffer(e))throw Error("Unsupported key format");u=e}var h=new i.Reader(u);h.readSequence(),h.readString(2,!0),t.setPrivate(h.readString(2,!0),h.readString(2,!0),h.readString(2,!0),h.readString(2,!0),h.readString(2,!0),h.readString(2,!0),h.readString(2,!0),h.readString(2,!0))},publicExport:function(t,e){e=e||{};var r=t.n.toBuffer(),n=r.length+512,o=new i.Writer({size:n});return o.startSequence(),o.writeBuffer(r,2),o.writeInt(t.e),o.endSequence(),"der"===e.type?o.buffer:u+"\n"+s.linebrk(o.buffer.toString("base64"),64)+"\n"+c},publicImport:function(t,e,r){var a;if("der"!==(r=r||{}).type){if(n.isBuffer(e)&&(e=e.toString("utf8")),o.isString(e)){var f=s.trimSurroundingText(e,u,c).replace(/\s+|\n\r|\n|\r$/gm,"");a=n.from(f,"base64")}}else{if(!n.isBuffer(e))throw Error("Unsupported key format");a=e}var h=new i.Reader(a);h.readSequence(),t.setPublic(h.readString(2,!0),h.readString(2,!0))},autoImport:function(e,r){return/^[\S\s]*-----BEGIN RSA PRIVATE KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END RSA PRIVATE KEY-----[\S\s]*$/g.test(r)?(t.exports.privateImport(e,r),!0):!!/^[\S\s]*-----BEGIN RSA PUBLIC KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END RSA PUBLIC KEY-----[\S\s]*$/g.test(r)&&(t.exports.publicImport(e,r),!0)}}},8573:(t,e,r)=>{var n=r(8287).Buffer,i=r(3100).Ber,o=r(8226)._,s="1.2.840.113549.1.1.1",a=r(8226);const f="-----BEGIN PRIVATE KEY-----",u="-----END PRIVATE KEY-----",c="-----BEGIN PUBLIC KEY-----",h="-----END PUBLIC KEY-----";t.exports={privateExport:function(t,e){e=e||{};var r=t.n.toBuffer(),n=t.d.toBuffer(),o=t.p.toBuffer(),c=t.q.toBuffer(),h=t.dmp1.toBuffer(),p=t.dmq1.toBuffer(),l=t.coeff.toBuffer(),y=r.length+n.length+o.length+c.length+h.length+p.length+l.length+512,g=new i.Writer({size:y});g.startSequence(),g.writeInt(0),g.writeBuffer(r,2),g.writeInt(t.e),g.writeBuffer(n,2),g.writeBuffer(o,2),g.writeBuffer(c,2),g.writeBuffer(h,2),g.writeBuffer(p,2),g.writeBuffer(l,2),g.endSequence();var d=new i.Writer({size:y});return d.startSequence(),d.writeInt(0),d.startSequence(),d.writeOID(s),d.writeNull(),d.endSequence(),d.writeBuffer(g.buffer,4),d.endSequence(),"der"===e.type?d.buffer:f+"\n"+a.linebrk(d.buffer.toString("base64"),64)+"\n"+u},privateImport:function(t,e,r){var c;if("der"!==(r=r||{}).type){if(n.isBuffer(e)&&(e=e.toString("utf8")),!o.isString(e))throw Error("Unsupported key format");var h=a.trimSurroundingText(e,f,u).replace("-----END PRIVATE KEY-----","").replace(/\s+|\n\r|\n|\r$/gm,"");c=n.from(h,"base64")}else{if(!n.isBuffer(e))throw Error("Unsupported key format");c=e}var p=new i.Reader(c);if(p.readSequence(),p.readInt(0),new i.Reader(p.readString(48,!0)).readOID(6,!0)!==s)throw Error("Invalid Public key format");var l=new i.Reader(p.readString(4,!0));l.readSequence(),l.readString(2,!0),t.setPrivate(l.readString(2,!0),l.readString(2,!0),l.readString(2,!0),l.readString(2,!0),l.readString(2,!0),l.readString(2,!0),l.readString(2,!0),l.readString(2,!0))},publicExport:function(t,e){e=e||{};var r=t.n.toBuffer(),n=r.length+512,o=new i.Writer({size:n});o.writeByte(0),o.startSequence(),o.writeBuffer(r,2),o.writeInt(t.e),o.endSequence();var f=new i.Writer({size:n});return f.startSequence(),f.startSequence(),f.writeOID(s),f.writeNull(),f.endSequence(),f.writeBuffer(o.buffer,3),f.endSequence(),"der"===e.type?f.buffer:c+"\n"+a.linebrk(f.buffer.toString("base64"),64)+"\n"+h},publicImport:function(t,e,r){var f;if("der"!==(r=r||{}).type){if(n.isBuffer(e)&&(e=e.toString("utf8")),o.isString(e)){var u=a.trimSurroundingText(e,c,h).replace(/\s+|\n\r|\n|\r$/gm,"");f=n.from(u,"base64")}}else{if(!n.isBuffer(e))throw Error("Unsupported key format");f=e}var p=new i.Reader(f);if(p.readSequence(),new i.Reader(p.readString(48,!0)).readOID(6,!0)!==s)throw Error("Invalid Public key format");var l=new i.Reader(p.readString(3,!0));l.readByte(),l.readSequence(),t.setPublic(l.readString(2,!0),l.readString(2,!0))},autoImport:function(e,r){return/^[\S\s]*-----BEGIN PRIVATE KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END PRIVATE KEY-----[\S\s]*$/g.test(r)?(t.exports.privateImport(e,r),!0):!!/^[\S\s]*-----BEGIN PUBLIC KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END PUBLIC KEY-----[\S\s]*$/g.test(r)&&(t.exports.publicImport(e,r),!0)}}},1973:(t,e,r)=>{var n=r(8287).Buffer,i=r(3200),o=r(8226)._;function s(t,e){null!=t&&("number"==typeof t?this.fromNumber(t,e):n.isBuffer(t)?this.fromBuffer(t):null==e&&"string"!=typeof t?this.fromByteArray(t):this.fromString(t,e))}function a(){return new s(null)}s.prototype.am=function(t,e,r,n,i,o){for(var s=16383&e,a=e>>14;--o>=0;){var f=16383&this[t],u=this[t++]>>14,c=a*f+u*s;i=((f=s*f+((16383&c)<<14)+r[n]+i)>>28)+(c>>14)+a*u,r[n++]=268435455&f}return i},s.prototype.DB=28,s.prototype.DM=268435455,s.prototype.DV=1<<28,s.prototype.FV=Math.pow(2,52),s.prototype.F1=24,s.prototype.F2=4;var f,u,c=new Array;for(f="0".charCodeAt(0),u=0;u<=9;++u)c[f++]=u;for(f="a".charCodeAt(0),u=10;u<36;++u)c[f++]=u;for(f="A".charCodeAt(0),u=10;u<36;++u)c[f++]=u;function h(t){return"0123456789abcdefghijklmnopqrstuvwxyz".charAt(t)}function p(t,e){var r=c[t.charCodeAt(e)];return null==r?-1:r}function l(t){var e=a();return e.fromInt(t),e}function y(t){var e,r=1;return 0!=(e=t>>>16)&&(t=e,r+=16),0!=(e=t>>8)&&(t=e,r+=8),0!=(e=t>>4)&&(t=e,r+=4),0!=(e=t>>2)&&(t=e,r+=2),0!=(e=t>>1)&&(t=e,r+=1),r}function g(t){this.m=t}function d(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<>=16,e+=16),255&t||(t>>=8,e+=8),15&t||(t>>=4,e+=4),3&t||(t>>=2,e+=2),1&t||++e,e}function E(t){for(var e=0;0!=t;)t&=t-1,++e;return e}function w(){}function O(t){return t}function B(t){this.r2=a(),this.q3=a(),s.ONE.dlShiftTo(2*t.t,this.r2),this.mu=this.r2.divide(t),this.m=t}g.prototype.convert=function(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t},g.prototype.revert=function(t){return t},g.prototype.reduce=function(t){t.divRemTo(this.m,null,t)},g.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r),this.reduce(r)},g.prototype.sqrTo=function(t,e){t.squareTo(e),this.reduce(e)},d.prototype.convert=function(t){var e=a();return t.abs().dlShiftTo(this.m.t,e),e.divRemTo(this.m,null,e),t.s<0&&e.compareTo(s.ZERO)>0&&this.m.subTo(e,e),e},d.prototype.revert=function(t){var e=a();return t.copyTo(e),this.reduce(e),e},d.prototype.reduce=function(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var e=0;e>15)*this.mpl&this.um)<<15)&t.DM;for(t[r=e+this.m.t]+=this.m.am(0,n,t,e,0,this.m.t);t[r]>=t.DV;)t[r]-=t.DV,t[++r]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)},d.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r),this.reduce(r)},d.prototype.sqrTo=function(t,e){t.squareTo(e),this.reduce(e)},w.prototype.convert=O,w.prototype.revert=O,w.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r)},w.prototype.sqrTo=function(t,e){t.squareTo(e)},B.prototype.convert=function(t){if(t.s<0||t.t>2*this.m.t)return t.mod(this.m);if(t.compareTo(this.m)<0)return t;var e=a();return t.copyTo(e),this.reduce(e),e},B.prototype.revert=function(t){return t},B.prototype.reduce=function(t){for(t.drShiftTo(this.m.t-1,this.r2),t.t>this.m.t+1&&(t.t=this.m.t+1,t.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);t.compareTo(this.r2)<0;)t.dAddOffset(1,this.m.t+1);for(t.subTo(this.r2,t);t.compareTo(this.m)>=0;)t.subTo(this.m,t)},B.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r),this.reduce(r)},B.prototype.sqrTo=function(t,e){t.squareTo(e),this.reduce(e)};var A=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],x=(1<<26)/A[A.length-1];s.prototype.copyTo=function(t){for(var e=this.t-1;e>=0;--e)t[e]=this[e];t.t=this.t,t.s=this.s},s.prototype.fromInt=function(t){this.t=1,this.s=t<0?-1:0,t>0?this[0]=t:t<-1?this[0]=t+DV:this.t=0},s.prototype.fromString=function(t,e,r){var n;switch(e){case 2:n=1;break;case 4:n=2;break;case 8:n=3;break;case 16:n=4;break;case 32:n=5;break;case 256:n=8;break;default:return void this.fromRadix(t,e)}this.t=0,this.s=0;for(var i=t.length,o=!1,a=0;--i>=0;){var f=8==n?255&t[i]:p(t,i);f<0?"-"==t.charAt(i)&&(o=!0):(o=!1,0===a?this[this.t++]=f:a+n>this.DB?(this[this.t-1]|=(f&(1<>this.DB-a):this[this.t-1]|=f<=this.DB&&(a-=this.DB))}!r&&8==n&&128&t[0]&&(this.s=-1,a>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==t;)--this.t},s.prototype.dlShiftTo=function(t,e){var r;for(r=this.t-1;r>=0;--r)e[r+t]=this[r];for(r=t-1;r>=0;--r)e[r]=0;e.t=this.t+t,e.s=this.s},s.prototype.drShiftTo=function(t,e){for(var r=t;r=0;--r)e[r+s+1]=this[r]>>i|a,a=(this[r]&o)<=0;--r)e[r]=0;e[s]=a,e.t=this.t+s+1,e.s=this.s,e.clamp()},s.prototype.rShiftTo=function(t,e){e.s=this.s;var r=Math.floor(t/this.DB);if(r>=this.t)e.t=0;else{var n=t%this.DB,i=this.DB-n,o=(1<>n;for(var s=r+1;s>n;n>0&&(e[this.t-r-1]|=(this.s&o)<>=this.DB;if(t.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n-=t.s}e.s=n<0?-1:0,n<-1?e[r++]=this.DV+n:n>0&&(e[r++]=n),e.t=r,e.clamp()},s.prototype.multiplyTo=function(t,e){var r=this.abs(),n=t.abs(),i=r.t;for(e.t=i+n.t;--i>=0;)e[i]=0;for(i=0;i=0;)t[r]=0;for(r=0;r=e.DV&&(t[r+e.t]-=e.DV,t[r+e.t+1]=1)}t.t>0&&(t[t.t-1]+=e.am(r,e[r],t,2*r,0,1)),t.s=0,t.clamp()},s.prototype.divRemTo=function(t,e,r){var n=t.abs();if(!(n.t<=0)){var i=this.abs();if(i.t0?(n.lShiftTo(c,o),i.lShiftTo(c,r)):(n.copyTo(o),i.copyTo(r));var h=o.t,p=o[h-1];if(0!==p){var l=p*(1<1?o[h-2]>>this.F2:0),g=this.FV/l,d=(1<=0&&(r[r.t++]=1,r.subTo(_,r)),s.ONE.dlShiftTo(h,_),_.subTo(o,o);o.t=0;){var b=r[--m]==p?this.DM:Math.floor(r[m]*g+(r[m-1]+v)*d);if((r[m]+=o.am(0,b,r,S,0,h))0&&r.rShiftTo(c,r),f<0&&s.ZERO.subTo(r,r)}}},s.prototype.invDigit=function(){if(this.t<1)return 0;var t=this[0];if(!(1&t))return 0;var e=3&t;return(e=(e=(e=(e=e*(2-(15&t)*e)&15)*(2-(255&t)*e)&255)*(2-((65535&t)*e&65535))&65535)*(2-t*e%this.DV)%this.DV)>0?this.DV-e:-e},s.prototype.isEven=function(){return 0===(this.t>0?1&this[0]:this.s)},s.prototype.exp=function(t,e){if(t>4294967295||t<1)return s.ONE;var r=a(),n=a(),i=e.convert(this),o=y(t)-1;for(i.copyTo(r);--o>=0;)if(e.sqrTo(r,n),(t&1<0)e.mulTo(n,i,r);else{var f=r;r=n,n=f}return e.revert(r)},s.prototype.chunkSize=function(t){return Math.floor(Math.LN2*this.DB/Math.log(t))},s.prototype.toRadix=function(t){if(null==t&&(t=10),0===this.signum()||t<2||t>36)return"0";var e=this.chunkSize(t),r=Math.pow(t,e),n=l(r),i=a(),o=a(),s="";for(this.divRemTo(n,i,o);i.signum()>0;)s=(r+o.intValue()).toString(t).substr(1)+s,i.divRemTo(n,i,o);return o.intValue().toString(t)+s},s.prototype.fromRadix=function(t,e){this.fromInt(0),null==e&&(e=10);for(var r=this.chunkSize(e),n=Math.pow(e,r),i=!1,o=0,a=0,f=0;f=r&&(this.dMultiply(n),this.dAddOffset(a,0),o=0,a=0))}o>0&&(this.dMultiply(Math.pow(e,o)),this.dAddOffset(a,0)),i&&s.ZERO.subTo(this,this)},s.prototype.fromNumber=function(t,e){if("number"==typeof e)if(t<2)this.fromInt(1);else for(this.fromNumber(t),this.testBit(t-1)||this.bitwiseTo(s.ONE.shiftLeft(t-1),m,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(e);)this.dAddOffset(2,0),this.bitLength()>t&&this.subTo(s.ONE.shiftLeft(t-1),this);else{var r=i.randomBytes(1+(t>>3)),n=7&t;n>0?r[0]&=(1<>=this.DB;if(t.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n+=t.s}e.s=n<0?-1:0,n>0?e[r++]=n:n<-1&&(e[r++]=this.DV+n),e.t=r,e.clamp()},s.prototype.dMultiply=function(t){this[this.t]=this.am(0,t-1,this,0,0,this.t),++this.t,this.clamp()},s.prototype.dAddOffset=function(t,e){if(0!==t){for(;this.t<=e;)this[this.t++]=0;for(this[e]+=t;this[e]>=this.DV;)this[e]-=this.DV,++e>=this.t&&(this[this.t++]=0),++this[e]}},s.prototype.multiplyLowerTo=function(t,e,r){var n,i=Math.min(this.t+t.t,e);for(r.s=0,r.t=i;i>0;)r[--i]=0;for(n=r.t-this.t;i=0;)r[n]=0;for(n=Math.max(e-this.t,0);n0)if(0===e)r=this[0]%t;else for(var n=this.t-1;n>=0;--n)r=(e*r+this[n])%t;return r},s.prototype.millerRabin=function(t){var e=this.subtract(s.ONE),r=e.getLowestSetBit();if(r<=0)return!1;var n=e.shiftRight(r);(t=t+1>>1)>A.length&&(t=A.length);for(var i=a(),o=0;o0)for(a>a)>0&&(i=!0,o=h(r));s>=0;)a>(a+=this.DB-e)):(r=this[s]>>(a-=e)&n,a<=0&&(a+=this.DB,--s)),r>0&&(i=!0),i&&(o+=h(r));return i?o:"0"},s.prototype.negate=function(){var t=a();return s.ZERO.subTo(this,t),t},s.prototype.abs=function(){return this.s<0?this.negate():this},s.prototype.compareTo=function(t){var e=this.s-t.s;if(0!=e)return e;var r=this.t;if(0!=(e=r-t.t))return this.s<0?-e:e;for(;--r>=0;)if(0!=(e=this[r]-t[r]))return e;return 0},s.prototype.bitLength=function(){return this.t<=0?0:this.DB*(this.t-1)+y(this[this.t-1]^this.s&this.DM)},s.prototype.mod=function(t){var e=a();return this.abs().divRemTo(t,null,e),this.s<0&&e.compareTo(s.ZERO)>0&&t.subTo(e,e),e},s.prototype.modPowInt=function(t,e){var r;return r=t<256||e.isEven()?new g(e):new d(e),this.exp(t,r)},s.prototype.clone=function(){var t=a();return this.copyTo(t),t},s.prototype.intValue=function(){if(this.s<0){if(1==this.t)return this[0]-this.DV;if(0===this.t)return-1}else{if(1==this.t)return this[0];if(0===this.t)return 0}return(this[1]&(1<<32-this.DB)-1)<>24},s.prototype.shortValue=function(){return 0==this.t?this.s:this[0]<<16>>16},s.prototype.signum=function(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1},s.prototype.toByteArray=function(){var t=this.t,e=new Array;e[0]=this.s;var r,n=this.DB-t*this.DB%8,i=0;if(t-- >0)for(n>n)!=(this.s&this.DM)>>n&&(e[i++]=r|this.s<=0;)n<8?(r=(this[t]&(1<>(n+=this.DB-8)):(r=this[t]>>(n-=8)&255,n<=0&&(n+=this.DB,--t)),128&r&&(r|=-256),0===i&&(128&this.s)!=(128&r)&&++i,(i>0||r!=this.s)&&(e[i++]=r);return e},s.prototype.toBuffer=function(t){var e=n.from(this.toByteArray());if(!0===t&&0===e[0])e=e.slice(1);else if(o.isNumber(t)){if(e.length>t){for(var r=0;r0?this:t},s.prototype.and=function(t){var e=a();return this.bitwiseTo(t,v,e),e},s.prototype.or=function(t){var e=a();return this.bitwiseTo(t,m,e),e},s.prototype.xor=function(t){var e=a();return this.bitwiseTo(t,S,e),e},s.prototype.andNot=function(t){var e=a();return this.bitwiseTo(t,_,e),e},s.prototype.not=function(){for(var t=a(),e=0;e=this.t?0!=this.s:!!(this[e]&1<1){var h=a();for(n.sqrTo(s[1],h);f<=c;)s[f]=a(),n.mulTo(h,s[f-2],s[f]),f+=2}var p,v,m=t.t-1,S=!0,_=a();for(i=y(t[m])-1;m>=0;){for(i>=u?p=t[m]>>i-u&c:(p=(t[m]&(1<0&&(p|=t[m-1]>>this.DB+i-u)),f=r;!(1&p);)p>>=1,--f;if((i-=f)<0&&(i+=this.DB,--m),S)s[p].copyTo(o),S=!1;else{for(;f>1;)n.sqrTo(o,_),n.sqrTo(_,o),f-=2;f>0?n.sqrTo(o,_):(v=o,o=_,_=v),n.mulTo(_,s[p],o)}for(;m>=0&&!(t[m]&1<=0?(r.subTo(n,r),e&&i.subTo(a,i),o.subTo(f,o)):(n.subTo(r,n),e&&a.subTo(i,a),f.subTo(o,f))}return 0!=n.compareTo(s.ONE)?s.ZERO:f.compareTo(t)>=0?f.subtract(t):f.signum()<0?(f.addTo(t,f),f.signum()<0?f.add(t):f):f},s.prototype.pow=function(t){return this.exp(t,new w)},s.prototype.gcd=function(t){var e=this.s<0?this.negate():this.clone(),r=t.s<0?t.negate():t.clone();if(e.compareTo(r)<0){var n=e;e=r,r=n}var i=e.getLowestSetBit(),o=r.getLowestSetBit();if(o<0)return e;for(i0&&(e.rShiftTo(o,e),r.rShiftTo(o,r));e.signum()>0;)(i=e.getLowestSetBit())>0&&e.rShiftTo(i,e),(i=r.getLowestSetBit())>0&&r.rShiftTo(i,r),e.compareTo(r)>=0?(e.subTo(r,e),e.rShiftTo(1,e)):(r.subTo(e,r),r.rShiftTo(1,r));return o>0&&r.lShiftTo(o,r),r},s.prototype.isProbablePrime=function(t){var e,r=this.abs();if(1==r.t&&r[0]<=A[A.length-1]){for(e=0;e{var n=r(8287).Buffer,i=r(8226)._,o=(r(3200),r(1973)),s=r(8226),a=r(1768),f=r(4538);e.BigInteger=o,t.exports.Key=function(){function t(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}return t.prototype.setOptions=function(t){var e=a[t.signingScheme],r=a[t.encryptionScheme];e===r?this.signingScheme=this.encryptionScheme=r.makeScheme(this,t):(this.encryptionScheme=r.makeScheme(this,t),this.signingScheme=e.makeScheme(this,t)),this.encryptEngine=f.getEngine(this,t)},t.prototype.generate=function(t,e){var r=t>>1;this.e=parseInt(e,16);for(var n=new o(e,16);;){for(;this.p=new o(t-r,1),0!==this.p.subtract(o.ONE).gcd(n).compareTo(o.ONE)||!this.p.isProbablePrime(10););for(;this.q=new o(r,1),0!==this.q.subtract(o.ONE).gcd(n).compareTo(o.ONE)||!this.q.isProbablePrime(10););if(this.p.compareTo(this.q)<=0){var i=this.p;this.p=this.q,this.q=i}var s=this.p.subtract(o.ONE),a=this.q.subtract(o.ONE),f=s.multiply(a);if(0===f.gcd(n).compareTo(o.ONE)){if(this.n=this.p.multiply(this.q),this.n.bitLength()0&&(i.isNumber(e)||e.length>0)&&r.length>0))throw Error("Invalid RSA private key");this.n=new o(t),this.e=i.isNumber(e)?e:s.get32IntFromBuffer(e,0),this.d=new o(r),n&&a&&f&&u&&c&&(this.p=new o(n),this.q=new o(a),this.dmp1=new o(f),this.dmq1=new o(u),this.coeff=new o(c)),this.$$recalculateCache()},t.prototype.setPublic=function(t,e){if(!(t&&e&&t.length>0&&(i.isNumber(e)||e.length>0)))throw Error("Invalid RSA public key");this.n=new o(t),this.e=i.isNumber(e)?e:s.get32IntFromBuffer(e,0),this.$$recalculateCache()},t.prototype.$doPrivate=function(t){if(this.p||this.q)return t.modPow(this.d,this.n);for(var e=t.mod(this.p).modPow(this.dmp1,this.p),r=t.mod(this.q).modPow(this.dmq1,this.q);e.compareTo(r)<0;)e=e.add(this.p);return e.subtract(r).multiply(this.coeff).mod(this.p).multiply(this.q).add(r)},t.prototype.$doPublic=function(t){return t.modPowInt(this.e,this.n)},t.prototype.encrypt=function(t,e){var r=[],i=[],o=t.length,s=Math.ceil(o/this.maxMessageLength)||1,a=Math.ceil(o/s||1);if(1==s)r.push(t);else for(var f=0;f0)throw Error("Incorrect data or key");for(var r=[],i=0,o=0,s=t.length/this.encryptedDataLength,a=0;a>3},t}()},2487:(t,e,r)=>{var n=r(8287).Buffer,i=(r(1973),r(3200));t.exports={isEncryption:!0,isSignature:!1},t.exports.digestLength={md4:16,md5:16,ripemd160:20,rmd160:20,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64};var o="sha1";t.exports.eme_oaep_mgf1=function(e,r,s){s=s||o;for(var a=t.exports.digestLength[s],f=Math.ceil(r/a),u=n.alloc(a*f),c=n.alloc(4),h=0;hf-2*u-2)throw new Error("Message is too long to encode into an encoded message with a length of "+f+" bytes, increaseemLen to fix this error (minimum value for given parameters and options: "+(f-2*u-2)+")");var c=i.createHash(r);c.update(a),c=c.digest();var h=n.alloc(f-e.length-2*u-1);h.fill(0),h[h.length-1]=1;for(var p=n.concat([c,h,e]),l=i.randomBytes(u),y=s(l,p.length,r),g=0;g{var n=r(8287).Buffer,i=r(1973),o=r(3200),s=r(7449),a={md2:n.from("3020300c06082a864886f70d020205000410","hex"),md5:n.from("3020300c06082a864886f70d020505000410","hex"),sha1:n.from("3021300906052b0e03021a05000414","hex"),sha224:n.from("302d300d06096086480165030402040500041c","hex"),sha256:n.from("3031300d060960864801650304020105000420","hex"),sha384:n.from("3041300d060960864801650304020205000430","hex"),sha512:n.from("3051300d060960864801650304020305000440","hex"),ripemd160:n.from("3021300906052b2403020105000414","hex"),rmd160:n.from("3021300906052b2403020105000414","hex")},f={ripemd160:"rmd160"},u="sha256";t.exports={isEncryption:!0,isSignature:!0},t.exports.makeScheme=function(t,e){function r(t,e){this.key=t,this.options=e}return r.prototype.maxMessageLength=function(){return this.options.encryptionSchemeOptions&&this.options.encryptionSchemeOptions.padding==s.RSA_NO_PADDING?this.key.encryptedDataLength:this.key.encryptedDataLength-11},r.prototype.encPad=function(t,e){var r;if(e=e||{},t.length>this.key.maxMessageLength)throw new Error("Message too long for RSA (n="+this.key.encryptedDataLength+", l="+t.length+")");if(this.options.encryptionSchemeOptions&&this.options.encryptionSchemeOptions.padding==s.RSA_NO_PADDING)return(r=n.alloc(this.key.maxMessageLength-t.length)).fill(0),n.concat([r,t]);if(1===e.type)return(r=n.alloc(this.key.encryptedDataLength-t.length-1)).fill(255,0,r.length-1),r[0]=1,r[r.length-1]=0,n.concat([r,t]);(r=n.alloc(this.key.encryptedDataLength-t.length))[0]=0,r[1]=2;for(var i=o.randomBytes(r.length-3),a=0;a=t.length)return null}else{if(0!==t[0]||2!==t[1])return null;for(r=3;0!==t[r];)if(++r>=t.length)return null}return t.slice(r+1,t.length)},r.prototype.sign=function(t){var e=this.options.signingSchemeOptions.hash||u;if("browser"===this.options.environment){e=f[e]||e;var r=o.createHash(e);r.update(t);var n=this.pkcs1pad(r.digest(),e);return this.key.$doPrivate(new i(n)).toBuffer(this.key.encryptedDataLength)}var s=o.createSign("RSA-"+e.toUpperCase());return s.update(t),s.sign(this.options.rsaUtils.exportKey("private"))},r.prototype.verify=function(t,e,r){if(this.options.encryptionSchemeOptions&&this.options.encryptionSchemeOptions.padding==s.RSA_NO_PADDING)return!1;var a=this.options.signingSchemeOptions.hash||u;if("browser"===this.options.environment){a=f[a]||a,r&&(e=n.from(e,r));var c=o.createHash(a);c.update(t);var h=this.pkcs1pad(c.digest(),a);return this.key.$doPublic(new i(e)).toBuffer().toString("hex")==h.toString("hex")}var p=o.createVerify("RSA-"+a.toUpperCase());return p.update(t),p.verify(this.options.rsaUtils.exportKey("public"),e,r)},r.prototype.pkcs0pad=function(t){var e=n.alloc(this.key.maxMessageLength-t.length);return e.fill(0),n.concat([e,t])},r.prototype.pkcs0unpad=function(t){return"function"==typeof t.lastIndexOf?t.slice(t.lastIndexOf("\0")+1,t.length):t.slice(String.prototype.lastIndexOf.call(t,"\0")+1,t.length)},r.prototype.pkcs1pad=function(t,e){var r=a[e];if(!r)throw Error("Unsupported hash algorithm");var i=n.concat([r,t]);if(i.length+10>this.key.encryptedDataLength)throw Error("Key is too short for signing algorithm ("+e+")");var o=n.alloc(this.key.encryptedDataLength-i.length-1);return o.fill(255,0,o.length-1),o[0]=1,o[o.length-1]=0,n.concat([o,i])},new r(t,e)}},4414:(t,e,r)=>{var n=r(8287).Buffer,i=r(1973),o=r(3200);t.exports={isEncryption:!1,isSignature:!0};var s="sha1";t.exports.makeScheme=function(t,e){var a=r(1768).pkcs1_oaep;function f(t,e){this.key=t,this.options=e}return f.prototype.sign=function(t){var e=o.createHash(this.options.signingSchemeOptions.hash||s);e.update(t);var r=this.emsa_pss_encode(e.digest(),this.key.keySize-1);return this.key.$doPrivate(new i(r)).toBuffer(this.key.encryptedDataLength)},f.prototype.verify=function(t,e,r){r&&(e=n.from(e,r)),e=new i(e);var a=Math.ceil((this.key.keySize-1)/8),f=this.key.$doPublic(e).toBuffer(a),u=o.createHash(this.options.signingSchemeOptions.hash||s);return u.update(t),this.emsa_pss_verify(u.digest(),f,this.key.keySize-1)},f.prototype.emsa_pss_encode=function(t,e){var r=this.options.signingSchemeOptions.hash||s,i=this.options.signingSchemeOptions.mgf||a.eme_oaep_mgf1,f=this.options.signingSchemeOptions.saltLength||20,u=a.digestLength[r],c=Math.ceil(e/8);if(c>8-S<<8-S;v[0]=v[0]&_;var b=n.alloc(v.length+l.length+1);return v.copy(b,0),l.copy(b,v.length),b[b.length-1]=188,b},f.prototype.emsa_pss_verify=function(t,e,r){var i=this.options.signingSchemeOptions.hash||s,f=this.options.signingSchemeOptions.mgf||a.eme_oaep_mgf1,u=this.options.signingSchemeOptions.saltLength||20,c=a.digestLength[i],h=Math.ceil(r/8);if(h>8-(g=8*h-r)<<8-g,p[0]=p[0]&l,y=0;0===p[y]&&y{t.exports={pkcs1:r(8290),pkcs1_oaep:r(2487),pss:r(4414),isEncryption:function(e){return t.exports[e]&&t.exports[e].isEncryption},isSignature:function(e){return t.exports[e]&&t.exports[e].isSignature}}},8226:(t,e,r)=>{var n=r(5606);r(3200),t.exports.linebrk=function(t,e){for(var r="",n=0;n+e0){if(r>=4)return t.readUIntBE(e,r);for(var n=0,i=e+r,o=0;i>e;i--,o+=2)n+=t[i-1]*Math.pow(16,o);return n}return NaN},t.exports._={isObject:function(t){var e=typeof t;return!!t&&("object"==e||"function"==e)},isString:function(t){return"string"==typeof t||t instanceof String},isNumber:function(t){return"number"==typeof t||!isNaN(parseFloat(t))&&isFinite(t)},omit:function(t,e){var r={};for(var n in t)t.hasOwnProperty(n)&&n!==e&&(r[n]=t[n]);return r}},t.exports.trimSurroundingText=function(t,e,r){var n=0,i=t.length,o=t.indexOf(e);o>=0&&(n=o+e.length);var s=t.indexOf(r,o);return s>=0&&(i=s),t.substring(n,i)}},8875:(t,e,r)=>{"use strict";var n;if(!Object.keys){var i=Object.prototype.hasOwnProperty,o=Object.prototype.toString,s=r(1093),a=Object.prototype.propertyIsEnumerable,f=!a.call({toString:null},"toString"),u=a.call((function(){}),"prototype"),c=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],h=function(t){var e=t.constructor;return e&&e.prototype===t},p={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},l=function(){if("undefined"==typeof window)return!1;for(var t in window)try{if(!p["$"+t]&&i.call(window,t)&&null!==window[t]&&"object"==typeof window[t])try{h(window[t])}catch(t){return!0}}catch(t){return!0}return!1}();n=function(t){var e=null!==t&&"object"==typeof t,r="[object Function]"===o.call(t),n=s(t),a=e&&"[object String]"===o.call(t),p=[];if(!e&&!r&&!n)throw new TypeError("Object.keys called on a non-object");var y=u&&r;if(a&&t.length>0&&!i.call(t,0))for(var g=0;g0)for(var d=0;d{"use strict";var n=Array.prototype.slice,i=r(1093),o=Object.keys,s=o?function(t){return o(t)}:r(8875),a=Object.keys;s.shim=function(){if(Object.keys){var t=function(){var t=Object.keys(arguments);return t&&t.length===arguments.length}(1,2);t||(Object.keys=function(t){return i(t)?a(n.call(t)):a(t)})}else Object.keys=s;return Object.keys||s},t.exports=s},1093:t=>{"use strict";var e=Object.prototype.toString;t.exports=function(t){var r=e.call(t),n="[object Arguments]"===r;return n||(n="[object Array]"!==r&&null!==t&&"object"==typeof t&&"number"==typeof t.length&&t.length>=0&&"[object Function]"===e.call(t.callee)),n}},8403:(t,e,r)=>{"use strict";var n=r(1189),i=r(1333)(),o=r(8075),s=Object,a=o("Array.prototype.push"),f=o("Object.prototype.propertyIsEnumerable"),u=i?Object.getOwnPropertySymbols:null;t.exports=function(t,e){if(null==t)throw new TypeError("target must be an object");var r=s(t);if(1===arguments.length)return r;for(var o=1;o{"use strict";var n=r(8403);t.exports=function(){return Object.assign?function(){if(!Object.assign)return!1;for(var t="abcdefghijklmnopqrst",e=t.split(""),r={},n=0;n{var e,r,n=t.exports={};function i(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function s(t){if(e===setTimeout)return setTimeout(t,0);if((e===i||!e)&&setTimeout)return e=setTimeout,setTimeout(t,0);try{return e(t,0)}catch(r){try{return e.call(null,t,0)}catch(r){return e.call(this,t,0)}}}!function(){try{e="function"==typeof setTimeout?setTimeout:i}catch(t){e=i}try{r="function"==typeof clearTimeout?clearTimeout:o}catch(t){r=o}}();var a,f=[],u=!1,c=-1;function h(){u&&a&&(u=!1,a.length?f=a.concat(f):c=-1,f.length&&p())}function p(){if(!u){var t=s(h);u=!0;for(var e=f.length;e;){for(a=f,f=[];++c1)for(var r=1;r{"use strict";var n,i=r(5606),o=r(8287),s=o.Buffer,a={};for(n in o)o.hasOwnProperty(n)&&"SlowBuffer"!==n&&"Buffer"!==n&&(a[n]=o[n]);var f=a.Buffer={};for(n in s)s.hasOwnProperty(n)&&"allocUnsafe"!==n&&"allocUnsafeSlow"!==n&&(f[n]=s[n]);if(a.Buffer.prototype=s.prototype,f.from&&f.from!==Uint8Array.from||(f.from=function(t,e,r){if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type '+typeof t);if(t&&void 0===t.length)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);return s(t,e,r)}),f.alloc||(f.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError('The "size" argument must be of type number. Received type '+typeof t);if(t<0||t>=2*(1<<30))throw new RangeError('The value "'+t+'" is invalid for option "size"');var n=s(t);return e&&0!==e.length?"string"==typeof r?n.fill(e,r):n.fill(e):n.fill(0),n}),!a.kStringMaxLength)try{a.kStringMaxLength=i.binding("buffer").kStringMaxLength}catch(t){}a.constants||(a.constants={MAX_LENGTH:a.kMaxLength},a.kStringMaxLength&&(a.constants.MAX_STRING_LENGTH=a.kStringMaxLength)),t.exports=a},6897:(t,e,r)=>{"use strict";var n=r(453),i=r(41),o=r(592)(),s=r(5795),a=r(9675),f=n("%Math.floor%");t.exports=function(t,e){if("function"!=typeof t)throw new a("`fn` is not a function");if("number"!=typeof e||e<0||e>4294967295||f(e)!==e)throw new a("`length` must be a positive 32-bit integer");var r=arguments.length>2&&!!arguments[2],n=!0,u=!0;if("length"in t&&s){var c=s(t,"length");c&&!c.configurable&&(n=!1),c&&!c.writable&&(u=!1)}return(n||u||!r)&&(o?i(t,"length",e,!0,!0):i(t,"length",e)),t}},3200:(t,e,r)=>{var n=r(8287).Buffer,i=r(1396),o={randomBytes:function(t){for(var e=[],r=0;r{var n=r(8287).Buffer;const i=r(3229);let o={outputEncoding:"",PublicFormat:"pkcs1-public",PrivateFormat:"pkcs1-private",options:{environment:"browser",encryptionScheme:"pkcs1"}};t.exports={NodeRSA:i,encryptRSAWithPublicKey:function(t,e,r={}){return r=Object.assign({},o,r),new i(e,r.PublicFormat,r.options).encrypt(t,r.outEncoding||"base64")},encryptRSAWithPrivateKey:function(t,e,r={}){return r=Object.assign({},o,r),new i(e,r.PrivateFormat,r.options).encryptPrivate(t,r.outputEncoding||"base64")},decryptRSAWithPublicKey:function(t,e,r={}){return r=Object.assign({},o,r),new i(e,r.PublicEncoding,r.options).decryptPublic(t,r.outEncoding||"utf8")},decryptRSAWithPrivateKey:function(t,e,r={}){return r=Object.assign({},o,r),new i(e,r.PrivateEncoding,r.options).decrypt(t,r.outEncoding||"utf8")},sign:function(t,e,r={}){return r=Object.assign({},o,r),new i(e,r.PrivateEncoding,r.options).sign(t,r.outEncoding||"base64")},verify:function(t,e,r,s={}){return"string"==typeof e&&e.match(/^([0-9a-fA-F]{2})*$/)?e=n.from(e,"hex"):"string"==typeof e&&(e=n.from(e,"base64")),s=Object.assign({},o,s),new i(r,s.PublicEncoding,s.options).verify(t,e)}}},7449:t=>{"use strict";t.exports=JSON.parse('{"O_RDONLY":0,"O_WRONLY":1,"O_RDWR":2,"S_IFMT":61440,"S_IFREG":32768,"S_IFDIR":16384,"S_IFCHR":8192,"S_IFBLK":24576,"S_IFIFO":4096,"S_IFLNK":40960,"S_IFSOCK":49152,"O_CREAT":512,"O_EXCL":2048,"O_NOCTTY":131072,"O_TRUNC":1024,"O_APPEND":8,"O_DIRECTORY":1048576,"O_NOFOLLOW":256,"O_SYNC":128,"O_SYMLINK":2097152,"O_NONBLOCK":4,"S_IRWXU":448,"S_IRUSR":256,"S_IWUSR":128,"S_IXUSR":64,"S_IRWXG":56,"S_IRGRP":32,"S_IWGRP":16,"S_IXGRP":8,"S_IRWXO":7,"S_IROTH":4,"S_IWOTH":2,"S_IXOTH":1,"E2BIG":7,"EACCES":13,"EADDRINUSE":48,"EADDRNOTAVAIL":49,"EAFNOSUPPORT":47,"EAGAIN":35,"EALREADY":37,"EBADF":9,"EBADMSG":94,"EBUSY":16,"ECANCELED":89,"ECHILD":10,"ECONNABORTED":53,"ECONNREFUSED":61,"ECONNRESET":54,"EDEADLK":11,"EDESTADDRREQ":39,"EDOM":33,"EDQUOT":69,"EEXIST":17,"EFAULT":14,"EFBIG":27,"EHOSTUNREACH":65,"EIDRM":90,"EILSEQ":92,"EINPROGRESS":36,"EINTR":4,"EINVAL":22,"EIO":5,"EISCONN":56,"EISDIR":21,"ELOOP":62,"EMFILE":24,"EMLINK":31,"EMSGSIZE":40,"EMULTIHOP":95,"ENAMETOOLONG":63,"ENETDOWN":50,"ENETRESET":52,"ENETUNREACH":51,"ENFILE":23,"ENOBUFS":55,"ENODATA":96,"ENODEV":19,"ENOENT":2,"ENOEXEC":8,"ENOLCK":77,"ENOLINK":97,"ENOMEM":12,"ENOMSG":91,"ENOPROTOOPT":42,"ENOSPC":28,"ENOSR":98,"ENOSTR":99,"ENOSYS":78,"ENOTCONN":57,"ENOTDIR":20,"ENOTEMPTY":66,"ENOTSOCK":38,"ENOTSUP":45,"ENOTTY":25,"ENXIO":6,"EOPNOTSUPP":102,"EOVERFLOW":84,"EPERM":1,"EPIPE":32,"EPROTO":100,"EPROTONOSUPPORT":43,"EPROTOTYPE":41,"ERANGE":34,"EROFS":30,"ESPIPE":29,"ESRCH":3,"ESTALE":70,"ETIME":101,"ETIMEDOUT":60,"ETXTBSY":26,"EWOULDBLOCK":35,"EXDEV":18,"SIGHUP":1,"SIGINT":2,"SIGQUIT":3,"SIGILL":4,"SIGTRAP":5,"SIGABRT":6,"SIGIOT":6,"SIGBUS":10,"SIGFPE":8,"SIGKILL":9,"SIGUSR1":30,"SIGSEGV":11,"SIGUSR2":31,"SIGPIPE":13,"SIGALRM":14,"SIGTERM":15,"SIGCHLD":20,"SIGCONT":19,"SIGSTOP":17,"SIGTSTP":18,"SIGTTIN":21,"SIGTTOU":22,"SIGURG":16,"SIGXCPU":24,"SIGXFSZ":25,"SIGVTALRM":26,"SIGPROF":27,"SIGWINCH":28,"SIGIO":23,"SIGSYS":12,"SSL_OP_ALL":2147486719,"SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION":262144,"SSL_OP_CIPHER_SERVER_PREFERENCE":4194304,"SSL_OP_CISCO_ANYCONNECT":32768,"SSL_OP_COOKIE_EXCHANGE":8192,"SSL_OP_CRYPTOPRO_TLSEXT_BUG":2147483648,"SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS":2048,"SSL_OP_EPHEMERAL_RSA":0,"SSL_OP_LEGACY_SERVER_CONNECT":4,"SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER":32,"SSL_OP_MICROSOFT_SESS_ID_BUG":1,"SSL_OP_MSIE_SSLV2_RSA_PADDING":0,"SSL_OP_NETSCAPE_CA_DN_BUG":536870912,"SSL_OP_NETSCAPE_CHALLENGE_BUG":2,"SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG":1073741824,"SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG":8,"SSL_OP_NO_COMPRESSION":131072,"SSL_OP_NO_QUERY_MTU":4096,"SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION":65536,"SSL_OP_NO_SSLv2":16777216,"SSL_OP_NO_SSLv3":33554432,"SSL_OP_NO_TICKET":16384,"SSL_OP_NO_TLSv1":67108864,"SSL_OP_NO_TLSv1_1":268435456,"SSL_OP_NO_TLSv1_2":134217728,"SSL_OP_PKCS1_CHECK_1":0,"SSL_OP_PKCS1_CHECK_2":0,"SSL_OP_SINGLE_DH_USE":1048576,"SSL_OP_SINGLE_ECDH_USE":524288,"SSL_OP_SSLEAY_080_CLIENT_DH_BUG":128,"SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG":0,"SSL_OP_TLS_BLOCK_PADDING_BUG":512,"SSL_OP_TLS_D5_BUG":256,"SSL_OP_TLS_ROLLBACK_BUG":8388608,"ENGINE_METHOD_DSA":2,"ENGINE_METHOD_DH":4,"ENGINE_METHOD_RAND":8,"ENGINE_METHOD_ECDH":16,"ENGINE_METHOD_ECDSA":32,"ENGINE_METHOD_CIPHERS":64,"ENGINE_METHOD_DIGESTS":128,"ENGINE_METHOD_STORE":256,"ENGINE_METHOD_PKEY_METHS":512,"ENGINE_METHOD_PKEY_ASN1_METHS":1024,"ENGINE_METHOD_ALL":65535,"ENGINE_METHOD_NONE":0,"DH_CHECK_P_NOT_SAFE_PRIME":2,"DH_CHECK_P_NOT_PRIME":1,"DH_UNABLE_TO_CHECK_GENERATOR":4,"DH_NOT_SUITABLE_GENERATOR":8,"NPN_ENABLED":1,"RSA_PKCS1_PADDING":1,"RSA_SSLV23_PADDING":2,"RSA_NO_PADDING":3,"RSA_PKCS1_OAEP_PADDING":4,"RSA_X931_PADDING":5,"RSA_PKCS1_PSS_PADDING":6,"POINT_CONVERSION_COMPRESSED":2,"POINT_CONVERSION_UNCOMPRESSED":4,"POINT_CONVERSION_HYBRID":6,"F_OK":0,"R_OK":4,"W_OK":2,"X_OK":1,"UV_UDP_REUSEADDR":4}')}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={exports:{}};return t[n].call(o.exports,o,o.exports,r),o.exports}return r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r(7033)})())); \ No newline at end of file diff --git a/drpy_t3/drpy_libs/pako.min.js b/drpy_t3/drpy_libs/pako.min.js new file mode 100644 index 0000000..05a54a2 --- /dev/null +++ b/drpy_t3/drpy_libs/pako.min.js @@ -0,0 +1,2 @@ +/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).pako={})}(this,(function(t){"use strict";function e(t){let e=t.length;for(;--e>=0;)t[e]=0}const a=256,i=286,n=30,s=15,r=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),o=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),l=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),h=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),d=new Array(576);e(d);const _=new Array(60);e(_);const f=new Array(512);e(f);const c=new Array(256);e(c);const u=new Array(29);e(u);const w=new Array(n);function m(t,e,a,i,n){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=i,this.max_length=n,this.has_stree=t&&t.length}let b,g,p;function k(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}e(w);const v=t=>t<256?f[t]:f[256+(t>>>7)],y=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},x=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<{x(t,a[2*e],a[2*e+1])},A=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},E=(t,e,a)=>{const i=new Array(16);let n,r,o=0;for(n=1;n<=s;n++)o=o+a[n-1]<<1,i[n]=o;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=A(i[e]++,e))}},R=t=>{let e;for(e=0;e{t.bi_valid>8?y(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},U=(t,e,a,i)=>{const n=2*e,s=2*a;return t[n]{const i=t.heap[a];let n=a<<1;for(;n<=t.heap_len&&(n{let n,s,l,h,d=0;if(0!==t.sym_next)do{n=255&t.pending_buf[t.sym_buf+d++],n+=(255&t.pending_buf[t.sym_buf+d++])<<8,s=t.pending_buf[t.sym_buf+d++],0===n?z(t,s,e):(l=c[s],z(t,l+a+1,e),h=r[l],0!==h&&(s-=u[l],x(t,s,h)),n--,l=v(n),z(t,l,i),h=o[l],0!==h&&(n-=w[l],x(t,n,h)))}while(d{const a=e.dyn_tree,i=e.stat_desc.static_tree,n=e.stat_desc.has_stree,r=e.stat_desc.elems;let o,l,h,d=-1;for(t.heap_len=0,t.heap_max=573,o=0;o>1;o>=1;o--)S(t,a,o);h=r;do{o=t.heap[1],t.heap[1]=t.heap[t.heap_len--],S(t,a,1),l=t.heap[1],t.heap[--t.heap_max]=o,t.heap[--t.heap_max]=l,a[2*h]=a[2*o]+a[2*l],t.depth[h]=(t.depth[o]>=t.depth[l]?t.depth[o]:t.depth[l])+1,a[2*o+1]=a[2*l+1]=h,t.heap[1]=h++,S(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,i=e.max_code,n=e.stat_desc.static_tree,r=e.stat_desc.has_stree,o=e.stat_desc.extra_bits,l=e.stat_desc.extra_base,h=e.stat_desc.max_length;let d,_,f,c,u,w,m=0;for(c=0;c<=s;c++)t.bl_count[c]=0;for(a[2*t.heap[t.heap_max]+1]=0,d=t.heap_max+1;d<573;d++)_=t.heap[d],c=a[2*a[2*_+1]+1]+1,c>h&&(c=h,m++),a[2*_+1]=c,_>i||(t.bl_count[c]++,u=0,_>=l&&(u=o[_-l]),w=a[2*_],t.opt_len+=w*(c+u),r&&(t.static_len+=w*(n[2*_+1]+u)));if(0!==m){do{for(c=h-1;0===t.bl_count[c];)c--;t.bl_count[c]--,t.bl_count[c+1]+=2,t.bl_count[h]--,m-=2}while(m>0);for(c=h;0!==c;c--)for(_=t.bl_count[c];0!==_;)f=t.heap[--d],f>i||(a[2*f+1]!==c&&(t.opt_len+=(c-a[2*f+1])*a[2*f],a[2*f+1]=c),_--)}})(t,e),E(a,d,t.bl_count)},O=(t,e,a)=>{let i,n,s=-1,r=e[1],o=0,l=7,h=4;for(0===r&&(l=138,h=3),e[2*(a+1)+1]=65535,i=0;i<=a;i++)n=r,r=e[2*(i+1)+1],++o{let i,n,s=-1,r=e[1],o=0,l=7,h=4;for(0===r&&(l=138,h=3),i=0;i<=a;i++)if(n=r,r=e[2*(i+1)+1],!(++o{x(t,0+(i?1:0),3),Z(t),y(t,a),y(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};var N=(t,e,i,n)=>{let s,r,o=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,i=4093624447;for(e=0;e<=31;e++,i>>>=1)if(1&i&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e{let e;for(O(t,t.dyn_ltree,t.l_desc.max_code),O(t,t.dyn_dtree,t.d_desc.max_code),T(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*h[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),s=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=s&&(s=r)):s=r=i+5,i+4<=s&&-1!==e?L(t,e,i,n):4===t.strategy||r===s?(x(t,2+(n?1:0),3),D(t,d,_)):(x(t,4+(n?1:0),3),((t,e,a,i)=>{let n;for(x(t,e-257,5),x(t,a-1,5),x(t,i-4,4),n=0;n{F||((()=>{let t,e,a,h,k;const v=new Array(16);for(a=0,h=0;h<28;h++)for(u[h]=a,t=0;t<1<>=7;h(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=i,0===e?t.dyn_ltree[2*i]++:(t.matches++,e--,t.dyn_ltree[2*(c[i]+a+1)]++,t.dyn_dtree[2*v(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{x(t,2,3),z(t,256,d),(t=>{16===t.bi_valid?(y(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var C=(t,e,a,i)=>{let n=65535&t|0,s=t>>>16&65535|0,r=0;for(;0!==a;){r=a>2e3?2e3:a,a-=r;do{n=n+e[i++]|0,s=s+n|0}while(--r);n%=65521,s%=65521}return n|s<<16|0};const M=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var H=(t,e,a,i)=>{const n=M,s=i+a;t^=-1;for(let a=i;a>>8^n[255&(t^e[a])];return-1^t},j={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},K={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:P,_tr_stored_block:Y,_tr_flush_block:G,_tr_tally:X,_tr_align:W}=B,{Z_NO_FLUSH:q,Z_PARTIAL_FLUSH:J,Z_FULL_FLUSH:Q,Z_FINISH:V,Z_BLOCK:$,Z_OK:tt,Z_STREAM_END:et,Z_STREAM_ERROR:at,Z_DATA_ERROR:it,Z_BUF_ERROR:nt,Z_DEFAULT_COMPRESSION:st,Z_FILTERED:rt,Z_HUFFMAN_ONLY:ot,Z_RLE:lt,Z_FIXED:ht,Z_DEFAULT_STRATEGY:dt,Z_UNKNOWN:_t,Z_DEFLATED:ft}=K,ct=258,ut=262,wt=42,mt=113,bt=666,gt=(t,e)=>(t.msg=j[e],e),pt=t=>2*t-(t>4?9:0),kt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},vt=t=>{let e,a,i,n=t.w_size;e=t.hash_size,i=e;do{a=t.head[--i],t.head[i]=a>=n?a-n:0}while(--e);e=n,i=e;do{a=t.prev[--i],t.prev[i]=a>=n?a-n:0}while(--e)};let yt=(t,e,a)=>(e<{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},zt=(t,e)=>{G(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,xt(t.strm)},At=(t,e)=>{t.pending_buf[t.pending++]=e},Et=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},Rt=(t,e,a,i)=>{let n=t.avail_in;return n>i&&(n=i),0===n?0:(t.avail_in-=n,e.set(t.input.subarray(t.next_in,t.next_in+n),a),1===t.state.wrap?t.adler=C(t.adler,e,n,a):2===t.state.wrap&&(t.adler=H(t.adler,e,n,a)),t.next_in+=n,t.total_in+=n,n)},Zt=(t,e)=>{let a,i,n=t.max_chain_length,s=t.strstart,r=t.prev_length,o=t.nice_match;const l=t.strstart>t.w_size-ut?t.strstart-(t.w_size-ut):0,h=t.window,d=t.w_mask,_=t.prev,f=t.strstart+ct;let c=h[s+r-1],u=h[s+r];t.prev_length>=t.good_match&&(n>>=2),o>t.lookahead&&(o=t.lookahead);do{if(a=e,h[a+r]===u&&h[a+r-1]===c&&h[a]===h[s]&&h[++a]===h[s+1]){s+=2,a++;do{}while(h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&sr){if(t.match_start=e,r=i,i>=o)break;c=h[s+r-1],u=h[s+r]}}}while((e=_[e&d])>l&&0!=--n);return r<=t.lookahead?r:t.lookahead},Ut=t=>{const e=t.w_size;let a,i,n;do{if(i=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-ut)&&(t.window.set(t.window.subarray(e,e+e-i),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),vt(t),i+=e),0===t.strm.avail_in)break;if(a=Rt(t.strm,t.window,t.strstart+t.lookahead,i),t.lookahead+=a,t.lookahead+t.insert>=3)for(n=t.strstart-t.insert,t.ins_h=t.window[n],t.ins_h=yt(t,t.ins_h,t.window[n+1]);t.insert&&(t.ins_h=yt(t,t.ins_h,t.window[n+3-1]),t.prev[n&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=n,n++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead{let a,i,n,s=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,r=0,o=t.strm.avail_in;do{if(a=65535,n=t.bi_valid+42>>3,t.strm.avail_outi+t.strm.avail_in&&(a=i+t.strm.avail_in),a>n&&(a=n),a>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,xt(t.strm),i&&(i>a&&(i=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+i),t.strm.next_out),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i,t.block_start+=i,a-=i),a&&(Rt(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===r);return o-=t.strm.avail_in,o&&(o>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=o&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-o,t.strm.next_in),t.strstart),t.strstart+=o,t.insert+=o>t.w_size-t.insert?t.w_size-t.insert:o),t.block_start=t.strstart),t.high_watern&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,n+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),n>t.strm.avail_in&&(n=t.strm.avail_in),n&&(Rt(t.strm,t.window,t.strstart,n),t.strstart+=n,t.insert+=n>t.w_size-t.insert?t.w_size-t.insert:n),t.high_water>3,n=t.pending_buf_size-n>65535?65535:t.pending_buf_size-n,s=n>t.w_size?t.w_size:n,i=t.strstart-t.block_start,(i>=s||(i||e===V)&&e!==q&&0===t.strm.avail_in&&i<=n)&&(a=i>n?n:i,r=e===V&&0===t.strm.avail_in&&a===i?1:0,Y(t,t.block_start,a,r),t.block_start+=a,xt(t.strm)),r?3:1)},Dt=(t,e)=>{let a,i;for(;;){if(t.lookahead=3&&(t.ins_h=yt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-ut&&(t.match_length=Zt(t,a)),t.match_length>=3)if(i=X(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=yt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!=--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=yt(t,t.ins_h,t.window[t.strstart+1]);else i=X(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(i&&(zt(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===V?(zt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(zt(t,!1),0===t.strm.avail_out)?1:2},Tt=(t,e)=>{let a,i,n;for(;;){if(t.lookahead=3&&(t.ins_h=yt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){n=t.strstart+t.lookahead-3,i=X(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=n&&(t.ins_h=yt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!=--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,i&&(zt(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(i=X(t,0,t.window[t.strstart-1]),i&&zt(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(i=X(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===V?(zt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(zt(t,!1),0===t.strm.avail_out)?1:2};function Ot(t,e,a,i,n){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=i,this.func=n}const It=[new Ot(0,0,0,0,St),new Ot(4,4,8,4,Dt),new Ot(4,5,16,8,Dt),new Ot(4,6,32,32,Dt),new Ot(4,4,16,16,Tt),new Ot(8,16,32,32,Tt),new Ot(8,16,128,128,Tt),new Ot(8,32,128,256,Tt),new Ot(32,128,258,1024,Tt),new Ot(32,258,258,4096,Tt)];function Ft(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=ft,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),kt(this.dyn_ltree),kt(this.dyn_dtree),kt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),kt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),kt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const Lt=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==wt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==mt&&e.status!==bt?1:0},Nt=t=>{if(Lt(t))return gt(t,at);t.total_in=t.total_out=0,t.data_type=_t;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?wt:mt,t.adler=2===e.wrap?0:1,e.last_flush=-2,P(e),tt},Bt=t=>{const e=Nt(t);var a;return e===tt&&((a=t.state).window_size=2*a.w_size,kt(a.head),a.max_lazy_match=It[a.level].max_lazy,a.good_match=It[a.level].good_length,a.nice_match=It[a.level].nice_length,a.max_chain_length=It[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},Ct=(t,e,a,i,n,s)=>{if(!t)return at;let r=1;if(e===st&&(e=6),i<0?(r=0,i=-i):i>15&&(r=2,i-=16),n<1||n>9||a!==ft||i<8||i>15||e<0||e>9||s<0||s>ht||8===i&&1!==r)return gt(t,at);8===i&&(i=9);const o=new Ft;return t.state=o,o.strm=t,o.status=wt,o.wrap=r,o.gzhead=null,o.w_bits=i,o.w_size=1<Ct(t,e,ft,15,8,dt),deflateInit2:Ct,deflateReset:Bt,deflateResetKeep:Nt,deflateSetHeader:(t,e)=>Lt(t)||2!==t.state.wrap?at:(t.state.gzhead=e,tt),deflate:(t,e)=>{if(Lt(t)||e>$||e<0)return t?gt(t,at):at;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===bt&&e!==V)return gt(t,0===t.avail_out?nt:at);const i=a.last_flush;if(a.last_flush=e,0!==a.pending){if(xt(t),0===t.avail_out)return a.last_flush=-1,tt}else if(0===t.avail_in&&pt(e)<=pt(i)&&e!==V)return gt(t,nt);if(a.status===bt&&0!==t.avail_in)return gt(t,nt);if(a.status===wt&&0===a.wrap&&(a.status=mt),a.status===wt){let e=ft+(a.w_bits-8<<4)<<8,i=-1;if(i=a.strategy>=ot||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=i<<6,0!==a.strstart&&(e|=32),e+=31-e%31,Et(a,e),0!==a.strstart&&(Et(a,t.adler>>>16),Et(a,65535&t.adler)),t.adler=1,a.status=mt,xt(t),0!==a.pending)return a.last_flush=-1,tt}if(57===a.status)if(t.adler=0,At(a,31),At(a,139),At(a,8),a.gzhead)At(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),At(a,255&a.gzhead.time),At(a,a.gzhead.time>>8&255),At(a,a.gzhead.time>>16&255),At(a,a.gzhead.time>>24&255),At(a,9===a.level?2:a.strategy>=ot||a.level<2?4:0),At(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(At(a,255&a.gzhead.extra.length),At(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=H(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(At(a,0),At(a,0),At(a,0),At(a,0),At(a,0),At(a,9===a.level?2:a.strategy>=ot||a.level<2?4:0),At(a,3),a.status=mt,xt(t),0!==a.pending)return a.last_flush=-1,tt;if(69===a.status){if(a.gzhead.extra){let e=a.pending,i=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+i>a.pending_buf_size;){let n=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+n),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=H(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=n,xt(t),0!==a.pending)return a.last_flush=-1,tt;e=0,i-=n}let n=new Uint8Array(a.gzhead.extra);a.pending_buf.set(n.subarray(a.gzindex,a.gzindex+i),a.pending),a.pending+=i,a.gzhead.hcrc&&a.pending>e&&(t.adler=H(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,i=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>i&&(t.adler=H(t.adler,a.pending_buf,a.pending-i,i)),xt(t),0!==a.pending)return a.last_flush=-1,tt;i=0}e=a.gzindexi&&(t.adler=H(t.adler,a.pending_buf,a.pending-i,i)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,i=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>i&&(t.adler=H(t.adler,a.pending_buf,a.pending-i,i)),xt(t),0!==a.pending)return a.last_flush=-1,tt;i=0}e=a.gzindexi&&(t.adler=H(t.adler,a.pending_buf,a.pending-i,i))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(xt(t),0!==a.pending))return a.last_flush=-1,tt;At(a,255&t.adler),At(a,t.adler>>8&255),t.adler=0}if(a.status=mt,xt(t),0!==a.pending)return a.last_flush=-1,tt}if(0!==t.avail_in||0!==a.lookahead||e!==q&&a.status!==bt){let i=0===a.level?St(a,e):a.strategy===ot?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(Ut(t),0===t.lookahead)){if(e===q)return 1;break}if(t.match_length=0,a=X(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(zt(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===V?(zt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(zt(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===lt?((t,e)=>{let a,i,n,s;const r=t.window;for(;;){if(t.lookahead<=ct){if(Ut(t),t.lookahead<=ct&&e===q)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(n=t.strstart-1,i=r[n],i===r[++n]&&i===r[++n]&&i===r[++n])){s=t.strstart+ct;do{}while(i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&nt.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=X(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=X(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(zt(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===V?(zt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(zt(t,!1),0===t.strm.avail_out)?1:2})(a,e):It[a.level].func(a,e);if(3!==i&&4!==i||(a.status=bt),1===i||3===i)return 0===t.avail_out&&(a.last_flush=-1),tt;if(2===i&&(e===J?W(a):e!==$&&(Y(a,0,0,!1),e===Q&&(kt(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),xt(t),0===t.avail_out))return a.last_flush=-1,tt}return e!==V?tt:a.wrap<=0?et:(2===a.wrap?(At(a,255&t.adler),At(a,t.adler>>8&255),At(a,t.adler>>16&255),At(a,t.adler>>24&255),At(a,255&t.total_in),At(a,t.total_in>>8&255),At(a,t.total_in>>16&255),At(a,t.total_in>>24&255)):(Et(a,t.adler>>>16),Et(a,65535&t.adler)),xt(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?tt:et)},deflateEnd:t=>{if(Lt(t))return at;const e=t.state.status;return t.state=null,e===mt?gt(t,it):tt},deflateSetDictionary:(t,e)=>{let a=e.length;if(Lt(t))return at;const i=t.state,n=i.wrap;if(2===n||1===n&&i.status!==wt||i.lookahead)return at;if(1===n&&(t.adler=C(t.adler,e,a,0)),i.wrap=0,a>=i.w_size){0===n&&(kt(i.head),i.strstart=0,i.block_start=0,i.insert=0);let t=new Uint8Array(i.w_size);t.set(e.subarray(a-i.w_size,a),0),e=t,a=i.w_size}const s=t.avail_in,r=t.next_in,o=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,Ut(i);i.lookahead>=3;){let t=i.strstart,e=i.lookahead-2;do{i.ins_h=yt(i,i.ins_h,i.window[t+3-1]),i.prev[t&i.w_mask]=i.head[i.ins_h],i.head[i.ins_h]=t,t++}while(--e);i.strstart=t,i.lookahead=2,Ut(i)}return i.strstart+=i.lookahead,i.block_start=i.strstart,i.insert=i.lookahead,i.lookahead=0,i.match_length=i.prev_length=2,i.match_available=0,t.next_in=r,t.input=o,t.avail_in=s,i.wrap=n,tt},deflateInfo:"pako deflate (from Nodeca project)"};const Ht=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var jt=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)Ht(a,e)&&(t[e]=a[e])}}return t},Kt=t=>{let e=0;for(let a=0,i=t.length;a=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;Yt[254]=Yt[254]=1;var Gt=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,i,n,s,r=t.length,o=0;for(n=0;n>>6,e[s++]=128|63&a):a<65536?(e[s++]=224|a>>>12,e[s++]=128|a>>>6&63,e[s++]=128|63&a):(e[s++]=240|a>>>18,e[s++]=128|a>>>12&63,e[s++]=128|a>>>6&63,e[s++]=128|63&a);return e},Xt=(t,e)=>{const a=e||t.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(t.subarray(0,e));let i,n;const s=new Array(2*a);for(n=0,i=0;i4)s[n++]=65533,i+=r-1;else{for(e&=2===r?31:3===r?15:7;r>1&&i1?s[n++]=65533:e<65536?s[n++]=e:(e-=65536,s[n++]=55296|e>>10&1023,s[n++]=56320|1023&e)}}return((t,e)=>{if(e<65534&&t.subarray&&Pt)return String.fromCharCode.apply(null,t.length===e?t:t.subarray(0,e));let a="";for(let i=0;i{(e=e||t.length)>t.length&&(e=t.length);let a=e-1;for(;a>=0&&128==(192&t[a]);)a--;return a<0||0===a?e:a+Yt[t[a]]>e?a:e};var qt=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const Jt=Object.prototype.toString,{Z_NO_FLUSH:Qt,Z_SYNC_FLUSH:Vt,Z_FULL_FLUSH:$t,Z_FINISH:te,Z_OK:ee,Z_STREAM_END:ae,Z_DEFAULT_COMPRESSION:ie,Z_DEFAULT_STRATEGY:ne,Z_DEFLATED:se}=K;function re(t){this.options=jt({level:ie,method:se,chunkSize:16384,windowBits:15,memLevel:8,strategy:ne},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new qt,this.strm.avail_out=0;let a=Mt.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==ee)throw new Error(j[a]);if(e.header&&Mt.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Gt(e.dictionary):"[object ArrayBuffer]"===Jt.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=Mt.deflateSetDictionary(this.strm,t),a!==ee)throw new Error(j[a]);this._dict_set=!0}}function oe(t,e){const a=new re(e);if(a.push(t,!0),a.err)throw a.msg||j[a.err];return a.result}re.prototype.push=function(t,e){const a=this.strm,i=this.options.chunkSize;let n,s;if(this.ended)return!1;for(s=e===~~e?e:!0===e?te:Qt,"string"==typeof t?a.input=Gt(t):"[object ArrayBuffer]"===Jt.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(i),a.next_out=0,a.avail_out=i),(s===Vt||s===$t)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(n=Mt.deflate(a,s),n===ae)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),n=Mt.deflateEnd(this.strm),this.onEnd(n),this.ended=!0,n===ee;if(0!==a.avail_out){if(s>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},re.prototype.onData=function(t){this.chunks.push(t)},re.prototype.onEnd=function(t){t===ee&&(this.result=Kt(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var le={Deflate:re,deflate:oe,deflateRaw:function(t,e){return(e=e||{}).raw=!0,oe(t,e)},gzip:function(t,e){return(e=e||{}).gzip=!0,oe(t,e)},constants:K};const he=16209;var de=function(t,e){let a,i,n,s,r,o,l,h,d,_,f,c,u,w,m,b,g,p,k,v,y,x,z,A;const E=t.state;a=t.next_in,z=t.input,i=a+(t.avail_in-5),n=t.next_out,A=t.output,s=n-(e-t.avail_out),r=n+(t.avail_out-257),o=E.dmax,l=E.wsize,h=E.whave,d=E.wnext,_=E.window,f=E.hold,c=E.bits,u=E.lencode,w=E.distcode,m=(1<>>24,f>>>=p,c-=p,p=g>>>16&255,0===p)A[n++]=65535&g;else{if(!(16&p)){if(0==(64&p)){g=u[(65535&g)+(f&(1<>>=p,c-=p),c<15&&(f+=z[a++]<>>24,f>>>=p,c-=p,p=g>>>16&255,!(16&p)){if(0==(64&p)){g=w[(65535&g)+(f&(1<o){t.msg="invalid distance too far back",E.mode=he;break t}if(f>>>=p,c-=p,p=n-s,v>p){if(p=v-p,p>h&&E.sane){t.msg="invalid distance too far back",E.mode=he;break t}if(y=0,x=_,0===d){if(y+=l-p,p2;)A[n++]=x[y++],A[n++]=x[y++],A[n++]=x[y++],k-=3;k&&(A[n++]=x[y++],k>1&&(A[n++]=x[y++]))}else{y=n-v;do{A[n++]=A[y++],A[n++]=A[y++],A[n++]=A[y++],k-=3}while(k>2);k&&(A[n++]=A[y++],k>1&&(A[n++]=A[y++]))}break}}break}}while(a>3,a-=k,c-=k<<3,f&=(1<{const l=o.bits;let h,d,_,f,c,u,w=0,m=0,b=0,g=0,p=0,k=0,v=0,y=0,x=0,z=0,A=null;const E=new Uint16Array(16),R=new Uint16Array(16);let Z,U,S,D=null;for(w=0;w<=_e;w++)E[w]=0;for(m=0;m=1&&0===E[g];g--);if(p>g&&(p=g),0===g)return n[s++]=20971520,n[s++]=20971520,o.bits=1,0;for(b=1;b0&&(0===t||1!==g))return-1;for(R[1]=0,w=1;w<_e;w++)R[w+1]=R[w]+E[w];for(m=0;m852||2===t&&x>592)return 1;for(;;){Z=w-v,r[m]+1=u?(U=D[r[m]-u],S=A[r[m]-u]):(U=96,S=0),h=1<>v)+d]=Z<<24|U<<16|S|0}while(0!==d);for(h=1<>=1;if(0!==h?(z&=h-1,z+=h):z=0,m++,0==--E[w]){if(w===g)break;w=e[a+r[m]]}if(w>p&&(z&f)!==_){for(0===v&&(v=p),c+=b,k=w-v,y=1<852||2===t&&x>592)return 1;_=z&f,n[_]=p<<24|k<<16|c-s|0}}return 0!==z&&(n[c+z]=w-v<<24|64<<16|0),o.bits=p,0};const{Z_FINISH:be,Z_BLOCK:ge,Z_TREES:pe,Z_OK:ke,Z_STREAM_END:ve,Z_NEED_DICT:ye,Z_STREAM_ERROR:xe,Z_DATA_ERROR:ze,Z_MEM_ERROR:Ae,Z_BUF_ERROR:Ee,Z_DEFLATED:Re}=K,Ze=16180,Ue=16190,Se=16191,De=16192,Te=16194,Oe=16199,Ie=16200,Fe=16206,Le=16209,Ne=t=>(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24);function Be(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const Ce=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.mode16211?1:0},Me=t=>{if(Ce(t))return xe;const e=t.state;return t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=Ze,e.last=0,e.havedict=0,e.flags=-1,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new Int32Array(852),e.distcode=e.distdyn=new Int32Array(592),e.sane=1,e.back=-1,ke},He=t=>{if(Ce(t))return xe;const e=t.state;return e.wsize=0,e.whave=0,e.wnext=0,Me(t)},je=(t,e)=>{let a;if(Ce(t))return xe;const i=t.state;return e<0?(a=0,e=-e):(a=5+(e>>4),e<48&&(e&=15)),e&&(e<8||e>15)?xe:(null!==i.window&&i.wbits!==e&&(i.window=null),i.wrap=a,i.wbits=e,He(t))},Ke=(t,e)=>{if(!t)return xe;const a=new Be;t.state=a,a.strm=t,a.window=null,a.mode=Ze;const i=je(t,e);return i!==ke&&(t.state=null),i};let Pe,Ye,Ge=!0;const Xe=t=>{if(Ge){Pe=new Int32Array(512),Ye=new Int32Array(32);let e=0;for(;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(me(1,t.lens,0,288,Pe,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;me(2,t.lens,0,32,Ye,0,t.work,{bits:5}),Ge=!1}t.lencode=Pe,t.lenbits=9,t.distcode=Ye,t.distbits=5},We=(t,e,a,i)=>{let n;const s=t.state;return null===s.window&&(s.wsize=1<=s.wsize?(s.window.set(e.subarray(a-s.wsize,a),0),s.wnext=0,s.whave=s.wsize):(n=s.wsize-s.wnext,n>i&&(n=i),s.window.set(e.subarray(a-i,a-i+n),s.wnext),(i-=n)?(s.window.set(e.subarray(a-i,a),0),s.wnext=i,s.whave=s.wsize):(s.wnext+=n,s.wnext===s.wsize&&(s.wnext=0),s.whaveKe(t,15),inflateInit2:Ke,inflate:(t,e)=>{let a,i,n,s,r,o,l,h,d,_,f,c,u,w,m,b,g,p,k,v,y,x,z=0;const A=new Uint8Array(4);let E,R;const Z=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(Ce(t)||!t.output||!t.input&&0!==t.avail_in)return xe;a=t.state,a.mode===Se&&(a.mode=De),r=t.next_out,n=t.output,l=t.avail_out,s=t.next_in,i=t.input,o=t.avail_in,h=a.hold,d=a.bits,_=o,f=l,x=ke;t:for(;;)switch(a.mode){case Ze:if(0===a.wrap){a.mode=De;break}for(;d<16;){if(0===o)break t;o--,h+=i[s++]<>>8&255,a.check=H(a.check,A,2,0),h=0,d=0,a.mode=16181;break}if(a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&h)<<8)+(h>>8))%31){t.msg="incorrect header check",a.mode=Le;break}if((15&h)!==Re){t.msg="unknown compression method",a.mode=Le;break}if(h>>>=4,d-=4,y=8+(15&h),0===a.wbits&&(a.wbits=y),y>15||y>a.wbits){t.msg="invalid window size",a.mode=Le;break}a.dmax=1<>8&1),512&a.flags&&4&a.wrap&&(A[0]=255&h,A[1]=h>>>8&255,a.check=H(a.check,A,2,0)),h=0,d=0,a.mode=16182;case 16182:for(;d<32;){if(0===o)break t;o--,h+=i[s++]<>>8&255,A[2]=h>>>16&255,A[3]=h>>>24&255,a.check=H(a.check,A,4,0)),h=0,d=0,a.mode=16183;case 16183:for(;d<16;){if(0===o)break t;o--,h+=i[s++]<>8),512&a.flags&&4&a.wrap&&(A[0]=255&h,A[1]=h>>>8&255,a.check=H(a.check,A,2,0)),h=0,d=0,a.mode=16184;case 16184:if(1024&a.flags){for(;d<16;){if(0===o)break t;o--,h+=i[s++]<>>8&255,a.check=H(a.check,A,2,0)),h=0,d=0}else a.head&&(a.head.extra=null);a.mode=16185;case 16185:if(1024&a.flags&&(c=a.length,c>o&&(c=o),c&&(a.head&&(y=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Uint8Array(a.head.extra_len)),a.head.extra.set(i.subarray(s,s+c),y)),512&a.flags&&4&a.wrap&&(a.check=H(a.check,i,c,s)),o-=c,s+=c,a.length-=c),a.length))break t;a.length=0,a.mode=16186;case 16186:if(2048&a.flags){if(0===o)break t;c=0;do{y=i[s+c++],a.head&&y&&a.length<65536&&(a.head.name+=String.fromCharCode(y))}while(y&&c>9&1,a.head.done=!0),t.adler=a.check=0,a.mode=Se;break;case 16189:for(;d<32;){if(0===o)break t;o--,h+=i[s++]<>>=7&d,d-=7&d,a.mode=Fe;break}for(;d<3;){if(0===o)break t;o--,h+=i[s++]<>>=1,d-=1,3&h){case 0:a.mode=16193;break;case 1:if(Xe(a),a.mode=Oe,e===pe){h>>>=2,d-=2;break t}break;case 2:a.mode=16196;break;case 3:t.msg="invalid block type",a.mode=Le}h>>>=2,d-=2;break;case 16193:for(h>>>=7&d,d-=7&d;d<32;){if(0===o)break t;o--,h+=i[s++]<>>16^65535)){t.msg="invalid stored block lengths",a.mode=Le;break}if(a.length=65535&h,h=0,d=0,a.mode=Te,e===pe)break t;case Te:a.mode=16195;case 16195:if(c=a.length,c){if(c>o&&(c=o),c>l&&(c=l),0===c)break t;n.set(i.subarray(s,s+c),r),o-=c,s+=c,l-=c,r+=c,a.length-=c;break}a.mode=Se;break;case 16196:for(;d<14;){if(0===o)break t;o--,h+=i[s++]<>>=5,d-=5,a.ndist=1+(31&h),h>>>=5,d-=5,a.ncode=4+(15&h),h>>>=4,d-=4,a.nlen>286||a.ndist>30){t.msg="too many length or distance symbols",a.mode=Le;break}a.have=0,a.mode=16197;case 16197:for(;a.have>>=3,d-=3}for(;a.have<19;)a.lens[Z[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,E={bits:a.lenbits},x=me(0,a.lens,0,19,a.lencode,0,a.work,E),a.lenbits=E.bits,x){t.msg="invalid code lengths set",a.mode=Le;break}a.have=0,a.mode=16198;case 16198:for(;a.have>>24,b=z>>>16&255,g=65535&z,!(m<=d);){if(0===o)break t;o--,h+=i[s++]<>>=m,d-=m,a.lens[a.have++]=g;else{if(16===g){for(R=m+2;d>>=m,d-=m,0===a.have){t.msg="invalid bit length repeat",a.mode=Le;break}y=a.lens[a.have-1],c=3+(3&h),h>>>=2,d-=2}else if(17===g){for(R=m+3;d>>=m,d-=m,y=0,c=3+(7&h),h>>>=3,d-=3}else{for(R=m+7;d>>=m,d-=m,y=0,c=11+(127&h),h>>>=7,d-=7}if(a.have+c>a.nlen+a.ndist){t.msg="invalid bit length repeat",a.mode=Le;break}for(;c--;)a.lens[a.have++]=y}}if(a.mode===Le)break;if(0===a.lens[256]){t.msg="invalid code -- missing end-of-block",a.mode=Le;break}if(a.lenbits=9,E={bits:a.lenbits},x=me(1,a.lens,0,a.nlen,a.lencode,0,a.work,E),a.lenbits=E.bits,x){t.msg="invalid literal/lengths set",a.mode=Le;break}if(a.distbits=6,a.distcode=a.distdyn,E={bits:a.distbits},x=me(2,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,E),a.distbits=E.bits,x){t.msg="invalid distances set",a.mode=Le;break}if(a.mode=Oe,e===pe)break t;case Oe:a.mode=Ie;case Ie:if(o>=6&&l>=258){t.next_out=r,t.avail_out=l,t.next_in=s,t.avail_in=o,a.hold=h,a.bits=d,de(t,f),r=t.next_out,n=t.output,l=t.avail_out,s=t.next_in,i=t.input,o=t.avail_in,h=a.hold,d=a.bits,a.mode===Se&&(a.back=-1);break}for(a.back=0;z=a.lencode[h&(1<>>24,b=z>>>16&255,g=65535&z,!(m<=d);){if(0===o)break t;o--,h+=i[s++]<>p)],m=z>>>24,b=z>>>16&255,g=65535&z,!(p+m<=d);){if(0===o)break t;o--,h+=i[s++]<>>=p,d-=p,a.back+=p}if(h>>>=m,d-=m,a.back+=m,a.length=g,0===b){a.mode=16205;break}if(32&b){a.back=-1,a.mode=Se;break}if(64&b){t.msg="invalid literal/length code",a.mode=Le;break}a.extra=15&b,a.mode=16201;case 16201:if(a.extra){for(R=a.extra;d>>=a.extra,d-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=16202;case 16202:for(;z=a.distcode[h&(1<>>24,b=z>>>16&255,g=65535&z,!(m<=d);){if(0===o)break t;o--,h+=i[s++]<>p)],m=z>>>24,b=z>>>16&255,g=65535&z,!(p+m<=d);){if(0===o)break t;o--,h+=i[s++]<>>=p,d-=p,a.back+=p}if(h>>>=m,d-=m,a.back+=m,64&b){t.msg="invalid distance code",a.mode=Le;break}a.offset=g,a.extra=15&b,a.mode=16203;case 16203:if(a.extra){for(R=a.extra;d>>=a.extra,d-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){t.msg="invalid distance too far back",a.mode=Le;break}a.mode=16204;case 16204:if(0===l)break t;if(c=f-l,a.offset>c){if(c=a.offset-c,c>a.whave&&a.sane){t.msg="invalid distance too far back",a.mode=Le;break}c>a.wnext?(c-=a.wnext,u=a.wsize-c):u=a.wnext-c,c>a.length&&(c=a.length),w=a.window}else w=n,u=r-a.offset,c=a.length;c>l&&(c=l),l-=c,a.length-=c;do{n[r++]=w[u++]}while(--c);0===a.length&&(a.mode=Ie);break;case 16205:if(0===l)break t;n[r++]=a.length,l--,a.mode=Ie;break;case Fe:if(a.wrap){for(;d<32;){if(0===o)break t;o--,h|=i[s++]<{if(Ce(t))return xe;let e=t.state;return e.window&&(e.window=null),t.state=null,ke},inflateGetHeader:(t,e)=>{if(Ce(t))return xe;const a=t.state;return 0==(2&a.wrap)?xe:(a.head=e,e.done=!1,ke)},inflateSetDictionary:(t,e)=>{const a=e.length;let i,n,s;return Ce(t)?xe:(i=t.state,0!==i.wrap&&i.mode!==Ue?xe:i.mode===Ue&&(n=1,n=C(n,e,a,0),n!==i.check)?ze:(s=We(t,e,a,a),s?(i.mode=16210,Ae):(i.havedict=1,ke)))},inflateInfo:"pako inflate (from Nodeca project)"};var Je=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const Qe=Object.prototype.toString,{Z_NO_FLUSH:Ve,Z_FINISH:$e,Z_OK:ta,Z_STREAM_END:ea,Z_NEED_DICT:aa,Z_STREAM_ERROR:ia,Z_DATA_ERROR:na,Z_MEM_ERROR:sa}=K;function ra(t){this.options=jt({chunkSize:65536,windowBits:15,to:""},t||{});const e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new qt,this.strm.avail_out=0;let a=qe.inflateInit2(this.strm,e.windowBits);if(a!==ta)throw new Error(j[a]);if(this.header=new Je,qe.inflateGetHeader(this.strm,this.header),e.dictionary&&("string"==typeof e.dictionary?e.dictionary=Gt(e.dictionary):"[object ArrayBuffer]"===Qe.call(e.dictionary)&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(a=qe.inflateSetDictionary(this.strm,e.dictionary),a!==ta)))throw new Error(j[a])}function oa(t,e){const a=new ra(e);if(a.push(t),a.err)throw a.msg||j[a.err];return a.result}ra.prototype.push=function(t,e){const a=this.strm,i=this.options.chunkSize,n=this.options.dictionary;let s,r,o;if(this.ended)return!1;for(r=e===~~e?e:!0===e?$e:Ve,"[object ArrayBuffer]"===Qe.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;){for(0===a.avail_out&&(a.output=new Uint8Array(i),a.next_out=0,a.avail_out=i),s=qe.inflate(a,r),s===aa&&n&&(s=qe.inflateSetDictionary(a,n),s===ta?s=qe.inflate(a,r):s===na&&(s=aa));a.avail_in>0&&s===ea&&a.state.wrap>0&&0!==t[a.next_in];)qe.inflateReset(a),s=qe.inflate(a,r);switch(s){case ia:case na:case aa:case sa:return this.onEnd(s),this.ended=!0,!1}if(o=a.avail_out,a.next_out&&(0===a.avail_out||s===ea))if("string"===this.options.to){let t=Wt(a.output,a.next_out),e=a.next_out-t,n=Xt(a.output,t);a.next_out=e,a.avail_out=i-e,e&&a.output.set(a.output.subarray(t,t+e),0),this.onData(n)}else this.onData(a.output.length===a.next_out?a.output:a.output.subarray(0,a.next_out));if(s!==ta||0!==o){if(s===ea)return s=qe.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,!0;if(0===a.avail_in)break}}return!0},ra.prototype.onData=function(t){this.chunks.push(t)},ra.prototype.onEnd=function(t){t===ta&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=Kt(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var la={Inflate:ra,inflate:oa,inflateRaw:function(t,e){return(e=e||{}).raw=!0,oa(t,e)},ungzip:oa,constants:K};const{Deflate:ha,deflate:da,deflateRaw:_a,gzip:fa}=le,{Inflate:ca,inflate:ua,inflateRaw:wa,ungzip:ma}=la;var ba=ha,ga=da,pa=_a,ka=fa,va=ca,ya=ua,xa=wa,za=ma,Aa=K,Ea={Deflate:ba,deflate:ga,deflateRaw:pa,gzip:ka,Inflate:va,inflate:ya,inflateRaw:xa,ungzip:za,constants:Aa};t.Deflate=ba,t.Inflate=va,t.constants=Aa,t.default=Ea,t.deflate=ga,t.deflateRaw=pa,t.gzip=ka,t.inflate=ya,t.inflateRaw=xa,t.ungzip=za,Object.defineProperty(t,"__esModule",{value:!0})})); \ No newline at end of file diff --git a/drpy_t3/drpy_libs/qjs_env.js b/drpy_t3/drpy_libs/qjs_env.js new file mode 100644 index 0000000..a331026 --- /dev/null +++ b/drpy_t3/drpy_libs/qjs_env.js @@ -0,0 +1,78 @@ +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 VIVO_UA = 'Mozilla/5.0 (Linux; Android 11; V1824A; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36 VivoBrowser/13.5.2.0'; +const True = true; +const False = false; +const None = null; +Array.prototype.add = Array.prototype.push; +Array.prototype.append = Array.prototype.push; +let _t1 = new Date().getTime() +eval(getCryptoJS()); +let _t2 = new Date().getTime() +// print(`加载getCryptoJS耗时:${_t2 - _t1}毫秒`); +// console.log(`加载getCryptoJS耗时:${_t2 - _t1}毫秒`); +// print(console, JSON.stringify(Object.keys(console))) +// print(jsp, JSON.stringify(Object.keys(jsp))) +// print(local, JSON.stringify(Object.keys(local))) + +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(); +} + +// const jsp = { +// pdfa: pdfa, +// pdfh: pdfh, +// pd: pd, +// }; + +// const local = { +// set: local_set, +// get: local_get, +// delete: local_delete, +// }; + +function request(url, obj) { + let new_obj; + if (typeof (fetch_params) !== 'undefined') { + new_obj = obj ? Object.assign(fetch_params, obj) : fetch_params; + } else { + new_obj = obj || {} + } + if (!new_obj || !new_obj.headers) { + new_obj.headers = {}; + } + if (!new_obj.headers['User-Agent'] && !new_obj.headers['user-agent']) { + new_obj.headers['User-Agent'] = MOBILE_UA; + } + // delete new_obj.headers['Referer']; + // print(obj); + // print(new_obj); + if (typeof (fetch) !== undefined) { + let html = fetch(url, new_obj); + if (/\?btwaf=/.test(html)) {//宝塔验证 + url = url.split('#')[0] + '?btwaf' + html.match(/btwaf(.*?)\"/)[1]; + log("宝塔验证跳转到:" + url); + html = fetch(url, new_obj); + } + return html + } + return '' +} + +function post(url, obj) { + obj.method = 'POST'; + return request(url, obj); +} \ No newline at end of file diff --git a/drpy_t3/drpy_libs/rsa.js b/drpy_t3/drpy_libs/rsa.js new file mode 100644 index 0000000..d56e841 --- /dev/null +++ b/drpy_t3/drpy_libs/rsa.js @@ -0,0 +1,263 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object'){ + // CommonJS + module.exports = exports = factory(); + } else if(typeof define === 'function' && define.amd){ + define([], factory); + } else{ + globalThis.JSEncrypt = factory(); + } +})(this, () => { +return /******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./lib/JSEncrypt.js": +/*!**************************!*\ + !*** ./lib/JSEncrypt.js ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncrypt\": () => (/* binding */ JSEncrypt)\n/* harmony export */ });\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ \"./lib/lib/jsbn/base64.js\");\n/* harmony import */ var _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./JSEncryptRSAKey */ \"./lib/JSEncryptRSAKey.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process/browser */ \"./node_modules/process/browser.js\");\nvar _a;\n\n\nvar version = typeof process !== 'undefined'\n ? (_a = process.env) === null || _a === void 0 ? void 0 : \"3.3.2\"\n : undefined;\n/**\n *\n * @param {Object} [options = {}] - An object to customize JSEncrypt behaviour\n * possible parameters are:\n * - default_key_size {number} default: 1024 the key size in bit\n * - default_public_exponent {string} default: '010001' the hexadecimal representation of the public exponent\n * - log {boolean} default: false whether log warn/error or not\n * @constructor\n */\nvar JSEncrypt = /** @class */ (function () {\n function JSEncrypt(options) {\n if (options === void 0) { options = {}; }\n options = options || {};\n this.default_key_size = options.default_key_size\n ? parseInt(options.default_key_size, 10)\n : 1024;\n this.default_public_exponent = options.default_public_exponent || \"010001\"; // 65537 default openssl public exponent for rsa key type\n this.log = options.log || false;\n // The private and public key.\n this.key = null;\n }\n /**\n * Method to set the rsa key parameter (one method is enough to set both the public\n * and the private key, since the private key contains the public key paramenters)\n * Log a warning if logs are enabled\n * @param {Object|string} key the pem encoded string or an object (with or without header/footer)\n * @public\n */\n JSEncrypt.prototype.setKey = function (key) {\n if (this.log && this.key) {\n console.warn(\"A key was already set, overriding existing.\");\n }\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey(key);\n };\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n JSEncrypt.prototype.setPrivateKey = function (privkey) {\n // Create the key.\n this.setKey(privkey);\n };\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n JSEncrypt.prototype.setPublicKey = function (pubkey) {\n // Sets the public key.\n this.setKey(pubkey);\n };\n /**\n * Proxy method for RSAKey object's decrypt, decrypt the string using the private\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str base64 encoded crypted string to decrypt\n * @return {string} the decrypted string\n * @public\n */\n JSEncrypt.prototype.decrypt = function (str) {\n // Return the decrypted string.\n try {\n return this.getKey().decrypt((0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(str));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's encrypt, encrypt the string using the public\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str the string to encrypt\n * @return {string} the encrypted string encoded in base64\n * @public\n */\n JSEncrypt.prototype.encrypt = function (str) {\n // Return the encrypted string.\n try {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().encrypt(str));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's sign.\n * @param {string} str the string to sign\n * @param {function} digestMethod hash method\n * @param {string} digestName the name of the hash algorithm\n * @return {string} the signature encoded in base64\n * @public\n */\n JSEncrypt.prototype.sign = function (str, digestMethod, digestName) {\n // return the RSA signature of 'str' in 'hex' format.\n try {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().sign(str, digestMethod, digestName));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's verify.\n * @param {string} str the string to verify\n * @param {string} signature the signature encoded in base64 to compare the string to\n * @param {function} digestMethod hash method\n * @return {boolean} whether the data and signature match\n * @public\n */\n JSEncrypt.prototype.verify = function (str, signature, digestMethod) {\n // Return the decrypted 'digest' of the signature.\n try {\n return this.getKey().verify(str, (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(signature), digestMethod);\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object\n * will be created and returned\n * @param {callback} [cb] the callback to be called if we want the key to be generated\n * in an async fashion\n * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object\n * @public\n */\n JSEncrypt.prototype.getKey = function (cb) {\n // Only create new if it does not exist.\n if (!this.key) {\n // Get a new private key.\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey();\n if (cb && {}.toString.call(cb) === \"[object Function]\") {\n this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb);\n return;\n }\n // Generate the key.\n this.key.generate(this.default_key_size, this.default_public_exponent);\n }\n return this.key;\n };\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITH header and footer\n * @public\n */\n JSEncrypt.prototype.getPrivateKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateKey();\n };\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITHOUT header and footer\n * @public\n */\n JSEncrypt.prototype.getPrivateKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateBaseKeyB64();\n };\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITH header and footer\n * @public\n */\n JSEncrypt.prototype.getPublicKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicKey();\n };\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITHOUT header and footer\n * @public\n */\n JSEncrypt.prototype.getPublicKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicBaseKeyB64();\n };\n JSEncrypt.version = version;\n return JSEncrypt;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/JSEncrypt.js?"); + +/***/ }), + +/***/ "./lib/JSEncryptRSAKey.js": +/*!********************************!*\ + !*** ./lib/JSEncryptRSAKey.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncryptRSAKey\": () => (/* binding */ JSEncryptRSAKey)\n/* harmony export */ });\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ \"./lib/lib/jsbn/base64.js\");\n/* harmony import */ var _lib_asn1js_hex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/asn1js/hex */ \"./lib/lib/asn1js/hex.js\");\n/* harmony import */ var _lib_asn1js_base64__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/asn1js/base64 */ \"./lib/lib/asn1js/base64.js\");\n/* harmony import */ var _lib_asn1js_asn1__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/asn1js/asn1 */ \"./lib/lib/asn1js/asn1.js\");\n/* harmony import */ var _lib_jsbn_rsa__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/jsbn/rsa */ \"./lib/lib/jsbn/rsa.js\");\n/* harmony import */ var _lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/jsbn/jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/jsrsasign/asn1-1.0 */ \"./lib/lib/jsrsasign/asn1-1.0.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n/**\n * Create a new JSEncryptRSAKey that extends Tom Wu's RSA key object.\n * This object is just a decorator for parsing the key parameter\n * @param {string|Object} key - The key in string format, or an object containing\n * the parameters needed to build a RSAKey object.\n * @constructor\n */\nvar JSEncryptRSAKey = /** @class */ (function (_super) {\n __extends(JSEncryptRSAKey, _super);\n function JSEncryptRSAKey(key) {\n var _this = _super.call(this) || this;\n // Call the super constructor.\n // RSAKey.call(this);\n // If a key key was provided.\n if (key) {\n // If this is a string...\n if (typeof key === \"string\") {\n _this.parseKey(key);\n }\n else if (JSEncryptRSAKey.hasPrivateKeyProperty(key) ||\n JSEncryptRSAKey.hasPublicKeyProperty(key)) {\n // Set the values for the key.\n _this.parsePropertiesFrom(key);\n }\n }\n return _this;\n }\n /**\n * Method to parse a pem encoded string containing both a public or private key.\n * The method will translate the pem encoded string in a der encoded string and\n * will parse private key and public key parameters. This method accepts public key\n * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1).\n *\n * @todo Check how many rsa formats use the same format of pkcs #1.\n *\n * The format is defined as:\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * it's possible to examine the structure of the keys obtained from openssl using\n * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/\n * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer\n * @private\n */\n JSEncryptRSAKey.prototype.parseKey = function (pem) {\n try {\n var modulus = 0;\n var public_exponent = 0;\n var reHex = /^\\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\\s*)+$/;\n var der = reHex.test(pem) ? _lib_asn1js_hex__WEBPACK_IMPORTED_MODULE_1__.Hex.decode(pem) : _lib_asn1js_base64__WEBPACK_IMPORTED_MODULE_2__.Base64.unarmor(pem);\n var asn1 = _lib_asn1js_asn1__WEBPACK_IMPORTED_MODULE_3__.ASN1.decode(der);\n // Fixes a bug with OpenSSL 1.0+ private keys\n if (asn1.sub.length === 3) {\n asn1 = asn1.sub[2].sub[0];\n }\n if (asn1.sub.length === 9) {\n // Parse the private key.\n modulus = asn1.sub[1].getHexStringValue(); // bigint\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = asn1.sub[2].getHexStringValue(); // int\n this.e = parseInt(public_exponent, 16);\n var private_exponent = asn1.sub[3].getHexStringValue(); // bigint\n this.d = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(private_exponent, 16);\n var prime1 = asn1.sub[4].getHexStringValue(); // bigint\n this.p = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(prime1, 16);\n var prime2 = asn1.sub[5].getHexStringValue(); // bigint\n this.q = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(prime2, 16);\n var exponent1 = asn1.sub[6].getHexStringValue(); // bigint\n this.dmp1 = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(exponent1, 16);\n var exponent2 = asn1.sub[7].getHexStringValue(); // bigint\n this.dmq1 = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(exponent2, 16);\n var coefficient = asn1.sub[8].getHexStringValue(); // bigint\n this.coeff = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(coefficient, 16);\n }\n else if (asn1.sub.length === 2) {\n if (asn1.sub[0].sub) {\n // Parse ASN.1 SubjectPublicKeyInfo type as defined by X.509\n var bit_string = asn1.sub[1];\n var sequence = bit_string.sub[0];\n modulus = sequence.sub[0].getHexStringValue();\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = sequence.sub[1].getHexStringValue();\n this.e = parseInt(public_exponent, 16);\n }\n else {\n // Parse ASN.1 RSAPublicKey type as defined by PKCS #1\n modulus = asn1.sub[0].getHexStringValue();\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = asn1.sub[1].getHexStringValue();\n this.e = parseInt(public_exponent, 16);\n }\n }\n else {\n return false;\n }\n return true;\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa key.\n *\n * The translation follow the ASN.1 notation :\n * RSAPrivateKey ::= SEQUENCE {\n * version Version,\n * modulus INTEGER, -- n\n * publicExponent INTEGER, -- e\n * privateExponent INTEGER, -- d\n * prime1 INTEGER, -- p\n * prime2 INTEGER, -- q\n * exponent1 INTEGER, -- d mod (p1)\n * exponent2 INTEGER, -- d mod (q-1)\n * coefficient INTEGER, -- (inverse of q) mod p\n * }\n * @returns {string} DER Encoded String representing the rsa private key\n * @private\n */\n JSEncryptRSAKey.prototype.getPrivateBaseKey = function () {\n var options = {\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: 0 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.n }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: this.e }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.d }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.p }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.q }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.dmp1 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.dmq1 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.coeff }),\n ],\n };\n var seq = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence(options);\n return seq.getEncodedHex();\n };\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPrivateBaseKeyB64 = function () {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getPrivateBaseKey());\n };\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa public key.\n * The representation follow the ASN.1 notation :\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * @returns {string} DER Encoded String representing the rsa public key\n * @private\n */\n JSEncryptRSAKey.prototype.getPublicBaseKey = function () {\n var first_sequence = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERObjectIdentifier({ oid: \"1.2.840.113549.1.1.1\" }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERNull(),\n ],\n });\n var second_sequence = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.n }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: this.e }),\n ],\n });\n var bit_string = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERBitString({\n hex: \"00\" + second_sequence.getEncodedHex(),\n });\n var seq = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [first_sequence, bit_string],\n });\n return seq.getEncodedHex();\n };\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPublicBaseKeyB64 = function () {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getPublicBaseKey());\n };\n /**\n * wrap the string in block of width chars. The default value for rsa keys is 64\n * characters.\n * @param {string} str the pem encoded string without header and footer\n * @param {Number} [width=64] - the length the string has to be wrapped at\n * @returns {string}\n * @private\n */\n JSEncryptRSAKey.wordwrap = function (str, width) {\n width = width || 64;\n if (!str) {\n return str;\n }\n var regex = \"(.{1,\" + width + \"})( +|$\\n?)|(.{1,\" + width + \"})\";\n return str.match(RegExp(regex, \"g\")).join(\"\\n\");\n };\n /**\n * Retrieve the pem encoded private key\n * @returns {string} the pem encoded private key with header/footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPrivateKey = function () {\n var key = \"-----BEGIN RSA PRIVATE KEY-----\\n\";\n key += JSEncryptRSAKey.wordwrap(this.getPrivateBaseKeyB64()) + \"\\n\";\n key += \"-----END RSA PRIVATE KEY-----\";\n return key;\n };\n /**\n * Retrieve the pem encoded public key\n * @returns {string} the pem encoded public key with header/footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPublicKey = function () {\n var key = \"-----BEGIN PUBLIC KEY-----\\n\";\n key += JSEncryptRSAKey.wordwrap(this.getPublicBaseKeyB64()) + \"\\n\";\n key += \"-----END PUBLIC KEY-----\";\n return key;\n };\n /**\n * Check if the object contains the necessary parameters to populate the rsa modulus\n * and public exponent parameters.\n * @param {Object} [obj={}] - An object that may contain the two public key\n * parameters\n * @returns {boolean} true if the object contains both the modulus and the public exponent\n * properties (n and e)\n * @todo check for types of n and e. N should be a parseable bigInt object, E should\n * be a parseable integer number\n * @private\n */\n JSEncryptRSAKey.hasPublicKeyProperty = function (obj) {\n obj = obj || {};\n return obj.hasOwnProperty(\"n\") && obj.hasOwnProperty(\"e\");\n };\n /**\n * Check if the object contains ALL the parameters of an RSA key.\n * @param {Object} [obj={}] - An object that may contain nine rsa key\n * parameters\n * @returns {boolean} true if the object contains all the parameters needed\n * @todo check for types of the parameters all the parameters but the public exponent\n * should be parseable bigint objects, the public exponent should be a parseable integer number\n * @private\n */\n JSEncryptRSAKey.hasPrivateKeyProperty = function (obj) {\n obj = obj || {};\n return (obj.hasOwnProperty(\"n\") &&\n obj.hasOwnProperty(\"e\") &&\n obj.hasOwnProperty(\"d\") &&\n obj.hasOwnProperty(\"p\") &&\n obj.hasOwnProperty(\"q\") &&\n obj.hasOwnProperty(\"dmp1\") &&\n obj.hasOwnProperty(\"dmq1\") &&\n obj.hasOwnProperty(\"coeff\"));\n };\n /**\n * Parse the properties of obj in the current rsa object. Obj should AT LEAST\n * include the modulus and public exponent (n, e) parameters.\n * @param {Object} obj - the object containing rsa parameters\n * @private\n */\n JSEncryptRSAKey.prototype.parsePropertiesFrom = function (obj) {\n this.n = obj.n;\n this.e = obj.e;\n if (obj.hasOwnProperty(\"d\")) {\n this.d = obj.d;\n this.p = obj.p;\n this.q = obj.q;\n this.dmp1 = obj.dmp1;\n this.dmq1 = obj.dmq1;\n this.coeff = obj.coeff;\n }\n };\n return JSEncryptRSAKey;\n}(_lib_jsbn_rsa__WEBPACK_IMPORTED_MODULE_4__.RSAKey));\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/JSEncryptRSAKey.js?"); + +/***/ }), + +/***/ "./lib/index.js": +/*!**********************!*\ + !*** ./lib/index.js ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncrypt\": () => (/* reexport safe */ _JSEncrypt__WEBPACK_IMPORTED_MODULE_0__.JSEncrypt),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _JSEncrypt__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./JSEncrypt */ \"./lib/JSEncrypt.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_JSEncrypt__WEBPACK_IMPORTED_MODULE_0__.JSEncrypt);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/index.js?"); + +/***/ }), + +/***/ "./lib/lib/asn1js/asn1.js": +/*!********************************!*\ + !*** ./lib/lib/asn1js/asn1.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ASN1\": () => (/* binding */ ASN1),\n/* harmony export */ \"ASN1Tag\": () => (/* binding */ ASN1Tag),\n/* harmony export */ \"Stream\": () => (/* binding */ Stream)\n/* harmony export */ });\n/* harmony import */ var _int10__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./int10 */ \"./lib/lib/asn1js/int10.js\");\n// ASN.1 JavaScript decoder\n// Copyright (c) 2008-2014 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\n/*global oids */\n\nvar ellipsis = \"\\u2026\";\nvar reTimeS = /^(\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nvar reTimeL = /^(\\d\\d\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nfunction stringCut(str, len) {\n if (str.length > len) {\n str = str.substring(0, len) + ellipsis;\n }\n return str;\n}\nvar Stream = /** @class */ (function () {\n function Stream(enc, pos) {\n this.hexDigits = \"0123456789ABCDEF\";\n if (enc instanceof Stream) {\n this.enc = enc.enc;\n this.pos = enc.pos;\n }\n else {\n // enc should be an array or a binary string\n this.enc = enc;\n this.pos = pos;\n }\n }\n Stream.prototype.get = function (pos) {\n if (pos === undefined) {\n pos = this.pos++;\n }\n if (pos >= this.enc.length) {\n throw new Error(\"Requesting byte offset \".concat(pos, \" on a stream of length \").concat(this.enc.length));\n }\n return (\"string\" === typeof this.enc) ? this.enc.charCodeAt(pos) : this.enc[pos];\n };\n Stream.prototype.hexByte = function (b) {\n return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF);\n };\n Stream.prototype.hexDump = function (start, end, raw) {\n var s = \"\";\n for (var i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n if (raw !== true) {\n switch (i & 0xF) {\n case 0x7:\n s += \" \";\n break;\n case 0xF:\n s += \"\\n\";\n break;\n default:\n s += \" \";\n }\n }\n }\n return s;\n };\n Stream.prototype.isASCII = function (start, end) {\n for (var i = start; i < end; ++i) {\n var c = this.get(i);\n if (c < 32 || c > 176) {\n return false;\n }\n }\n return true;\n };\n Stream.prototype.parseStringISO = function (start, end) {\n var s = \"\";\n for (var i = start; i < end; ++i) {\n s += String.fromCharCode(this.get(i));\n }\n return s;\n };\n Stream.prototype.parseStringUTF = function (start, end) {\n var s = \"\";\n for (var i = start; i < end;) {\n var c = this.get(i++);\n if (c < 128) {\n s += String.fromCharCode(c);\n }\n else if ((c > 191) && (c < 224)) {\n s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F));\n }\n else {\n s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F));\n }\n }\n return s;\n };\n Stream.prototype.parseStringBMP = function (start, end) {\n var str = \"\";\n var hi;\n var lo;\n for (var i = start; i < end;) {\n hi = this.get(i++);\n lo = this.get(i++);\n str += String.fromCharCode((hi << 8) | lo);\n }\n return str;\n };\n Stream.prototype.parseTime = function (start, end, shortYear) {\n var s = this.parseStringISO(start, end);\n var m = (shortYear ? reTimeS : reTimeL).exec(s);\n if (!m) {\n return \"Unrecognized time: \" + s;\n }\n if (shortYear) {\n // to avoid querying the timer, use the fixed range [1970, 2069]\n // it will conform with ITU X.400 [-10, +40] sliding this until 2030\n m[1] = +m[1];\n m[1] += (+m[1] < 70) ? 2000 : 1900;\n }\n s = m[1] + \"-\" + m[2] + \"-\" + m[3] + \" \" + m[4];\n if (m[5]) {\n s += \":\" + m[5];\n if (m[6]) {\n s += \":\" + m[6];\n if (m[7]) {\n s += \".\" + m[7];\n }\n }\n }\n if (m[8]) {\n s += \" UTC\";\n if (m[8] != \"Z\") {\n s += m[8];\n if (m[9]) {\n s += \":\" + m[9];\n }\n }\n }\n return s;\n };\n Stream.prototype.parseInteger = function (start, end) {\n var v = this.get(start);\n var neg = (v > 127);\n var pad = neg ? 255 : 0;\n var len;\n var s = \"\";\n // skip unuseful bits (not allowed in DER)\n while (v == pad && ++start < end) {\n v = this.get(start);\n }\n len = end - start;\n if (len === 0) {\n return neg ? -1 : 0;\n }\n // show bit length of huge integers\n if (len > 4) {\n s = v;\n len <<= 3;\n while (((+s ^ pad) & 0x80) == 0) {\n s = +s << 1;\n --len;\n }\n s = \"(\" + len + \" bit)\\n\";\n }\n // decode the integer\n if (neg) {\n v = v - 256;\n }\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10(v);\n for (var i = start + 1; i < end; ++i) {\n n.mulAdd(256, this.get(i));\n }\n return s + n.toString();\n };\n Stream.prototype.parseBitString = function (start, end, maxLength) {\n var unusedBit = this.get(start);\n var lenBit = ((end - start - 1) << 3) - unusedBit;\n var intro = \"(\" + lenBit + \" bit)\\n\";\n var s = \"\";\n for (var i = start + 1; i < end; ++i) {\n var b = this.get(i);\n var skip = (i == end - 1) ? unusedBit : 0;\n for (var j = 7; j >= skip; --j) {\n s += (b >> j) & 1 ? \"1\" : \"0\";\n }\n if (s.length > maxLength) {\n return intro + stringCut(s, maxLength);\n }\n }\n return intro + s;\n };\n Stream.prototype.parseOctetString = function (start, end, maxLength) {\n if (this.isASCII(start, end)) {\n return stringCut(this.parseStringISO(start, end), maxLength);\n }\n var len = end - start;\n var s = \"(\" + len + \" byte)\\n\";\n maxLength /= 2; // we work in bytes\n if (len > maxLength) {\n end = start + maxLength;\n }\n for (var i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n }\n if (len > maxLength) {\n s += ellipsis;\n }\n return s;\n };\n Stream.prototype.parseOID = function (start, end, maxLength) {\n var s = \"\";\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n var bits = 0;\n for (var i = start; i < end; ++i) {\n var v = this.get(i);\n n.mulAdd(128, v & 0x7F);\n bits += 7;\n if (!(v & 0x80)) { // finished\n if (s === \"\") {\n n = n.simplify();\n if (n instanceof _int10__WEBPACK_IMPORTED_MODULE_0__.Int10) {\n n.sub(80);\n s = \"2.\" + n.toString();\n }\n else {\n var m = n < 80 ? n < 40 ? 0 : 1 : 2;\n s = m + \".\" + (n - m * 40);\n }\n }\n else {\n s += \".\" + n.toString();\n }\n if (s.length > maxLength) {\n return stringCut(s, maxLength);\n }\n n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n bits = 0;\n }\n }\n if (bits > 0) {\n s += \".incomplete\";\n }\n return s;\n };\n return Stream;\n}());\n\nvar ASN1 = /** @class */ (function () {\n function ASN1(stream, header, length, tag, sub) {\n if (!(tag instanceof ASN1Tag)) {\n throw new Error(\"Invalid tag value.\");\n }\n this.stream = stream;\n this.header = header;\n this.length = length;\n this.tag = tag;\n this.sub = sub;\n }\n ASN1.prototype.typeName = function () {\n switch (this.tag.tagClass) {\n case 0: // universal\n switch (this.tag.tagNumber) {\n case 0x00:\n return \"EOC\";\n case 0x01:\n return \"BOOLEAN\";\n case 0x02:\n return \"INTEGER\";\n case 0x03:\n return \"BIT_STRING\";\n case 0x04:\n return \"OCTET_STRING\";\n case 0x05:\n return \"NULL\";\n case 0x06:\n return \"OBJECT_IDENTIFIER\";\n case 0x07:\n return \"ObjectDescriptor\";\n case 0x08:\n return \"EXTERNAL\";\n case 0x09:\n return \"REAL\";\n case 0x0A:\n return \"ENUMERATED\";\n case 0x0B:\n return \"EMBEDDED_PDV\";\n case 0x0C:\n return \"UTF8String\";\n case 0x10:\n return \"SEQUENCE\";\n case 0x11:\n return \"SET\";\n case 0x12:\n return \"NumericString\";\n case 0x13:\n return \"PrintableString\"; // ASCII subset\n case 0x14:\n return \"TeletexString\"; // aka T61String\n case 0x15:\n return \"VideotexString\";\n case 0x16:\n return \"IA5String\"; // ASCII\n case 0x17:\n return \"UTCTime\";\n case 0x18:\n return \"GeneralizedTime\";\n case 0x19:\n return \"GraphicString\";\n case 0x1A:\n return \"VisibleString\"; // ASCII subset\n case 0x1B:\n return \"GeneralString\";\n case 0x1C:\n return \"UniversalString\";\n case 0x1E:\n return \"BMPString\";\n }\n return \"Universal_\" + this.tag.tagNumber.toString();\n case 1:\n return \"Application_\" + this.tag.tagNumber.toString();\n case 2:\n return \"[\" + this.tag.tagNumber.toString() + \"]\"; // Context\n case 3:\n return \"Private_\" + this.tag.tagNumber.toString();\n }\n };\n ASN1.prototype.content = function (maxLength) {\n if (this.tag === undefined) {\n return null;\n }\n if (maxLength === undefined) {\n maxLength = Infinity;\n }\n var content = this.posContent();\n var len = Math.abs(this.length);\n if (!this.tag.isUniversal()) {\n if (this.sub !== null) {\n return \"(\" + this.sub.length + \" elem)\";\n }\n return this.stream.parseOctetString(content, content + len, maxLength);\n }\n switch (this.tag.tagNumber) {\n case 0x01: // BOOLEAN\n return (this.stream.get(content) === 0) ? \"false\" : \"true\";\n case 0x02: // INTEGER\n return this.stream.parseInteger(content, content + len);\n case 0x03: // BIT_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseBitString(content, content + len, maxLength);\n case 0x04: // OCTET_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseOctetString(content, content + len, maxLength);\n // case 0x05: // NULL\n case 0x06: // OBJECT_IDENTIFIER\n return this.stream.parseOID(content, content + len, maxLength);\n // case 0x07: // ObjectDescriptor\n // case 0x08: // EXTERNAL\n // case 0x09: // REAL\n // case 0x0A: // ENUMERATED\n // case 0x0B: // EMBEDDED_PDV\n case 0x10: // SEQUENCE\n case 0x11: // SET\n if (this.sub !== null) {\n return \"(\" + this.sub.length + \" elem)\";\n }\n else {\n return \"(no elem)\";\n }\n case 0x0C: // UTF8String\n return stringCut(this.stream.parseStringUTF(content, content + len), maxLength);\n case 0x12: // NumericString\n case 0x13: // PrintableString\n case 0x14: // TeletexString\n case 0x15: // VideotexString\n case 0x16: // IA5String\n // case 0x19: // GraphicString\n case 0x1A: // VisibleString\n // case 0x1B: // GeneralString\n // case 0x1C: // UniversalString\n return stringCut(this.stream.parseStringISO(content, content + len), maxLength);\n case 0x1E: // BMPString\n return stringCut(this.stream.parseStringBMP(content, content + len), maxLength);\n case 0x17: // UTCTime\n case 0x18: // GeneralizedTime\n return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17));\n }\n return null;\n };\n ASN1.prototype.toString = function () {\n return this.typeName() + \"@\" + this.stream.pos + \"[header:\" + this.header + \",length:\" + this.length + \",sub:\" + ((this.sub === null) ? \"null\" : this.sub.length) + \"]\";\n };\n ASN1.prototype.toPrettyString = function (indent) {\n if (indent === undefined) {\n indent = \"\";\n }\n var s = indent + this.typeName() + \" @\" + this.stream.pos;\n if (this.length >= 0) {\n s += \"+\";\n }\n s += this.length;\n if (this.tag.tagConstructed) {\n s += \" (constructed)\";\n }\n else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) {\n s += \" (encapsulates)\";\n }\n s += \"\\n\";\n if (this.sub !== null) {\n indent += \" \";\n for (var i = 0, max = this.sub.length; i < max; ++i) {\n s += this.sub[i].toPrettyString(indent);\n }\n }\n return s;\n };\n ASN1.prototype.posStart = function () {\n return this.stream.pos;\n };\n ASN1.prototype.posContent = function () {\n return this.stream.pos + this.header;\n };\n ASN1.prototype.posEnd = function () {\n return this.stream.pos + this.header + Math.abs(this.length);\n };\n ASN1.prototype.toHexString = function () {\n return this.stream.hexDump(this.posStart(), this.posEnd(), true);\n };\n ASN1.decodeLength = function (stream) {\n var buf = stream.get();\n var len = buf & 0x7F;\n if (len == buf) {\n return len;\n }\n // no reason to use Int10, as it would be a huge buffer anyways\n if (len > 6) {\n throw new Error(\"Length over 48 bits not supported at position \" + (stream.pos - 1));\n }\n if (len === 0) {\n return null;\n } // undefined\n buf = 0;\n for (var i = 0; i < len; ++i) {\n buf = (buf * 256) + stream.get();\n }\n return buf;\n };\n /**\n * Retrieve the hexadecimal value (as a string) of the current ASN.1 element\n * @returns {string}\n * @public\n */\n ASN1.prototype.getHexStringValue = function () {\n var hexString = this.toHexString();\n var offset = this.header * 2;\n var length = this.length * 2;\n return hexString.substr(offset, length);\n };\n ASN1.decode = function (str) {\n var stream;\n if (!(str instanceof Stream)) {\n stream = new Stream(str, 0);\n }\n else {\n stream = str;\n }\n var streamStart = new Stream(stream);\n var tag = new ASN1Tag(stream);\n var len = ASN1.decodeLength(stream);\n var start = stream.pos;\n var header = start - streamStart.pos;\n var sub = null;\n var getSub = function () {\n var ret = [];\n if (len !== null) {\n // definite length\n var end = start + len;\n while (stream.pos < end) {\n ret[ret.length] = ASN1.decode(stream);\n }\n if (stream.pos != end) {\n throw new Error(\"Content size is not correct for container starting at offset \" + start);\n }\n }\n else {\n // undefined length\n try {\n for (;;) {\n var s = ASN1.decode(stream);\n if (s.tag.isEOC()) {\n break;\n }\n ret[ret.length] = s;\n }\n len = start - stream.pos; // undefined lengths are represented as negative values\n }\n catch (e) {\n throw new Error(\"Exception while decoding undefined length content: \" + e);\n }\n }\n return ret;\n };\n if (tag.tagConstructed) {\n // must have valid content\n sub = getSub();\n }\n else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) {\n // sometimes BitString and OctetString are used to encapsulate ASN.1\n try {\n if (tag.tagNumber == 0x03) {\n if (stream.get() != 0) {\n throw new Error(\"BIT STRINGs with unused bits cannot encapsulate.\");\n }\n }\n sub = getSub();\n for (var i = 0; i < sub.length; ++i) {\n if (sub[i].tag.isEOC()) {\n throw new Error(\"EOC is not supposed to be actual content.\");\n }\n }\n }\n catch (e) {\n // but silently ignore when they don't\n sub = null;\n }\n }\n if (sub === null) {\n if (len === null) {\n throw new Error(\"We can't skip over an invalid tag with undefined length at offset \" + start);\n }\n stream.pos = start + Math.abs(len);\n }\n return new ASN1(streamStart, header, len, tag, sub);\n };\n return ASN1;\n}());\n\nvar ASN1Tag = /** @class */ (function () {\n function ASN1Tag(stream) {\n var buf = stream.get();\n this.tagClass = buf >> 6;\n this.tagConstructed = ((buf & 0x20) !== 0);\n this.tagNumber = buf & 0x1F;\n if (this.tagNumber == 0x1F) { // long tag\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n do {\n buf = stream.get();\n n.mulAdd(128, buf & 0x7F);\n } while (buf & 0x80);\n this.tagNumber = n.simplify();\n }\n }\n ASN1Tag.prototype.isUniversal = function () {\n return this.tagClass === 0x00;\n };\n ASN1Tag.prototype.isEOC = function () {\n return this.tagClass === 0x00 && this.tagNumber === 0x00;\n };\n return ASN1Tag;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/asn1.js?"); + +/***/ }), + +/***/ "./lib/lib/asn1js/base64.js": +/*!**********************************!*\ + !*** ./lib/lib/asn1js/base64.js ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Base64\": () => (/* binding */ Base64)\n/* harmony export */ });\n// Base64 JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar decoder;\nvar Base64 = {\n decode: function (a) {\n var i;\n if (decoder === undefined) {\n var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n var ignore = \"= \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = Object.create(null);\n for (i = 0; i < 64; ++i) {\n decoder[b64.charAt(i)] = i;\n }\n decoder['-'] = 62; //+\n decoder['_'] = 63; //-\n for (i = 0; i < ignore.length; ++i) {\n decoder[ignore.charAt(i)] = -1;\n }\n }\n var out = [];\n var bits = 0;\n var char_count = 0;\n for (i = 0; i < a.length; ++i) {\n var c = a.charAt(i);\n if (c == \"=\") {\n break;\n }\n c = decoder[c];\n if (c == -1) {\n continue;\n }\n if (c === undefined) {\n throw new Error(\"Illegal character at offset \" + i);\n }\n bits |= c;\n if (++char_count >= 4) {\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n out[out.length] = bits & 0xFF;\n bits = 0;\n char_count = 0;\n }\n else {\n bits <<= 6;\n }\n }\n switch (char_count) {\n case 1:\n throw new Error(\"Base64 encoding incomplete: at least 2 bits missing\");\n case 2:\n out[out.length] = (bits >> 10);\n break;\n case 3:\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n break;\n }\n return out;\n },\n re: /-----BEGIN [^-]+-----([A-Za-z0-9+\\/=\\s]+)-----END [^-]+-----|begin-base64[^\\n]+\\n([A-Za-z0-9+\\/=\\s]+)====/,\n unarmor: function (a) {\n var m = Base64.re.exec(a);\n if (m) {\n if (m[1]) {\n a = m[1];\n }\n else if (m[2]) {\n a = m[2];\n }\n else {\n throw new Error(\"RegExp out of sync\");\n }\n }\n return Base64.decode(a);\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/base64.js?"); + +/***/ }), + +/***/ "./lib/lib/asn1js/hex.js": +/*!*******************************!*\ + !*** ./lib/lib/asn1js/hex.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Hex\": () => (/* binding */ Hex)\n/* harmony export */ });\n// Hex JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar decoder;\nvar Hex = {\n decode: function (a) {\n var i;\n if (decoder === undefined) {\n var hex = \"0123456789ABCDEF\";\n var ignore = \" \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = {};\n for (i = 0; i < 16; ++i) {\n decoder[hex.charAt(i)] = i;\n }\n hex = hex.toLowerCase();\n for (i = 10; i < 16; ++i) {\n decoder[hex.charAt(i)] = i;\n }\n for (i = 0; i < ignore.length; ++i) {\n decoder[ignore.charAt(i)] = -1;\n }\n }\n var out = [];\n var bits = 0;\n var char_count = 0;\n for (i = 0; i < a.length; ++i) {\n var c = a.charAt(i);\n if (c == \"=\") {\n break;\n }\n c = decoder[c];\n if (c == -1) {\n continue;\n }\n if (c === undefined) {\n throw new Error(\"Illegal character at offset \" + i);\n }\n bits |= c;\n if (++char_count >= 2) {\n out[out.length] = bits;\n bits = 0;\n char_count = 0;\n }\n else {\n bits <<= 4;\n }\n }\n if (char_count) {\n throw new Error(\"Hex encoding incomplete: 4 bits missing\");\n }\n return out;\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/hex.js?"); + +/***/ }), + +/***/ "./lib/lib/asn1js/int10.js": +/*!*********************************!*\ + !*** ./lib/lib/asn1js/int10.js ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Int10\": () => (/* binding */ Int10)\n/* harmony export */ });\n// Big integer base-10 printing library\n// Copyright (c) 2014 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar max = 10000000000000; // biggest integer that can still fit 2^53 when multiplied by 256\nvar Int10 = /** @class */ (function () {\n function Int10(value) {\n this.buf = [+value || 0];\n }\n Int10.prototype.mulAdd = function (m, c) {\n // assert(m <= 256)\n var b = this.buf;\n var l = b.length;\n var i;\n var t;\n for (i = 0; i < l; ++i) {\n t = b[i] * m + c;\n if (t < max) {\n c = 0;\n }\n else {\n c = 0 | (t / max);\n t -= c * max;\n }\n b[i] = t;\n }\n if (c > 0) {\n b[i] = c;\n }\n };\n Int10.prototype.sub = function (c) {\n // assert(m <= 256)\n var b = this.buf;\n var l = b.length;\n var i;\n var t;\n for (i = 0; i < l; ++i) {\n t = b[i] - c;\n if (t < 0) {\n t += max;\n c = 1;\n }\n else {\n c = 0;\n }\n b[i] = t;\n }\n while (b[b.length - 1] === 0) {\n b.pop();\n }\n };\n Int10.prototype.toString = function (base) {\n if ((base || 10) != 10) {\n throw new Error(\"only base 10 is supported\");\n }\n var b = this.buf;\n var s = b[b.length - 1].toString();\n for (var i = b.length - 2; i >= 0; --i) {\n s += (max + b[i]).toString().substring(1);\n }\n return s;\n };\n Int10.prototype.valueOf = function () {\n var b = this.buf;\n var v = 0;\n for (var i = b.length - 1; i >= 0; --i) {\n v = v * max + b[i];\n }\n return v;\n };\n Int10.prototype.simplify = function () {\n var b = this.buf;\n return (b.length == 1) ? b[0] : this;\n };\n return Int10;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/int10.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/base64.js": +/*!********************************!*\ + !*** ./lib/lib/jsbn/base64.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"b64toBA\": () => (/* binding */ b64toBA),\n/* harmony export */ \"b64tohex\": () => (/* binding */ b64tohex),\n/* harmony export */ \"hex2b64\": () => (/* binding */ hex2b64)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./lib/lib/jsbn/util.js\");\n\nvar b64map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar b64pad = \"=\";\nfunction hex2b64(h) {\n var i;\n var c;\n var ret = \"\";\n for (i = 0; i + 3 <= h.length; i += 3) {\n c = parseInt(h.substring(i, i + 3), 16);\n ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);\n }\n if (i + 1 == h.length) {\n c = parseInt(h.substring(i, i + 1), 16);\n ret += b64map.charAt(c << 2);\n }\n else if (i + 2 == h.length) {\n c = parseInt(h.substring(i, i + 2), 16);\n ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);\n }\n while ((ret.length & 3) > 0) {\n ret += b64pad;\n }\n return ret;\n}\n// convert a base64 string to hex\nfunction b64tohex(s) {\n var ret = \"\";\n var i;\n var k = 0; // b64 state, 0-3\n var slop = 0;\n for (i = 0; i < s.length; ++i) {\n if (s.charAt(i) == b64pad) {\n break;\n }\n var v = b64map.indexOf(s.charAt(i));\n if (v < 0) {\n continue;\n }\n if (k == 0) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v >> 2);\n slop = v & 3;\n k = 1;\n }\n else if (k == 1) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)((slop << 2) | (v >> 4));\n slop = v & 0xf;\n k = 2;\n }\n else if (k == 2) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(slop);\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v >> 2);\n slop = v & 3;\n k = 3;\n }\n else {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)((slop << 2) | (v >> 4));\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v & 0xf);\n k = 0;\n }\n }\n if (k == 1) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(slop << 2);\n }\n return ret;\n}\n// convert a base64 string to a byte/number array\nfunction b64toBA(s) {\n // piggyback on b64tohex for now, optimize later\n var h = b64tohex(s);\n var i;\n var a = [];\n for (i = 0; 2 * i < h.length; ++i) {\n a[i] = parseInt(h.substring(2 * i, 2 * i + 2), 16);\n }\n return a;\n}\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/base64.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/jsbn.js": +/*!******************************!*\ + !*** ./lib/lib/jsbn/jsbn.js ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BigInteger\": () => (/* binding */ BigInteger),\n/* harmony export */ \"intAt\": () => (/* binding */ intAt),\n/* harmony export */ \"nbi\": () => (/* binding */ nbi),\n/* harmony export */ \"nbits\": () => (/* binding */ nbits),\n/* harmony export */ \"nbv\": () => (/* binding */ nbv),\n/* harmony export */ \"parseBigInt\": () => (/* binding */ parseBigInt)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./lib/lib/jsbn/util.js\");\n// Copyright (c) 2005 Tom Wu\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n// Basic JavaScript BN library - subset useful for RSA encryption.\n\n// Bits per digit\nvar dbits;\n// JavaScript engine analysis\nvar canary = 0xdeadbeefcafe;\nvar j_lm = ((canary & 0xffffff) == 0xefcafe);\n//#region\nvar lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];\nvar lplim = (1 << 26) / lowprimes[lowprimes.length - 1];\n//#endregion\n// (public) Constructor\nvar BigInteger = /** @class */ (function () {\n function BigInteger(a, b, c) {\n if (a != null) {\n if (\"number\" == typeof a) {\n this.fromNumber(a, b, c);\n }\n else if (b == null && \"string\" != typeof a) {\n this.fromString(a, 256);\n }\n else {\n this.fromString(a, b);\n }\n }\n }\n //#region PUBLIC\n // BigInteger.prototype.toString = bnToString;\n // (public) return string representation in given radix\n BigInteger.prototype.toString = function (b) {\n if (this.s < 0) {\n return \"-\" + this.negate().toString(b);\n }\n var k;\n if (b == 16) {\n k = 4;\n }\n else if (b == 8) {\n k = 3;\n }\n else if (b == 2) {\n k = 1;\n }\n else if (b == 32) {\n k = 5;\n }\n else if (b == 4) {\n k = 2;\n }\n else {\n return this.toRadix(b);\n }\n var km = (1 << k) - 1;\n var d;\n var m = false;\n var r = \"\";\n var i = this.t;\n var p = this.DB - (i * this.DB) % k;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) > 0) {\n m = true;\n r = (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(d);\n }\n while (i >= 0) {\n if (p < k) {\n d = (this[i] & ((1 << p) - 1)) << (k - p);\n d |= this[--i] >> (p += this.DB - k);\n }\n else {\n d = (this[i] >> (p -= k)) & km;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if (d > 0) {\n m = true;\n }\n if (m) {\n r += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(d);\n }\n }\n }\n return m ? r : \"0\";\n };\n // BigInteger.prototype.negate = bnNegate;\n // (public) -this\n BigInteger.prototype.negate = function () {\n var r = nbi();\n BigInteger.ZERO.subTo(this, r);\n return r;\n };\n // BigInteger.prototype.abs = bnAbs;\n // (public) |this|\n BigInteger.prototype.abs = function () {\n return (this.s < 0) ? this.negate() : this;\n };\n // BigInteger.prototype.compareTo = bnCompareTo;\n // (public) return + if this > a, - if this < a, 0 if equal\n BigInteger.prototype.compareTo = function (a) {\n var r = this.s - a.s;\n if (r != 0) {\n return r;\n }\n var i = this.t;\n r = i - a.t;\n if (r != 0) {\n return (this.s < 0) ? -r : r;\n }\n while (--i >= 0) {\n if ((r = this[i] - a[i]) != 0) {\n return r;\n }\n }\n return 0;\n };\n // BigInteger.prototype.bitLength = bnBitLength;\n // (public) return the number of bits in \"this\"\n BigInteger.prototype.bitLength = function () {\n if (this.t <= 0) {\n return 0;\n }\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));\n };\n // BigInteger.prototype.mod = bnMod;\n // (public) this mod a\n BigInteger.prototype.mod = function (a) {\n var r = nbi();\n this.abs().divRemTo(a, null, r);\n if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\n a.subTo(r, r);\n }\n return r;\n };\n // BigInteger.prototype.modPowInt = bnModPowInt;\n // (public) this^e % m, 0 <= e < 2^32\n BigInteger.prototype.modPowInt = function (e, m) {\n var z;\n if (e < 256 || m.isEven()) {\n z = new Classic(m);\n }\n else {\n z = new Montgomery(m);\n }\n return this.exp(e, z);\n };\n // BigInteger.prototype.clone = bnClone;\n // (public)\n BigInteger.prototype.clone = function () {\n var r = nbi();\n this.copyTo(r);\n return r;\n };\n // BigInteger.prototype.intValue = bnIntValue;\n // (public) return value as integer\n BigInteger.prototype.intValue = function () {\n if (this.s < 0) {\n if (this.t == 1) {\n return this[0] - this.DV;\n }\n else if (this.t == 0) {\n return -1;\n }\n }\n else if (this.t == 1) {\n return this[0];\n }\n else if (this.t == 0) {\n return 0;\n }\n // assumes 16 < DB < 32\n return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0];\n };\n // BigInteger.prototype.byteValue = bnByteValue;\n // (public) return value as byte\n BigInteger.prototype.byteValue = function () {\n return (this.t == 0) ? this.s : (this[0] << 24) >> 24;\n };\n // BigInteger.prototype.shortValue = bnShortValue;\n // (public) return value as short (assumes DB>=16)\n BigInteger.prototype.shortValue = function () {\n return (this.t == 0) ? this.s : (this[0] << 16) >> 16;\n };\n // BigInteger.prototype.signum = bnSigNum;\n // (public) 0 if this == 0, 1 if this > 0\n BigInteger.prototype.signum = function () {\n if (this.s < 0) {\n return -1;\n }\n else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) {\n return 0;\n }\n else {\n return 1;\n }\n };\n // BigInteger.prototype.toByteArray = bnToByteArray;\n // (public) convert to bigendian byte array\n BigInteger.prototype.toByteArray = function () {\n var i = this.t;\n var r = [];\n r[0] = this.s;\n var p = this.DB - (i * this.DB) % 8;\n var d;\n var k = 0;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) {\n r[k++] = d | (this.s << (this.DB - p));\n }\n while (i >= 0) {\n if (p < 8) {\n d = (this[i] & ((1 << p) - 1)) << (8 - p);\n d |= this[--i] >> (p += this.DB - 8);\n }\n else {\n d = (this[i] >> (p -= 8)) & 0xff;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if ((d & 0x80) != 0) {\n d |= -256;\n }\n if (k == 0 && (this.s & 0x80) != (d & 0x80)) {\n ++k;\n }\n if (k > 0 || d != this.s) {\n r[k++] = d;\n }\n }\n }\n return r;\n };\n // BigInteger.prototype.equals = bnEquals;\n BigInteger.prototype.equals = function (a) {\n return (this.compareTo(a) == 0);\n };\n // BigInteger.prototype.min = bnMin;\n BigInteger.prototype.min = function (a) {\n return (this.compareTo(a) < 0) ? this : a;\n };\n // BigInteger.prototype.max = bnMax;\n BigInteger.prototype.max = function (a) {\n return (this.compareTo(a) > 0) ? this : a;\n };\n // BigInteger.prototype.and = bnAnd;\n BigInteger.prototype.and = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_and, r);\n return r;\n };\n // BigInteger.prototype.or = bnOr;\n BigInteger.prototype.or = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_or, r);\n return r;\n };\n // BigInteger.prototype.xor = bnXor;\n BigInteger.prototype.xor = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_xor, r);\n return r;\n };\n // BigInteger.prototype.andNot = bnAndNot;\n BigInteger.prototype.andNot = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_andnot, r);\n return r;\n };\n // BigInteger.prototype.not = bnNot;\n // (public) ~this\n BigInteger.prototype.not = function () {\n var r = nbi();\n for (var i = 0; i < this.t; ++i) {\n r[i] = this.DM & ~this[i];\n }\n r.t = this.t;\n r.s = ~this.s;\n return r;\n };\n // BigInteger.prototype.shiftLeft = bnShiftLeft;\n // (public) this << n\n BigInteger.prototype.shiftLeft = function (n) {\n var r = nbi();\n if (n < 0) {\n this.rShiftTo(-n, r);\n }\n else {\n this.lShiftTo(n, r);\n }\n return r;\n };\n // BigInteger.prototype.shiftRight = bnShiftRight;\n // (public) this >> n\n BigInteger.prototype.shiftRight = function (n) {\n var r = nbi();\n if (n < 0) {\n this.lShiftTo(-n, r);\n }\n else {\n this.rShiftTo(n, r);\n }\n return r;\n };\n // BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\n // (public) returns index of lowest 1-bit (or -1 if none)\n BigInteger.prototype.getLowestSetBit = function () {\n for (var i = 0; i < this.t; ++i) {\n if (this[i] != 0) {\n return i * this.DB + (0,_util__WEBPACK_IMPORTED_MODULE_0__.lbit)(this[i]);\n }\n }\n if (this.s < 0) {\n return this.t * this.DB;\n }\n return -1;\n };\n // BigInteger.prototype.bitCount = bnBitCount;\n // (public) return number of set bits\n BigInteger.prototype.bitCount = function () {\n var r = 0;\n var x = this.s & this.DM;\n for (var i = 0; i < this.t; ++i) {\n r += (0,_util__WEBPACK_IMPORTED_MODULE_0__.cbit)(this[i] ^ x);\n }\n return r;\n };\n // BigInteger.prototype.testBit = bnTestBit;\n // (public) true iff nth bit is set\n BigInteger.prototype.testBit = function (n) {\n var j = Math.floor(n / this.DB);\n if (j >= this.t) {\n return (this.s != 0);\n }\n return ((this[j] & (1 << (n % this.DB))) != 0);\n };\n // BigInteger.prototype.setBit = bnSetBit;\n // (public) this | (1< 1) {\n var g2 = nbi();\n z.sqrTo(g[1], g2);\n while (n <= km) {\n g[n] = nbi();\n z.mulTo(g2, g[n - 2], g[n]);\n n += 2;\n }\n }\n var j = e.t - 1;\n var w;\n var is1 = true;\n var r2 = nbi();\n var t;\n i = nbits(e[j]) - 1;\n while (j >= 0) {\n if (i >= k1) {\n w = (e[j] >> (i - k1)) & km;\n }\n else {\n w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i);\n if (j > 0) {\n w |= e[j - 1] >> (this.DB + i - k1);\n }\n }\n n = k;\n while ((w & 1) == 0) {\n w >>= 1;\n --n;\n }\n if ((i -= n) < 0) {\n i += this.DB;\n --j;\n }\n if (is1) { // ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n }\n else {\n while (n > 1) {\n z.sqrTo(r, r2);\n z.sqrTo(r2, r);\n n -= 2;\n }\n if (n > 0) {\n z.sqrTo(r, r2);\n }\n else {\n t = r;\n r = r2;\n r2 = t;\n }\n z.mulTo(r2, g[w], r);\n }\n while (j >= 0 && (e[j] & (1 << i)) == 0) {\n z.sqrTo(r, r2);\n t = r;\n r = r2;\n r2 = t;\n if (--i < 0) {\n i = this.DB - 1;\n --j;\n }\n }\n }\n return z.revert(r);\n };\n // BigInteger.prototype.modInverse = bnModInverse;\n // (public) 1/this % m (HAC 14.61)\n BigInteger.prototype.modInverse = function (m) {\n var ac = m.isEven();\n if ((this.isEven() && ac) || m.signum() == 0) {\n return BigInteger.ZERO;\n }\n var u = m.clone();\n var v = this.clone();\n var a = nbv(1);\n var b = nbv(0);\n var c = nbv(0);\n var d = nbv(1);\n while (u.signum() != 0) {\n while (u.isEven()) {\n u.rShiftTo(1, u);\n if (ac) {\n if (!a.isEven() || !b.isEven()) {\n a.addTo(this, a);\n b.subTo(m, b);\n }\n a.rShiftTo(1, a);\n }\n else if (!b.isEven()) {\n b.subTo(m, b);\n }\n b.rShiftTo(1, b);\n }\n while (v.isEven()) {\n v.rShiftTo(1, v);\n if (ac) {\n if (!c.isEven() || !d.isEven()) {\n c.addTo(this, c);\n d.subTo(m, d);\n }\n c.rShiftTo(1, c);\n }\n else if (!d.isEven()) {\n d.subTo(m, d);\n }\n d.rShiftTo(1, d);\n }\n if (u.compareTo(v) >= 0) {\n u.subTo(v, u);\n if (ac) {\n a.subTo(c, a);\n }\n b.subTo(d, b);\n }\n else {\n v.subTo(u, v);\n if (ac) {\n c.subTo(a, c);\n }\n d.subTo(b, d);\n }\n }\n if (v.compareTo(BigInteger.ONE) != 0) {\n return BigInteger.ZERO;\n }\n if (d.compareTo(m) >= 0) {\n return d.subtract(m);\n }\n if (d.signum() < 0) {\n d.addTo(m, d);\n }\n else {\n return d;\n }\n if (d.signum() < 0) {\n return d.add(m);\n }\n else {\n return d;\n }\n };\n // BigInteger.prototype.pow = bnPow;\n // (public) this^e\n BigInteger.prototype.pow = function (e) {\n return this.exp(e, new NullExp());\n };\n // BigInteger.prototype.gcd = bnGCD;\n // (public) gcd(this,a) (HAC 14.54)\n BigInteger.prototype.gcd = function (a) {\n var x = (this.s < 0) ? this.negate() : this.clone();\n var y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n var t = x;\n x = y;\n y = t;\n }\n var i = x.getLowestSetBit();\n var g = y.getLowestSetBit();\n if (g < 0) {\n return x;\n }\n if (i < g) {\n g = i;\n }\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n while (x.signum() > 0) {\n if ((i = x.getLowestSetBit()) > 0) {\n x.rShiftTo(i, x);\n }\n if ((i = y.getLowestSetBit()) > 0) {\n y.rShiftTo(i, y);\n }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n }\n else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n }\n if (g > 0) {\n y.lShiftTo(g, y);\n }\n return y;\n };\n // BigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n // (public) test primality with certainty >= 1-.5^t\n BigInteger.prototype.isProbablePrime = function (t) {\n var i;\n var x = this.abs();\n if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {\n for (i = 0; i < lowprimes.length; ++i) {\n if (x[0] == lowprimes[i]) {\n return true;\n }\n }\n return false;\n }\n if (x.isEven()) {\n return false;\n }\n i = 1;\n while (i < lowprimes.length) {\n var m = lowprimes[i];\n var j = i + 1;\n while (j < lowprimes.length && m < lplim) {\n m *= lowprimes[j++];\n }\n m = x.modInt(m);\n while (i < j) {\n if (m % lowprimes[i++] == 0) {\n return false;\n }\n }\n }\n return x.millerRabin(t);\n };\n //#endregion PUBLIC\n //#region PROTECTED\n // BigInteger.prototype.copyTo = bnpCopyTo;\n // (protected) copy this to r\n BigInteger.prototype.copyTo = function (r) {\n for (var i = this.t - 1; i >= 0; --i) {\n r[i] = this[i];\n }\n r.t = this.t;\n r.s = this.s;\n };\n // BigInteger.prototype.fromInt = bnpFromInt;\n // (protected) set from integer value x, -DV <= x < DV\n BigInteger.prototype.fromInt = function (x) {\n this.t = 1;\n this.s = (x < 0) ? -1 : 0;\n if (x > 0) {\n this[0] = x;\n }\n else if (x < -1) {\n this[0] = x + this.DV;\n }\n else {\n this.t = 0;\n }\n };\n // BigInteger.prototype.fromString = bnpFromString;\n // (protected) set from string and radix\n BigInteger.prototype.fromString = function (s, b) {\n var k;\n if (b == 16) {\n k = 4;\n }\n else if (b == 8) {\n k = 3;\n }\n else if (b == 256) {\n k = 8;\n /* byte array */\n }\n else if (b == 2) {\n k = 1;\n }\n else if (b == 32) {\n k = 5;\n }\n else if (b == 4) {\n k = 2;\n }\n else {\n this.fromRadix(s, b);\n return;\n }\n this.t = 0;\n this.s = 0;\n var i = s.length;\n var mi = false;\n var sh = 0;\n while (--i >= 0) {\n var x = (k == 8) ? (+s[i]) & 0xff : intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\") {\n mi = true;\n }\n continue;\n }\n mi = false;\n if (sh == 0) {\n this[this.t++] = x;\n }\n else if (sh + k > this.DB) {\n this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;\n this[this.t++] = (x >> (this.DB - sh));\n }\n else {\n this[this.t - 1] |= x << sh;\n }\n sh += k;\n if (sh >= this.DB) {\n sh -= this.DB;\n }\n }\n if (k == 8 && ((+s[0]) & 0x80) != 0) {\n this.s = -1;\n if (sh > 0) {\n this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;\n }\n }\n this.clamp();\n if (mi) {\n BigInteger.ZERO.subTo(this, this);\n }\n };\n // BigInteger.prototype.clamp = bnpClamp;\n // (protected) clamp off excess high words\n BigInteger.prototype.clamp = function () {\n var c = this.s & this.DM;\n while (this.t > 0 && this[this.t - 1] == c) {\n --this.t;\n }\n };\n // BigInteger.prototype.dlShiftTo = bnpDLShiftTo;\n // (protected) r = this << n*DB\n BigInteger.prototype.dlShiftTo = function (n, r) {\n var i;\n for (i = this.t - 1; i >= 0; --i) {\n r[i + n] = this[i];\n }\n for (i = n - 1; i >= 0; --i) {\n r[i] = 0;\n }\n r.t = this.t + n;\n r.s = this.s;\n };\n // BigInteger.prototype.drShiftTo = bnpDRShiftTo;\n // (protected) r = this >> n*DB\n BigInteger.prototype.drShiftTo = function (n, r) {\n for (var i = n; i < this.t; ++i) {\n r[i - n] = this[i];\n }\n r.t = Math.max(this.t - n, 0);\n r.s = this.s;\n };\n // BigInteger.prototype.lShiftTo = bnpLShiftTo;\n // (protected) r = this << n\n BigInteger.prototype.lShiftTo = function (n, r) {\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << cbs) - 1;\n var ds = Math.floor(n / this.DB);\n var c = (this.s << bs) & this.DM;\n for (var i = this.t - 1; i >= 0; --i) {\n r[i + ds + 1] = (this[i] >> cbs) | c;\n c = (this[i] & bm) << bs;\n }\n for (var i = ds - 1; i >= 0; --i) {\n r[i] = 0;\n }\n r[ds] = c;\n r.t = this.t + ds + 1;\n r.s = this.s;\n r.clamp();\n };\n // BigInteger.prototype.rShiftTo = bnpRShiftTo;\n // (protected) r = this >> n\n BigInteger.prototype.rShiftTo = function (n, r) {\n r.s = this.s;\n var ds = Math.floor(n / this.DB);\n if (ds >= this.t) {\n r.t = 0;\n return;\n }\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << bs) - 1;\n r[0] = this[ds] >> bs;\n for (var i = ds + 1; i < this.t; ++i) {\n r[i - ds - 1] |= (this[i] & bm) << cbs;\n r[i - ds] = this[i] >> bs;\n }\n if (bs > 0) {\n r[this.t - ds - 1] |= (this.s & bm) << cbs;\n }\n r.t = this.t - ds;\n r.clamp();\n };\n // BigInteger.prototype.subTo = bnpSubTo;\n // (protected) r = this - a\n BigInteger.prototype.subTo = function (a, r) {\n var i = 0;\n var c = 0;\n var m = Math.min(a.t, this.t);\n while (i < m) {\n c += this[i] - a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n if (a.t < this.t) {\n c -= a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while (i < a.t) {\n c -= a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = (c < 0) ? -1 : 0;\n if (c < -1) {\n r[i++] = this.DV + c;\n }\n else if (c > 0) {\n r[i++] = c;\n }\n r.t = i;\n r.clamp();\n };\n // BigInteger.prototype.multiplyTo = bnpMultiplyTo;\n // (protected) r = this * a, r != this,a (HAC 14.12)\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyTo = function (a, r) {\n var x = this.abs();\n var y = a.abs();\n var i = x.t;\n r.t = i + y.t;\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = 0; i < y.t; ++i) {\n r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\n }\n r.s = 0;\n r.clamp();\n if (this.s != a.s) {\n BigInteger.ZERO.subTo(r, r);\n }\n };\n // BigInteger.prototype.squareTo = bnpSquareTo;\n // (protected) r = this^2, r != this (HAC 14.16)\n BigInteger.prototype.squareTo = function (r) {\n var x = this.abs();\n var i = r.t = 2 * x.t;\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = 0; i < x.t - 1; ++i) {\n var c = x.am(i, x[i], r, 2 * i, 0, 1);\n if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\n r[i + x.t] -= x.DV;\n r[i + x.t + 1] = 1;\n }\n }\n if (r.t > 0) {\n r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\n }\n r.s = 0;\n r.clamp();\n };\n // BigInteger.prototype.divRemTo = bnpDivRemTo;\n // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n // r != q, this != m. q or r may be null.\n BigInteger.prototype.divRemTo = function (m, q, r) {\n var pm = m.abs();\n if (pm.t <= 0) {\n return;\n }\n var pt = this.abs();\n if (pt.t < pm.t) {\n if (q != null) {\n q.fromInt(0);\n }\n if (r != null) {\n this.copyTo(r);\n }\n return;\n }\n if (r == null) {\n r = nbi();\n }\n var y = nbi();\n var ts = this.s;\n var ms = m.s;\n var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus\n if (nsh > 0) {\n pm.lShiftTo(nsh, y);\n pt.lShiftTo(nsh, r);\n }\n else {\n pm.copyTo(y);\n pt.copyTo(r);\n }\n var ys = y.t;\n var y0 = y[ys - 1];\n if (y0 == 0) {\n return;\n }\n var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0);\n var d1 = this.FV / yt;\n var d2 = (1 << this.F1) / yt;\n var e = 1 << this.F2;\n var i = r.t;\n var j = i - ys;\n var t = (q == null) ? nbi() : q;\n y.dlShiftTo(j, t);\n if (r.compareTo(t) >= 0) {\n r[r.t++] = 1;\n r.subTo(t, r);\n }\n BigInteger.ONE.dlShiftTo(ys, t);\n t.subTo(y, y); // \"negative\" y so we can replace sub with am later\n while (y.t < ys) {\n y[y.t++] = 0;\n }\n while (--j >= 0) {\n // Estimate quotient digit\n var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\n if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out\n y.dlShiftTo(j, t);\n r.subTo(t, r);\n while (r[i] < --qd) {\n r.subTo(t, r);\n }\n }\n }\n if (q != null) {\n r.drShiftTo(ys, q);\n if (ts != ms) {\n BigInteger.ZERO.subTo(q, q);\n }\n }\n r.t = ys;\n r.clamp();\n if (nsh > 0) {\n r.rShiftTo(nsh, r);\n } // Denormalize remainder\n if (ts < 0) {\n BigInteger.ZERO.subTo(r, r);\n }\n };\n // BigInteger.prototype.invDigit = bnpInvDigit;\n // (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n // justification:\n // xy == 1 (mod m)\n // xy = 1+km\n // xy(2-xy) = (1+km)(1-km)\n // x[y(2-xy)] = 1-k^2m^2\n // x[y(2-xy)] == 1 (mod m^2)\n // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n // JS multiply \"overflows\" differently from C/C++, so care is needed here.\n BigInteger.prototype.invDigit = function () {\n if (this.t < 1) {\n return 0;\n }\n var x = this[0];\n if ((x & 1) == 0) {\n return 0;\n }\n var y = x & 3; // y == 1/x mod 2^2\n y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4\n y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8\n y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return (y > 0) ? this.DV - y : -y;\n };\n // BigInteger.prototype.isEven = bnpIsEven;\n // (protected) true iff this is even\n BigInteger.prototype.isEven = function () {\n return ((this.t > 0) ? (this[0] & 1) : this.s) == 0;\n };\n // BigInteger.prototype.exp = bnpExp;\n // (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\n BigInteger.prototype.exp = function (e, z) {\n if (e > 0xffffffff || e < 1) {\n return BigInteger.ONE;\n }\n var r = nbi();\n var r2 = nbi();\n var g = z.convert(this);\n var i = nbits(e) - 1;\n g.copyTo(r);\n while (--i >= 0) {\n z.sqrTo(r, r2);\n if ((e & (1 << i)) > 0) {\n z.mulTo(r2, g, r);\n }\n else {\n var t = r;\n r = r2;\n r2 = t;\n }\n }\n return z.revert(r);\n };\n // BigInteger.prototype.chunkSize = bnpChunkSize;\n // (protected) return x s.t. r^x < DV\n BigInteger.prototype.chunkSize = function (r) {\n return Math.floor(Math.LN2 * this.DB / Math.log(r));\n };\n // BigInteger.prototype.toRadix = bnpToRadix;\n // (protected) convert to radix string\n BigInteger.prototype.toRadix = function (b) {\n if (b == null) {\n b = 10;\n }\n if (this.signum() == 0 || b < 2 || b > 36) {\n return \"0\";\n }\n var cs = this.chunkSize(b);\n var a = Math.pow(b, cs);\n var d = nbv(a);\n var y = nbi();\n var z = nbi();\n var r = \"\";\n this.divRemTo(d, y, z);\n while (y.signum() > 0) {\n r = (a + z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d, y, z);\n }\n return z.intValue().toString(b) + r;\n };\n // BigInteger.prototype.fromRadix = bnpFromRadix;\n // (protected) convert from radix string\n BigInteger.prototype.fromRadix = function (s, b) {\n this.fromInt(0);\n if (b == null) {\n b = 10;\n }\n var cs = this.chunkSize(b);\n var d = Math.pow(b, cs);\n var mi = false;\n var j = 0;\n var w = 0;\n for (var i = 0; i < s.length; ++i) {\n var x = intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\" && this.signum() == 0) {\n mi = true;\n }\n continue;\n }\n w = b * w + x;\n if (++j >= cs) {\n this.dMultiply(d);\n this.dAddOffset(w, 0);\n j = 0;\n w = 0;\n }\n }\n if (j > 0) {\n this.dMultiply(Math.pow(b, j));\n this.dAddOffset(w, 0);\n }\n if (mi) {\n BigInteger.ZERO.subTo(this, this);\n }\n };\n // BigInteger.prototype.fromNumber = bnpFromNumber;\n // (protected) alternate constructor\n BigInteger.prototype.fromNumber = function (a, b, c) {\n if (\"number\" == typeof b) {\n // new BigInteger(int,int,RNG)\n if (a < 2) {\n this.fromInt(1);\n }\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1)) {\n // force MSB set\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), _util__WEBPACK_IMPORTED_MODULE_0__.op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n } // force odd\n while (!this.isProbablePrime(b)) {\n this.dAddOffset(2, 0);\n if (this.bitLength() > a) {\n this.subTo(BigInteger.ONE.shiftLeft(a - 1), this);\n }\n }\n }\n }\n else {\n // new BigInteger(int,RNG)\n var x = [];\n var t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) {\n x[0] &= ((1 << t) - 1);\n }\n else {\n x[0] = 0;\n }\n this.fromString(x, 256);\n }\n };\n // BigInteger.prototype.bitwiseTo = bnpBitwiseTo;\n // (protected) r = this op a (bitwise)\n BigInteger.prototype.bitwiseTo = function (a, op, r) {\n var i;\n var f;\n var m = Math.min(a.t, this.t);\n for (i = 0; i < m; ++i) {\n r[i] = op(this[i], a[i]);\n }\n if (a.t < this.t) {\n f = a.s & this.DM;\n for (i = m; i < this.t; ++i) {\n r[i] = op(this[i], f);\n }\n r.t = this.t;\n }\n else {\n f = this.s & this.DM;\n for (i = m; i < a.t; ++i) {\n r[i] = op(f, a[i]);\n }\n r.t = a.t;\n }\n r.s = op(this.s, a.s);\n r.clamp();\n };\n // BigInteger.prototype.changeBit = bnpChangeBit;\n // (protected) this op (1<>= this.DB;\n }\n if (a.t < this.t) {\n c += a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while (i < a.t) {\n c += a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += a.s;\n }\n r.s = (c < 0) ? -1 : 0;\n if (c > 0) {\n r[i++] = c;\n }\n else if (c < -1) {\n r[i++] = this.DV + c;\n }\n r.t = i;\n r.clamp();\n };\n // BigInteger.prototype.dMultiply = bnpDMultiply;\n // (protected) this *= n, this >= 0, 1 < n < DV\n BigInteger.prototype.dMultiply = function (n) {\n this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);\n ++this.t;\n this.clamp();\n };\n // BigInteger.prototype.dAddOffset = bnpDAddOffset;\n // (protected) this += n << w words, this >= 0\n BigInteger.prototype.dAddOffset = function (n, w) {\n if (n == 0) {\n return;\n }\n while (this.t <= w) {\n this[this.t++] = 0;\n }\n this[w] += n;\n while (this[w] >= this.DV) {\n this[w] -= this.DV;\n if (++w >= this.t) {\n this[this.t++] = 0;\n }\n ++this[w];\n }\n };\n // BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\n // (protected) r = lower n words of \"this * a\", a.t <= n\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyLowerTo = function (a, n, r) {\n var i = Math.min(this.t + a.t, n);\n r.s = 0; // assumes a,this >= 0\n r.t = i;\n while (i > 0) {\n r[--i] = 0;\n }\n for (var j = r.t - this.t; i < j; ++i) {\n r[i + this.t] = this.am(0, a[i], r, i, 0, this.t);\n }\n for (var j = Math.min(a.t, n); i < j; ++i) {\n this.am(0, a[i], r, i, 0, n - i);\n }\n r.clamp();\n };\n // BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\n // (protected) r = \"this * a\" without lower n words, n > 0\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyUpperTo = function (a, n, r) {\n --n;\n var i = r.t = this.t + a.t - n;\n r.s = 0; // assumes a,this >= 0\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = Math.max(n - this.t, 0); i < a.t; ++i) {\n r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n);\n }\n r.clamp();\n r.drShiftTo(1, r);\n };\n // BigInteger.prototype.modInt = bnpModInt;\n // (protected) this % n, n < 2^26\n BigInteger.prototype.modInt = function (n) {\n if (n <= 0) {\n return 0;\n }\n var d = this.DV % n;\n var r = (this.s < 0) ? n - 1 : 0;\n if (this.t > 0) {\n if (d == 0) {\n r = this[0] % n;\n }\n else {\n for (var i = this.t - 1; i >= 0; --i) {\n r = (d * r + this[i]) % n;\n }\n }\n }\n return r;\n };\n // BigInteger.prototype.millerRabin = bnpMillerRabin;\n // (protected) true if probably prime (HAC 4.24, Miller-Rabin)\n BigInteger.prototype.millerRabin = function (t) {\n var n1 = this.subtract(BigInteger.ONE);\n var k = n1.getLowestSetBit();\n if (k <= 0) {\n return false;\n }\n var r = n1.shiftRight(k);\n t = (t + 1) >> 1;\n if (t > lowprimes.length) {\n t = lowprimes.length;\n }\n var a = nbi();\n for (var i = 0; i < t; ++i) {\n // Pick bases at random, instead of starting at 2\n a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);\n var y = a.modPow(r, this);\n if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n var j = 1;\n while (j++ < k && y.compareTo(n1) != 0) {\n y = y.modPowInt(2, this);\n if (y.compareTo(BigInteger.ONE) == 0) {\n return false;\n }\n }\n if (y.compareTo(n1) != 0) {\n return false;\n }\n }\n }\n return true;\n };\n // BigInteger.prototype.square = bnSquare;\n // (public) this^2\n BigInteger.prototype.square = function () {\n var r = nbi();\n this.squareTo(r);\n return r;\n };\n //#region ASYNC\n // Public API method\n BigInteger.prototype.gcda = function (a, callback) {\n var x = (this.s < 0) ? this.negate() : this.clone();\n var y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n var t = x;\n x = y;\n y = t;\n }\n var i = x.getLowestSetBit();\n var g = y.getLowestSetBit();\n if (g < 0) {\n callback(x);\n return;\n }\n if (i < g) {\n g = i;\n }\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n // Workhorse of the algorithm, gets called 200 - 800 times per 512 bit keygen.\n var gcda1 = function () {\n if ((i = x.getLowestSetBit()) > 0) {\n x.rShiftTo(i, x);\n }\n if ((i = y.getLowestSetBit()) > 0) {\n y.rShiftTo(i, y);\n }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n }\n else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n if (!(x.signum() > 0)) {\n if (g > 0) {\n y.lShiftTo(g, y);\n }\n setTimeout(function () { callback(y); }, 0); // escape\n }\n else {\n setTimeout(gcda1, 0);\n }\n };\n setTimeout(gcda1, 10);\n };\n // (protected) alternate constructor\n BigInteger.prototype.fromNumberAsync = function (a, b, c, callback) {\n if (\"number\" == typeof b) {\n if (a < 2) {\n this.fromInt(1);\n }\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1)) {\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), _util__WEBPACK_IMPORTED_MODULE_0__.op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n }\n var bnp_1 = this;\n var bnpfn1_1 = function () {\n bnp_1.dAddOffset(2, 0);\n if (bnp_1.bitLength() > a) {\n bnp_1.subTo(BigInteger.ONE.shiftLeft(a - 1), bnp_1);\n }\n if (bnp_1.isProbablePrime(b)) {\n setTimeout(function () { callback(); }, 0); // escape\n }\n else {\n setTimeout(bnpfn1_1, 0);\n }\n };\n setTimeout(bnpfn1_1, 0);\n }\n }\n else {\n var x = [];\n var t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) {\n x[0] &= ((1 << t) - 1);\n }\n else {\n x[0] = 0;\n }\n this.fromString(x, 256);\n }\n };\n return BigInteger;\n}());\n\n//#region REDUCERS\n//#region NullExp\nvar NullExp = /** @class */ (function () {\n function NullExp() {\n }\n // NullExp.prototype.convert = nNop;\n NullExp.prototype.convert = function (x) {\n return x;\n };\n // NullExp.prototype.revert = nNop;\n NullExp.prototype.revert = function (x) {\n return x;\n };\n // NullExp.prototype.mulTo = nMulTo;\n NullExp.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n };\n // NullExp.prototype.sqrTo = nSqrTo;\n NullExp.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n };\n return NullExp;\n}());\n// Modular reduction using \"classic\" algorithm\nvar Classic = /** @class */ (function () {\n function Classic(m) {\n this.m = m;\n }\n // Classic.prototype.convert = cConvert;\n Classic.prototype.convert = function (x) {\n if (x.s < 0 || x.compareTo(this.m) >= 0) {\n return x.mod(this.m);\n }\n else {\n return x;\n }\n };\n // Classic.prototype.revert = cRevert;\n Classic.prototype.revert = function (x) {\n return x;\n };\n // Classic.prototype.reduce = cReduce;\n Classic.prototype.reduce = function (x) {\n x.divRemTo(this.m, null, x);\n };\n // Classic.prototype.mulTo = cMulTo;\n Classic.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Classic.prototype.sqrTo = cSqrTo;\n Classic.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Classic;\n}());\n//#endregion\n//#region Montgomery\n// Montgomery reduction\nvar Montgomery = /** @class */ (function () {\n function Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp & 0x7fff;\n this.mph = this.mp >> 15;\n this.um = (1 << (m.DB - 15)) - 1;\n this.mt2 = 2 * m.t;\n }\n // Montgomery.prototype.convert = montConvert;\n // xR mod m\n Montgomery.prototype.convert = function (x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t, r);\n r.divRemTo(this.m, null, r);\n if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\n this.m.subTo(r, r);\n }\n return r;\n };\n // Montgomery.prototype.revert = montRevert;\n // x/R mod m\n Montgomery.prototype.revert = function (x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n };\n // Montgomery.prototype.reduce = montReduce;\n // x = x/R mod m (HAC 14.32)\n Montgomery.prototype.reduce = function (x) {\n while (x.t <= this.mt2) {\n // pad x so am has enough room later\n x[x.t++] = 0;\n }\n for (var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x[i]*mp mod DV\n var j = x[i] & 0x7fff;\n var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i + this.m.t;\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t);\n // propagate carry\n while (x[j] >= x.DV) {\n x[j] -= x.DV;\n x[++j]++;\n }\n }\n x.clamp();\n x.drShiftTo(this.m.t, x);\n if (x.compareTo(this.m) >= 0) {\n x.subTo(this.m, x);\n }\n };\n // Montgomery.prototype.mulTo = montMulTo;\n // r = \"xy/R mod m\"; x,y != r\n Montgomery.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Montgomery.prototype.sqrTo = montSqrTo;\n // r = \"x^2/R mod m\"; x != r\n Montgomery.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Montgomery;\n}());\n//#endregion Montgomery\n//#region Barrett\n// Barrett modular reduction\nvar Barrett = /** @class */ (function () {\n function Barrett(m) {\n this.m = m;\n // setup Barrett\n this.r2 = nbi();\n this.q3 = nbi();\n BigInteger.ONE.dlShiftTo(2 * m.t, this.r2);\n this.mu = this.r2.divide(m);\n }\n // Barrett.prototype.convert = barrettConvert;\n Barrett.prototype.convert = function (x) {\n if (x.s < 0 || x.t > 2 * this.m.t) {\n return x.mod(this.m);\n }\n else if (x.compareTo(this.m) < 0) {\n return x;\n }\n else {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n }\n };\n // Barrett.prototype.revert = barrettRevert;\n Barrett.prototype.revert = function (x) {\n return x;\n };\n // Barrett.prototype.reduce = barrettReduce;\n // x = x mod m (HAC 14.42)\n Barrett.prototype.reduce = function (x) {\n x.drShiftTo(this.m.t - 1, this.r2);\n if (x.t > this.m.t + 1) {\n x.t = this.m.t + 1;\n x.clamp();\n }\n this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);\n this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);\n while (x.compareTo(this.r2) < 0) {\n x.dAddOffset(1, this.m.t + 1);\n }\n x.subTo(this.r2, x);\n while (x.compareTo(this.m) >= 0) {\n x.subTo(this.m, x);\n }\n };\n // Barrett.prototype.mulTo = barrettMulTo;\n // r = x*y mod m; x,y != r\n Barrett.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Barrett.prototype.sqrTo = barrettSqrTo;\n // r = x^2 mod m; x != r\n Barrett.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Barrett;\n}());\n//#endregion\n//#endregion REDUCERS\n// return new, unset BigInteger\nfunction nbi() { return new BigInteger(null); }\nfunction parseBigInt(str, r) {\n return new BigInteger(str, r);\n}\n// am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\nvar inBrowser = typeof navigator !== \"undefined\";\nif (inBrowser && j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n // am2 avoids a big mult-and-extract completely.\n // Max digit bits should be <= 30 because we do bitwise ops\n // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\n BigInteger.prototype.am = function am2(i, x, w, j, c, n) {\n var xl = x & 0x7fff;\n var xh = x >> 15;\n while (--n >= 0) {\n var l = this[i] & 0x7fff;\n var h = this[i++] >> 15;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\n w[j++] = l & 0x3fffffff;\n }\n return c;\n };\n dbits = 30;\n}\nelse if (inBrowser && j_lm && (navigator.appName != \"Netscape\")) {\n // am1: use a single mult and divide to get the high bits,\n // max digit bits should be 26 because\n // max internal value = 2*dvalue^2-2*dvalue (< 2^53)\n BigInteger.prototype.am = function am1(i, x, w, j, c, n) {\n while (--n >= 0) {\n var v = x * this[i++] + w[j] + c;\n c = Math.floor(v / 0x4000000);\n w[j++] = v & 0x3ffffff;\n }\n return c;\n };\n dbits = 26;\n}\nelse { // Mozilla/Netscape seems to prefer am3\n // Alternately, set max digit bits to 28 since some\n // browsers slow down when dealing with 32-bit numbers.\n BigInteger.prototype.am = function am3(i, x, w, j, c, n) {\n var xl = x & 0x3fff;\n var xh = x >> 14;\n while (--n >= 0) {\n var l = this[i] & 0x3fff;\n var h = this[i++] >> 14;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\n c = (l >> 28) + (m >> 14) + xh * h;\n w[j++] = l & 0xfffffff;\n }\n return c;\n };\n dbits = 28;\n}\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = ((1 << dbits) - 1);\nBigInteger.prototype.DV = (1 << dbits);\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\nBigInteger.prototype.F1 = BI_FP - dbits;\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\n// Digit conversions\nvar BI_RC = [];\nvar rr;\nvar vv;\nrr = \"0\".charCodeAt(0);\nfor (vv = 0; vv <= 9; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"a\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"A\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nfunction intAt(s, i) {\n var c = BI_RC[s.charCodeAt(i)];\n return (c == null) ? -1 : c;\n}\n// return bigint initialized to value\nfunction nbv(i) {\n var r = nbi();\n r.fromInt(i);\n return r;\n}\n// returns bit length of the integer x\nfunction nbits(x) {\n var r = 1;\n var t;\n if ((t = x >>> 16) != 0) {\n x = t;\n r += 16;\n }\n if ((t = x >> 8) != 0) {\n x = t;\n r += 8;\n }\n if ((t = x >> 4) != 0) {\n x = t;\n r += 4;\n }\n if ((t = x >> 2) != 0) {\n x = t;\n r += 2;\n }\n if ((t = x >> 1) != 0) {\n x = t;\n r += 1;\n }\n return r;\n}\n// \"constants\"\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/jsbn.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/prng4.js": +/*!*******************************!*\ + !*** ./lib/lib/jsbn/prng4.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Arcfour\": () => (/* binding */ Arcfour),\n/* harmony export */ \"prng_newstate\": () => (/* binding */ prng_newstate),\n/* harmony export */ \"rng_psize\": () => (/* binding */ rng_psize)\n/* harmony export */ });\n// prng4.js - uses Arcfour as a PRNG\nvar Arcfour = /** @class */ (function () {\n function Arcfour() {\n this.i = 0;\n this.j = 0;\n this.S = [];\n }\n // Arcfour.prototype.init = ARC4init;\n // Initialize arcfour context from key, an array of ints, each from [0..255]\n Arcfour.prototype.init = function (key) {\n var i;\n var j;\n var t;\n for (i = 0; i < 256; ++i) {\n this.S[i] = i;\n }\n j = 0;\n for (i = 0; i < 256; ++i) {\n j = (j + this.S[i] + key[i % key.length]) & 255;\n t = this.S[i];\n this.S[i] = this.S[j];\n this.S[j] = t;\n }\n this.i = 0;\n this.j = 0;\n };\n // Arcfour.prototype.next = ARC4next;\n Arcfour.prototype.next = function () {\n var t;\n this.i = (this.i + 1) & 255;\n this.j = (this.j + this.S[this.i]) & 255;\n t = this.S[this.i];\n this.S[this.i] = this.S[this.j];\n this.S[this.j] = t;\n return this.S[(t + this.S[this.i]) & 255];\n };\n return Arcfour;\n}());\n\n// Plug in your RNG constructor here\nfunction prng_newstate() {\n return new Arcfour();\n}\n// Pool size must be a multiple of 4 and greater than 32.\n// An array of bytes the size of the pool will be passed to init()\nvar rng_psize = 256;\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/prng4.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/rng.js": +/*!*****************************!*\ + !*** ./lib/lib/jsbn/rng.js ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SecureRandom\": () => (/* binding */ SecureRandom)\n/* harmony export */ });\n/* harmony import */ var _prng4__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./prng4 */ \"./lib/lib/jsbn/prng4.js\");\n// Random number generator - requires a PRNG backend, e.g. prng4.js\n\nvar rng_state;\nvar rng_pool = null;\nvar rng_pptr;\n// Initialize the pool with junk if needed.\nif (rng_pool == null) {\n rng_pool = [];\n rng_pptr = 0;\n var t = void 0;\n if (typeof this !== 'undefined' && this.crypto && this.crypto.getRandomValues) {\n // Extract entropy (2048 bits) from RNG if available\n var z = new Uint32Array(256);\n this.crypto.getRandomValues(z);\n for (t = 0; t < z.length; ++t) {\n rng_pool[rng_pptr++] = z[t] & 255;\n }\n }\n // Use mouse events for entropy, if we do not have enough entropy by the time\n // we need it, entropy will be generated by Math.random.\n var count = 0;\n var onMouseMoveListener_1 = function (ev) {\n count = count || 0;\n if (count >= 256 || rng_pptr >= _prng4__WEBPACK_IMPORTED_MODULE_0__.rng_psize) {\n if (this.removeEventListener) {\n this.removeEventListener(\"mousemove\", onMouseMoveListener_1, false);\n }\n else if (this.detachEvent) {\n this.detachEvent(\"onmousemove\", onMouseMoveListener_1);\n }\n return;\n }\n try {\n var mouseCoordinates = ev.x + ev.y;\n rng_pool[rng_pptr++] = mouseCoordinates & 255;\n count += 1;\n }\n catch (e) {\n // Sometimes Firefox will deny permission to access event properties for some reason. Ignore.\n }\n };\n if (typeof this !== 'undefined') {\n if (this.addEventListener) {\n this.addEventListener(\"mousemove\", onMouseMoveListener_1, false);\n }\n else if (this.attachEvent) {\n this.attachEvent(\"onmousemove\", onMouseMoveListener_1);\n }\n }\n}\nfunction rng_get_byte() {\n if (rng_state == null) {\n rng_state = (0,_prng4__WEBPACK_IMPORTED_MODULE_0__.prng_newstate)();\n // At this point, we may not have collected enough entropy. If not, fall back to Math.random\n while (rng_pptr < _prng4__WEBPACK_IMPORTED_MODULE_0__.rng_psize) {\n var random = Math.floor(65536 * Math.random());\n rng_pool[rng_pptr++] = random & 255;\n }\n rng_state.init(rng_pool);\n for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) {\n rng_pool[rng_pptr] = 0;\n }\n rng_pptr = 0;\n }\n // TODO: allow reseeding after first request\n return rng_state.next();\n}\nvar SecureRandom = /** @class */ (function () {\n function SecureRandom() {\n }\n SecureRandom.prototype.nextBytes = function (ba) {\n for (var i = 0; i < ba.length; ++i) {\n ba[i] = rng_get_byte();\n }\n };\n return SecureRandom;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/rng.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/rsa.js": +/*!*****************************!*\ + !*** ./lib/lib/jsbn/rsa.js ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"RSAKey\": () => (/* binding */ RSAKey)\n/* harmony export */ });\n/* harmony import */ var _jsbn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _rng__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rng */ \"./lib/lib/jsbn/rng.js\");\n// Depends on jsbn.js and rng.js\n// Version 1.1: support utf-8 encoding in pkcs1pad2\n// convert a (hex) string to a bignum object\n\n\n// function linebrk(s,n) {\n// var ret = \"\";\n// var i = 0;\n// while(i + n < s.length) {\n// ret += s.substring(i,i+n) + \"\\n\";\n// i += n;\n// }\n// return ret + s.substring(i,s.length);\n// }\n// function byte2Hex(b) {\n// if(b < 0x10)\n// return \"0\" + b.toString(16);\n// else\n// return b.toString(16);\n// }\nfunction pkcs1pad1(s, n) {\n if (n < s.length + 22) {\n console.error(\"Message too long for RSA\");\n return null;\n }\n var len = n - s.length - 6;\n var filler = \"\";\n for (var f = 0; f < len; f += 2) {\n filler += \"ff\";\n }\n var m = \"0001\" + filler + \"00\" + s;\n return (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(m, 16);\n}\n// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint\nfunction pkcs1pad2(s, n) {\n if (n < s.length + 11) { // TODO: fix for utf-8\n console.error(\"Message too long for RSA\");\n return null;\n }\n var ba = [];\n var i = s.length - 1;\n while (i >= 0 && n > 0) {\n var c = s.charCodeAt(i--);\n if (c < 128) { // encode using utf-8\n ba[--n] = c;\n }\n else if ((c > 127) && (c < 2048)) {\n ba[--n] = (c & 63) | 128;\n ba[--n] = (c >> 6) | 192;\n }\n else {\n ba[--n] = (c & 63) | 128;\n ba[--n] = ((c >> 6) & 63) | 128;\n ba[--n] = (c >> 12) | 224;\n }\n }\n ba[--n] = 0;\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var x = [];\n while (n > 2) { // random non-zero pad\n x[0] = 0;\n while (x[0] == 0) {\n rng.nextBytes(x);\n }\n ba[--n] = x[0];\n }\n ba[--n] = 2;\n ba[--n] = 0;\n return new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(ba);\n}\n// \"empty\" RSA key constructor\nvar RSAKey = /** @class */ (function () {\n function RSAKey() {\n this.n = null;\n this.e = 0;\n this.d = null;\n this.p = null;\n this.q = null;\n this.dmp1 = null;\n this.dmq1 = null;\n this.coeff = null;\n }\n //#region PROTECTED\n // protected\n // RSAKey.prototype.doPublic = RSADoPublic;\n // Perform raw public operation on \"x\": return x^e (mod n)\n RSAKey.prototype.doPublic = function (x) {\n return x.modPowInt(this.e, this.n);\n };\n // RSAKey.prototype.doPrivate = RSADoPrivate;\n // Perform raw private operation on \"x\": return x^d (mod n)\n RSAKey.prototype.doPrivate = function (x) {\n if (this.p == null || this.q == null) {\n return x.modPow(this.d, this.n);\n }\n // TODO: re-calculate any missing CRT params\n var xp = x.mod(this.p).modPow(this.dmp1, this.p);\n var xq = x.mod(this.q).modPow(this.dmq1, this.q);\n while (xp.compareTo(xq) < 0) {\n xp = xp.add(this.p);\n }\n return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);\n };\n //#endregion PROTECTED\n //#region PUBLIC\n // RSAKey.prototype.setPublic = RSASetPublic;\n // Set the public key fields N and e from hex strings\n RSAKey.prototype.setPublic = function (N, E) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n }\n else {\n console.error(\"Invalid RSA public key\");\n }\n };\n // RSAKey.prototype.encrypt = RSAEncrypt;\n // Return the PKCS#1 RSA encryption of \"text\" as an even-length hex string\n RSAKey.prototype.encrypt = function (text) {\n var maxLength = (this.n.bitLength() + 7) >> 3;\n var m = pkcs1pad2(text, maxLength);\n if (m == null) {\n return null;\n }\n var c = this.doPublic(m);\n if (c == null) {\n return null;\n }\n var h = c.toString(16);\n var length = h.length;\n // fix zero before result\n for (var i = 0; i < maxLength * 2 - length; i++) {\n h = \"0\" + h;\n }\n return h;\n };\n // RSAKey.prototype.setPrivate = RSASetPrivate;\n // Set the private key fields N, e, and d from hex strings\n RSAKey.prototype.setPrivate = function (N, E, D) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n this.d = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(D, 16);\n }\n else {\n console.error(\"Invalid RSA private key\");\n }\n };\n // RSAKey.prototype.setPrivateEx = RSASetPrivateEx;\n // Set the private key fields N, e, d and CRT params from hex strings\n RSAKey.prototype.setPrivateEx = function (N, E, D, P, Q, DP, DQ, C) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n this.d = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(D, 16);\n this.p = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(P, 16);\n this.q = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(Q, 16);\n this.dmp1 = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(DP, 16);\n this.dmq1 = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(DQ, 16);\n this.coeff = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(C, 16);\n }\n else {\n console.error(\"Invalid RSA private key\");\n }\n };\n // RSAKey.prototype.generate = RSAGenerate;\n // Generate a new random private key B bits long, using public expt E\n RSAKey.prototype.generate = function (B, E) {\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var qs = B >> 1;\n this.e = parseInt(E, 16);\n var ee = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(E, 16);\n for (;;) {\n for (;;) {\n this.p = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(B - qs, 1, rng);\n if (this.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) {\n break;\n }\n }\n for (;;) {\n this.q = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(qs, 1, rng);\n if (this.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) {\n break;\n }\n }\n if (this.p.compareTo(this.q) <= 0) {\n var t = this.p;\n this.p = this.q;\n this.q = t;\n }\n var p1 = this.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var q1 = this.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0) {\n this.n = this.p.multiply(this.q);\n this.d = ee.modInverse(phi);\n this.dmp1 = this.d.mod(p1);\n this.dmq1 = this.d.mod(q1);\n this.coeff = this.q.modInverse(this.p);\n break;\n }\n }\n };\n // RSAKey.prototype.decrypt = RSADecrypt;\n // Return the PKCS#1 RSA decryption of \"ctext\".\n // \"ctext\" is an even-length hex string and the output is a plain string.\n RSAKey.prototype.decrypt = function (ctext) {\n var c = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(ctext, 16);\n var m = this.doPrivate(c);\n if (m == null) {\n return null;\n }\n return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3);\n };\n // Generate a new random private key B bits long, using public expt E\n RSAKey.prototype.generateAsync = function (B, E, callback) {\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var qs = B >> 1;\n this.e = parseInt(E, 16);\n var ee = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(E, 16);\n var rsa = this;\n // These functions have non-descript names because they were originally for(;;) loops.\n // I don't know about cryptography to give them better names than loop1-4.\n var loop1 = function () {\n var loop4 = function () {\n if (rsa.p.compareTo(rsa.q) <= 0) {\n var t = rsa.p;\n rsa.p = rsa.q;\n rsa.q = t;\n }\n var p1 = rsa.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var q1 = rsa.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0) {\n rsa.n = rsa.p.multiply(rsa.q);\n rsa.d = ee.modInverse(phi);\n rsa.dmp1 = rsa.d.mod(p1);\n rsa.dmq1 = rsa.d.mod(q1);\n rsa.coeff = rsa.q.modInverse(rsa.p);\n setTimeout(function () { callback(); }, 0); // escape\n }\n else {\n setTimeout(loop1, 0);\n }\n };\n var loop3 = function () {\n rsa.q = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.nbi)();\n rsa.q.fromNumberAsync(qs, 1, rng, function () {\n rsa.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcda(ee, function (r) {\n if (r.compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && rsa.q.isProbablePrime(10)) {\n setTimeout(loop4, 0);\n }\n else {\n setTimeout(loop3, 0);\n }\n });\n });\n };\n var loop2 = function () {\n rsa.p = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.nbi)();\n rsa.p.fromNumberAsync(B - qs, 1, rng, function () {\n rsa.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcda(ee, function (r) {\n if (r.compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && rsa.p.isProbablePrime(10)) {\n setTimeout(loop3, 0);\n }\n else {\n setTimeout(loop2, 0);\n }\n });\n });\n };\n setTimeout(loop2, 0);\n };\n setTimeout(loop1, 0);\n };\n RSAKey.prototype.sign = function (text, digestMethod, digestName) {\n var header = getDigestHeader(digestName);\n var digest = header + digestMethod(text).toString();\n var m = pkcs1pad1(digest, this.n.bitLength() / 4);\n if (m == null) {\n return null;\n }\n var c = this.doPrivate(m);\n if (c == null) {\n return null;\n }\n var h = c.toString(16);\n if ((h.length & 1) == 0) {\n return h;\n }\n else {\n return \"0\" + h;\n }\n };\n RSAKey.prototype.verify = function (text, signature, digestMethod) {\n var c = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(signature, 16);\n var m = this.doPublic(c);\n if (m == null) {\n return null;\n }\n var unpadded = m.toString(16).replace(/^1f+00/, \"\");\n var digest = removeDigestHeader(unpadded);\n return digest == digestMethod(text).toString();\n };\n return RSAKey;\n}());\n\n// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext\nfunction pkcs1unpad2(d, n) {\n var b = d.toByteArray();\n var i = 0;\n while (i < b.length && b[i] == 0) {\n ++i;\n }\n if (b.length - i != n - 1 || b[i] != 2) {\n return null;\n }\n ++i;\n while (b[i] != 0) {\n if (++i >= b.length) {\n return null;\n }\n }\n var ret = \"\";\n while (++i < b.length) {\n var c = b[i] & 255;\n if (c < 128) { // utf-8 decode\n ret += String.fromCharCode(c);\n }\n else if ((c > 191) && (c < 224)) {\n ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63));\n ++i;\n }\n else {\n ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63));\n i += 2;\n }\n }\n return ret;\n}\n// https://tools.ietf.org/html/rfc3447#page-43\nvar DIGEST_HEADERS = {\n md2: \"3020300c06082a864886f70d020205000410\",\n md5: \"3020300c06082a864886f70d020505000410\",\n sha1: \"3021300906052b0e03021a05000414\",\n sha224: \"302d300d06096086480165030402040500041c\",\n sha256: \"3031300d060960864801650304020105000420\",\n sha384: \"3041300d060960864801650304020205000430\",\n sha512: \"3051300d060960864801650304020305000440\",\n ripemd160: \"3021300906052b2403020105000414\"\n};\nfunction getDigestHeader(name) {\n return DIGEST_HEADERS[name] || \"\";\n}\nfunction removeDigestHeader(str) {\n for (var name_1 in DIGEST_HEADERS) {\n if (DIGEST_HEADERS.hasOwnProperty(name_1)) {\n var header = DIGEST_HEADERS[name_1];\n var len = header.length;\n if (str.substr(0, len) == header) {\n return str.substr(len);\n }\n }\n }\n return str;\n}\n// Return the PKCS#1 RSA encryption of \"text\" as a Base64-encoded string\n// function RSAEncryptB64(text) {\n// var h = this.encrypt(text);\n// if(h) return hex2b64(h); else return null;\n// }\n// public\n// RSAKey.prototype.encrypt_b64 = RSAEncryptB64;\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/rsa.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/util.js": +/*!******************************!*\ + !*** ./lib/lib/jsbn/util.js ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"cbit\": () => (/* binding */ cbit),\n/* harmony export */ \"int2char\": () => (/* binding */ int2char),\n/* harmony export */ \"lbit\": () => (/* binding */ lbit),\n/* harmony export */ \"op_and\": () => (/* binding */ op_and),\n/* harmony export */ \"op_andnot\": () => (/* binding */ op_andnot),\n/* harmony export */ \"op_or\": () => (/* binding */ op_or),\n/* harmony export */ \"op_xor\": () => (/* binding */ op_xor)\n/* harmony export */ });\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nfunction int2char(n) {\n return BI_RM.charAt(n);\n}\n//#region BIT_OPERATIONS\n// (public) this & a\nfunction op_and(x, y) {\n return x & y;\n}\n// (public) this | a\nfunction op_or(x, y) {\n return x | y;\n}\n// (public) this ^ a\nfunction op_xor(x, y) {\n return x ^ y;\n}\n// (public) this & ~a\nfunction op_andnot(x, y) {\n return x & ~y;\n}\n// return index of lowest 1-bit in x, x < 2^31\nfunction lbit(x) {\n if (x == 0) {\n return -1;\n }\n var r = 0;\n if ((x & 0xffff) == 0) {\n x >>= 16;\n r += 16;\n }\n if ((x & 0xff) == 0) {\n x >>= 8;\n r += 8;\n }\n if ((x & 0xf) == 0) {\n x >>= 4;\n r += 4;\n }\n if ((x & 3) == 0) {\n x >>= 2;\n r += 2;\n }\n if ((x & 1) == 0) {\n ++r;\n }\n return r;\n}\n// return number of 1 bits in x\nfunction cbit(x) {\n var r = 0;\n while (x != 0) {\n x &= x - 1;\n ++r;\n }\n return r;\n}\n//#endregion BIT_OPERATIONS\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/util.js?"); + +/***/ }), + +/***/ "./lib/lib/jsrsasign/asn1-1.0.js": +/*!***************************************!*\ + !*** ./lib/lib/jsrsasign/asn1-1.0.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"KJUR\": () => (/* binding */ KJUR)\n/* harmony export */ });\n/* harmony import */ var _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../jsbn/jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _yahoo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./yahoo */ \"./lib/lib/jsrsasign/yahoo.js\");\n/* asn1-1.0.13.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license\n */\n/*\n * asn1.js - ASN.1 DER encoder classes\n *\n * Copyright (c) 2013-2017 Kenji Urushima (kenji.urushima@gmail.com)\n *\n * This software is licensed under the terms of the MIT License.\n * https://kjur.github.io/jsrsasign/license\n *\n * The above copyright and license notice shall be\n * included in all copies or substantial portions of the Software.\n */\n\n\n/**\n * @fileOverview\n * @name asn1-1.0.js\n * @author Kenji Urushima kenji.urushima@gmail.com\n * @version asn1 1.0.13 (2017-Jun-02)\n * @since jsrsasign 2.1\n * @license MIT License\n */\n/**\n * kjur's class library name space\n *

\n * This name space provides following name spaces:\n *

    \n *
  • {@link KJUR.asn1} - ASN.1 primitive hexadecimal encoder
  • \n *
  • {@link KJUR.asn1.x509} - ASN.1 structure for X.509 certificate and CRL
  • \n *
  • {@link KJUR.crypto} - Java Cryptographic Extension(JCE) style MessageDigest/Signature\n * class and utilities
  • \n *
\n *

\n * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2.\n * @name KJUR\n * @namespace kjur's class library name space\n */\nvar KJUR = {};\n/**\n * kjur's ASN.1 class library name space\n *

\n * This is ITU-T X.690 ASN.1 DER encoder class library and\n * class structure and methods is very similar to\n * org.bouncycastle.asn1 package of\n * well known BouncyCaslte Cryptography Library.\n *

PROVIDING ASN.1 PRIMITIVES

\n * Here are ASN.1 DER primitive classes.\n *
    \n *
  • 0x01 {@link KJUR.asn1.DERBoolean}
  • \n *
  • 0x02 {@link KJUR.asn1.DERInteger}
  • \n *
  • 0x03 {@link KJUR.asn1.DERBitString}
  • \n *
  • 0x04 {@link KJUR.asn1.DEROctetString}
  • \n *
  • 0x05 {@link KJUR.asn1.DERNull}
  • \n *
  • 0x06 {@link KJUR.asn1.DERObjectIdentifier}
  • \n *
  • 0x0a {@link KJUR.asn1.DEREnumerated}
  • \n *
  • 0x0c {@link KJUR.asn1.DERUTF8String}
  • \n *
  • 0x12 {@link KJUR.asn1.DERNumericString}
  • \n *
  • 0x13 {@link KJUR.asn1.DERPrintableString}
  • \n *
  • 0x14 {@link KJUR.asn1.DERTeletexString}
  • \n *
  • 0x16 {@link KJUR.asn1.DERIA5String}
  • \n *
  • 0x17 {@link KJUR.asn1.DERUTCTime}
  • \n *
  • 0x18 {@link KJUR.asn1.DERGeneralizedTime}
  • \n *
  • 0x30 {@link KJUR.asn1.DERSequence}
  • \n *
  • 0x31 {@link KJUR.asn1.DERSet}
  • \n *
\n *

OTHER ASN.1 CLASSES

\n *
    \n *
  • {@link KJUR.asn1.ASN1Object}
  • \n *
  • {@link KJUR.asn1.DERAbstractString}
  • \n *
  • {@link KJUR.asn1.DERAbstractTime}
  • \n *
  • {@link KJUR.asn1.DERAbstractStructured}
  • \n *
  • {@link KJUR.asn1.DERTaggedObject}
  • \n *
\n *

SUB NAME SPACES

\n *
    \n *
  • {@link KJUR.asn1.cades} - CAdES long term signature format
  • \n *
  • {@link KJUR.asn1.cms} - Cryptographic Message Syntax
  • \n *
  • {@link KJUR.asn1.csr} - Certificate Signing Request (CSR/PKCS#10)
  • \n *
  • {@link KJUR.asn1.tsp} - RFC 3161 Timestamping Protocol Format
  • \n *
  • {@link KJUR.asn1.x509} - RFC 5280 X.509 certificate and CRL
  • \n *
\n *

\n * NOTE: Please ignore method summary and document of this namespace.\n * This caused by a bug of jsdoc2.\n * @name KJUR.asn1\n * @namespace\n */\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1)\n KJUR.asn1 = {};\n/**\n * ASN1 utilities class\n * @name KJUR.asn1.ASN1Util\n * @class ASN1 utilities class\n * @since asn1 1.0.2\n */\nKJUR.asn1.ASN1Util = new function () {\n this.integerToByteHex = function (i) {\n var h = i.toString(16);\n if ((h.length % 2) == 1)\n h = '0' + h;\n return h;\n };\n this.bigIntToMinTwosComplementsHex = function (bigIntegerValue) {\n var h = bigIntegerValue.toString(16);\n if (h.substr(0, 1) != '-') {\n if (h.length % 2 == 1) {\n h = '0' + h;\n }\n else {\n if (!h.match(/^[0-7]/)) {\n h = '00' + h;\n }\n }\n }\n else {\n var hPos = h.substr(1);\n var xorLen = hPos.length;\n if (xorLen % 2 == 1) {\n xorLen += 1;\n }\n else {\n if (!h.match(/^[0-7]/)) {\n xorLen += 2;\n }\n }\n var hMask = '';\n for (var i = 0; i < xorLen; i++) {\n hMask += 'f';\n }\n var biMask = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(hMask, 16);\n var biNeg = biMask.xor(bigIntegerValue).add(_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n h = biNeg.toString(16).replace(/^-/, '');\n }\n return h;\n };\n /**\n * get PEM string from hexadecimal data and header string\n * @name getPEMStringFromHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} dataHex hexadecimal string of PEM body\n * @param {String} pemHeader PEM header string (ex. 'RSA PRIVATE KEY')\n * @return {String} PEM formatted string of input data\n * @description\n * This method converts a hexadecimal string to a PEM string with\n * a specified header. Its line break will be CRLF(\"\\r\\n\").\n * @example\n * var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex('616161', 'RSA PRIVATE KEY');\n * // value of pem will be:\n * -----BEGIN PRIVATE KEY-----\n * YWFh\n * -----END PRIVATE KEY-----\n */\n this.getPEMStringFromHex = function (dataHex, pemHeader) {\n return hextopem(dataHex, pemHeader);\n };\n /**\n * generate ASN1Object specifed by JSON parameters\n * @name newObject\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {Array} param JSON parameter to generate ASN1Object\n * @return {KJUR.asn1.ASN1Object} generated object\n * @since asn1 1.0.3\n * @description\n * generate any ASN1Object specified by JSON param\n * including ASN.1 primitive or structured.\n * Generally 'param' can be described as follows:\n *
\n * {TYPE-OF-ASNOBJ: ASN1OBJ-PARAMETER}\n *
\n * 'TYPE-OF-ASN1OBJ' can be one of following symbols:\n *
    \n *
  • 'bool' - DERBoolean
  • \n *
  • 'int' - DERInteger
  • \n *
  • 'bitstr' - DERBitString
  • \n *
  • 'octstr' - DEROctetString
  • \n *
  • 'null' - DERNull
  • \n *
  • 'oid' - DERObjectIdentifier
  • \n *
  • 'enum' - DEREnumerated
  • \n *
  • 'utf8str' - DERUTF8String
  • \n *
  • 'numstr' - DERNumericString
  • \n *
  • 'prnstr' - DERPrintableString
  • \n *
  • 'telstr' - DERTeletexString
  • \n *
  • 'ia5str' - DERIA5String
  • \n *
  • 'utctime' - DERUTCTime
  • \n *
  • 'gentime' - DERGeneralizedTime
  • \n *
  • 'seq' - DERSequence
  • \n *
  • 'set' - DERSet
  • \n *
  • 'tag' - DERTaggedObject
  • \n *
\n * @example\n * newObject({'prnstr': 'aaa'});\n * newObject({'seq': [{'int': 3}, {'prnstr': 'aaa'}]})\n * // ASN.1 Tagged Object\n * newObject({'tag': {'tag': 'a1',\n * 'explicit': true,\n * 'obj': {'seq': [{'int': 3}, {'prnstr': 'aaa'}]}}});\n * // more simple representation of ASN.1 Tagged Object\n * newObject({'tag': ['a1',\n * true,\n * {'seq': [\n * {'int': 3},\n * {'prnstr': 'aaa'}]}\n * ]});\n */\n this.newObject = function (param) {\n var _KJUR = KJUR, _KJUR_asn1 = _KJUR.asn1, _DERBoolean = _KJUR_asn1.DERBoolean, _DERInteger = _KJUR_asn1.DERInteger, _DERBitString = _KJUR_asn1.DERBitString, _DEROctetString = _KJUR_asn1.DEROctetString, _DERNull = _KJUR_asn1.DERNull, _DERObjectIdentifier = _KJUR_asn1.DERObjectIdentifier, _DEREnumerated = _KJUR_asn1.DEREnumerated, _DERUTF8String = _KJUR_asn1.DERUTF8String, _DERNumericString = _KJUR_asn1.DERNumericString, _DERPrintableString = _KJUR_asn1.DERPrintableString, _DERTeletexString = _KJUR_asn1.DERTeletexString, _DERIA5String = _KJUR_asn1.DERIA5String, _DERUTCTime = _KJUR_asn1.DERUTCTime, _DERGeneralizedTime = _KJUR_asn1.DERGeneralizedTime, _DERSequence = _KJUR_asn1.DERSequence, _DERSet = _KJUR_asn1.DERSet, _DERTaggedObject = _KJUR_asn1.DERTaggedObject, _newObject = _KJUR_asn1.ASN1Util.newObject;\n var keys = Object.keys(param);\n if (keys.length != 1)\n throw \"key of param shall be only one.\";\n var key = keys[0];\n if (\":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:\".indexOf(\":\" + key + \":\") == -1)\n throw \"undefined key: \" + key;\n if (key == \"bool\")\n return new _DERBoolean(param[key]);\n if (key == \"int\")\n return new _DERInteger(param[key]);\n if (key == \"bitstr\")\n return new _DERBitString(param[key]);\n if (key == \"octstr\")\n return new _DEROctetString(param[key]);\n if (key == \"null\")\n return new _DERNull(param[key]);\n if (key == \"oid\")\n return new _DERObjectIdentifier(param[key]);\n if (key == \"enum\")\n return new _DEREnumerated(param[key]);\n if (key == \"utf8str\")\n return new _DERUTF8String(param[key]);\n if (key == \"numstr\")\n return new _DERNumericString(param[key]);\n if (key == \"prnstr\")\n return new _DERPrintableString(param[key]);\n if (key == \"telstr\")\n return new _DERTeletexString(param[key]);\n if (key == \"ia5str\")\n return new _DERIA5String(param[key]);\n if (key == \"utctime\")\n return new _DERUTCTime(param[key]);\n if (key == \"gentime\")\n return new _DERGeneralizedTime(param[key]);\n if (key == \"seq\") {\n var paramList = param[key];\n var a = [];\n for (var i = 0; i < paramList.length; i++) {\n var asn1Obj = _newObject(paramList[i]);\n a.push(asn1Obj);\n }\n return new _DERSequence({ 'array': a });\n }\n if (key == \"set\") {\n var paramList = param[key];\n var a = [];\n for (var i = 0; i < paramList.length; i++) {\n var asn1Obj = _newObject(paramList[i]);\n a.push(asn1Obj);\n }\n return new _DERSet({ 'array': a });\n }\n if (key == \"tag\") {\n var tagParam = param[key];\n if (Object.prototype.toString.call(tagParam) === '[object Array]' &&\n tagParam.length == 3) {\n var obj = _newObject(tagParam[2]);\n return new _DERTaggedObject({ tag: tagParam[0],\n explicit: tagParam[1],\n obj: obj });\n }\n else {\n var newParam = {};\n if (tagParam.explicit !== undefined)\n newParam.explicit = tagParam.explicit;\n if (tagParam.tag !== undefined)\n newParam.tag = tagParam.tag;\n if (tagParam.obj === undefined)\n throw \"obj shall be specified for 'tag'.\";\n newParam.obj = _newObject(tagParam.obj);\n return new _DERTaggedObject(newParam);\n }\n }\n };\n /**\n * get encoded hexadecimal string of ASN1Object specifed by JSON parameters\n * @name jsonToASN1HEX\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {Array} param JSON parameter to generate ASN1Object\n * @return hexadecimal string of ASN1Object\n * @since asn1 1.0.4\n * @description\n * As for ASN.1 object representation of JSON object,\n * please see {@link newObject}.\n * @example\n * jsonToASN1HEX({'prnstr': 'aaa'});\n */\n this.jsonToASN1HEX = function (param) {\n var asn1Obj = this.newObject(param);\n return asn1Obj.getEncodedHex();\n };\n};\n/**\n * get dot noted oid number string from hexadecimal value of OID\n * @name oidHexToInt\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} hex hexadecimal value of object identifier\n * @return {String} dot noted string of object identifier\n * @since jsrsasign 4.8.3 asn1 1.0.7\n * @description\n * This static method converts from hexadecimal string representation of\n * ASN.1 value of object identifier to oid number string.\n * @example\n * KJUR.asn1.ASN1Util.oidHexToInt('550406') → \"2.5.4.6\"\n */\nKJUR.asn1.ASN1Util.oidHexToInt = function (hex) {\n var s = \"\";\n var i01 = parseInt(hex.substr(0, 2), 16);\n var i0 = Math.floor(i01 / 40);\n var i1 = i01 % 40;\n var s = i0 + \".\" + i1;\n var binbuf = \"\";\n for (var i = 2; i < hex.length; i += 2) {\n var value = parseInt(hex.substr(i, 2), 16);\n var bin = (\"00000000\" + value.toString(2)).slice(-8);\n binbuf = binbuf + bin.substr(1, 7);\n if (bin.substr(0, 1) == \"0\") {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(binbuf, 2);\n s = s + \".\" + bi.toString(10);\n binbuf = \"\";\n }\n }\n ;\n return s;\n};\n/**\n * get hexadecimal value of object identifier from dot noted oid value\n * @name oidIntToHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} oidString dot noted string of object identifier\n * @return {String} hexadecimal value of object identifier\n * @since jsrsasign 4.8.3 asn1 1.0.7\n * @description\n * This static method converts from object identifier value string.\n * to hexadecimal string representation of it.\n * @example\n * KJUR.asn1.ASN1Util.oidIntToHex(\"2.5.4.6\") → \"550406\"\n */\nKJUR.asn1.ASN1Util.oidIntToHex = function (oidString) {\n var itox = function (i) {\n var h = i.toString(16);\n if (h.length == 1)\n h = '0' + h;\n return h;\n };\n var roidtox = function (roid) {\n var h = '';\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(roid, 10);\n var b = bi.toString(2);\n var padLen = 7 - b.length % 7;\n if (padLen == 7)\n padLen = 0;\n var bPad = '';\n for (var i = 0; i < padLen; i++)\n bPad += '0';\n b = bPad + b;\n for (var i = 0; i < b.length - 1; i += 7) {\n var b8 = b.substr(i, 7);\n if (i != b.length - 7)\n b8 = '1' + b8;\n h += itox(parseInt(b8, 2));\n }\n return h;\n };\n if (!oidString.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + oidString;\n }\n var h = '';\n var a = oidString.split('.');\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n h += itox(i0);\n a.splice(0, 2);\n for (var i = 0; i < a.length; i++) {\n h += roidtox(a[i]);\n }\n return h;\n};\n// ********************************************************************\n// Abstract ASN.1 Classes\n// ********************************************************************\n// ********************************************************************\n/**\n * base class for ASN.1 DER encoder object\n * @name KJUR.asn1.ASN1Object\n * @class base class for ASN.1 DER encoder object\n * @property {Boolean} isModified flag whether internal data was changed\n * @property {String} hTLV hexadecimal string of ASN.1 TLV\n * @property {String} hT hexadecimal string of ASN.1 TLV tag(T)\n * @property {String} hL hexadecimal string of ASN.1 TLV length(L)\n * @property {String} hV hexadecimal string of ASN.1 TLV value(V)\n * @description\n */\nKJUR.asn1.ASN1Object = function () {\n var isModified = true;\n var hTLV = null;\n var hT = '00';\n var hL = '00';\n var hV = '';\n /**\n * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V)\n * @name getLengthHexFromValue\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV length(L)\n */\n this.getLengthHexFromValue = function () {\n if (typeof this.hV == \"undefined\" || this.hV == null) {\n throw \"this.hV is null or undefined.\";\n }\n if (this.hV.length % 2 == 1) {\n throw \"value hex must be even length: n=\" + hV.length + \",v=\" + this.hV;\n }\n var n = this.hV.length / 2;\n var hN = n.toString(16);\n if (hN.length % 2 == 1) {\n hN = \"0\" + hN;\n }\n if (n < 128) {\n return hN;\n }\n else {\n var hNlen = hN.length / 2;\n if (hNlen > 15) {\n throw \"ASN.1 length too long to represent by 8x: n = \" + n.toString(16);\n }\n var head = 128 + hNlen;\n return head.toString(16) + hN;\n }\n };\n /**\n * get hexadecimal string of ASN.1 TLV bytes\n * @name getEncodedHex\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV\n */\n this.getEncodedHex = function () {\n if (this.hTLV == null || this.isModified) {\n this.hV = this.getFreshValueHex();\n this.hL = this.getLengthHexFromValue();\n this.hTLV = this.hT + this.hL + this.hV;\n this.isModified = false;\n //alert(\"first time: \" + this.hTLV);\n }\n return this.hTLV;\n };\n /**\n * get hexadecimal string of ASN.1 TLV value(V) bytes\n * @name getValueHex\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV value(V) bytes\n */\n this.getValueHex = function () {\n this.getEncodedHex();\n return this.hV;\n };\n this.getFreshValueHex = function () {\n return '';\n };\n};\n// == BEGIN DERAbstractString ================================================\n/**\n * base class for ASN.1 DER string classes\n * @name KJUR.asn1.DERAbstractString\n * @class base class for ASN.1 DER string classes\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @property {String} s internal string of value\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • str - specify initial ASN.1 value(V) by a string
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERAbstractString = function (params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var s = null;\n var hV = null;\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @return {String} string value of this string object\n */\n this.getString = function () {\n return this.s;\n };\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @param {String} newS value by a string to set\n */\n this.setString = function (newS) {\n this.hTLV = null;\n this.isModified = true;\n this.s = newS;\n this.hV = stohex(this.s);\n };\n /**\n * set value by a hexadecimal string\n * @name setStringHex\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @param {String} newHexString value by a hexadecimal string to set\n */\n this.setStringHex = function (newHexString) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params == \"string\") {\n this.setString(params);\n }\n else if (typeof params['str'] != \"undefined\") {\n this.setString(params['str']);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setStringHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);\n// == END DERAbstractString ================================================\n// == BEGIN DERAbstractTime ==================================================\n/**\n * base class for ASN.1 DER Generalized/UTCTime class\n * @name KJUR.asn1.DERAbstractTime\n * @class base class for ASN.1 DER Generalized/UTCTime class\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractTime = function (params) {\n KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);\n var s = null;\n var date = null;\n // --- PRIVATE METHODS --------------------\n this.localDateToUTC = function (d) {\n utc = d.getTime() + (d.getTimezoneOffset() * 60000);\n var utcDate = new Date(utc);\n return utcDate;\n };\n /*\n * format date string by Data object\n * @name formatDate\n * @memberOf KJUR.asn1.AbstractTime;\n * @param {Date} dateObject\n * @param {string} type 'utc' or 'gen'\n * @param {boolean} withMillis flag for with millisections or not\n * @description\n * 'withMillis' flag is supported from asn1 1.0.6.\n */\n this.formatDate = function (dateObject, type, withMillis) {\n var pad = this.zeroPadding;\n var d = this.localDateToUTC(dateObject);\n var year = String(d.getFullYear());\n if (type == 'utc')\n year = year.substr(2, 2);\n var month = pad(String(d.getMonth() + 1), 2);\n var day = pad(String(d.getDate()), 2);\n var hour = pad(String(d.getHours()), 2);\n var min = pad(String(d.getMinutes()), 2);\n var sec = pad(String(d.getSeconds()), 2);\n var s = year + month + day + hour + min + sec;\n if (withMillis === true) {\n var millis = d.getMilliseconds();\n if (millis != 0) {\n var sMillis = pad(String(millis), 3);\n sMillis = sMillis.replace(/[0]+$/, \"\");\n s = s + \".\" + sMillis;\n }\n }\n return s + \"Z\";\n };\n this.zeroPadding = function (s, len) {\n if (s.length >= len)\n return s;\n return new Array(len - s.length + 1).join('0') + s;\n };\n // --- PUBLIC METHODS --------------------\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @return {String} string value of this time object\n */\n this.getString = function () {\n return this.s;\n };\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @param {String} newS value by a string to set such like \"130430235959Z\"\n */\n this.setString = function (newS) {\n this.hTLV = null;\n this.isModified = true;\n this.s = newS;\n this.hV = stohex(newS);\n };\n /**\n * set value by a Date object\n * @name setByDateValue\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @param {Integer} year year of date (ex. 2013)\n * @param {Integer} month month of date between 1 and 12 (ex. 12)\n * @param {Integer} day day of month\n * @param {Integer} hour hours of date\n * @param {Integer} min minutes of date\n * @param {Integer} sec seconds of date\n */\n this.setByDateValue = function (year, month, day, hour, min, sec) {\n var dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0));\n this.setByDate(dateObject);\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);\n// == END DERAbstractTime ==================================================\n// == BEGIN DERAbstractStructured ============================================\n/**\n * base class for ASN.1 DER structured class\n * @name KJUR.asn1.DERAbstractStructured\n * @class base class for ASN.1 DER structured class\n * @property {Array} asn1Array internal array of ASN1Object\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractStructured = function (params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var asn1Array = null;\n /**\n * set value by array of ASN1Object\n * @name setByASN1ObjectArray\n * @memberOf KJUR.asn1.DERAbstractStructured#\n * @function\n * @param {array} asn1ObjectArray array of ASN1Object to set\n */\n this.setByASN1ObjectArray = function (asn1ObjectArray) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array = asn1ObjectArray;\n };\n /**\n * append an ASN1Object to internal array\n * @name appendASN1Object\n * @memberOf KJUR.asn1.DERAbstractStructured#\n * @function\n * @param {ASN1Object} asn1Object to add\n */\n this.appendASN1Object = function (asn1Object) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array.push(asn1Object);\n };\n this.asn1Array = new Array();\n if (typeof params != \"undefined\") {\n if (typeof params['array'] != \"undefined\") {\n this.asn1Array = params['array'];\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);\n// ********************************************************************\n// ASN.1 Object Classes\n// ********************************************************************\n// ********************************************************************\n/**\n * class for ASN.1 DER Boolean\n * @name KJUR.asn1.DERBoolean\n * @class class for ASN.1 DER Boolean\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERBoolean = function () {\n KJUR.asn1.DERBoolean.superclass.constructor.call(this);\n this.hT = \"01\";\n this.hTLV = \"0101ff\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER Integer\n * @name KJUR.asn1.DERInteger\n * @class class for ASN.1 DER Integer\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • int - specify initial ASN.1 value(V) by integer value
  • \n *
  • bigint - specify initial ASN.1 value(V) by BigInteger object
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERInteger = function (params) {\n KJUR.asn1.DERInteger.superclass.constructor.call(this);\n this.hT = \"02\";\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DERInteger#\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function (bigIntegerValue) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DERInteger\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function (intValue) {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(String(intValue), 10);\n this.setByBigInteger(bi);\n };\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DERInteger#\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n *
\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n * @example\n * new KJUR.asn1.DERInteger(123);\n * new KJUR.asn1.DERInteger({'int': 123});\n * new KJUR.asn1.DERInteger({'hex': '1fad'});\n */\n this.setValueHex = function (newHexString) {\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['bigint'] != \"undefined\") {\n this.setByBigInteger(params['bigint']);\n }\n else if (typeof params['int'] != \"undefined\") {\n this.setByInteger(params['int']);\n }\n else if (typeof params == \"number\") {\n this.setByInteger(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setValueHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER encoded BitString primitive\n * @name KJUR.asn1.DERBitString\n * @class class for ASN.1 DER encoded BitString primitive\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • bin - specify binary string (ex. '10111')
  • \n *
  • array - specify array of boolean (ex. [true,false,true,true])
  • \n *
  • hex - specify hexadecimal string of ASN.1 value(V) including unused bits
  • \n *
  • obj - specify {@link KJUR.asn1.ASN1Util.newObject}\n * argument for \"BitString encapsulates\" structure.
  • \n *
\n * NOTE1: 'params' can be omitted.
\n * NOTE2: 'obj' parameter have been supported since\n * asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).
\n * @example\n * // default constructor\n * o = new KJUR.asn1.DERBitString();\n * // initialize with binary string\n * o = new KJUR.asn1.DERBitString({bin: \"1011\"});\n * // initialize with boolean array\n * o = new KJUR.asn1.DERBitString({array: [true,false,true,true]});\n * // initialize with hexadecimal string (04 is unused bits)\n * o = new KJUR.asn1.DEROctetString({hex: \"04bac0\"});\n * // initialize with ASN1Util.newObject argument for encapsulated\n * o = new KJUR.asn1.DERBitString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});\n * // above generates a ASN.1 data like this:\n * // BIT STRING, encapsulates {\n * // SEQUENCE {\n * // INTEGER 3\n * // PrintableString 'aaa'\n * // }\n * // }\n */\nKJUR.asn1.DERBitString = function (params) {\n if (params !== undefined && typeof params.obj !== \"undefined\") {\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\n params.hex = \"00\" + o.getEncodedHex();\n }\n KJUR.asn1.DERBitString.superclass.constructor.call(this);\n this.hT = \"03\";\n /**\n * set ASN.1 value(V) by a hexadecimal string including unused bits\n * @name setHexValueIncludingUnusedBits\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {String} newHexStringIncludingUnusedBits\n */\n this.setHexValueIncludingUnusedBits = function (newHexStringIncludingUnusedBits) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = newHexStringIncludingUnusedBits;\n };\n /**\n * set ASN.1 value(V) by unused bit and hexadecimal string of value\n * @name setUnusedBitsAndHexValue\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {Integer} unusedBits\n * @param {String} hValue\n */\n this.setUnusedBitsAndHexValue = function (unusedBits, hValue) {\n if (unusedBits < 0 || 7 < unusedBits) {\n throw \"unused bits shall be from 0 to 7: u = \" + unusedBits;\n }\n var hUnusedBits = \"0\" + unusedBits;\n this.hTLV = null;\n this.isModified = true;\n this.hV = hUnusedBits + hValue;\n };\n /**\n * set ASN.1 DER BitString by binary string
\n * @name setByBinaryString\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {String} binaryString binary value string (i.e. '10111')\n * @description\n * Its unused bits will be calculated automatically by length of\n * 'binaryValue'.
\n * NOTE: Trailing zeros '0' will be ignored.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.setByBooleanArray(\"01011\");\n */\n this.setByBinaryString = function (binaryString) {\n binaryString = binaryString.replace(/0+$/, '');\n var unusedBits = 8 - binaryString.length % 8;\n if (unusedBits == 8)\n unusedBits = 0;\n for (var i = 0; i <= unusedBits; i++) {\n binaryString += '0';\n }\n var h = '';\n for (var i = 0; i < binaryString.length - 1; i += 8) {\n var b = binaryString.substr(i, 8);\n var x = parseInt(b, 2).toString(16);\n if (x.length == 1)\n x = '0' + x;\n h += x;\n }\n this.hTLV = null;\n this.isModified = true;\n this.hV = '0' + unusedBits + h;\n };\n /**\n * set ASN.1 TLV value(V) by an array of boolean
\n * @name setByBooleanArray\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {array} booleanArray array of boolean (ex. [true, false, true])\n * @description\n * NOTE: Trailing falses will be ignored in the ASN.1 DER Object.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.setByBooleanArray([false, true, false, true, true]);\n */\n this.setByBooleanArray = function (booleanArray) {\n var s = '';\n for (var i = 0; i < booleanArray.length; i++) {\n if (booleanArray[i] == true) {\n s += '1';\n }\n else {\n s += '0';\n }\n }\n this.setByBinaryString(s);\n };\n /**\n * generate an array of falses with specified length
\n * @name newFalseArray\n * @memberOf KJUR.asn1.DERBitString\n * @function\n * @param {Integer} nLength length of array to generate\n * @return {array} array of boolean falses\n * @description\n * This static method may be useful to initialize boolean array.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.newFalseArray(3) → [false, false, false]\n */\n this.newFalseArray = function (nLength) {\n var a = new Array(nLength);\n for (var i = 0; i < nLength; i++) {\n a[i] = false;\n }\n return a;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params == \"string\" && params.toLowerCase().match(/^[0-9a-f]+$/)) {\n this.setHexValueIncludingUnusedBits(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setHexValueIncludingUnusedBits(params['hex']);\n }\n else if (typeof params['bin'] != \"undefined\") {\n this.setByBinaryString(params['bin']);\n }\n else if (typeof params['array'] != \"undefined\") {\n this.setByBooleanArray(params['array']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER OctetString
\n * @name KJUR.asn1.DEROctetString\n * @class class for ASN.1 DER OctetString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * This class provides ASN.1 OctetString simple type.
\n * Supported \"params\" attributes are:\n *
    \n *
  • str - to set a string as a value
  • \n *
  • hex - to set a hexadecimal string as a value
  • \n *
  • obj - to set a encapsulated ASN.1 value by JSON object\n * which is defined in {@link KJUR.asn1.ASN1Util.newObject}
  • \n *
\n * NOTE: A parameter 'obj' have been supported\n * for \"OCTET STRING, encapsulates\" structure.\n * since asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).\n * @see KJUR.asn1.DERAbstractString - superclass\n * @example\n * // default constructor\n * o = new KJUR.asn1.DEROctetString();\n * // initialize with string\n * o = new KJUR.asn1.DEROctetString({str: \"aaa\"});\n * // initialize with hexadecimal string\n * o = new KJUR.asn1.DEROctetString({hex: \"616161\"});\n * // initialize with ASN1Util.newObject argument\n * o = new KJUR.asn1.DEROctetString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});\n * // above generates a ASN.1 data like this:\n * // OCTET STRING, encapsulates {\n * // SEQUENCE {\n * // INTEGER 3\n * // PrintableString 'aaa'\n * // }\n * // }\n */\nKJUR.asn1.DEROctetString = function (params) {\n if (params !== undefined && typeof params.obj !== \"undefined\") {\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\n params.hex = o.getEncodedHex();\n }\n KJUR.asn1.DEROctetString.superclass.constructor.call(this, params);\n this.hT = \"04\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER Null\n * @name KJUR.asn1.DERNull\n * @class class for ASN.1 DER Null\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERNull = function () {\n KJUR.asn1.DERNull.superclass.constructor.call(this);\n this.hT = \"05\";\n this.hTLV = \"0500\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER ObjectIdentifier\n * @name KJUR.asn1.DERObjectIdentifier\n * @class class for ASN.1 DER ObjectIdentifier\n * @param {Array} params associative array of parameters (ex. {'oid': '2.5.4.5'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • oid - specify initial ASN.1 value(V) by a oid string (ex. 2.5.4.13)
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERObjectIdentifier = function (params) {\n var itox = function (i) {\n var h = i.toString(16);\n if (h.length == 1)\n h = '0' + h;\n return h;\n };\n var roidtox = function (roid) {\n var h = '';\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(roid, 10);\n var b = bi.toString(2);\n var padLen = 7 - b.length % 7;\n if (padLen == 7)\n padLen = 0;\n var bPad = '';\n for (var i = 0; i < padLen; i++)\n bPad += '0';\n b = bPad + b;\n for (var i = 0; i < b.length - 1; i += 7) {\n var b8 = b.substr(i, 7);\n if (i != b.length - 7)\n b8 = '1' + b8;\n h += itox(parseInt(b8, 2));\n }\n return h;\n };\n KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);\n this.hT = \"06\";\n /**\n * set value by a hexadecimal string\n * @name setValueHex\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} newHexString hexadecimal value of OID bytes\n */\n this.setValueHex = function (newHexString) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = newHexString;\n };\n /**\n * set value by a OID string
\n * @name setValueOidString\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} oidString OID string (ex. 2.5.4.13)\n * @example\n * o = new KJUR.asn1.DERObjectIdentifier();\n * o.setValueOidString(\"2.5.4.13\");\n */\n this.setValueOidString = function (oidString) {\n if (!oidString.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + oidString;\n }\n var h = '';\n var a = oidString.split('.');\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n h += itox(i0);\n a.splice(0, 2);\n for (var i = 0; i < a.length; i++) {\n h += roidtox(a[i]);\n }\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = h;\n };\n /**\n * set value by a OID name\n * @name setValueName\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} oidName OID name (ex. 'serverAuth')\n * @since 1.0.1\n * @description\n * OID name shall be defined in 'KJUR.asn1.x509.OID.name2oidList'.\n * Otherwise raise error.\n * @example\n * o = new KJUR.asn1.DERObjectIdentifier();\n * o.setValueName(\"serverAuth\");\n */\n this.setValueName = function (oidName) {\n var oid = KJUR.asn1.x509.OID.name2oid(oidName);\n if (oid !== '') {\n this.setValueOidString(oid);\n }\n else {\n throw \"DERObjectIdentifier oidName undefined: \" + oidName;\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (params !== undefined) {\n if (typeof params === \"string\") {\n if (params.match(/^[0-2].[0-9.]+$/)) {\n this.setValueOidString(params);\n }\n else {\n this.setValueName(params);\n }\n }\n else if (params.oid !== undefined) {\n this.setValueOidString(params.oid);\n }\n else if (params.hex !== undefined) {\n this.setValueHex(params.hex);\n }\n else if (params.name !== undefined) {\n this.setValueName(params.name);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER Enumerated\n * @name KJUR.asn1.DEREnumerated\n * @class class for ASN.1 DER Enumerated\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • int - specify initial ASN.1 value(V) by integer value
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n * @example\n * new KJUR.asn1.DEREnumerated(123);\n * new KJUR.asn1.DEREnumerated({int: 123});\n * new KJUR.asn1.DEREnumerated({hex: '1fad'});\n */\nKJUR.asn1.DEREnumerated = function (params) {\n KJUR.asn1.DEREnumerated.superclass.constructor.call(this);\n this.hT = \"0a\";\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function (bigIntegerValue) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function (intValue) {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(String(intValue), 10);\n this.setByBigInteger(bi);\n };\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n *
\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n */\n this.setValueHex = function (newHexString) {\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['int'] != \"undefined\") {\n this.setByInteger(params['int']);\n }\n else if (typeof params == \"number\") {\n this.setByInteger(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setValueHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER UTF8String\n * @name KJUR.asn1.DERUTF8String\n * @class class for ASN.1 DER UTF8String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERUTF8String = function (params) {\n KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params);\n this.hT = \"0c\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER NumericString\n * @name KJUR.asn1.DERNumericString\n * @class class for ASN.1 DER NumericString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERNumericString = function (params) {\n KJUR.asn1.DERNumericString.superclass.constructor.call(this, params);\n this.hT = \"12\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER PrintableString\n * @name KJUR.asn1.DERPrintableString\n * @class class for ASN.1 DER PrintableString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERPrintableString = function (params) {\n KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params);\n this.hT = \"13\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER TeletexString\n * @name KJUR.asn1.DERTeletexString\n * @class class for ASN.1 DER TeletexString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERTeletexString = function (params) {\n KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params);\n this.hT = \"14\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER IA5String\n * @name KJUR.asn1.DERIA5String\n * @class class for ASN.1 DER IA5String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERIA5String = function (params) {\n KJUR.asn1.DERIA5String.superclass.constructor.call(this, params);\n this.hT = \"16\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER UTCTime\n * @name KJUR.asn1.DERUTCTime\n * @class class for ASN.1 DER UTCTime\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • str - specify initial ASN.1 value(V) by a string (ex.'130430235959Z')
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
  • date - specify Date object.
  • \n *
\n * NOTE: 'params' can be omitted.\n *

EXAMPLES

\n * @example\n * d1 = new KJUR.asn1.DERUTCTime();\n * d1.setString('130430125959Z');\n *\n * d2 = new KJUR.asn1.DERUTCTime({'str': '130430125959Z'});\n * d3 = new KJUR.asn1.DERUTCTime({'date': new Date(Date.UTC(2015, 0, 31, 0, 0, 0, 0))});\n * d4 = new KJUR.asn1.DERUTCTime('130430125959Z');\n */\nKJUR.asn1.DERUTCTime = function (params) {\n KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params);\n this.hT = \"17\";\n /**\n * set value by a Date object
\n * @name setByDate\n * @memberOf KJUR.asn1.DERUTCTime#\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * o = new KJUR.asn1.DERUTCTime();\n * o.setByDate(new Date(\"2016/12/31\"));\n */\n this.setByDate = function (dateObject) {\n this.hTLV = null;\n this.isModified = true;\n this.date = dateObject;\n this.s = this.formatDate(this.date, 'utc');\n this.hV = stohex(this.s);\n };\n this.getFreshValueHex = function () {\n if (typeof this.date == \"undefined\" && typeof this.s == \"undefined\") {\n this.date = new Date();\n this.s = this.formatDate(this.date, 'utc');\n this.hV = stohex(this.s);\n }\n return this.hV;\n };\n if (params !== undefined) {\n if (params.str !== undefined) {\n this.setString(params.str);\n }\n else if (typeof params == \"string\" && params.match(/^[0-9]{12}Z$/)) {\n this.setString(params);\n }\n else if (params.hex !== undefined) {\n this.setStringHex(params.hex);\n }\n else if (params.date !== undefined) {\n this.setByDate(params.date);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);\n// ********************************************************************\n/**\n * class for ASN.1 DER GeneralizedTime\n * @name KJUR.asn1.DERGeneralizedTime\n * @class class for ASN.1 DER GeneralizedTime\n * @param {Array} params associative array of parameters (ex. {'str': '20130430235959Z'})\n * @property {Boolean} withMillis flag to show milliseconds or not\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • str - specify initial ASN.1 value(V) by a string (ex.'20130430235959Z')
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
  • date - specify Date object.
  • \n *
  • millis - specify flag to show milliseconds (from 1.0.6)
  • \n *
\n * NOTE1: 'params' can be omitted.\n * NOTE2: 'withMillis' property is supported from asn1 1.0.6.\n */\nKJUR.asn1.DERGeneralizedTime = function (params) {\n KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params);\n this.hT = \"18\";\n this.withMillis = false;\n /**\n * set value by a Date object\n * @name setByDate\n * @memberOf KJUR.asn1.DERGeneralizedTime#\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * When you specify UTC time, use 'Date.UTC' method like this:
\n * o1 = new DERUTCTime();\n * o1.setByDate(date);\n *\n * date = new Date(Date.UTC(2015, 0, 31, 23, 59, 59, 0)); #2015JAN31 23:59:59\n */\n this.setByDate = function (dateObject) {\n this.hTLV = null;\n this.isModified = true;\n this.date = dateObject;\n this.s = this.formatDate(this.date, 'gen', this.withMillis);\n this.hV = stohex(this.s);\n };\n this.getFreshValueHex = function () {\n if (this.date === undefined && this.s === undefined) {\n this.date = new Date();\n this.s = this.formatDate(this.date, 'gen', this.withMillis);\n this.hV = stohex(this.s);\n }\n return this.hV;\n };\n if (params !== undefined) {\n if (params.str !== undefined) {\n this.setString(params.str);\n }\n else if (typeof params == \"string\" && params.match(/^[0-9]{14}Z$/)) {\n this.setString(params);\n }\n else if (params.hex !== undefined) {\n this.setStringHex(params.hex);\n }\n else if (params.date !== undefined) {\n this.setByDate(params.date);\n }\n if (params.millis === true) {\n this.withMillis = true;\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);\n// ********************************************************************\n/**\n * class for ASN.1 DER Sequence\n * @name KJUR.asn1.DERSequence\n * @class class for ASN.1 DER Sequence\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • array - specify array of ASN1Object to set elements of content
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERSequence = function (params) {\n KJUR.asn1.DERSequence.superclass.constructor.call(this, params);\n this.hT = \"30\";\n this.getFreshValueHex = function () {\n var h = '';\n for (var i = 0; i < this.asn1Array.length; i++) {\n var asn1Obj = this.asn1Array[i];\n h += asn1Obj.getEncodedHex();\n }\n this.hV = h;\n return this.hV;\n };\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);\n// ********************************************************************\n/**\n * class for ASN.1 DER Set\n * @name KJUR.asn1.DERSet\n * @class class for ASN.1 DER Set\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • array - specify array of ASN1Object to set elements of content
  • \n *
  • sortflag - flag for sort (default: true). ASN.1 BER is not sorted in 'SET OF'.
  • \n *
\n * NOTE1: 'params' can be omitted.
\n * NOTE2: sortflag is supported since 1.0.5.\n */\nKJUR.asn1.DERSet = function (params) {\n KJUR.asn1.DERSet.superclass.constructor.call(this, params);\n this.hT = \"31\";\n this.sortFlag = true; // item shall be sorted only in ASN.1 DER\n this.getFreshValueHex = function () {\n var a = new Array();\n for (var i = 0; i < this.asn1Array.length; i++) {\n var asn1Obj = this.asn1Array[i];\n a.push(asn1Obj.getEncodedHex());\n }\n if (this.sortFlag == true)\n a.sort();\n this.hV = a.join('');\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params.sortflag != \"undefined\" &&\n params.sortflag == false)\n this.sortFlag = false;\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);\n// ********************************************************************\n/**\n * class for ASN.1 DER TaggedObject\n * @name KJUR.asn1.DERTaggedObject\n * @class class for ASN.1 DER TaggedObject\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * Parameter 'tagNoNex' is ASN.1 tag(T) value for this object.\n * For example, if you find '[1]' tag in a ASN.1 dump,\n * 'tagNoHex' will be 'a1'.\n *
\n * As for optional argument 'params' for constructor, you can specify *ANY* of\n * following properties:\n *
    \n *
  • explicit - specify true if this is explicit tag otherwise false\n * (default is 'true').
  • \n *
  • tag - specify tag (default is 'a0' which means [0])
  • \n *
  • obj - specify ASN1Object which is tagged
  • \n *
\n * @example\n * d1 = new KJUR.asn1.DERUTF8String({'str':'a'});\n * d2 = new KJUR.asn1.DERTaggedObject({'obj': d1});\n * hex = d2.getEncodedHex();\n */\nKJUR.asn1.DERTaggedObject = function (params) {\n KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);\n this.hT = \"a0\";\n this.hV = '';\n this.isExplicit = true;\n this.asn1Object = null;\n /**\n * set value by an ASN1Object\n * @name setString\n * @memberOf KJUR.asn1.DERTaggedObject#\n * @function\n * @param {Boolean} isExplicitFlag flag for explicit/implicit tag\n * @param {Integer} tagNoHex hexadecimal string of ASN.1 tag\n * @param {ASN1Object} asn1Object ASN.1 to encapsulate\n */\n this.setASN1Object = function (isExplicitFlag, tagNoHex, asn1Object) {\n this.hT = tagNoHex;\n this.isExplicit = isExplicitFlag;\n this.asn1Object = asn1Object;\n if (this.isExplicit) {\n this.hV = this.asn1Object.getEncodedHex();\n this.hTLV = null;\n this.isModified = true;\n }\n else {\n this.hV = null;\n this.hTLV = asn1Object.getEncodedHex();\n this.hTLV = this.hTLV.replace(/^../, tagNoHex);\n this.isModified = false;\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['tag'] != \"undefined\") {\n this.hT = params['tag'];\n }\n if (typeof params['explicit'] != \"undefined\") {\n this.isExplicit = params['explicit'];\n }\n if (typeof params['obj'] != \"undefined\") {\n this.asn1Object = params['obj'];\n this.setASN1Object(this.isExplicit, this.hT, this.asn1Object);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsrsasign/asn1-1.0.js?"); + +/***/ }), + +/***/ "./lib/lib/jsrsasign/yahoo.js": +/*!************************************!*\ + !*** ./lib/lib/jsrsasign/yahoo.js ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"YAHOO\": () => (/* binding */ YAHOO)\n/* harmony export */ });\n/*!\nCopyright (c) 2011, Yahoo! Inc. All rights reserved.\nCode licensed under the BSD License:\nhttp://developer.yahoo.com/yui/license.html\nversion: 2.9.0\n*/\nvar YAHOO = {};\nYAHOO.lang = {\n /**\n * Utility to set up the prototype, constructor and superclass properties to\n * support an inheritance strategy that can chain constructors and methods.\n * Static members will not be inherited.\n *\n * @method extend\n * @static\n * @param {Function} subc the object to modify\n * @param {Function} superc the object to inherit\n * @param {Object} overrides additional properties/methods to add to the\n * subclass prototype. These will override the\n * matching items obtained from the superclass\n * if present.\n */\n extend: function (subc, superc, overrides) {\n if (!superc || !subc) {\n throw new Error(\"YAHOO.lang.extend failed, please check that \" +\n \"all dependencies are included.\");\n }\n var F = function () { };\n F.prototype = superc.prototype;\n subc.prototype = new F();\n subc.prototype.constructor = subc;\n subc.superclass = superc.prototype;\n if (superc.prototype.constructor == Object.prototype.constructor) {\n superc.prototype.constructor = superc;\n }\n if (overrides) {\n var i;\n for (i in overrides) {\n subc.prototype[i] = overrides[i];\n }\n /*\n * IE will not enumerate native functions in a derived object even if the\n * function was overridden. This is a workaround for specific functions\n * we care about on the Object prototype.\n * @property _IEEnumFix\n * @param {Function} r the object to receive the augmentation\n * @param {Function} s the object that supplies the properties to augment\n * @static\n * @private\n */\n var _IEEnumFix = function () { }, ADD = [\"toString\", \"valueOf\"];\n try {\n if (/MSIE/.test(navigator.userAgent)) {\n _IEEnumFix = function (r, s) {\n for (i = 0; i < ADD.length; i = i + 1) {\n var fname = ADD[i], f = s[fname];\n if (typeof f === 'function' && f != Object.prototype[fname]) {\n r[fname] = f;\n }\n }\n };\n }\n }\n catch (ex) { }\n ;\n _IEEnumFix(subc.prototype, overrides);\n }\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsrsasign/yahoo.js?"); + +/***/ }), + +/***/ "./node_modules/process/browser.js": +/*!*****************************************!*\ + !*** ./node_modules/process/browser.js ***! + \*****************************************/ +/***/ ((module) => { + +eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n//# sourceURL=webpack://JSEncrypt/./node_modules/process/browser.js?"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./lib/index.js"); +/******/ __webpack_exports__ = __webpack_exports__["default"]; +/******/ +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/drpy_t3/drpy_libs/searchFilter.js b/drpy_t3/drpy_libs/searchFilter.js new file mode 100644 index 0000000..b036d02 --- /dev/null +++ b/drpy_t3/drpy_libs/searchFilter.js @@ -0,0 +1,17 @@ +function searchContains(key,result){ + let keys = key.split(' ').filter(it=>it.trim()); + let search_ok = true; + for(let i=0;i 40869 || uni < 19968) + return ch; //dealWithOthers(ch); + //检查是否是多音字,是按多音字处理,不是就直接在strChineseFirstPY字符串中找对应的首字母 + return (oMultiDiff[uni] ? oMultiDiff[uni] : (strChineseFirstPY.charAt(uni - 19968))); +} + +function mkRslt(arr) { + var arrRslt = [""]; + for (var i = 0, len = arr.length; i < len; i++) { + var str = arr[i]; + var strlen = str.length; + if (strlen == 1) { + for (var k = 0; k < arrRslt.length; k++) { + arrRslt[k] += str; + } + } else { + var tmpArr = arrRslt.slice(0); + arrRslt = []; + for (k = 0; k < strlen; k++) { + //复制一个相同的arrRslt + var tmp = tmpArr.slice(0); + //把当前字符str[k]添加到每个元素末尾 + for (var j = 0; j < tmp.length; j++) { + tmp[j] += str.charAt(k); + } + //把复制并修改后的数组连接到arrRslt上 + arrRslt = arrRslt.concat(tmp); + } + } + } + return arrRslt; +} +//两端去空格函数 +String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); } + +//参数——中文字符串 +//返回值——拼音首字母串数组 +export function getFirstLetterList(str) { + if (typeof(str) != "string") + throw new Error(-1, "请传入字符串类型的参数!"); + var arrResult = new Array(); //保存中间结果的数组 + for (var i = 0, len = str.length; i < len; i++) { + //获得unicode码 + var ch = str.charAt(i); + //检查该unicode码是否在处理范围之内,在则返回该码对映汉字的拼音首字母,不在则调用其它函数处理 + arrResult.push(checkCh(ch)); + } + //处理arrResult,返回所有可能的拼音首字母串数组 + return mkRslt(arrResult); +} + +// 判断字符串是否全是中文 +function isAllChinese(str) { + return /^[\u4E00-\u9FA5]+$/.test(str); +} + +// 判断字符是否为中文 +function isChinese(char) { + return /^[\u4E00-\u9FA5]$/.test(char); +} + +// 中文拼音名称排序 +export const sortListByCN = (vodList,key,order) => { + if(!key){ + return vodList + } + order = order||'asc'; // 默认正序 + let ASCarr = vodList.sort((a, b) => { + a = a[key]; + b = b[key]; + // 数字排在字符串前面 + if (typeof a === 'number' && typeof b === 'string') { + return -1; + } + + if (typeof a === 'string' && typeof b === 'number') { + return 1; + } + + // 当存在非数字时 + if (isNaN(a) || isNaN(b)) { + + // 全汉字的排在非全汉字的后面 + if (isAllChinese(a) && !isAllChinese(b)) { + return 1; + } + + if (!isAllChinese(a) && isAllChinese(b)) { + return -1; + } + + // 存在非数字的数据时,都转为字符串进行比较 + a = a.toString(); + b = b.toString(); + + let result = 0; + + // 依次比较两个字符串的各项字符 + for (let index = 0; index < ((a.length - b.length) ? b.length : a.length); index++) { + + // 汉字排在非汉字的后面 + if (!isChinese(a[index]) && isChinese(b[index])) { + result = -1; + } + + if (isChinese(a[index]) && !isChinese(b[index])) { + result = 1; + } + + // 若两个汉字进行比较,则比较他们的拼音首字母 + if (isChinese(a[index]) && isChinese(b[index])) { + let pinyinA = getFirstLetterList(a[index]).toString(); + let pinyinB = getFirstLetterList(b[index]).toString(); + + result = pinyinA.localeCompare(pinyinB, 'zh-Hans-CN', { sensitivity: 'accent' }); + } + + // 若已经比较出结果,则跳出循环,不再继续比较剩余字符 + if (result !== 0) { + break + } + } + + // 只要有一个无法转换为数字——转换为字符串进行比较——先按字符排序,然后按照数字排序 + return result || a.toString().localeCompare(b.toString(), 'zh-Hans-CN', { sensitivity: 'accent' }); + } else { + // 都能转换为数字——转换为数字进行比较——从小到大排序 + return Number(a) - Number(b); + } + }); + if(order==='desc'){ + ASCarr.reverse(); + } + return ASCarr +}; + +// 首字母开头排序 +export const sortListByFirst = (vodList,key) => { + key = key||'vod_name'; + // 名字以特殊符号开头的应用列表 + const symbol_list = []; + // 名字以中文开头的应用列表 + const cn_list = []; + // 名字以英文开头的应用列表 + const en_list = []; + // 名字以数字开头的应用列表 + const num_list = []; + + vodList.forEach((vod) => { + const { vod_name } = vod; + //通过正则进行数据分类 + if (/[\u4e00-\u9fa5]/.test(vod_name[0])) { + cn_list.push(vod); + } else if (/[a-zA-Z]/.test(vod_name[0])) { + en_list.push(vod); + } else if (/[\d]/.test(vod_name[0])) { + num_list.push(vod); + } else { + symbol_list.push(vod); + } + }); + //按照要求的方式进行数据排序重组 + const newList = [ + ...cn_list.sort((a, b) => a.vod_name[0]?.localeCompare(b.vod_name[0])), + ...en_list.sort((a, b) => a.vod_name[0].localeCompare(b.vod_name[0])),//localeCompare可以不区分大小写的进行排序 + ...num_list.sort((a, b) => a.vod_name[0] - b.vod_name[0]), + ...symbol_list.sort((a, b) => a.vod_name[0] - b.vod_name[0]) + ]; + return newList +}; \ No newline at end of file diff --git a/drpy_t3/drpy_libs/test_node_rsa.mjs b/drpy_t3/drpy_libs/test_node_rsa.mjs new file mode 100644 index 0000000..dc6cc42 --- /dev/null +++ b/drpy_t3/drpy_libs/test_node_rsa.mjs @@ -0,0 +1,162 @@ +import NODERSA from './node-rsa.js'; +// import './node-rsa.js'; + +/** + * rsa加解密的全方位测试案例 + */ +function rsa_demo_test() { + let t1 = new Date().getTime(); + let pkcs1_public = ` +-----BEGIN RSA PUBLIC KEY----- +MEgCQQCrI0pQ/ERRpJ3Ou190XJedFq846nDYP52rOtXyDxlFK5D3p6JJu2RwsKwy +lsQ9xY0xYPpRZUZKMEeR7e9gmRNLAgMBAAE= +-----END RSA PUBLIC KEY----- +`.trim(); + + let pkcs1_public_pem = ` +MEgCQQCrI0pQ/ERRpJ3Ou190XJedFq846nDYP52rOtXyDxlFK5D3p6JJu2RwsKwy +lsQ9xY0xYPpRZUZKMEeR7e9gmRNLAgMBAAE= +`.trim(); + + let pkcs8_public = ` +-----BEGIN PUBLIC KEY----- +MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/ +nas61fIPGUUrkPenokm7ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQ== +-----END PUBLIC KEY-----`.trim(); + + let pkcs8_public_pem = ` +MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/ +nas61fIPGUUrkPenokm7ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQ== +`.trim(); + + let pkcs1_private = ` +-----BEGIN RSA PRIVATE KEY----- +MIIBOAIBAAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/nas61fIPGUUrkPenokm7 +ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQI/b6OV1z65UokQaMvSeRXt +0Yv6wiYtduQI9qpq5nzy/ytaqsbBfClNTi/HifKPKxlRouWFkc518EQI8LBxoarJ +AiEA4DaONMplV8PQNa3TKn2F+SDEvLOCjdL0kHKdN90Ti28CIQDDZnTBaHgZwZbA +hS7Bbf5yvwjWMhO6Y7l04/Qm7R+35QIgPuQuqXIoUSD080mp1N5WyRW++atksIF+ +5lGv9e6GP/MCICnj8y/rl6Pd7tXDN6zcSeqLrfdNsREKhB3dKOCXgW9JAiAFYtFS +EJNBXVRTK42SNsZ2hJ/9xLwOwnH2epT8Q43s3Q== +-----END RSA PRIVATE KEY----- +`.trim() + + let pkcs8_private = ` +-----BEGIN PRIVATE KEY----- +MIIBUgIBADANBgkqhkiG9w0BAQEFAASCATwwggE4AgEAAkEAqyNKUPxEUaSdzrtf +dFyXnRavOOpw2D+dqzrV8g8ZRSuQ96eiSbtkcLCsMpbEPcWNMWD6UWVGSjBHke3v +YJkTSwIDAQABAj9vo5XXPrlSiRBoy9J5Fe3Ri/rCJi125Aj2qmrmfPL/K1qqxsF8 +KU1OL8eJ8o8rGVGi5YWRznXwRAjwsHGhqskCIQDgNo40ymVXw9A1rdMqfYX5IMS8 +s4KN0vSQcp033ROLbwIhAMNmdMFoeBnBlsCFLsFt/nK/CNYyE7pjuXTj9CbtH7fl +AiA+5C6pcihRIPTzSanU3lbJFb75q2SwgX7mUa/17oY/8wIgKePzL+uXo93u1cM3 +rNxJ6out902xEQqEHd0o4JeBb0kCIAVi0VIQk0FdVFMrjZI2xnaEn/3EvA7CcfZ6 +lPxDjezd +-----END PRIVATE KEY----- +`.trim() + + let data = ` +NodeRsa +这是node-rsa 现在修改集成在drpy里使用`.trim(); + + let encryptedWithPublic = NODERSA.encryptRSAWithPublicKey(data, pkcs1_public, { + // PublicFormat: "pkcs1-public-pem", + outputEncoding: "base64", + options: {environment: "browser", encryptionScheme: 'pkcs1_oaep'}, + }); + console.log("公钥加密"); + console.log(encryptedWithPublic); + + + let decryptedWithPrivate = NODERSA.decryptRSAWithPrivateKey(encryptedWithPublic, pkcs1_private, { + // PublicFormat: "pkcs1-private", + // outEncoding: "hex" + options: {environment: "browser", encryptionScheme: 'pkcs1_oaep'}, + }); + console.log("私钥解密"); + console.log(decryptedWithPrivate); + + +// https://www.btool.cn/rsa-sign + let pkcs1_sha256_sign = NODERSA.sign("1", pkcs1_private, { + outputEncoding: "base64", + options: {environment: "browser", encryptionScheme: 'pkcs1', signingScheme: "pkcs1-sha256"}, + }); + console.log("pkcs1_sha256_sign"); + console.log(pkcs1_sha256_sign); + + let pkcs1_sha256_sign_verify = NODERSA.verify("1", "Oulx2QrgeipKYBtqEDqFb2s/+ndk2cGQxO4CkhU7iBM1vyNmmvqubpsmeoUuN3waGrYZLknSEdwBkfv0tUMpFQ==", pkcs1_private, { + options: {environment: "browser", encryptionScheme: 'pkcs1', signingScheme: "pkcs1-sha256"}, + }); + console.log("pkcs1_sha256_sign_verify"); + console.log(pkcs1_sha256_sign_verify); + + let pkcs1_oaep_sha256 = NODERSA.encryptRSAWithPublicKey(data, `-----BEGIN RSA PUBLIC KEY----- +MIIBCgKCAQEA5KOq1gRNyllLNWKQy8sGpZE3Q1ULLSmzZw+eaAhj9lvqn7IsT1du +SYn08FfoOA2qMwtz+1O2l1mgzNoSVCyVpVabnTG+C9XKeZXAnJHd8aYA7l7Sxhdm +kte+iymYZ0ZBPzijo8938iugtVvqi9UgDmnY3u/NlQDqiL5BGqSxSTd/Sgmy3zD8 +PYzEa3wD9vehQ5fZZ45vKIq8GNVh2Z8+IGO85FF1OsN7+b2yGJa/FmDDNn0+HP+m +PfI+kYBqEVpo0Ztbc3UdxgFwGC8O1n8AQyriwHnSOtIiuBH62J/7qyC/3LEAApRb +Dd9YszqzmODjQUddZKHmvc638VW+azc0EwIDAQAB +-----END RSA PUBLIC KEY----- +`, { + outputEncoding: "base64", + options: { + environment: "browser", encryptionScheme: { + scheme: "pkcs1_oaep", + hash: "sha256", + }, + } + // options: { environment: "browser", encryptionScheme: 'pkcs1' }, + }); + console.log("pkcs1_oaep_sha256"); + console.log(pkcs1_oaep_sha256); + + decryptedWithPrivate = NODERSA.decryptRSAWithPrivateKey("kSZesAAyYh2hdsQnYMdGqb6gKAzTauBKouvBzWcc4+F8RvGd0nwO6mVkUMVilPgUuNxjEauHayHiY8gI3Py45UI3+km0rSGyHrS6dHiHgCkMejXHieglYzAB0IxX3Jkm4z/66bdB/D+GFy0oct5fGCMI1UHPjEAYOsazJDa8lBFNbjiWFeb/qiZtIx3vGM7KYPAZzyRf/zPbbQ8zy9xOmRuOl5nnIxgo0Okp3KO/RIPO4GZOSBA8f2lx1UtNwwrXAMpcNavtoqHVcjJ/9lcotXYQFrn5b299pSIRf2gVm8ZJ31SK6Z8cc14nKtvgnmsgClDzIXJ1o1RcDK+knVAySg==", `-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA5KOq1gRNyllLNWKQy8sGpZE3Q1ULLSmzZw+eaAhj9lvqn7Is +T1duSYn08FfoOA2qMwtz+1O2l1mgzNoSVCyVpVabnTG+C9XKeZXAnJHd8aYA7l7S +xhdmkte+iymYZ0ZBPzijo8938iugtVvqi9UgDmnY3u/NlQDqiL5BGqSxSTd/Sgmy +3zD8PYzEa3wD9vehQ5fZZ45vKIq8GNVh2Z8+IGO85FF1OsN7+b2yGJa/FmDDNn0+ +HP+mPfI+kYBqEVpo0Ztbc3UdxgFwGC8O1n8AQyriwHnSOtIiuBH62J/7qyC/3LEA +ApRbDd9YszqzmODjQUddZKHmvc638VW+azc0EwIDAQABAoIBADZ/QGgUzInvsLp/ +zO2WbfYm39o/uhNAvk9RbLt1TIZbMFhyOpeKynHi3Swwd9xsfWX/U9zS/lGi/m31 +iKrhmaW4OA1G3vqpMcK7TBbFufYwUEaA+ZJX344euH8pIfdzyneMQ4z3Far2dS7l +QsmjuilVV2kEFadveXewiYoVOWCu00w6bN8wy2SIHlQn+kIL6HQhWz12iKKflIKu +eGRdzLHsKmBt6WbY1Wuhx7HU0fAKdlBDPxCHNlI+kybUYE9o5C2vJiaVM5wqJBgZ +8Dz8kt1QbLJ910JoLXkLVQ8uC8NJKQwFtqQjTGPnEq0+wbgz6Ij599rKZkwW/xq9 +l6KoUiECgYEA6Ah42tVdkNW047f03xVYXFH96RgorHRS36mR8Y+ONUq1fwKidovC +WjwVujt4OPf3l1W6iyn/F6cu/bsmvPrSc3HTN0B1V31QK4OjgetxQ2PSbTldH02J +NPzkt+v+cPxXpx/P5mgt7Weefw5txU547KubGrHUV5rBKFtIx9pj16MCgYEA/EF0 +o19+D24DZAPwlDS5VbEd7FStnwY4oQ5PqbuNOSbSJLMWU0AqzXcRokp8UTyCZ0X3 +ATkS1REq97kShCuR+npTR6a6DlY7sdpPI1SMLNajgB2tkx0EOzX+PfNIbHUd4jpJ +I0ZMAHv/OOtkzQHDaeTWBTrzsWm6/nTiykfduNECgYEA46AMD4HpPECqKAs66e5i +tI6q7JSKskObWVdcmQEfnSAhVOwcvPb2Ptda6UuV8S0xcwDi88rLOUUFUFzc79+P +vTkY38cYVi/VChsluDpk7ptqv0PbGu5Rf+3n4pZdEjI7OvR2W64wAAn67uIUxc7p +yiO/ET0K9rYWb6S9jXGtKMkCgYEA2kPAqoO7zZoBMQ7/oR0lp/HC1HRIbiqx4RlC +8Lgpb+QZPEwA6zPAVVvLVENi4d+bbcRp/xLlKpraNNJcJSSWAMbLPFoU7sbKjA87 +HnTPfRSTEA2d3Ibk3F7Rh8TzS3Ti0JZiJjVzGZAwu41iAMifzwaD8K6boUy80eNN +QH2CaaECgYBUsLYvC/MiYg3w+LGOONuQongoVUXjGqnw2bjVa9RK7lwRdXPUqJ51 +MpVO98IkoLvGSI/0sGNP3GKNhC+eMGjJAVwFyEuOn+JsmMv9Y9uStIVi5tIHIhKw +m7mp8il0kaftHdSxTbspG3tZ2fjIiFIZkLEOmRpd7ogWumgOajzUdA== +-----END RSA PRIVATE KEY-----`, { + // PublicFormat: "pkcs1-private", + // outEncoding: "hex" + options: {environment: "browser", encryptionScheme: 'pkcs1_oaep'}, + }); + console.log('decryptedWithPrivate'); + console.log(decryptedWithPrivate); + + + (() => { + let key = new NODERSA.NodeRSA({b: 1024}); + key.setOptions({encryptionScheme: 'pkcs1'}) + let text = `你好drpy node-ras`; + let encrypted = key.encrypt(text, 'base64'); + console.log('encrypted: ', encrypted); + const decrypted = key.decrypt(encrypted, 'utf8'); + console.log('decrypted: ', decrypted); + })(); + let t2 = new Date().getTime(); + console.log('rsa_demo_test 测试耗时:'+(t2-t1)+'毫秒'); +} + +rsa_demo_test(); diff --git a/drpy_t3/drpy_libs/test_rsa.mjs b/drpy_t3/drpy_libs/test_rsa.mjs new file mode 100644 index 0000000..212e729 --- /dev/null +++ b/drpy_t3/drpy_libs/test_rsa.mjs @@ -0,0 +1,83 @@ +import JSEncrypt from './jsencrypt.js'; +// import './jsencrypt.js'; + +var log = console.log; +// 封装的RSA加解密类 +const RSA = { + decode: function (data, key, option) { + option = option || {}; + if (typeof (JSEncrypt) === 'function') { + let chunkSize = option.chunkSize || 117; // 默认分段长度为117 + let privateKey = this.getPrivateKey(key); // 获取私钥 + const decryptor = new JSEncrypt(); //创建解密对象实例 + decryptor.setPrivateKey(privateKey); //设置秘钥 + let uncrypted = ''; + // uncrypted = decryptor.decrypt(data); + uncrypted = decryptor.decryptUnicodeLong(data); + return uncrypted; + } else { + return false + } + }, + encode: function (data, key, option) { + option = option || {}; + if (typeof (JSEncrypt) === 'function') { + let chunkSize = option.chunkSize || 117; // 默认分段长度为117 + let publicKey = this.getPublicKey(key); // 获取公钥 + const encryptor = new JSEncrypt(); + encryptor.setPublicKey(publicKey); // 设置公钥 + let encrypted = ''; // 加密结果 + // const textLen = data.length; // 待加密文本长度 + // let offset = 0; // 分段偏移量 + // // 分段加密 + // while (offset < textLen) { + // let chunk = data.substr(offset, chunkSize); // 提取分段数据 + // let enc = encryptor.encrypt(chunk); // 加密分段数据 + // encrypted += enc; // 连接加密结果 + // offset += chunkSize; // 更新偏移量 + // } + encrypted = encryptor.encryptUnicodeLong(data); + return encrypted + } else { + return false + } + }, + fixKey(key, prefix, endfix) { + if (!key.includes(prefix)) { + key = prefix + key; + } + if (!key.includes(endfix)) { + key += endfix + } + return key + }, + getPrivateKey(key) { + let prefix = '-----BEGIN RSA PRIVATE KEY-----'; + let endfix = '-----END RSA PRIVATE KEY-----'; + return this.fixKey(key, prefix, endfix); + }, + getPublicKey(key) { + let prefix = '-----BEGIN PUBLIC KEY-----'; + let endfix = '-----END PUBLIC KEY-----'; + return this.fixKey(key, prefix, endfix); + } +}; + +console.log('typeof (JSEncrypt):' + typeof (JSEncrypt)); +let publicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwEc7wBMtYKkxvrQNI3+ITBZwAkPkGvsv4TsAHFskKGZWz9eYl3scivhmlEfWHlEkdyb0m82CmB1qAgef+pD4cZu+Cdmm2e9lnExhLwm8cBgpkAen9QRNdjojZgxM0W+JcReH4W6pw+uFXiLRn4AIQkDftWGNLg6wlNS+39Z/RvP9zyATJLZ9AKDdHp62XMxEK1KZvWBuIg+Oa5UzgA9jy+2XyIqwhBtO8tPbUl21t2pvTzHoLUjSkPNm2LurcUk6+jQ2r6aiS2CN1NXIucPJU6mkuIQ821SjvkYPtIdRMntW4y2u4cyiqVEEQwlzWVMHh+/vfrWAQr9fgjDuYYtvPQIDAQAB'; +let privateKey = 'MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDARzvAEy1gqTG+tA0jf4hMFnACQ+Qa+y/hOwAcWyQoZlbP15iXexyK+GaUR9YeUSR3JvSbzYKYHWoCB5/6kPhxm74J2abZ72WcTGEvCbxwGCmQB6f1BE12OiNmDEzRb4lxF4fhbqnD64VeItGfgAhCQN+1YY0uDrCU1L7f1n9G8/3PIBMktn0AoN0enrZczEQrUpm9YG4iD45rlTOAD2PL7ZfIirCEG07y09tSXbW3am9PMegtSNKQ82bYu6txSTr6NDavpqJLYI3U1ci5w8lTqaS4hDzbVKO+Rg+0h1Eye1bjLa7hzKKpUQRDCXNZUweH7+9+tYBCv1+CMO5hi289AgMBAAECggEBAIRbRJUWXmEwdq64kGbELlV6CIZ2p3mvOSlIjO34Cy7IK7AMz9xOgbpj/XDK9miOIJTouu7ZC7GcZdGZ4BUCYBMMS0fKjGFuurpZlXhkslNTPqEHtCUkXhIpOR7RDrwIlErGEOIsZC4aXQcM3tF1t7mroJLh4OY4dHMu82lv5NM4hhFMNvHzXVvrPXeTzw26gddHVG/ke0WUYOcB5j3cPp8xaVp7JV8bdxtGtkqIfBLY/dIczzJu/3F3cBpU2nNwt8uVUF/w/HKlr7j8FqqFHXWh182beU0n5AIdRyRJBrRUAEhdtsUnvJOVBDqzZa+9DJ5395F7V8KRlQptxETdhCECgYEA4x/2HM9fnVIhG6wTbEt1LhGTKYb/igMAHLqquEMfRsB44tobI8gVNwR3qJQY/nKXxcQemQV29PcdqpENCKyXUXGD8SI1UPg15rHFBI8CIqlCXfzJybdHjmzlhaA9I5lofIVh+5MW7WkvHZoRy7NeDMhHUuaiveuqC4OJ8n+dD2kCgYEA2LkmUVef3WkBBwUBRdkyoog3DMwR+/ubb0ncJVYy3ItYVJltQ4HqmrRiJc8xBAoFnG8rbiqDnmTnDR3WbuxU1G2hml09fqId+rQds2UfESswCXHU43A4f77m1XyA6PprBxpozVIcmK69N4rR9jOXflLWo3O+p2ipUbmNpId7+rUCgYBSpcbBJRT+AmzZzPwkZDD32p1ady114zGfQq3s7z/qVw+mPQezNZPCuXVxerK9pKVl6b/Ynwxyh5nb/3xms6c8k7oXfQM5u5ihof63cfKs+jqUSPCE3pTDVw0OWwjkc2Z6KW9GRHgLXEMw2mevYE3RCPArUpHV2nO+TNddzuIwQQKBgQDOZwdnUNygMfEYjlu3+jOPN8u2FGTMZ8SRKPbRWFb4VH27lKPLN2AIFuOivsEf56uQYRAry7GumMq0Y0ZmPg5Mglz2dvaqNBv5OLFQuW3tHAST+iWWtroYb+fISts7B8QG79AAO8OgZksvKrbslBYj6SEiaomZRsR7YQzVNXOOQQKBgQCovElZ50c8ZJ6m9D9fw3Nes7u9vshpyyac5tt4tZ7yfU4l5pWGrIUqCE703qZp4NAqEvlZUCJbj9kkysaj/2MfFb2b9jSvdNB+V/YW9Cwg+5TziYoOcQzN1z2u4p4goTAv0S+pTNSr3qWaTUI4TXUXQajif45Fexv+MrP5AAXQyw==' +// let text = '你好'; +let text = '[{"vod_name":"兔小贝原创儿歌","vod_pic":"https://resource-cdn.tuxiaobei.com/video-album/FnQ8ieJHgsbgCKWXNBg4uoOmKgG5.jpg","vod_remarks":"共229首","vod_content":"","vod_id":"/subject/17@@兔小贝原创儿歌@@https://resource-cdn.tuxiaobei.com/video-album/FnQ8ieJHgsbgCKWXNBg4uoOmKgG5.jpg"},{"vod_name":"英文儿歌","vod_pic":"https://resource-cdn.tuxiaobei.com/video-album/Fqjpx2H_-QaYNAYn2MekRuDpeyUv.jpg","vod_remarks":"共10首","vod_content":"","vod_id":"/subject/23@@英文儿歌@@https://resource-cdn.tuxiaobei.com/video-album/Fqjpx2H_-QaYNAYn2MekRuDpeyUv.jpg"}]'; +let str = RSA.encode(text, publicKey); +console.log("加密数据:" + str); +let str1 = 'Wa2c/868VOm0PgpGG2s2aMrDbGOlJRdZXlSGswjFgywd3nZNB7ND8kVMdNB/OsNFoQXJXSJMvPaE73BH7rs8fz54JGdYQK+qTgfQRqQZvomCjbzseSR4bm4NOrtIOOslL3WqxlzOuU0M1P1eERmkLEVU2WSyc3RGtJro3b3MOWYCNdKMoZdncfOHJndkl4wm9V3GGc3uH98hs6OxLvBWgXoW9jZQ3n0vR2FtS2KYrPGuSuKGkxlt9Kw5TD6nri142NOimz05WK55Xe04YUQ1VZd51t0wzJGXolWgfzIQaK2zzhk5Zjlm+IQJxXqEWiJ2+O6TJ+lIttvsDSaUflcDXQ=='; +let str2 = 'R86mW9DzBw05pxBSh9ECh1stXxINmnudgZBbzU/cz1EcFgrEgdk0Zk4ruAiJZB2fP5c7d3gMmN8+Dv19IfARWSzw85xCEjUhpdcMJ0jn6ZE5H+muadND9LzjeVisojqwYxot3YVdKof7HMhPFN8QR0jfzqhjmnGFTlY1jMXzJK0MSOLNRLDar480CdKNb/cxALC8+xKIlhM9E4B31t8J4rNMUWSCAr49lbZ3jx3PxieBpTQUdDJz96AttR93Pc+c51wrxh0Ch/Mt4Rs09HGMXwIpNV+CxsGwSGRQUlyJo2k3d0WqsVzpz6S8A4VGEMTRLGI3IjEt+eWt7wM3nAXarg=='; +let str3 = 'D4eOsRqua+jYA5+ZOR9PLI2PExKjKfArQfv9/wGeG50bQSjWypShJPY6RQfO+rghyf0juzHIUSxqH91OxinhCFkONaF2Vod2QVyphyn9eh73dAcEFKIFFKGXoPCjbMWrr3p4d+hgVrHzrFeGqkRq8JFOvG2L5XDxVfWbV8KmUA0DKuz6QwWg7P4kesy+C7BbLALy5W/wfZchD3gnsBvx/pjFoe11VfAify9isLxg9a15jj52xr6lzQ9kge9C2JcV8yq85bFKaUpJWgobzz+BSIv3lVMU6vgcldmOrhkyiETpFGFGGF00DphGCEoK6uAyyNDh7+Jn8P17zf/DW1wV3A=='; +let uncrypted = RSA.decode(str, privateKey); +log('解密数据:' + uncrypted); +uncrypted = RSA.decode(str1, privateKey); +log('解密数据1:' + uncrypted); +uncrypted = RSA.decode(str2, privateKey); +log('解密数据2:' + uncrypted); +uncrypted = RSA.decode(str3, privateKey); +log('解密数据3:' + uncrypted); \ No newline at end of file diff --git a/drpy_t3/drpy_libs/模板.js b/drpy_t3/drpy_libs/模板.js new file mode 100644 index 0000000..0abba43 --- /dev/null +++ b/drpy_t3/drpy_libs/模板.js @@ -0,0 +1,377 @@ +if (typeof Object.assign != 'function') { + Object.assign = function () { + let target = arguments[0]; + for (let i = 1; i < arguments.length; i++) { + let source = arguments[i]; + for (let key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + return target; + }; +} + +function getMubans() { + var mubanDict = { // 模板字典 + mx: { + title: '', + host: '', + url: '/vodshow/fyclass--------fypage---/', + searchUrl: '/vodsearch/**----------fypage---/', + class_parse: '.top_nav li;a&&Text;a&&href;.*/(.*?)/', + searchable: 2, + quickSearch: 0, + filterable: 0, + headers: { + 'User-Agent': 'MOBILE_UA', + }, + play_parse: true, + lazy: '', + limit: 6, + 推荐: '.cbox_list;*;*;*;*;*', + double: true, + 一级: 'ul.vodlist li;a&&title;a&&data-original;.pic_text&&Text;a&&href', + 二级: { + title: 'h2&&Text;.detail_list&&ul:eq(1)&&li&&a:eq(2)&&Text', + img: '.vodlist_thumb&&data-original', + desc: '.content_detail&&li:eq(1)&&Text;.detail_list&&ul:eq(1)&&li&&a&&Text;.detail_list&&ul:eq(1)&&li&&a:eq(1)&&Text;.detail_list&&ul:eq(1)&&li:eq(2)&&Text;.detail_list&&ul:eq(1)&&li:eq(3)&&Text', + content: '.content_desc&&span&&Text', + tabs: '.play_source_tab&&a', + lists: '.content_playlist:eq(#id) li', + }, + 搜索: '*', + }, + mxpro: { + title: '', + host: '', // homeUrl:'/', + url: '/vodshow/fyclass--------fypage---.html', + searchUrl: '/vodsearch/**----------fypage---.html', + searchable: 2,//是否启用全局搜索, + quickSearch: 0,//是否启用快速搜索, + filterable: 0,//是否启用分类筛选, + headers: {//网站的请求头,完整支持所有的,常带ua和cookies + 'User-Agent': 'MOBILE_UA', // "Cookie": "searchneed=ok" + }, + class_parse: '.navbar-items li:gt(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),ul.stui-vodlist:eq(0),#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: '', + searchUrl: '', + searchable: 2, + quickSearch: 0, + filterable: 1, + filter: '', + filter_url: '', + filter_def: {}, + headers: { + 'User-Agent': 'MOBILE_UA', + }, + timeout: 5000, + class_parse: '#side-menu li;a&&Text;a&&href;/(.*?)\.html', + cate_exclude: '', + play_parse: true, + lazy: `js:input = {parse: 1, url: input, js: ''}`, + double: true, + 推荐: '列表1;列表2;标题;图片;描述;链接;详情', + 一级: '列表;标题;图片;描述;链接;详情', + 二级: { + title: 'vod_name;vod_type', + img: '图片链接', + desc: '主要信息;年代;地区;演员;导演', + content: '简介', + tabs: '', + lists: 'xx:eq(#id)&&a', + tab_text: 'body&&Text', + list_text: 'body&&Text', + list_url: 'a&&href' + }, + 搜索: '列表;标题;图片;描述;链接;详情', + }, vfed: { + title: '', + host: '', + url: '/index.php/vod/show/id/fyclass/page/fypage.html', + searchUrl: '/index.php/vod/search/page/fypage/wd/**.html', + searchable: 2,//是否启用全局搜索, + quickSearch: 0,//是否启用快速搜索, + filterable: 0,//是否启用分类筛选, + headers: { + 'User-Agent': 'UC_UA', + }, // class_parse:'.fed-pops-navbar&&ul.fed-part-rows&&a.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', + }, 短视2: { + title: '', + host: '', + class_name: '电影&电视剧&综艺&动漫', + class_url: '1&2&3&4', + searchUrl: '/index.php/ajax/suggest?mid=1&wd=**&limit=50', + searchable: 2, + quickSearch: 0, + headers: {'User-Agent': 'MOBILE_UA'}, + url: '/index.php/api/vod#type=fyclass&page=fypage', + filterable: 0,//是否启用分类筛选, + filter_url: '', + filter: {}, + filter_def: {}, + detailUrl: '/index.php/vod/detail/id/fyid.html', + play_parse: true, + lazy: '', + limit: 6, + 推荐: '.list-vod.flex .public-list-box;a&&title;.lazy&&data-original;.public-list-prb&&Text;a&&href', + 一级: 'js:let body=input.split("#")[1];let t=Math.round(new Date/1e3).toString();let key=md5("DS"+t+"DCC147D11943AF75");let url=input.split("#")[0];body=body+"&time="+t+"&key="+key;print(body);fetch_params.body=body;let html=post(url,fetch_params);let data=JSON.parse(html);VODS=data.list.map(function(it){it.vod_pic=urljoin2(input.split("/i")[0],it.vod_pic);return it});', + 二级: { + "title": ".slide-info-title&&Text;.slide-info:eq(3)--strong&&Text", + "img": ".detail-pic&&data-original", + "desc": ".fraction&&Text;.slide-info-remarks:eq(1)&&Text;.slide-info-remarks:eq(2)&&Text;.slide-info:eq(2)--strong&&Text;.slide-info:eq(1)--strong&&Text", + "content": "#height_limit&&Text", + "tabs": ".anthology.wow.fadeInUp.animated&&.swiper-wrapper&&a", + "tab_text": ".swiper-slide&&Text", + "lists": ".anthology-list-box:eq(#id) li" + }, + 搜索: 'json:list;name;pic;;id', + }, 采集1: { + title: '', + host: '', + homeTid: '13', + homeUrl: '/api.php/provide/vod/?ac=detail&t={{rule.homeTid}}', + detailUrl: '/api.php/provide/vod/?ac=detail&ids=fyid', + searchUrl: '/api.php/provide/vod/?wd=**&pg=fypage', + url: '/api.php/provide/vod/?ac=detail&pg=fypage&t=fyclass', + headers: {'User-Agent': 'MOBILE_UA'}, + timeout: 5000, // class_name: '电影&电视剧&综艺&动漫', + // class_url: '1&2&3&4', + // class_parse:'js:let html=request(input);input=JSON.parse(html).class;', + class_parse: 'json:class;', + limit: 20, + multi: 1, + searchable: 2,//是否启用全局搜索, + quickSearch: 1,//是否启用快速搜索, + filterable: 0,//是否启用分类筛选, + play_parse: true, + parse_url: '', + lazy: `js: + if(/\\.(m3u8|mp4)/.test(input)){ + input = {parse:0,url:input} + }else{ + if(rule.parse_url.startsWith('json:')){ + let purl = rule.parse_url.replace('json:','')+input; + let html = request(purl); + input = {parse:0,url:JSON.parse(html).url} + }else{ + input= rule.parse_url+input; + } + } + `, + 推荐: '*', + 一级: 'json:list;vod_name;vod_pic;vod_remarks;vod_id;vod_play_from', + 二级: `js: + let html=request(input); + html=JSON.parse(html); + let data=html.list; + VOD=data[0];`, + 搜索: '*', + } + }; + return JSON.parse(JSON.stringify(mubanDict)); +} + +var mubanDict = getMubans(); +var muban = getMubans(); +export default {muban, getMubans}; \ No newline at end of file diff --git a/drpy_t3/img/logo500x200-1.png b/drpy_t3/img/logo500x200-1.png new file mode 100644 index 0000000..a4faacb Binary files /dev/null and b/drpy_t3/img/logo500x200-1.png differ diff --git a/drpy_t3/img/logo500x200.png b/drpy_t3/img/logo500x200.png new file mode 100644 index 0000000..e80a96b Binary files /dev/null and b/drpy_t3/img/logo500x200.png differ diff --git a/drpy_t3/jar/custom_jsapi.jar b/drpy_t3/jar/custom_jsapi.jar new file mode 100644 index 0000000..7beb905 Binary files /dev/null and b/drpy_t3/jar/custom_jsapi.jar differ diff --git a/drpy_t3/jar/custom_spider_dz1201.jar b/drpy_t3/jar/custom_spider_dz1201.jar new file mode 100644 index 0000000..44b35d4 Binary files /dev/null and b/drpy_t3/jar/custom_spider_dz1201.jar differ diff --git a/drpy_t3/jar/pg.jar b/drpy_t3/jar/pg.jar new file mode 100644 index 0000000..99ee2f3 Binary files /dev/null and b/drpy_t3/jar/pg.jar differ diff --git a/drpy_t3/jar/pg.jar.md5 b/drpy_t3/jar/pg.jar.md5 new file mode 100644 index 0000000..6dea60a --- /dev/null +++ b/drpy_t3/jar/pg.jar.md5 @@ -0,0 +1 @@ +7633f8ea346c082b7aa163be58aed023 diff --git a/drpy_t3/json/E8plus.json b/drpy_t3/json/E8plus.json new file mode 100644 index 0000000..53a3a74 --- /dev/null +++ b/drpy_t3/json/E8plus.json @@ -0,0 +1,1815 @@ +//微信公众号【云星日记】制作分享 +//QQ频道搜索云星日记加入频道交流 + +//关注公众号回复【接口】获取在线接口 +//关注公众号回复【本地接口】获取本地接口 +//保存外链网址实时在线更新 + +//直接把在线网址外链输入TvBox就可以同步更新 +//打造属于自己的app,请看下面微信公号文章链接 +//TvBox生成项目打包教程:https://mp.weixin.qq.com/s/FDa4OSDwHemy8uDyhn-1UQ +//TVBox在线接口地址:https://mp.weixin.qq.com/s/uCipLSKxHvEdwKpIaQTFlw + +//云星旗下话费充值折扣公众号:【云优惠生活】 +//详情查看文章介绍:https://mp.weixin.qq.com/s/Bbm6mQtu_DjNJPXcXW0VOA + +{ + "sites": [ + + { + "key": "精工厂", + "name": "精工厂", + "type": 0, + "api": "https://jgczyapi.com/home/cjapi/kld2/mc/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "91md", + "name": "91", + "type": 1, + "api": "https://91md.me/api.php/provide/vod/from/mdm3u8/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "影库资源", + "name": "影库资源", + "type": 1, + "api": "https://api.ykapi.net/api.php/provide/vod/from/ykm3u8/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "速播", + "name": "速播", + "type": 1, + "api": "https://api.suboapi.com/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "美少女", + "name": "美少女", + "type": 0, + "api": "https://www.msnii.com/api/xml.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "点点", + "name": "点点", + "type": 0, + "api": "https://xx55zyapi.com/home/cjapi/ascf/mc/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "屌丝", + "name": "屌丝", + "type": 0, + "api": "https://sdszyapi.com/home/cjapi/asbb/sea/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "哥哥妹妹", + "name": "哥哥妹妹", + "type": 0, + "api": "http://www.ggmmzy.com:9999/inc/xml", + "searchable": 0, + "quickSearch": 0, + "filterable": 0 + }, + { + "key": "CK资源", + "name": "CK资源", + "type": 1, + "api": "http://www.feifei67.com/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "博天堂", + "name": "天堂", + "type": 0, + "api": "http://bttcj.com/inc/sapi.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "白嫖资源", + "name": "白嫖", + "type": 0, + "api": "https://www.kxgav.com/api/xml.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp028", + "name": "zp028", + "type": 0, + "api": "http://mygzycj.com/sapi.php?ac=list", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp020", + "name": "zp020", + "type": 0, + "api": "http://m.7777688.com/inc/api.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "色色资源", + "name": "涩涩", + "type": 0, + "api": "http://secj8.com/inc/sapi.php?ac=videolist", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "点点娱乐", + "name": "点点", + "type": 0, + "api": "https://xx55zyapi.com/home/cjapi/ascf/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "淫水机资源", + "name": "粥水", + "type": 0, + "api": "https://www.xrbsp.com/api/xml.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "小湿妹资源", + "name": "小湿妹资源", + "type": 0, + "api": "https://www.afasu.com/api/xml.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "香奶儿资源", + "name": "香奶儿", + "type": 0, + "api": "https://www.gdlsp.com/api/xml.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "酷豆采集", + "name": "酷豆", + "type": 1, + "api": "https://api.kdapi.info/api.php/provide/vod/?ac=list", + "playUrl": "https://jx.kubohk.com/jx/?url=", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "色屌丝资源", + "name": "色屌丝资源", + "type": 0, + "api": "http://sdszyapi.com/home/cjapi/asbb/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "秀色采集", + "name": "秀色av", + "type": 0, + "api": "https://api.xiuseapi.com/api.php/provide/vod/from/xiuse/at/xml/", + "playUrl": "https://api.xiusebf.com/m3u8/?url=", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "爱播采集", + "name": "爱播av", + "type": 1, + "api": "https://cj.apiabzy.com/api.php/provide/vod/?ac=list", + "playUrl": "https://player.aibozyplayer.com/m3u8/?url=", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "奶茶采集", + "name": "奶茶av", + "type": 0, + "api": "https://caiji.naichaapi.com/inc/api.php", + "playUrl": "https://jiexi.naichaapi.com/?url=", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "大地采集", + "name": "大地av", + "type": 0, + "api": "https://dadiapi.com/apple_m3u8.php", + "playUrl": "https://play.dadiapi.com/watch?url=", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp157", + "name": "熊猫资源", + "type": 0, + "api": "http://jcspcj8.com/api?ac=list", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "字幕网", + "name": "字幕网", + "type": 0, + "api": "http://zmcj88.com/sapi?ac=videolist", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "咪咪资源", + "name": "咪咪资源", + "type": 0, + "api": "http://www.caiji25.com/home/cjapi/p0as/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp116", + "name": "泡芙资源", + "type": 0, + "api": "http://zmcj88.com/api?ac=list", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "小姐姐资源", + "name": "小姐姐资源", + "type": 0, + "api": "https://xjjzyapi.com/home/cjapi/askl/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "精工厂资源", + "name": "精工厂资源", + "type": 0, + "api": "https://jgczyapi.com/home/cjapi/kld2/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "草榴视频", + "name": "草榴视频", + "type": 0, + "api": "https://www.caiji02.com/home/cjapi/cfas/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "52AVAV", + "name": "52AVAV", + "type": 0, + "api": "https://52zyapi.com/home/cjapi/asda/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp067", + "name": "环亚资源-无码", + "type": 0, + "api": "http://wmcj8.com/inc/sapi.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "大MM资源", + "name": "大MM资源", + "type": 0, + "api": "https://www.dmmapi.com/home/cjapi/asd2c7/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "酷伦理", + "name": "酷伦理", + "type": 1, + "api": "https://api.kudian70.com/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "万影色", + "name": "万影色", + "type": 1, + "api": "https://wanying4.com/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "美少女资源", + "name": "美少女资源", + "type": 0, + "api": "https://www.msnii.com/api/xml.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "玖玖资源", + "name": "玖玖资源", + "type": 0, + "api": "http://99zywcj.com/inc/sapi.php?ac=videolist", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "久草资源", + "name": "久草资源", + "type": 0, + "api": "http://jcspcj8.com/api?ac=videolist", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "狼少年", + "name": "狼少年", + "type": 0, + "api": "http://cjmygzy.com/inc/sapi.php?ac=videolist", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "利来资源", + "name": "利来资源", + "type": 0, + "api": "http://llzxcj.com/inc/sck.php?ac=videolist", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "佳丽资源", + "name": "佳丽资源", + "type": 1, + "api": "http://www.jializyzapi.com/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp128", + "name": "鲨鱼影视", + "type": 0, + "api": "https://shayuapi.com/api.php/Seacms/vod/at/xml/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "速度资源", + "name": "速度资源", + "type": 0, + "api": "http://www.ggmmzy.com:9999/inc/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "KK写真资源", + "name": "KK写真资源-伦理", + "type": 1, + "api": "https://kkzy.me/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp024", + "name": "BT天堂-伦理", + "type": 0, + "api": "http://bttcj.com/inc/sapi.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp011", + "name": "78乐播", + "type": 0, + "api": "https://lbapi9.com/api.php/provide/vod/at/xml/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp059", + "name": "番号资源", + "type": 0, + "api": "http://fhapi9.com/api.php/provide/vod/at/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "富二代资源", + "name": "富二代资源", + "type": 0, + "api": "http://f2dcj6.com/sapi?ac=videolist", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp066", + "name": "花椒资源", + "type": 0, + "api": "https://api.apilyzy.com/api.php/provide/vod/at/xml/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp099", + "name": "老鸭资源", + "type": 0, + "api": "https://apihjzy.com/api.php/provide/vod/at/xml/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp134", + "name": "速播资源", + "type": 0, + "api": "http://api.suboapi.com/api.php/provide/vod/at/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "一本道资源", + "name": "一本道资源", + "type": 0, + "api": "https://www.caiji03.com/home/cjapi/cfg8/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "鲍鱼AV", + "name": "鲍鱼AV", + "type": 0, + "api": "http://caiji26.com/home/cjapi/p0g8/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "日本AV在线", + "name": "日本AV在线", + "type": 0, + "api": "https://www.caiji07.com/home/cjapi/cfcf/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "久久热在线", + "name": "久久热在线", + "type": 0, + "api": "https://www.caiji06.com/home/cjapi/cfbb/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "青青草视频", + "name": "青青草视频", + "type": 0, + "api": "https://www.caiji05.com/home/cjapi/cfda/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "丝袜资源", + "name": "丝袜资源", + "type": 1, + "api": "https://siwazyw.cc/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "麻豆视频", + "name": "麻豆视频", + "type": 0, + "api": "https://www.caiji04.com/home/cjapi/cfc7/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "亚洲成人在线", + "name": "亚洲成人在线", + "type": 0, + "api": "https://www.caiji01.com/home/cjapi/cfd2/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "天噜啦资源", + "name": "天噜啦资源", + "type": 0, + "api": "http://www.987caiji.com/api/max.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "010爱资源", + "name": "010爱资源", + "type": 0, + "api": "http://www.010aizy.com/API/macs.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "爱操资源", + "name": "爱操资源", + "type": 1, + "api": "https://aicaozy.com/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp100", + "name": "乐播", + "type": 0, + "api": "https://lbapi9.com/api.php/provide/vod/at/xml/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "花魁资源", + "name": "花魁资源", + "type": 1, + "api": "https://caiji.huakuiapi.com/inc/apijson_vod.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "夜夜撸资源", + "name": "夜夜撸资源", + "type": 0, + "api": "https://www.caiji23.com/home/cjapi/kls6/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "AV集中淫", + "name": "AV集中淫", + "type": 0, + "api": "https://www.caiji22.com/home/cjapi/klp0/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "黄瓜TV资源", + "name": "黄瓜TV资源", + "type": 0, + "api": "https://www.caiji10.com/home/cjapi/cfs6/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "快播盒子资源", + "name": "快播盒子资源", + "type": 0, + "api": "https://www.caiji09.com/home/cjapi/cfp0/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "大香蕉资源", + "name": "大香蕉资源", + "type": 0, + "api": "https://www.caiji08.com/home/cjapi/cfkl/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "523采集", + "name": "523av", + "type": 0, + "api": "https://caiji.523zyw.com/inc/api.php", + "playUrl": "https://api.523zyw.com/?url=", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "我要啪啪", + "name": "我要啪啪", + "type": 0, + "api": "http://www.caiji21.com/home/cjapi/klkl/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "4000资源", + "name": "4000资源", + "type": 1, + "api": "https://www.4000zy.com/inc/apijson_vod.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "大屌丝资源", + "name": "大屌丝资源", + "type": 0, + "api": "http://www.caiji24.com/home/cjapi/p0d2/mc10/vod/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "水蜜桃", + "name": "水蜜桃", + "type": 1, + "api": "http://51smt4.xyz/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "草莓资源", + "name": "草莓资源(慢)", + "type": 1, + "api": "https://caiji.caomeiapi.com/inc/apijson_vod.php", + "searchable": 1, + "quickSearch": 0, + "filterable": 0 + }, + { + "key": "zp123", + "name": "色猫资源(慢)", + "type": 0, + "api": "https://api.maozyapi.com/inc/api.php/provide/vod/at/xml/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "色窝资源", + "name": "色窝资源-慢", + "type": 1, + "api": "https://sewozyapi.com/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 0, + "filterable": 0 + }, + { + "key": "zp137", + "name": "探探资源(慢)", + "type": 0, + "api": "https://apittzy.com/api.php/provide/vod/at/xml/", + "playUrl": "https://jiexi.ttbfp1.com/m3u8/?url=", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "爱看资源", + "name": "爱看资源(慢)", + "type": 1, + "api": "http://www.aikanzyz9.com/inc/apijson_vod.php", + "searchable": 1, + "quickSearch": 0, + "filterable": 0 + }, + { + "key": "葡萄资源", + "name": "葡萄资源-慢", + "type": 1, + "api": "https://api.putaozy.net/inc/apijson_vod.php", + "searchable": 1, + "quickSearch": 0, + "filterable": 0 + }, + { + "key": "2345_spider", + "name": "2345(以下重复)", + "type": 3, + "api": "csp_YS2345", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://gitee.com/xuexing007/cs/raw/master/2345.bmp" + }, + { + "key": "zp029", + "name": "JAV名优", + "type": 0, + "api": "http://mygzycj.com/sapi.php?ac=videolist", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "JAV名优馆", + "name": "JAV名优馆", + "type": 0, + "api": "http://mygzycj.com/api.php?ac=videolist", + "searchable": 1, + "quickSearch": 0, + "filterable": 0 + }, + { + "key": "AVZY6888资源", + "name": "AVZY6888资源", + "type": 1, + "api": "http://m.7777688.com/inc/apijson.php", + "searchable": 1, + "quickSearch": 0, + "filterable": 0 + }, + { + "key": "zp125", + "name": "AVZY6888资源", + "type": 0, + "api": "http://m.7777688.com/inc/api.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp068", + "name": "环亚资源", + "type": 0, + "api": "http://wmcj8.com/inc/sapi.php?ac=videolist", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp126", + "name": "色色资源", + "type": 0, + "api": "http://secj8.com/inc/api.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp129", + "name": "鲨鱼资源", + "type": 0, + "api": "https://shayuapi.com/api.php/provide/vod/at/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp127", + "name": "色色资源", + "type": 0, + "api": "http://secj8.com/inc/sapi.php?ac=videolist", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp085", + "name": "玖玖资源", + "type": 0, + "api": "http://99zywcj.com/inc/sapi.php?ac=videolist", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp061", + "name": "富二代资源", + "type": 0, + "api": "http://f2dcj6.com/sapi/?ac=videolist", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "速播资源", + "name": "速播资源", + "type": 1, + "api": "https://api.suboapi.com/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 0, + "filterable": 0 + }, + { + "key": "zp143", + "name": "天堂福利", + "type": 0, + "api": "https://bttcj.com/inc/sapi.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "酷豆资源", + "name": "酷豆资源", + "type": 1, + "api": "https://kudouzy.com/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "酷豆2", + "name": "酷豆2", + "type": 1, + "api": "https://api.kdapi.info/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "秀色资源", + "name": "秀色资源", + "type": 1, + "api": "https://api.xiuseapi.com/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "爱播资源", + "name": "爱播资源", + "type": 1, + "api": "https://cj.apiabzy.com/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 0, + "filterable": 0 + }, + { + "key": "奶茶资源", + "name": "奶茶资源", + "type": 1, + "api": "https://caiji.naichaapi.com/inc/apijson_vod.php", + "searchable": 1, + "quickSearch": 0, + "filterable": 0 + }, + { + "key": "zp124", + "name": "色猫资源", + "type": 0, + "api": "https://api.maozyapi.com/inc/api.php", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp053", + "name": "大地资源", + "type": 0, + "api": "https://dadiapi.com/api.php/provide/vod/at/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "大地资源", + "name": "大地资源", + "type": 0, + "api": "https://dadiapi.com/api.php", + "searchable": 1, + "quickSearch": 0, + "filterable": 0 + }, + { + "key": "鲨鱼资源", + "name": "鲨鱼资源", + "type": 1, + "api": "https://shayuapi.com/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "乐播资源", + "name": "乐播资源", + "type": 1, + "api": "https://lbapi9.com/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 0, + "filterable": 0 + }, + { + "key": "zp136", + "name": "速度资源", + "type": 0, + "api": "http://www.ggmmzy.com:9999/inc/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp065", + "name": "花椒,", + "type": 0, + "api": "https://apihjzy.com/api.php/provide/vod/at/xml/", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + }, + { + "key": "zp098", + "name": "老鸭资源", + "type": 0, + "api": "http://laoyazy.vip/api.php/provide/vod/at/xml", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 + } + ], + "lives": [ + { + "group": "redirect", + "channels": [ + { + "name": "redirect", + "urls": [ + "proxy://do=live&type=txt&ext=aHR0cHM6Ly9naXRlYS5jb20veHlnZy9mcmVlL3Jhdy9icmFuY2gvbWFzdGVyLzE4amluLzE4amluemhpYm8udHh0" + ] + } + ] + } + ], + "parses": [ + { + "name": "解析聚合", + "type": 3, + "url": "Demo" + }, + { + "name": "Json并发", + "type": 2, + "url": "Parallel" + }, + { + "name": "Json轮询", + "type": 2, + "url": "Sequence" + }, + { + "name": "飞捷", + "type": 1, + "url": "https://fjkkk.cn/toujiexisiquanjia.php?url=", + "ext": { + "flag": [ + "qq", + "腾讯", + "letv", + "乐视", + "mgtv", + "芒果", + "youku", + "优酷", + "qiyi", + "iqiyi", + "爱奇艺", + "奇艺" + ] + } + }, + { + "name": "集象", + "type": 1, + "url": "http://110.42.2.115:880/analysis/json/?uid=2245&my=cdfhirsuwyEGIPU346&url=", + "ext": { + "flag": [ + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "奇艺", + "youku", + "优酷", + "sohu", + "搜狐", + "letv", + "乐视", + "mgtv", + "芒果", + "CL4K", + "renrenmi", + "ltnb", + "xigua" + ] + } + }, + { + "name": "急速1", + "type": 1, + "url": "https://www.daina.hk/api/?key=RXpzyrbMFYySN0sNps&url=", + "ext": { + "flag": [ + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "奇艺", + "youku", + "优酷", + "sohu", + "搜狐", + "letv", + "乐视", + "mgtv", + "芒果", + "CL4K", + "renrenmi", + "ltnb", + "xigua" + ] + } + }, + { + "name": "急速3", + "type": 1, + "url": "https://jx.parwix.com:4433/player/?url=", + "ext": { + "flag": [ + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "奇艺", + "youku", + "优酷", + "mgtv", + "芒果", + "letv", + "乐视", + "pptv", + "PPTV", + "sohu", + "bilibili", + "哔哩哔哩", + "哔哩" + ] + } + }, + { + "name": "VIP3", + "type": 1, + "url": "http://jifei.mrcy0.com/home/api?type=ys&uid=2752189&key=aefghtACLNRSZ01247&url=", + "ext": { + "flag": [ + "qq", + "腾讯", + "letv", + "乐视", + "mgtv", + "芒果", + "youku", + "优酷", + "qiyi", + "iqiyi", + "爱奇艺", + "奇艺" + ] + } + }, + { + "name": "急速6", + "type": 1, + "url": "http://api.vip123kan.vip/?url=", + "ext": { + "flag": [ + "youku", + "优酷", + "mgtv", + "芒果", + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "qq", + "奇艺" + ] + } + }, + { + "name": "急速8", + "type": 1, + "url": "http://yaluan.520say.cn/home/api?type=ys&uid=65588&key=cdeghikortvAFGI078&url=", + "ext": { + "flag": [ + "CL4K", + "饭后独播", + "芒果视频", + "youku", + "rx", + "ltnb", + "优酷", + "qiyi", + "爱奇艺", + "奇艺", + "renrenmi", + "qq", + "腾讯", + "腾讯视频", + "letv", + "乐视" + ] + } + }, + { + "name": "急速4", + "type": 1, + "url": "https://jf.96ym.cn/home/api?type=ys&uid=1319830&key=cefgnoprtvxyzBGKP6&url=", + "ext": { + "flag": [ + "qq", + "腾讯", + "letv", + "乐视", + "mgtv", + "芒果", + "youku", + "优酷", + "qiyi", + "iqiyi", + "爱奇艺", + "奇艺" + ] + } + }, + { + "name": "急速5", + "type": 1, + "url": "http://ck.laobandq.com/3515240842.php?pltfrom=1100&url=", + "ext": { + "flag": [ + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "奇艺", + "youku", + "优酷", + "sohu", + "搜狐", + "letv", + "乐视", + "mgtv", + "芒果", + "CL4K", + "renrenmi", + "ltnb", + "xigua" + ] + } + }, + { + "name": "急速9", + "type": 1, + "url": "https://api.exeyz.cc/api/Json.php?url=" + }, + { + "name": "海星解析", + "type": 1, + "url": "http://110.42.2.115:880/analysis/json/?uid=1735&my=hjklmsuwyzDGHIKXY3&url=", + "ext": { + "flag": [ + "qq", + "腾讯", + "letv", + "乐视", + "mgtv", + "芒果", + "youku", + "优酷", + "qiyi", + "iqiyi", + "爱奇艺", + "奇艺" + ] + } + }, + { + "name": "VIP1", + "type": 1, + "url": "http://110.42.2.115:880/analysis/json/?uid=2233&my=eginqstBCJMNSUX689&url=", + "ext": { + "flag": [ + "qq", + "腾讯", + "letv", + "乐视", + "mgtv", + "芒果", + "youku", + "优酷", + "qiyi", + "iqiyi", + "爱奇艺", + "奇艺" + ] + } + }, + { + "name": "MuX蓝光解析(辉夜)", + "type": 1, + "url": "https://vvip.funsline.cn/api/?key=8vMzuXb87MWtyJeECE&url=", + "ext": { + "flag": [ + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "奇艺", + "youku", + "优酷", + "sohu", + "搜狐", + "letv", + "乐视", + "mgtv", + "芒果", + "CL4K", + "renrenmi", + "ltnb", + "xigua", + "rongxing", + "rx", + "xfy", + "xueren" + ] + } + }, + { + "name": "猫群专用解析y1", + "type": 1, + "url": "http://chaloli.cn/home/api?type=ys&uid=705072&key=abcdegipstBCFMSVZ6&url=", + "ext": { + "flag": [ + "youku", + "qq", + "iqiyi", + "qiyi", + "letv", + "sohu", + "letv", + "tudou", + "pptv", + "mgtv", + "wasu", + "bilibili", + "leduo", + "fq3", + "fq4", + "xueren", + "duoduo", + "duoduozy", + "miaoparty", + "miaoparty2", + "miaoparty3", + "renrenmi", + "优酷", + "芒果", + "腾讯", + "爱奇艺", + "奇艺", + "ltnb", + "rx", + "CL4K", + "xfyun", + "wuduzy" + ] + } + }, + { + "name": "猫群专用解析y2", + "type": 1, + "url": "http://chaloli.cn/home/api?type=ys&uid=705072&key=abcdegipstBCFMSVZ6&fs=sm&url=", + "ext": { + "flag": [ + "youku", + "qq", + "iqiyi", + "qiyi", + "letv", + "sohu", + "letv", + "tudou", + "pptv", + "mgtv", + "wasu", + "bilibili", + "leduo", + "fq3", + "fq4", + "xueren", + "duoduo", + "duoduozy", + "miaoparty", + "miaoparty2", + "miaoparty3", + "renrenmi", + "优酷", + "芒果", + "腾讯", + "爱奇艺", + "奇艺", + "ltnb", + "rx", + "CL4K", + "xfyun", + "wuduzy" + ] + } + }, + { + "name": "猫群专用解析y3", + "type": 1, + "url": "http://chaloli.cn/home/api?type=ys&uid=705072&key=abcdegipstBCFMSVZ6&fs=hz&url=", + "ext": { + "flag": [ + "youku", + "qq", + "iqiyi", + "qiyi", + "letv", + "sohu", + "letv", + "tudou", + "pptv", + "mgtv", + "wasu", + "bilibili", + "leduo", + "fq3", + "fq4", + "xueren", + "duoduo", + "duoduozy", + "miaoparty", + "miaoparty2", + "miaoparty3", + "renrenmi", + "优酷", + "芒果", + "腾讯", + "爱奇艺", + "奇艺", + "ltnb", + "rx", + "CL4K", + "xfyun", + "wuduzy" + ] + } + }, + { + "name": "猫群专用解析02", + "type": 1, + "url": "https://json.pangujiexi.com/json.php?url=", + "ext": { + "flag": [ + "youku", + "优酷", + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "奇艺" + ] + } + }, + { + "name": "猫群专用解析03", + "type": 1, + "url": "https://vip.aiaine.com/api/?key=8FN8gNAySnvJiMllxZ&url=", + "ext": { + "flag": [ + "Itnb", + "wuduzy" + ] + } + }, + { + "name": "猫群专用解析04", + "type": 1, + "url": "http://api.vip123kan.vip/?url=", + "ext": { + "flag": [ + "youku", + "优酷", + "mgtv", + "芒果", + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "qq", + "xigua", + "奇艺" + ] + } + }, + { + "name": "猫群专用解析05", + "type": 1, + "url": "https://a.dxzj88.com/jxrrm/jiami.php?url=", + "ext": { + "flag": [ + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "奇艺", + "youku", + "优酷", + "sohu", + "芒果", + "mgtv", + "xigua", + "wuduzy", + "bilibili", + "pptv", + "leduo", + "Clk4", + "哔哩", + "renrenmi", + "ltnb", + "rx" + ] + } + }, + { + "name": "猫群专用解析06", + "type": 1, + "url": "https://sz.dxzj88.com/jxrjrm/jiaomi.php?url=", + "ext": { + "flag": [ + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "奇艺", + "youku", + "优酷", + "sohu", + "芒果", + "mgtv", + "xigua", + "wuduzy", + "bilibili", + "pptv", + "leduo", + "Clk4", + "哔哩", + "renrenmi", + "ltnb", + "rx" + ] + } + }, + { + "name": "急速2", + "type": 1, + "url": "https://api.m3u8.tv:5678/home/api?type=ys&uid=1931000&key=gktuvyzABEORSYZ135&url=", + "ext": { + "flag": [ + "youku", + "优酷", + "qq", + "腾讯", + "mgtv", + "芒果" + ] + } + }, + { + "name": "群鑫影视", + "type": 1, + "url": "http://cl.yjhan.com:8090/home/api?type=ys&uid=651075&key=aehuDFGIJSVWX24589&url=", + "ext": { + "flag": [ + "youku", + "优酷", + "qiyi", + "爱奇艺", + "奇艺", + "qq", + "腾讯" + ] + } + } + ], + "flags": [ + "youku", + "qq", + "iqiyi", + "qiyi", + "letv", + "sohu", + "tudou", + "pptv", + "mgtv", + "wasu", + "bilibili", + "renrenmi", + "优酷", + "芒果", + "腾讯", + "爱奇艺", + "奇艺", + "ltnb", + "rx", + "CL4K", + "xfyun", + "wuduzy" + ], + "ijk": [ + { + "group": "软解码", + "options": [ + { + "category": 4, + "name": "opensles", + "value": "0" + }, + { + "category": 4, + "name": "overlay-format", + "value": "842225234" + }, + { + "category": 4, + "name": "framedrop", + "value": "1" + }, + { + "category": 4, + "name": "soundtouch", + "value": "1" + }, + { + "category": 4, + "name": "start-on-prepared", + "value": "1" + }, + { + "category": 1, + "name": "http-detect-range-support", + "value": "0" + }, + { + "category": 1, + "name": "fflags", + "value": "fastseek" + }, + { + "category": 2, + "name": "skip_loop_filter", + "value": "48" + }, + { + "category": 4, + "name": "reconnect", + "value": "1" + }, + { + "category": 4, + "name": "enable-accurate-seek", + "value": "0" + }, + { + "category": 4, + "name": "mediacodec", + "value": "0" + }, + { + "category": 4, + "name": "mediacodec-auto-rotate", + "value": "0" + }, + { + "category": 4, + "name": "mediacodec-handle-resolution-change", + "value": "0" + }, + { + "category": 4, + "name": "mediacodec-hevc", + "value": "0" + }, + { + "category": 1, + "name": "dns_cache_timeout", + "value": "600000000" + } + ] + }, + { + "group": "硬解码", + "options": [ + { + "category": 4, + "name": "opensles", + "value": "0" + }, + { + "category": 4, + "name": "overlay-format", + "value": "842225234" + }, + { + "category": 4, + "name": "framedrop", + "value": "1" + }, + { + "category": 4, + "name": "soundtouch", + "value": "1" + }, + { + "category": 4, + "name": "start-on-prepared", + "value": "1" + }, + { + "category": 1, + "name": "http-detect-range-support", + "value": "0" + }, + { + "category": 1, + "name": "fflags", + "value": "fastseek" + }, + { + "category": 2, + "name": "skip_loop_filter", + "value": "48" + }, + { + "category": 4, + "name": "reconnect", + "value": "1" + }, + { + "category": 4, + "name": "enable-accurate-seek", + "value": "0" + }, + { + "category": 4, + "name": "mediacodec", + "value": "1" + }, + { + "category": 4, + "name": "mediacodec-auto-rotate", + "value": "1" + }, + { + "category": 4, + "name": "mediacodec-handle-resolution-change", + "value": "1" + }, + { + "category": 4, + "name": "mediacodec-hevc", + "value": "1" + }, + { + "category": 1, + "name": "dns_cache_timeout", + "value": "600000000" + } + ] + } + ], + "ads": [ + "mimg.0c1q0l.cn", + "www.googletagmanager.com", + "www.google-analytics.com", + "mc.usihnbcq.cn", + "mg.g1mm3d.cn", + "mscs.svaeuzh.cn", + "cnzz.hhttm.top", + "tp.vinuxhome.com", + "cnzz.mmstat.com", + "www.baihuillq.com", + "s23.cnzz.com", + "z3.cnzz.com", + "c.cnzz.com", + "stj.v1vo.top", + "z12.cnzz.com", + "img.mosflower.cn", + "tips.gamevvip.com", + "ehwe.yhdtns.com", + "xdn.cqqc3.com", + "www.jixunkyy.cn", + "sp.chemacid.cn", + "hm.baidu.com", + "s9.cnzz.com", + "z6.cnzz.com", + "um.cavuc.com", + "mav.mavuz.com", + "wofwk.aoidf3.com", + "z5.cnzz.com", + "xc.hubeijieshikj.cn", + "tj.tianwenhu.com", + "xg.gars57.cn", + "k.jinxiuzhilv.com", + "cdn.bootcss.com", + "ppl.xunzhuo123.com", + "xomk.jiangjunmh.top", + "img.xunzhuo123.com", + "z1.cnzz.com", + "s13.cnzz.com", + "xg.huataisangao.cn", + "z7.cnzz.com", + "xg.huataisangao.cn", + "z2.cnzz.com", + "s96.cnzz.com", + "q11.cnzz.com", + "thy.dacedsfa.cn", + "xg.whsbpw.cn", + "s19.cnzz.com", + "z8.cnzz.com", + "s4.cnzz.com", + "f5w.as12df.top", + "ae01.alicdn.com", + "www.92424.cn", + "k.wudejia.com", + "vivovip.mmszxc.top", + "qiu.xixiqiu.com", + "cdnjs.hnfenxun.com", + "cms.qdwght.com" + ], + "wallpaper": "https://picsum.photos/1080/", + "spider": "https://gitea.com/xygg/free/raw/branch/master/18jin/18jin.jar" +} diff --git a/drpy_t3/json/aliproxy.gz b/drpy_t3/json/aliproxy.gz new file mode 100644 index 0000000..ce58c09 Binary files /dev/null and b/drpy_t3/json/aliproxy.gz differ diff --git a/drpy_t3/json/alishare.ebook.txt b/drpy_t3/json/alishare.ebook.txt new file mode 100644 index 0000000..94a7316 --- /dev/null +++ b/drpy_t3/json/alishare.ebook.txt @@ -0,0 +1,77 @@ +zAajGfX1cxE 中信出版图书 1 +kgCYrLpLgiZ 机械工业出版社6000册 1 +EmhjMiwBrNj 清华大学出版社2237册 1 +3XEmnpcKYwd 新知文库 1 +XpsFL9BcCbN 北京国家图书馆 1 +BPkNEszAXjr 一万本图书馆PDF 1 +STfm58hKPBu 湖湘文库 1 +LZvTLPW8fbF 亲子教育 +gfsRY67BRcb 历史传记 +vbULbViB6jg 婚恋两性 +nk24tt7C2nt 婚恋家庭 +nk24tt7C2nt 婚恋家庭 +LYHR2C7oGrN 官场商战 +h3qDZvSNJaH 影视时尚 +1Wq86hBek8P 心理励志 +erF8fL1E9SR 思想文化 +qzBiRPyuKCU 恐怖悬疑 +5b6xedKYxDB 推理侦探 +5Do3YzWGsdT 文学名著 +h8nj4ZxEhTV 旅游休闲 +W8uEmn2UEm4 武侠仙侠 +C6FdSeriQAg 武侠小说 +Q2Uyg5yXCTp 漫画绘本 +4CP6kP21RE1 玄幻奇幻 +AbmTF4S9R2u 玄幻小说 +S2r9Q7dofdw 社科经典 +Tkz17pPJ54n 科幻小说 +ZCma3m8tkqu 综合书籍 +PJc6BcfuRwn 美容养生 +1vp4gtVqHVV 职场理财 +TMXRKiUGzMe 青春校园 +vEdkxEJocnb 科教类 +AM8mtK1botT 平台类 +NkKQg1a7qM9 小说类 +1th3c74q1cu 漫画类 +auNq9mXGJ8N 新书类 +xPX311pWQP8 杂志类 +43sAoXEduDZ 我的小书屋01 +Rj2xnX7GLUW 我的小书屋02 +XMbjpWzN4Jj 我的小书屋03 +V69EqCbMHST 我的小书屋04 +zpRyQG5Sykg 我的小书屋05 +6TZTQve3haL 我的小书屋06 +FsWBsXLDyMn 全球推理小说大集合 1 +D9fe45j1eHa ePUBee整站电子书库01 +ct8cPiYpscj ePUBee整站电子书库02 +a9rZPQKHfDu ePUBee整站电子书库03 +h45mCPUZc3E ePUBee整站电子书库04 +bhDAK42pnSU ePUBee整站电子书库05 +jdPrqXLaXBU ePUBee整站电子书库06 +3exRgUFUPrv ePUBee整站电子书库07 +AMY3umXHQrH ePUBee整站电子书库08 +16ryTfdGrAP ePUBee整站电子书库09 +5W8EsnTsCRN ePUBee整站电子书库10 +D72AZeTnTVL ePUBee整站电子书库11 +Z4SyuRZZj8Z ePUBee整站电子书库12 +xMCNaJvx7tk ePUBee整站电子书库13 +MK7LwGqokKF ePUBee整站电子书库14 +p9Lnskk2e2L ePUBee整站电子书库15 +pKEdszFRn2v ePUBee整站电子书库16 +7fKJ3VC7yWg ePUBee整站电子书库17 +QXMJVQzPJzG ePUBee整站电子书库18 +eTbXLxV5HZ3 ePUBee整站电子书库19 +wvdQyRer63P ePUBee整站电子书库20 +LrLMDHopskR ePUBee整站电子书库21 +jr4xL8NvHW9 ePUBee整站电子书库22 +5tPVRsXdBk4 ePUBee整站电子书库23 +iMBCRc32UNM ePUBee整站电子书库24 +S8NodisNHcU ePUBee整站电子书库25 +4TRTbyZrKki ePUBee整站电子书库26 +iYZMj7CFPks 广东省立中山图书馆「A-G」 +unEV8t3QfTc 广东省立中山图书馆「H-K」 +uT7hzi7CnvP 广东省立中山图书馆「L-N」 +U2fcieUVKuY 广东省立中山图书馆「O-Q」 +h3s9tXNJxQK 广东省立中山图书馆「R-T」 +SXZ17uS7oju 广东省立中山图书馆「U-X」 +GwnQxogFss3 广东省立中山图书馆「Y-Z」 diff --git a/drpy_t3/json/alishare.txt b/drpy_t3/json/alishare.txt new file mode 100644 index 0000000..3800996 --- /dev/null +++ b/drpy_t3/json/alishare.txt @@ -0,0 +1,30 @@ +self 我的阿里云盘 +wbrhqM5HkSV?pwd=6666 Tacit0924-总合集 1 updated_at DESC +mxAfB6eRgY4 阿里1T 1 +4ydLxf7VgH7 平凡中的 1 +4bGRVUdUtct 黄妈 1 +dieULBdYP3D YYDSVIP 1 +RnjUi1urdb2 优源阁 1 +vgjM1MiHvoL 电影REMUX 1 +uWa9gbM3RJ7 优源阁-资源总合集 1 +EGjCoDoJCFV 火星影剧 1 +S1g5iJEL4kh 剧集-老王资源宝藏 +14tKp8iJ4vb 动漫-老王资源宝藏 +WdaaeX7HK44 此间微凉-动漫合集 +UuHi9PeYSVz YYDSVip-综艺 +v9To3HC6vhs YYDSVip-综合 +KQbDJmKhSLL?pwd=6666 Tacit0924-动漫 +KUa2Mwpm1MR 经典韩剧 +PkV89yNDPi1 日剧合集 +jk2Se2VHgyK 纪录片合集1 +fSNHaYST47s 纪录片合集2 +KZo6HrzGxhP BBC纪录片大合集 +ftMhRaKUfYp 掌灯者-港剧 +MLWPRHRt9W3 掌灯者-台剧 +8Fg4TNsd2A2 掌灯者-大陆剧1 +ar8Kg9azw1S 掌灯者-大陆剧2 +GMYSz3AHFaA 掌灯者-大陆剧3 +q6bv8qs9u5e 掌灯者-欧美剧1 +kUDyvvcknxm 掌灯者-欧美剧2 +cmy3KCTRpFA 李连杰电影合集 +hMsDJ6dsGxQ 成龙电影合集 diff --git a/drpy_t3/json/alist.json b/drpy_t3/json/alist.json new file mode 100644 index 0000000..d63aad0 --- /dev/null +++ b/drpy_t3/json/alist.json @@ -0,0 +1,48 @@ +[ + { + "name": "🙋丫仙女", + "server": "http://alist.xiaoya.pro/", + "startPage": "/", + "showAll": false, + "search": true, + "headers": { + "Authorization": "" + }, + "params": { + "/abc": { + "password": "123" + }, + "/abc/abc": { + "password": "123" + } + } + }, + { + "name": "🐋一只鱼", + "server": "https://alist.youte.ml" + }, + { + "name": "🌊七米蓝", + "server": "https://al.chirmyram.com" + }, + { + "name": "🐉神族九帝", + "server": "https://alist.shenzjd.com" + }, + { + "name": "☃️姬路白雪", + "server": "https://pan.jlbx.xyz" + }, + { + "name": "✨星梦", + "server": "https://pan.bashroot.top" + }, + { + "name": "💢repl", + "server": "https://ali.liucn.repl.co" + }, + { + "name": "💦讯维云盘", + "server": "https://pan.xwbeta.com" + } +] diff --git a/drpy_t3/json/bili.json b/drpy_t3/json/bili.json new file mode 100644 index 0000000..fbcaabf --- /dev/null +++ b/drpy_t3/json/bili.json @@ -0,0 +1,1440 @@ +{ + "classes": [ + { + "type_name": "搞笑", + "type_id": "搞笑" + }, + { + "type_name": "鬼畜", + "type_id": "鬼畜" + }, + { + "type_name": "Sports", + "type_id": "球星" + }, + { + "type_name": "戏曲", + "type_id": "戏曲" + }, + { + "type_name": "演唱会", + "type_id": "演唱会" + }, + { + "type_name": "动物世界", + "type_id": "动物世界" + }, + { + "type_name": "假窗白噪音", + "type_id": "窗白噪音" + }, + { + "type_name": "相声小品", + "type_id": "相声小品" + }, + { + "type_name": "儿童", + "type_id": "儿童" + } + ], + "filter": { + "搞笑": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "鬼畜": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "球星": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "球星" + }, + { + "n": "梅西", + "v": "梅西" + }, + { + "n": "C罗", + "v": "C罗" + }, + { + "n": "天下足球", + "v": "天下足球" + }, + { + "n": "罗纳尔多", + "v": "罗纳尔多" + }, + { + "n": "亨利", + "v": "亨利" + }, + { + "n": "小罗", + "v": "小罗" + }, + { + "n": "齐达内", + "v": "齐达内" + }, + { + "n": "贝克汉姆", + "v": "贝克汉姆" + }, + { + "n": "内马尔", + "v": "内马尔" + }, + { + "n": "德布劳内", + "v": "德布劳内" + }, + { + "n": "欧冠", + "v": "欧冠" + }, + { + "n": "世界杯", + "v": "世界杯" + }, + { + "n": "西甲", + "v": "西甲" + }, + { + "n": "英超", + "v": "英超" + }, + { + "n": "意甲", + "v": "意甲" + }, + { + "n": "德甲", + "v": "德甲" + }, + { + "n": "国米", + "v": "国米" + }, + { + "n": "皇马", + "v": "皇马" + }, + { + "n": "巴萨", + "v": "巴萨" + }, + { + "n": "巴黎圣日耳曼", + "v": "巴黎圣日耳曼" + }, + { + "n": "曼联", + "v": "曼联" + }, + { + "n": "曼城", + "v": "曼城" + }, + { + "n": "NBA", + "v": "NBA" + }, + { + "n": "詹姆斯", + "v": "詹姆斯" + }, + { + "n": "库里", + "v": "库里" + }, + { + "n": "杜兰特", + "v": "杜兰特" + }, + { + "n": "UFC", + "v": "UFC" + }, + { + "n": "斯诺克", + "v": "斯诺克" + }, + { + "n": "网球", + "v": "网球" + }, + { + "n": "F1", + "v": "F1" + }, + { + "n": "高尔夫", + "v": "高尔夫" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "相声小品": [ + { + "key": "tid", + "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": "喜剧综艺" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "儿童": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "儿童" + }, + { + "n": "教育", + "v": "儿童教育" + }, + { + "n": "歌曲", + "v": "儿童歌曲" + }, + { + "n": "舞蹈", + "v": "儿童舞蹈" + }, + { + "n": "成语故事", + "v": "儿童成语故事" + }, + { + "n": "音乐", + "v": "儿童音乐" + }, + { + "n": "儿童MV", + "v": "儿童MV" + }, + { + "n": "贝乐虎", + "v": "贝乐虎" + }, + { + "n": "宝宝巴士", + "v": "宝宝巴士" + }, + { + "n": "儿童好声音", + "v": "儿童好声音" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "动物世界": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "戏曲": [ + { + "key": "tid", + "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": "粤剧", + "v": "粤剧" + }, + { + "n": "潮剧", + "v": "潮剧" + }, + { + "n": "桂剧", + "v": "桂剧" + }, + { + "n": "彩调", + "v": "彩调" + }, + { + "n": "壮剧", + "v": "壮剧" + }, + { + "n": "川剧", + "v": "川剧" + }, + { + "n": "黔剧", + "v": "黔剧" + }, + { + "n": "滇剧", + "v": "滇剧" + }, + { + "n": "傣剧", + "v": "傣剧" + }, + { + "n": "藏剧", + "v": "藏剧" + }, + { + "n": "皮影戏", + "v": "皮影戏" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "窗白噪音": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "演唱会": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "演唱会" + }, + { + "n": "周杰伦", + "v": "周杰伦" + }, + { + "n": "陈奕迅", + "v": "陈奕迅" + }, + { + "n": "Beyond", + "v": "Beyond" + }, + { + "n": "刘德华", + "v": "刘德华" + }, + { + "n": "郭富城", + "v": "郭富城" + }, + { + "n": "张学友", + "v": "张学友" + }, + { + "n": "黎明", + "v": "黎明" + }, + { + "n": "李宗盛", + "v": "李宗盛" + }, + { + "n": "邓丽君", + "v": "邓丽君" + }, + { + "n": "朴树", + "v": "朴树" + }, + { + "n": "林子祥", + "v": "林子祥" + }, + { + "n": "任贤齐", + "v": "任贤齐" + }, + { + "n": "张信哲", + "v": "张信哲" + }, + { + "n": "孙楠", + "v": "孙楠" + }, + { + "n": "张宇", + "v": "张宇" + }, + { + "n": "周华健", + "v": "周华健" + }, + { + "n": "蔡依林", + "v": "蔡依林" + }, + { + "n": "薛之谦", + "v": "薛之谦" + }, + { + "n": "洛天依", + "v": "洛天依" + }, + { + "n": "初音未来", + "v": "初音未来" + }, + { + "n": "许嵩", + "v": "许嵩" + }, + { + "n": "戴佩妮", + "v": "戴佩妮" + }, + { + "n": "邓紫棋", + "v": "邓紫棋" + }, + { + "n": "张韶涵", + "v": "张韶涵" + }, + { + "n": "蔡健雅", + "v": "蔡健雅" + }, + { + "n": "莫文蔚", + "v": "莫文蔚" + }, + { + "n": "刘若英", + "v": "刘若英" + }, + { + "n": "周深", + "v": "周深" + }, + { + "n": "毛不易", + "v": "毛不易" + }, + { + "n": "汪苏泷", + "v": "汪苏泷" + }, + { + "n": "李宇春", + "v": "李宇春" + }, + { + "n": "徐佳莹", + "v": "徐佳莹" + }, + { + "n": "杨宗纬", + "v": "杨宗纬" + }, + { + "n": "胡彦斌", + "v": "胡彦斌" + }, + { + "n": "杨千嬅", + "v": "杨千嬅" + }, + { + "n": "张靓颖", + "v": "张靓颖" + }, + { + "n": "李荣浩", + "v": "李荣浩" + }, + { + "n": "杨丞琳", + "v": "杨丞琳" + }, + { + "n": "林志炫", + "v": "林志炫" + }, + { + "n": "陶喆", + "v": "陶喆" + }, + { + "n": "胡夏", + "v": "胡夏" + }, + { + "n": "李玉刚", + "v": "李玉刚" + }, + { + "n": "弦子", + "v": "弦子" + }, + { + "n": "陈小春", + "v": "陈小春" + }, + { + "n": "萧亚轩", + "v": "萧亚轩" + }, + { + "n": "鹿晗", + "v": "鹿晗" + }, + { + "n": "纵贯线", + "v": "纵贯线" + }, + { + "n": "许巍", + "v": "许巍" + }, + { + "n": "林俊杰", + "v": "林俊杰" + }, + { + "n": "赵雷", + "v": "赵雷" + }, + { + "n": "谭咏麟", + "v": "谭咏麟" + }, + { + "n": "凤凰传奇", + "v": "凤凰传奇" + }, + { + "n": "容祖儿", + "v": "容祖儿" + }, + { + "n": "周传雄", + "v": "周传雄" + }, + { + "n": "SHE", + "v": "SHE" + }, + { + "n": "苏打绿", + "v": "苏打绿" + }, + { + "n": "五月天", + "v": "五月天" + }, + { + "n": "张国荣", + "v": "张国荣" + }, + { + "n": "梅艳芳", + "v": "梅艳芳" + }, + { + "n": "孙燕姿", + "v": "孙燕姿" + }, + { + "n": "李健", + "v": "李健" + }, + { + "n": "华晨宇", + "v": "华晨宇" + }, + { + "n": "袁娅维", + "v": "袁娅维" + }, + { + "n": "大张伟", + "v": "大张伟" + }, + { + "n": "TFBOYS", + "v": "TFBOYS" + }, + { + "n": "王俊凯", + "v": "王俊凯" + }, + { + "n": "易烊千玺", + "v": "易烊千玺" + }, + { + "n": "王源", + "v": "王源" + }, + { + "n": "田馥甄", + "v": "田馥甄" + }, + { + "n": "小虎队", + "v": "小虎队" + }, + { + "n": "张杰", + "v": "张杰" + }, + { + "n": "王菲", + "v": "王菲" + }, + { + "n": "伍佰", + "v": "伍佰" + }, + { + "n": "刀郎", + "v": "刀郎" + }, + { + "n": "草蜢", + "v": "草蜢" + }, + { + "n": "潘玮柏", + "v": "潘玮柏" + }, + { + "n": "梁静茹", + "v": "梁静茹" + }, + { + "n": "林宥嘉", + "v": "林宥嘉" + }, + { + "n": "蔡徐坤", + "v": "蔡徐坤" + }, + { + "n": "周慧敏", + "v": "周慧敏" + }, + { + "n": "李圣杰", + "v": "李圣杰" + }, + { + "n": "张惠妹", + "v": "张惠妹" + }, + { + "n": "萧敬腾", + "v": "萧敬腾" + }, + { + "n": "周笔畅", + "v": "周笔畅" + }, + { + "n": "焦迈奇", + "v": "焦迈奇" + }, + { + "n": "尤长靖", + "v": "尤长靖" + }, + { + "n": "郑中基", + "v": "郑中基" + }, + { + "n": "谭维维", + "v": "谭维维" + }, + { + "n": "陈慧娴", + "v": "陈慧娴" + }, + { + "n": "张艺兴", + "v": "张艺兴" + }, + { + "n": "王嘉尔", + "v": "王嘉尔" + }, + { + "n": "刘宪华", + "v": "刘宪华" + }, + { + "n": "张敬轩", + "v": "张敬轩" + }, + { + "n": "李克勤", + "v": "李克勤" + }, + { + "n": "阿杜", + "v": "阿杜" + }, + { + "n": "郭静", + "v": "郭静" + }, + { + "n": "崔健", + "v": "崔健" + }, + { + "n": "庾澄庆", + "v": "庾澄庆" + }, + { + "n": "汪峰", + "v": "汪峰" + }, + { + "n": "那英", + "v": "那英" + }, + { + "n": "杨坤", + "v": "杨坤" + }, + { + "n": "叶倩文", + "v": "叶倩文" + }, + { + "n": "王心凌", + "v": "王心凌" + }, + { + "n": "张震岳", + "v": "张震岳" + }, + { + "n": "韩红", + "v": "韩红" + }, + { + "n": "齐秦", + "v": "齐秦" + }, + { + "n": "张雨生", + "v": "张雨生" + }, + { + "n": "黄品源", + "v": "黄品源" + }, + { + "n": "林忆莲", + "v": "林忆莲" + }, + { + "n": "丁当", + "v": "丁当" + }, + { + "n": "郑智化", + "v": "郑智化" + }, + { + "n": "李玟", + "v": "李玟" + }, + { + "n": "谢霆锋", + "v": "谢霆锋" + }, + { + "n": "黄小琥", + "v": "黄小琥" + }, + { + "n": "徐小凤", + "v": "徐小凤" + }, + { + "n": "任嘉伦", + "v": "任嘉伦" + }, + { + "n": "卓依婷", + "v": "卓依婷" + }, + { + "n": "逃跑计划", + "v": "逃跑计划" + }, + { + "n": "青鸟飞鱼", + "v": "青鸟飞鱼" + }, + { + "n": "飞儿乐队", + "v": "飞儿乐队" + }, + { + "n": "花儿乐队", + "v": "花儿乐队" + }, + { + "n": "南拳妈妈", + "v": "南拳妈妈" + }, + { + "n": "水木年华", + "v": "水木年华" + }, + { + "n": "动力火车", + "v": "动力火车" + }, + { + "n": "筷子兄弟", + "v": "筷子兄弟" + }, + { + "n": "鹿先森乐队", + "v": "鹿先森乐队" + }, + { + "n": "信乐队", + "v": "信乐队" + }, + { + "n": "旅行团乐队", + "v": "旅行团乐队" + }, + { + "n": "By2", + "v": "By2" + }, + { + "n": "郁可唯", + "v": "郁可唯" + }, + { + "n": "宋亚森", + "v": "宋亚森" + }, + { + "n": "费玉清", + "v": "费玉清" + }, + { + "n": "费翔", + "v": "费翔" + }, + { + "n": "金志文", + "v": "金志文" + }, + { + "n": "黄家强", + "v": "黄家强" + }, + { + "n": "方大同", + "v": "方大同" + }, + { + "n": "吴克群", + "v": "吴克群" + }, + { + "n": "罗大佑", + "v": "罗大佑" + }, + { + "n": "光良", + "v": "光良" + }, + { + "n": "田震", + "v": "田震" + }, + { + "n": "凤飞飞", + "v": "凤飞飞" + }, + { + "n": "谭晶", + "v": "谭晶" + }, + { + "n": "王杰", + "v": "王杰" + }, + { + "n": "羽泉", + "v": "羽泉" + }, + { + "n": "金池", + "v": "金池" + }, + { + "n": "屠洪刚", + "v": "屠洪刚" + }, + { + "n": "戴荃", + "v": "戴荃" + }, + { + "n": "郭采洁", + "v": "郭采洁" + }, + { + "n": "罗志祥", + "v": "罗志祥" + }, + { + "n": "王力宏", + "v": "王力宏" + }, + { + "n": "林肯公园", + "v": "林肯公园" + }, + { + "n": "迈克尔杰克逊", + "v": "迈克尔杰克逊" + }, + { + "n": "泰勒·斯威夫特", + "v": "泰勒·斯威夫特" + }, + { + "n": "阿黛尔", + "v": "阿黛尔" + }, + { + "n": "BIGBANG", + "v": "BIGBANG" + }, + { + "n": "LadyGaga", + "v": "LadyGaga" + }, + { + "n": "贾斯丁比伯", + "v": "贾斯丁比伯" + }, + { + "n": "中岛美雪", + "v": "中岛美雪" + }, + { + "n": "仓木麻衣", + "v": "仓木麻衣" + }, + { + "n": "后街男孩", + "v": "后街男孩" + }, + { + "n": "布兰妮", + "v": "布兰妮" + }, + { + "n": "夜愿乐队", + "v": "夜愿乐队" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/drpy_t3/json/drpy_rules.json b/drpy_t3/json/drpy_rules.json new file mode 100644 index 0000000..c7f2271 --- /dev/null +++ b/drpy_t3/json/drpy_rules.json @@ -0,0 +1,5242 @@ +[ + { + "rule": "139影视", + "name": "139影视.js", + "size": "10.73kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/139影视.js", + "id": 1, + "from": "drpy源仓库1" + }, + { + "rule": "188影视", + "name": "188影视.js", + "size": "7.13kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/188影视.js", + "id": 2, + "from": "drpy源仓库1" + }, + { + "rule": "18哈", + "name": "18哈.js", + "size": "0.77kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/18哈.js", + "id": 3, + "from": "drpy源仓库1" + }, + { + "rule": "310直播", + "name": "310直播.js", + "size": "0.49kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/310直播.js", + "id": 4, + "from": "drpy源仓库1" + }, + { + "rule": "333影视", + "name": "333影视.js", + "size": "10.32kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/333影视.js", + "id": 5, + "from": "drpy源仓库1" + }, + { + "rule": "348电影网", + "name": "348电影网.js", + "size": "6.84kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/348电影网.js", + "id": 6, + "from": "drpy源仓库1" + }, + { + "rule": "360影视", + "name": "360影视.js", + "size": "2.89kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/360影视.js", + "id": 7, + "from": "drpy源仓库1" + }, + { + "rule": "4K电影网", + "name": "4K电影网.js", + "size": "12.64kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/4K电影网.js", + "id": 8, + "from": "drpy源仓库1" + }, + { + "rule": "4k剧院", + "name": "4k剧院.js", + "size": "9.97kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/4k剧院.js", + "id": 9, + "from": "drpy源仓库1" + }, + { + "rule": "555影视[飞]", + "name": "555影视[飞].js", + "size": "11.04kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/555影视[飞].js", + "id": 10, + "from": "drpy源仓库1" + }, + { + "rule": "555电影[V2]", + "name": "555电影[V2].js", + "size": "18.47kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/555电影[V2].js", + "id": 11, + "from": "drpy源仓库1" + }, + { + "rule": "567电影院", + "name": "567电影院.js", + "size": "6.92kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/567电影院.js", + "id": 12, + "from": "drpy源仓库1" + }, + { + "rule": "58动漫", + "name": "58动漫.js", + "size": "3.35kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/58动漫.js", + "id": 13, + "from": "drpy源仓库1" + }, + { + "rule": "69美剧", + "name": "69美剧.js", + "size": "13.1kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/69美剧.js", + "id": 14, + "from": "drpy源仓库1" + }, + { + "rule": "69美剧[V2]", + "name": "69美剧[V2].js", + "size": "7.11kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/69美剧[V2].js", + "id": 15, + "from": "drpy源仓库1" + }, + { + "rule": "6V新版[磁]", + "name": "6V新版[磁].js", + "size": "2.1kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/6V新版[磁].js", + "id": 16, + "from": "drpy源仓库1" + }, + { + "rule": "7喜影院", + "name": "7喜影院.js", + "size": "1.0kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/7喜影院.js", + "id": 17, + "from": "drpy源仓库1" + }, + { + "rule": "88看球", + "name": "88看球.js", + "size": "1.9kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/88看球.js", + "id": 18, + "from": "drpy源仓库1" + }, + { + "rule": "8号影院", + "name": "8号影院.js", + "size": "1.17kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/8号影院.js", + "id": 19, + "from": "drpy源仓库1" + }, + { + "rule": "996影视", + "name": "996影视.js", + "size": "15.4kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/996影视.js", + "id": 20, + "from": "drpy源仓库1" + }, + { + "rule": "A8音乐", + "name": "A8音乐.js", + "size": "0.65kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/A8音乐.js", + "id": 21, + "from": "drpy源仓库1" + }, + { + "rule": "AGE动漫", + "name": "AGE动漫.js", + "size": "13.71kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/AGE动漫.js", + "id": 22, + "from": "drpy源仓库1" + }, + { + "rule": "AnFuns", + "name": "AnFuns.js", + "size": "4.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/AnFuns.js", + "id": 23, + "from": "drpy源仓库1" + }, + { + "rule": "Anime1动畫", + "name": "Anime1动畫.js", + "size": "4.79kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/Anime1动畫.js", + "id": 24, + "from": "drpy源仓库1" + }, + { + "rule": "Auete", + "name": "Auete.js", + "size": "3.97kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/Auete.js", + "id": 25, + "from": "drpy源仓库1" + }, + { + "rule": "B站影视", + "name": "B站影视.js", + "size": "9.13kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/B站影视.js", + "id": 26, + "from": "drpy源仓库1" + }, + { + "rule": "DJ音乐", + "name": "DJ音乐.js", + "size": "1.67kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/DJ音乐.js", + "id": 27, + "from": "drpy源仓库1" + }, + { + "rule": "Fun4K", + "name": "Fun4K.js", + "size": "11.64kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/Fun4K.js", + "id": 28, + "from": "drpy源仓库1" + }, + { + "rule": "HDmoli", + "name": "HDmoli.js", + "size": "5.7kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/HDmoli.js", + "id": 29, + "from": "drpy源仓库1" + }, + { + "rule": "JRKAN直播", + "name": "JRKAN直播.js", + "size": "2.45kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/JRKAN直播.js", + "id": 30, + "from": "drpy源仓库1" + }, + { + "rule": "JangoIndex", + "name": "JangoIndex.js", + "size": "0.91kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/JangoIndex.js", + "id": 31, + "from": "drpy源仓库1" + }, + { + "rule": "JustLive", + "name": "JustLive.js", + "size": "92.15kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/JustLive.js", + "id": 32, + "from": "drpy源仓库1" + }, + { + "rule": "KOK影院", + "name": "KOK影院.js", + "size": "13.48kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/KOK影院.js", + "id": 33, + "from": "drpy源仓库1" + }, + { + "rule": "KUBO影视[飞]", + "name": "KUBO影视[飞].js", + "size": "16.72kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/KUBO影视[飞].js", + "id": 34, + "from": "drpy源仓库1" + }, + { + "rule": "LIBVIO", + "name": "LIBVIO.js", + "size": "7.23kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/LIBVIO.js", + "id": 35, + "from": "drpy源仓库1" + }, + { + "rule": "NT动漫", + "name": "NT动漫.js", + "size": "9.21kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/NT动漫.js", + "id": 36, + "from": "drpy源仓库1" + }, + { + "rule": "NY影院", + "name": "NY影院.js", + "size": "14.41kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/NY影院.js", + "id": 37, + "from": "drpy源仓库1" + }, + { + "rule": "NyaFun", + "name": "NyaFun.js", + "size": "0.46kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/NyaFun.js", + "id": 38, + "from": "drpy源仓库1" + }, + { + "rule": "TVB云播", + "name": "TVB云播.js", + "size": "10.51kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/TVB云播.js", + "id": 39, + "from": "drpy源仓库1" + }, + { + "rule": "UrleBird[飞]", + "name": "UrleBird[飞].js", + "size": "0.98kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/UrleBird[飞].js", + "id": 40, + "from": "drpy源仓库1" + }, + { + "rule": "cokemv", + "name": "cokemv.js", + "size": "12.86kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/cokemv.js", + "id": 41, + "from": "drpy源仓库1" + }, + { + "rule": "ddys", + "name": "ddys.js", + "size": "6.15kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/ddys.js", + "id": 42, + "from": "drpy源仓库1" + }, + { + "rule": "drpy", + "name": "drpy.js", + "size": "13.12kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/drpy.js", + "id": 43, + "from": "drpy源仓库1" + }, + { + "rule": "i275听书", + "name": "i275听书.js", + "size": "2.55kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/i275听书.js", + "id": 44, + "from": "drpy源仓库1" + }, + { + "rule": "if101[飞]", + "name": "if101[飞].js", + "size": "16.0kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/if101[飞].js", + "id": 45, + "from": "drpy源仓库1" + }, + { + "rule": "ikanbot2", + "name": "ikanbot2.js", + "size": "11.88kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/ikanbot2.js", + "id": 46, + "from": "drpy源仓库1" + }, + { + "rule": "ikanbot3", + "name": "ikanbot3.js", + "size": "10.6kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/ikanbot3.js", + "id": 47, + "from": "drpy源仓库1" + }, + { + "rule": "jsapi", + "name": "jsapi.js", + "size": "17.21kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/jsapi.js", + "id": 48, + "from": "drpy源仓库1" + }, + { + "rule": "voflix", + "name": "voflix.js", + "size": "12.25kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/voflix.js", + "id": 49, + "from": "drpy源仓库1" + }, + { + "rule": "两个BT", + "name": "两个BT.js", + "size": "8.3kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/两个BT.js", + "id": 50, + "from": "drpy源仓库1" + }, + { + "rule": "中国人线上看", + "name": "中国人线上看.js", + "size": "0.83kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/中国人线上看.js", + "id": 51, + "from": "drpy源仓库1" + }, + { + "rule": "乐鱼影视", + "name": "乐鱼影视.js", + "size": "9.85kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/乐鱼影视.js", + "id": 52, + "from": "drpy源仓库1" + }, + { + "rule": "人人影视", + "name": "人人影视.js", + "size": "8.54kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/人人影视.js", + "id": 53, + "from": "drpy源仓库1" + }, + { + "rule": "优酷", + "name": "优酷.js", + "size": "28.85kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/优酷.js", + "id": 54, + "from": "drpy源仓库1" + }, + { + "rule": "兄弟影视", + "name": "兄弟影视.js", + "size": "10.86kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/兄弟影视.js", + "id": 55, + "from": "drpy源仓库1" + }, + { + "rule": "免费看", + "name": "免费看.js", + "size": "20.62kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/免费看.js", + "id": 56, + "from": "drpy源仓库1" + }, + { + "rule": "兔小贝", + "name": "兔小贝.js", + "size": "0.99kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/兔小贝.js", + "id": 57, + "from": "drpy源仓库1" + }, + { + "rule": "六月听书", + "name": "六月听书.js", + "size": "1.61kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/六月听书.js", + "id": 58, + "from": "drpy源仓库1" + }, + { + "rule": "兰花影院", + "name": "兰花影院.js", + "size": "14.63kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/兰花影院.js", + "id": 59, + "from": "drpy源仓库1" + }, + { + "rule": "农民影视", + "name": "农民影视.js", + "size": "13.73kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/农民影视.js", + "id": 60, + "from": "drpy源仓库1" + }, + { + "rule": "凌云影视", + "name": "凌云影视.js", + "size": "12.3kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/凌云影视.js", + "id": 61, + "from": "drpy源仓库1" + }, + { + "rule": "刺桐[V2]", + "name": "刺桐[V2].js", + "size": "15.7kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/刺桐[V2].js", + "id": 62, + "from": "drpy源仓库1" + }, + { + "rule": "剧迷su", + "name": "剧迷su.js", + "size": "4.8kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/剧迷su.js", + "id": 63, + "from": "drpy源仓库1" + }, + { + "rule": "动漫岛", + "name": "动漫岛.js", + "size": "9.13kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/动漫岛.js", + "id": 64, + "from": "drpy源仓库1" + }, + { + "rule": "北川影视", + "name": "北川影视.js", + "size": "10.02kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/北川影视.js", + "id": 65, + "from": "drpy源仓库1" + }, + { + "rule": "华乐影院[飞]", + "name": "华乐影院[飞].js", + "size": "12.14kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/华乐影院[飞].js", + "id": 66, + "from": "drpy源仓库1" + }, + { + "rule": "南瓜影视", + "name": "南瓜影视.js", + "size": "11.15kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/南瓜影视.js", + "id": 67, + "from": "drpy源仓库1" + }, + { + "rule": "博看听书", + "name": "博看听书.js", + "size": "1.99kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/博看听书.js", + "id": 68, + "from": "drpy源仓库1" + }, + { + "rule": "厂长资源", + "name": "厂长资源.js", + "size": "6.94kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/厂长资源.js", + "id": 69, + "from": "drpy源仓库1" + }, + { + "rule": "去看吧", + "name": "去看吧.js", + "size": "12.15kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/去看吧.js", + "id": 70, + "from": "drpy源仓库1" + }, + { + "rule": "听书网", + "name": "听书网.js", + "size": "0.97kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/听书网.js", + "id": 71, + "from": "drpy源仓库1" + }, + { + "rule": "咕噜[V2]", + "name": "咕噜[V2].js", + "size": "16.65kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/咕噜[V2].js", + "id": 72, + "from": "drpy源仓库1" + }, + { + "rule": "哔哩影视", + "name": "哔哩影视.js", + "size": "10.52kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/哔哩影视.js", + "id": 73, + "from": "drpy源仓库1" + }, + { + "rule": "哔哩直播", + "name": "哔哩直播.js", + "size": "17.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/哔哩直播.js", + "id": 74, + "from": "drpy源仓库1" + }, + { + "rule": "哔嘀影视", + "name": "哔嘀影视.js", + "size": "4.37kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/哔嘀影视.js", + "id": 75, + "from": "drpy源仓库1" + }, + { + "rule": "啦啦DJ", + "name": "啦啦DJ.js", + "size": "0.68kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/啦啦DJ.js", + "id": 76, + "from": "drpy源仓库1" + }, + { + "rule": "喜马拉雅", + "name": "喜马拉雅.js", + "size": "3.53kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/喜马拉雅.js", + "id": 77, + "from": "drpy源仓库1" + }, + { + "rule": "喵次元", + "name": "喵次元.js", + "size": "7.33kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/喵次元.js", + "id": 78, + "from": "drpy源仓库1" + }, + { + "rule": "四个圈影视", + "name": "四个圈影视.js", + "size": "14.49kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/四个圈影视.js", + "id": 79, + "from": "drpy源仓库1" + }, + { + "rule": "在线之家", + "name": "在线之家.js", + "size": "7.33kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/在线之家.js", + "id": 80, + "from": "drpy源仓库1" + }, + { + "rule": "多瑙影视", + "name": "多瑙影视.js", + "size": "14.21kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/多瑙影视.js", + "id": 81, + "from": "drpy源仓库1" + }, + { + "rule": "大师兄影视", + "name": "大师兄影视.js", + "size": "11.55kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/大师兄影视.js", + "id": 82, + "from": "drpy源仓库1" + }, + { + "rule": "大米星球", + "name": "大米星球.js", + "size": "11.71kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/大米星球.js", + "id": 83, + "from": "drpy源仓库1" + }, + { + "rule": "大米星球[V2]", + "name": "大米星球[V2].js", + "size": "18.78kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/大米星球[V2].js", + "id": 84, + "from": "drpy源仓库1" + }, + { + "rule": "天天视频[飞]", + "name": "天天视频[飞].js", + "size": "8.38kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/天天视频[飞].js", + "id": 85, + "from": "drpy源仓库1" + }, + { + "rule": "奇优影院", + "name": "奇优影院.js", + "size": "1.94kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/奇优影院.js", + "id": 86, + "from": "drpy源仓库1" + }, + { + "rule": "奇珍异兽", + "name": "奇珍异兽.js", + "size": "23.04kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/奇珍异兽.js", + "id": 87, + "from": "drpy源仓库1" + }, + { + "rule": "奇米动漫", + "name": "奇米动漫.js", + "size": "12.15kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/奇米动漫.js", + "id": 88, + "from": "drpy源仓库1" + }, + { + "rule": "奈飞中文", + "name": "奈飞中文.js", + "size": "17.88kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/奈飞中文.js", + "id": 89, + "from": "drpy源仓库1" + }, + { + "rule": "奈飞狗[V2]", + "name": "奈飞狗[V2].js", + "size": "15.96kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/奈飞狗[V2].js", + "id": 90, + "from": "drpy源仓库1" + }, + { + "rule": "好趣网", + "name": "好趣网.js", + "size": "2.28kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/好趣网.js", + "id": 91, + "from": "drpy源仓库1" + }, + { + "rule": "妮可动漫", + "name": "妮可动漫.js", + "size": "2.7kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/妮可动漫.js", + "id": 92, + "from": "drpy源仓库1" + }, + { + "rule": "孜然影视", + "name": "孜然影视.js", + "size": "9.39kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/孜然影视.js", + "id": 93, + "from": "drpy源仓库1" + }, + { + "rule": "小品网", + "name": "小品网.js", + "size": "0.59kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/小品网.js", + "id": 94, + "from": "drpy源仓库1" + }, + { + "rule": "小宝影院[飞]", + "name": "小宝影院[飞].js", + "size": "14.05kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/小宝影院[飞].js", + "id": 95, + "from": "drpy源仓库1" + }, + { + "rule": "小狗影院", + "name": "小狗影院.js", + "size": "12.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/小狗影院.js", + "id": 96, + "from": "drpy源仓库1" + }, + { + "rule": "小白菜电影", + "name": "小白菜电影.js", + "size": "15.66kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/小白菜电影.js", + "id": 97, + "from": "drpy源仓库1" + }, + { + "rule": "尘落影视", + "name": "尘落影视.js", + "size": "6.37kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/尘落影视.js", + "id": 98, + "from": "drpy源仓库1" + }, + { + "rule": "干饭影视", + "name": "干饭影视.js", + "size": "8.92kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/干饭影视.js", + "id": 99, + "from": "drpy源仓库1" + }, + { + "rule": "广播迷FM", + "name": "广播迷FM.js", + "size": "2.63kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/广播迷FM.js", + "id": 100, + "from": "drpy源仓库1" + }, + { + "rule": "开眼视频", + "name": "开眼视频.js", + "size": "1.25kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/开眼视频.js", + "id": 101, + "from": "drpy源仓库1" + }, + { + "rule": "异世界动漫", + "name": "异世界动漫.js", + "size": "4.6kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/异世界动漫.js", + "id": 102, + "from": "drpy源仓库1" + }, + { + "rule": "影渣渣", + "name": "影渣渣.js", + "size": "17.95kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/影渣渣.js", + "id": 103, + "from": "drpy源仓库1" + }, + { + "rule": "影视之家[V2]", + "name": "影视之家[V2].js", + "size": "16.12kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/影视之家[V2].js", + "id": 104, + "from": "drpy源仓库1" + }, + { + "rule": "影视工场", + "name": "影视工场.js", + "size": "7.81kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/影视工场.js", + "id": 105, + "from": "drpy源仓库1" + }, + { + "rule": "徕米TV", + "name": "徕米TV.js", + "size": "11.42kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/徕米TV.js", + "id": 106, + "from": "drpy源仓库1" + }, + { + "rule": "快看", + "name": "快看.js", + "size": "2.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/快看.js", + "id": 107, + "from": "drpy源仓库1" + }, + { + "rule": "思古影视", + "name": "思古影视.js", + "size": "14.2kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/思古影视.js", + "id": 108, + "from": "drpy源仓库1" + }, + { + "rule": "思古影视[V2]", + "name": "思古影视[V2].js", + "size": "13.38kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/思古影视[V2].js", + "id": 109, + "from": "drpy源仓库1" + }, + { + "rule": "怡萱动漫", + "name": "怡萱动漫.js", + "size": "9.5kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/怡萱动漫.js", + "id": 110, + "from": "drpy源仓库1" + }, + { + "rule": "悠久影院", + "name": "悠久影院.js", + "size": "7.12kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/悠久影院.js", + "id": 111, + "from": "drpy源仓库1" + }, + { + "rule": "我爱跟剧", + "name": "我爱跟剧.js", + "size": "15.02kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/我爱跟剧.js", + "id": 112, + "from": "drpy源仓库1" + }, + { + "rule": "我的哔哩", + "name": "我的哔哩.js", + "size": "77.44kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/我的哔哩.js", + "id": 113, + "from": "drpy源仓库1" + }, + { + "rule": "播客", + "name": "播客.js", + "size": "1.96kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/播客.js", + "id": 114, + "from": "drpy源仓库1" + }, + { + "rule": "斗鱼直播", + "name": "斗鱼直播.js", + "size": "39.3kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/斗鱼直播.js", + "id": 115, + "from": "drpy源仓库1" + }, + { + "rule": "新片场", + "name": "新片场.js", + "size": "13.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/新片场.js", + "id": 116, + "from": "drpy源仓库1" + }, + { + "rule": "新视觉影视", + "name": "新视觉影视.js", + "size": "10.2kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/新视觉影视.js", + "id": 117, + "from": "drpy源仓库1" + }, + { + "rule": "星辰", + "name": "星辰.js", + "size": "1.33kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/星辰.js", + "id": 118, + "from": "drpy源仓库1" + }, + { + "rule": "映迷影院", + "name": "映迷影院.js", + "size": "15.1kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/映迷影院.js", + "id": 119, + "from": "drpy源仓库1" + }, + { + "rule": "曲奇动漫", + "name": "曲奇动漫.js", + "size": "9.59kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/曲奇动漫.js", + "id": 120, + "from": "drpy源仓库1" + }, + { + "rule": "曲奇影视[V2]", + "name": "曲奇影视[V2].js", + "size": "14.96kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/曲奇影视[V2].js", + "id": 121, + "from": "drpy源仓库1" + }, + { + "rule": "有声小说吧", + "name": "有声小说吧.js", + "size": "1.79kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/有声小说吧.js", + "id": 122, + "from": "drpy源仓库1" + }, + { + "rule": "有声绘本网", + "name": "有声绘本网.js", + "size": "0.54kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/有声绘本网.js", + "id": 123, + "from": "drpy源仓库1" + }, + { + "rule": "朴樱影视", + "name": "朴樱影视.js", + "size": "12.77kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/朴樱影视.js", + "id": 124, + "from": "drpy源仓库1" + }, + { + "rule": "楚门影院", + "name": "楚门影院.js", + "size": "11.32kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/楚门影院.js", + "id": 125, + "from": "drpy源仓库1" + }, + { + "rule": "模板", + "name": "模板.js", + "size": "14.94kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/模板.js", + "id": 126, + "from": "drpy源仓库1" + }, + { + "rule": "欧乐影院[飞]", + "name": "欧乐影院[飞].js", + "size": "15.22kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/欧乐影院[飞].js", + "id": 127, + "from": "drpy源仓库1" + }, + { + "rule": "欧帝影院", + "name": "欧帝影院.js", + "size": "11.68kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/欧帝影院.js", + "id": 128, + "from": "drpy源仓库1" + }, + { + "rule": "武享吧", + "name": "武享吧.js", + "size": "1.14kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/武享吧.js", + "id": 129, + "from": "drpy源仓库1" + }, + { + "rule": "歪片星球", + "name": "歪片星球.js", + "size": "8.83kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/歪片星球.js", + "id": 130, + "from": "drpy源仓库1" + }, + { + "rule": "海洋听书", + "name": "海洋听书.js", + "size": "2.01kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/海洋听书.js", + "id": 131, + "from": "drpy源仓库1" + }, + { + "rule": "清风DJ", + "name": "清风DJ.js", + "size": "5.96kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/清风DJ.js", + "id": 132, + "from": "drpy源仓库1" + }, + { + "rule": "热播之家", + "name": "热播之家.js", + "size": "10.37kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/热播之家.js", + "id": 133, + "from": "drpy源仓库1" + }, + { + "rule": "热播库", + "name": "热播库.js", + "size": "7.2kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/热播库.js", + "id": 134, + "from": "drpy源仓库1" + }, + { + "rule": "爱上你听书网", + "name": "爱上你听书网.js", + "size": "0.96kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/爱上你听书网.js", + "id": 135, + "from": "drpy源仓库1" + }, + { + "rule": "爱壹帆[飞]", + "name": "爱壹帆[飞].js", + "size": "15.39kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/爱壹帆[飞].js", + "id": 136, + "from": "drpy源仓库1" + }, + { + "rule": "爱弹幕", + "name": "爱弹幕.js", + "size": "8.53kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/爱弹幕.js", + "id": 137, + "from": "drpy源仓库1" + }, + { + "rule": "爱看", + "name": "爱看.js", + "size": "17.12kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/爱看.js", + "id": 138, + "from": "drpy源仓库1" + }, + { + "rule": "爱看影院", + "name": "爱看影院.js", + "size": "6.5kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/爱看影院.js", + "id": 139, + "from": "drpy源仓库1" + }, + { + "rule": "爱看机器人", + "name": "爱看机器人.js", + "size": "5.19kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/爱看机器人.js", + "id": 140, + "from": "drpy源仓库1" + }, + { + "rule": "爱车MV", + "name": "爱车MV.js", + "size": "0.63kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/爱车MV.js", + "id": 141, + "from": "drpy源仓库1" + }, + { + "rule": "爱迪[V2]", + "name": "爱迪[V2].js", + "size": "17.01kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/爱迪[V2].js", + "id": 142, + "from": "drpy源仓库1" + }, + { + "rule": "爱迪影视", + "name": "爱迪影视.js", + "size": "13.94kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/爱迪影视.js", + "id": 143, + "from": "drpy源仓库1" + }, + { + "rule": "独播库[飞]", + "name": "独播库[飞].js", + "size": "21.84kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/独播库[飞].js", + "id": 144, + "from": "drpy源仓库1" + }, + { + "rule": "猫了个咪", + "name": "猫了个咪.js", + "size": "1.89kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/猫了个咪.js", + "id": 145, + "from": "drpy源仓库1" + }, + { + "rule": "电影先生", + "name": "电影先生.js", + "size": "13.02kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/电影先生.js", + "id": 146, + "from": "drpy源仓库1" + }, + { + "rule": "百忙无果", + "name": "百忙无果.js", + "size": "10.39kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/百忙无果.js", + "id": 147, + "from": "drpy源仓库1" + }, + { + "rule": "相声随身听", + "name": "相声随身听.js", + "size": "2.34kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/相声随身听.js", + "id": 148, + "from": "drpy源仓库1" + }, + { + "rule": "看了么", + "name": "看了么.js", + "size": "10.5kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/看了么.js", + "id": 149, + "from": "drpy源仓库1" + }, + { + "rule": "看韩剧", + "name": "看韩剧.js", + "size": "3.43kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/看韩剧.js", + "id": 150, + "from": "drpy源仓库1" + }, + { + "rule": "短视频", + "name": "短视频.js", + "size": "1.78kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/短视频.js", + "id": 151, + "from": "drpy源仓库1" + }, + { + "rule": "磁力熊[磁]", + "name": "磁力熊[磁].js", + "size": "6.25kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/磁力熊[磁].js", + "id": 152, + "from": "drpy源仓库1" + }, + { + "rule": "私人影院", + "name": "私人影院.js", + "size": "10.85kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/私人影院.js", + "id": 153, + "from": "drpy源仓库1" + }, + { + "rule": "秋霞", + "name": "秋霞.js", + "size": "8.97kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/秋霞.js", + "id": 154, + "from": "drpy源仓库1" + }, + { + "rule": "童趣", + "name": "童趣.js", + "size": "8.0kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/童趣.js", + "id": 155, + "from": "drpy源仓库1" + }, + { + "rule": "米爱影视", + "name": "米爱影视.js", + "size": "11.91kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/米爱影视.js", + "id": 156, + "from": "drpy源仓库1" + }, + { + "rule": "素白白", + "name": "素白白.js", + "size": "11.97kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/素白白.js", + "id": 157, + "from": "drpy源仓库1" + }, + { + "rule": "网易公版影像", + "name": "网易公版影像.js", + "size": "0.98kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/网易公版影像.js", + "id": 158, + "from": "drpy源仓库1" + }, + { + "rule": "网飞.TV", + "name": "网飞.TV.js", + "size": "17.62kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/网飞.TV.js", + "id": 159, + "from": "drpy源仓库1" + }, + { + "rule": "美剧网", + "name": "美剧网.js", + "size": "14.62kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/美剧网.js", + "id": 160, + "from": "drpy源仓库1" + }, + { + "rule": "美益达[V2]", + "name": "美益达[V2].js", + "size": "16.61kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/美益达[V2].js", + "id": 161, + "from": "drpy源仓库1" + }, + { + "rule": "胖虎", + "name": "胖虎.js", + "size": "16.64kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/胖虎.js", + "id": 162, + "from": "drpy源仓库1" + }, + { + "rule": "腾云驾雾", + "name": "腾云驾雾.js", + "size": "12.93kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/腾云驾雾.js", + "id": 163, + "from": "drpy源仓库1" + }, + { + "rule": "苹果爱微", + "name": "苹果爱微.js", + "size": "1.05kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/苹果爱微.js", + "id": 164, + "from": "drpy源仓库1" + }, + { + "rule": "荐片", + "name": "荐片.js", + "size": "8.31kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/荐片.js", + "id": 165, + "from": "drpy源仓库1" + }, + { + "rule": "菜狗", + "name": "菜狗.js", + "size": "16.43kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/菜狗.js", + "id": 166, + "from": "drpy源仓库1" + }, + { + "rule": "落攻阁影视", + "name": "落攻阁影视.js", + "size": "11.38kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/落攻阁影视.js", + "id": 167, + "from": "drpy源仓库1" + }, + { + "rule": "蓝光影院", + "name": "蓝光影院.js", + "size": "11.03kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/蓝光影院.js", + "id": 168, + "from": "drpy源仓库1" + }, + { + "rule": "虎牙直播", + "name": "虎牙直播.js", + "size": "22.24kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/虎牙直播.js", + "id": 169, + "from": "drpy源仓库1" + }, + { + "rule": "蛋蛋剧", + "name": "蛋蛋剧.js", + "size": "8.5kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/蛋蛋剧.js", + "id": 170, + "from": "drpy源仓库1" + }, + { + "rule": "蛋蛋赞", + "name": "蛋蛋赞.js", + "size": "7.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/蛋蛋赞.js", + "id": 171, + "from": "drpy源仓库1" + }, + { + "rule": "蜻蜓FM", + "name": "蜻蜓FM.js", + "size": "1.2kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/蜻蜓FM.js", + "id": 172, + "from": "drpy源仓库1" + }, + { + "rule": "评书随身听", + "name": "评书随身听.js", + "size": "6.46kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/评书随身听.js", + "id": 173, + "from": "drpy源仓库1" + }, + { + "rule": "起飞影院", + "name": "起飞影院.js", + "size": "9.29kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/起飞影院.js", + "id": 174, + "from": "drpy源仓库1" + }, + { + "rule": "跑TV", + "name": "跑TV.js", + "size": "1.77kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/跑TV.js", + "id": 175, + "from": "drpy源仓库1" + }, + { + "rule": "路漫漫", + "name": "路漫漫.js", + "size": "4.79kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/路漫漫.js", + "id": 176, + "from": "drpy源仓库1" + }, + { + "rule": "达达龟", + "name": "达达龟.js", + "size": "6.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/达达龟.js", + "id": 177, + "from": "drpy源仓库1" + }, + { + "rule": "追剧迷", + "name": "追剧迷.js", + "size": "1.27kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/追剧迷.js", + "id": 178, + "from": "drpy源仓库1" + }, + { + "rule": "酷6网", + "name": "酷6网.js", + "size": "0.87kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/酷6网.js", + "id": 179, + "from": "drpy源仓库1" + }, + { + "rule": "酷云77", + "name": "酷云77.js", + "size": "10.72kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/酷云77.js", + "id": 180, + "from": "drpy源仓库1" + }, + { + "rule": "酷奇MV", + "name": "酷奇MV.js", + "size": "1.07kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/酷奇MV.js", + "id": 181, + "from": "drpy源仓库1" + }, + { + "rule": "量子影视", + "name": "量子影视.js", + "size": "16.59kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/量子影视.js", + "id": 182, + "from": "drpy源仓库1" + }, + { + "rule": "量子资源", + "name": "量子资源.js", + "size": "2.99kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/量子资源.js", + "id": 183, + "from": "drpy源仓库1" + }, + { + "rule": "金曼影视", + "name": "金曼影视.js", + "size": "17.43kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/金曼影视.js", + "id": 184, + "from": "drpy源仓库1" + }, + { + "rule": "飞兔影视", + "name": "飞兔影视.js", + "size": "7.35kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/飞兔影视.js", + "id": 185, + "from": "drpy源仓库1" + }, + { + "rule": "首播影院", + "name": "首播影院.js", + "size": "27.3kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/首播影院.js", + "id": 186, + "from": "drpy源仓库1" + }, + { + "rule": "骚火电影", + "name": "骚火电影.js", + "size": "3.97kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/hjdhnx\/dr_py\/main\/js\/骚火电影.js", + "id": 187, + "from": "drpy源仓库1" + }, + { + "rule": "007影视", + "name": "007影视.js", + "size": "0.24kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/007影视.js", + "id": 188, + "from": "drpy源仓库2" + }, + { + "rule": "100影院", + "name": "100影院.js", + "size": "12.85kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/100影院.js", + "id": 189, + "from": "drpy源仓库2" + }, + { + "rule": "1080P", + "name": "1080P.js", + "size": "0.24kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/1080P.js", + "id": 190, + "from": "drpy源仓库2" + }, + { + "rule": "188看", + "name": "188看.js", + "size": "6.92kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/188看.js", + "id": 191, + "from": "drpy源仓库2" + }, + { + "rule": "18av", + "name": "18av.js", + "size": "0.46kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/18av.js", + "id": 192, + "from": "drpy源仓库2" + }, + { + "rule": "2099电影", + "name": "2099电影.js", + "size": "1.37kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/2099电影.js", + "id": 193, + "from": "drpy源仓库2" + }, + { + "rule": "333影视", + "name": "333影视.js", + "size": "10.19kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/333影视.js", + "id": 194, + "from": "drpy源仓库2" + }, + { + "rule": "348电影网", + "name": "348电影网.js", + "size": "6.44kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/348电影网.js", + "id": 195, + "from": "drpy源仓库2" + }, + { + "rule": "360影视", + "name": "360影视.js", + "size": "2.89kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/360影视.js", + "id": 196, + "from": "drpy源仓库2" + }, + { + "rule": "539影院", + "name": "539影院.js", + "size": "9.98kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/539影院.js", + "id": 197, + "from": "drpy源仓库2" + }, + { + "rule": "69美剧", + "name": "69美剧.js", + "size": "13.42kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/69美剧.js", + "id": 198, + "from": "drpy源仓库2" + }, + { + "rule": "69美剧[V2]", + "name": "69美剧[V2].js", + "size": "7.02kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/69美剧[V2].js", + "id": 199, + "from": "drpy源仓库2" + }, + { + "rule": "7喜影院", + "name": "7喜影院.js", + "size": "2.21kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/7喜影院.js", + "id": 200, + "from": "drpy源仓库2" + }, + { + "rule": "898TV", + "name": "898TV.js", + "size": "1.41kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/898TV.js", + "id": 201, + "from": "drpy源仓库2" + }, + { + "rule": "91free", + "name": "91free.js", + "size": "4.57kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/91free.js", + "id": 202, + "from": "drpy源仓库2" + }, + { + "rule": "99影院", + "name": "99影院.js", + "size": "1.37kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/99影院.js", + "id": 203, + "from": "drpy源仓库2" + }, + { + "rule": "9U电影", + "name": "9U电影.js", + "size": "14.92kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/9U电影.js", + "id": 204, + "from": "drpy源仓库2" + }, + { + "rule": "AB影院", + "name": "AB影院.js", + "size": "5.48kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/AB影院.js", + "id": 205, + "from": "drpy源仓库2" + }, + { + "rule": "AGE动漫", + "name": "AGE动漫.js", + "size": "16.57kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/AGE动漫.js", + "id": 206, + "from": "drpy源仓库2" + }, + { + "rule": "Auete", + "name": "Auete.js", + "size": "2.45kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/Auete.js", + "id": 207, + "from": "drpy源仓库2" + }, + { + "rule": "BD影视", + "name": "BD影视.js", + "size": "1.54kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/BD影视.js", + "id": 208, + "from": "drpy源仓库2" + }, + { + "rule": "Fun4K", + "name": "Fun4K.js", + "size": "11.33kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/Fun4K.js", + "id": 209, + "from": "drpy源仓库2" + }, + { + "rule": "HDmoli", + "name": "HDmoli.js", + "size": "5.63kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/HDmoli.js", + "id": 210, + "from": "drpy源仓库2" + }, + { + "rule": "HG影院", + "name": "HG影院.js", + "size": "9.55kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/HG影院.js", + "id": 211, + "from": "drpy源仓库2" + }, + { + "rule": "HoHo影视", + "name": "HoHo影视.js", + "size": "8.86kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/HoHo影视.js", + "id": 212, + "from": "drpy源仓库2" + }, + { + "rule": "IMAX影视", + "name": "IMAX影视.js", + "size": "13.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/IMAX影视.js", + "id": 213, + "from": "drpy源仓库2" + }, + { + "rule": "JustLive", + "name": "JustLive.js", + "size": "27.73kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/JustLive.js", + "id": 214, + "from": "drpy源仓库2" + }, + { + "rule": "KOK影视", + "name": "KOK影视.js", + "size": "1.48kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/KOK影视.js", + "id": 215, + "from": "drpy源仓库2" + }, + { + "rule": "KUBO影视", + "name": "KUBO影视.js", + "size": "16.84kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/KUBO影视.js", + "id": 216, + "from": "drpy源仓库2" + }, + { + "rule": "LIBVIO", + "name": "LIBVIO.js", + "size": "9.9kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/LIBVIO.js", + "id": 217, + "from": "drpy源仓库2" + }, + { + "rule": "Missav", + "name": "Missav.js", + "size": "0.88kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/Missav.js", + "id": 218, + "from": "drpy源仓库2" + }, + { + "rule": "NY影院", + "name": "NY影院.js", + "size": "14.16kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/NY影院.js", + "id": 219, + "from": "drpy源仓库2" + }, + { + "rule": "Nike影视", + "name": "Nike影视.js", + "size": "8.98kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/Nike影视.js", + "id": 220, + "from": "drpy源仓库2" + }, + { + "rule": "RP影视", + "name": "RP影视.js", + "size": "0.96kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/RP影视.js", + "id": 221, + "from": "drpy源仓库2" + }, + { + "rule": "TF影院", + "name": "TF影院.js", + "size": "1.64kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/TF影院.js", + "id": 222, + "from": "drpy源仓库2" + }, + { + "rule": "TV蜂", + "name": "TV蜂.js", + "size": "1.37kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/TV蜂.js", + "id": 223, + "from": "drpy源仓库2" + }, + { + "rule": "Voflix", + "name": "Voflix.js", + "size": "12.26kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/Voflix.js", + "id": 224, + "from": "drpy源仓库2" + }, + { + "rule": "WZ影视", + "name": "WZ影视.js", + "size": "12.62kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/WZ影视.js", + "id": 225, + "from": "drpy源仓库2" + }, + { + "rule": "YOKE影视", + "name": "YOKE影视.js", + "size": "1.73kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/YOKE影视.js", + "id": 226, + "from": "drpy源仓库2" + }, + { + "rule": "alist", + "name": "alist.js", + "size": "8.66kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/alist.js", + "id": 227, + "from": "drpy源仓库2" + }, + { + "rule": "banan", + "name": "banan.js", + "size": "0.53kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/banan.js", + "id": 228, + "from": "drpy源仓库2" + }, + { + "rule": "cokemv", + "name": "cokemv.js", + "size": "10.01kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/cokemv.js", + "id": 229, + "from": "drpy源仓库2" + }, + { + "rule": "ddys", + "name": "ddys.js", + "size": "4.26kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/ddys.js", + "id": 230, + "from": "drpy源仓库2" + }, + { + "rule": "douban", + "name": "douban.js", + "size": "9.73kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/douban.js", + "id": 231, + "from": "drpy源仓库2" + }, + { + "rule": "drT", + "name": "drT.js", + "size": "8.28kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/drT.js", + "id": 232, + "from": "drpy源仓库2" + }, + { + "rule": "drpy", + "name": "drpy.js", + "size": "12.75kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/drpy.js", + "id": 233, + "from": "drpy源仓库2" + }, + { + "rule": "fositv", + "name": "fositv.js", + "size": "1.39kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/fositv.js", + "id": 234, + "from": "drpy源仓库2" + }, + { + "rule": "if101", + "name": "if101.js", + "size": "16.83kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/if101.js", + "id": 235, + "from": "drpy源仓库2" + }, + { + "rule": "l0l", + "name": "l0l.js", + "size": "0.93kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/l0l.js", + "id": 236, + "from": "drpy源仓库2" + }, + { + "rule": "l0l影视", + "name": "l0l影视.js", + "size": "7.62kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/l0l影视.js", + "id": 237, + "from": "drpy源仓库2" + }, + { + "rule": "七小时影院", + "name": "七小时影院.js", + "size": "0.61kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/七小时影院.js", + "id": 238, + "from": "drpy源仓库2" + }, + { + "rule": "七年影视", + "name": "七年影视.js", + "size": "6.09kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/七年影视.js", + "id": 239, + "from": "drpy源仓库2" + }, + { + "rule": "万博剧院", + "name": "万博剧院.js", + "size": "13.91kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/万博剧院.js", + "id": 240, + "from": "drpy源仓库2" + }, + { + "rule": "两个BT", + "name": "两个BT.js", + "size": "0.9kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/两个BT.js", + "id": 241, + "from": "drpy源仓库2" + }, + { + "rule": "乐动影视", + "name": "乐动影视.js", + "size": "1.58kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/乐动影视.js", + "id": 242, + "from": "drpy源仓库2" + }, + { + "rule": "乐猪TV", + "name": "乐猪TV.js", + "size": "2.04kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/乐猪TV.js", + "id": 243, + "from": "drpy源仓库2" + }, + { + "rule": "乐鱼影视", + "name": "乐鱼影视.js", + "size": "9.13kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/乐鱼影视.js", + "id": 244, + "from": "drpy源仓库2" + }, + { + "rule": "九酷影视", + "name": "九酷影视.js", + "size": "1.96kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/九酷影视.js", + "id": 245, + "from": "drpy源仓库2" + }, + { + "rule": "人人影视", + "name": "人人影视.js", + "size": "0.37kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/人人影视.js", + "id": 246, + "from": "drpy源仓库2" + }, + { + "rule": "人人影视2", + "name": "人人影视2.js", + "size": "12.84kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/人人影视2.js", + "id": 247, + "from": "drpy源仓库2" + }, + { + "rule": "伊人追剧", + "name": "伊人追剧.js", + "size": "1.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/伊人追剧.js", + "id": 248, + "from": "drpy源仓库2" + }, + { + "rule": "优酷", + "name": "优酷.js", + "size": "28.52kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/优酷.js", + "id": 249, + "from": "drpy源仓库2" + }, + { + "rule": "偲霖影视", + "name": "偲霖影视.js", + "size": "1.21kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/偲霖影视.js", + "id": 250, + "from": "drpy源仓库2" + }, + { + "rule": "光棍影院", + "name": "光棍影院.js", + "size": "6.66kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/光棍影院.js", + "id": 251, + "from": "drpy源仓库2" + }, + { + "rule": "兔小贝", + "name": "兔小贝.js", + "size": "0.99kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/兔小贝.js", + "id": 252, + "from": "drpy源仓库2" + }, + { + "rule": "八蛋影视", + "name": "八蛋影视.js", + "size": "1.95kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/八蛋影视.js", + "id": 253, + "from": "drpy源仓库2" + }, + { + "rule": "兰花影院", + "name": "兰花影院.js", + "size": "9.21kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/兰花影院.js", + "id": 254, + "from": "drpy源仓库2" + }, + { + "rule": "农民影视", + "name": "农民影视.js", + "size": "10.49kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/农民影视.js", + "id": 255, + "from": "drpy源仓库2" + }, + { + "rule": "冲TV", + "name": "冲TV.js", + "size": "13.13kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/冲TV.js", + "id": 256, + "from": "drpy源仓库2" + }, + { + "rule": "利丽娅电影", + "name": "利丽娅电影.js", + "size": "11.46kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/利丽娅电影.js", + "id": 257, + "from": "drpy源仓库2" + }, + { + "rule": "剧荒", + "name": "剧荒.js", + "size": "1.46kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/剧荒.js", + "id": 258, + "from": "drpy源仓库2" + }, + { + "rule": "剧迷", + "name": "剧迷.js", + "size": "0.44kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/剧迷.js", + "id": 259, + "from": "drpy源仓库2" + }, + { + "rule": "午夜影视", + "name": "午夜影视.js", + "size": "2.63kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/午夜影视.js", + "id": 260, + "from": "drpy源仓库2" + }, + { + "rule": "南瓜影院", + "name": "南瓜影院.js", + "size": "1.4kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/南瓜影院.js", + "id": 261, + "from": "drpy源仓库2" + }, + { + "rule": "厂长资源", + "name": "厂长资源.js", + "size": "2.37kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/厂长资源.js", + "id": 262, + "from": "drpy源仓库2" + }, + { + "rule": "双十电影", + "name": "双十电影.js", + "size": "6.31kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/双十电影.js", + "id": 263, + "from": "drpy源仓库2" + }, + { + "rule": "叭度影视", + "name": "叭度影视.js", + "size": "9.38kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/叭度影视.js", + "id": 264, + "from": "drpy源仓库2" + }, + { + "rule": "吸瓜", + "name": "吸瓜.js", + "size": "0.65kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/吸瓜.js", + "id": 265, + "from": "drpy源仓库2" + }, + { + "rule": "哔哩兔", + "name": "哔哩兔.js", + "size": "8.82kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/哔哩兔.js", + "id": 266, + "from": "drpy源仓库2" + }, + { + "rule": "哔哩影视", + "name": "哔哩影视.js", + "size": "8.74kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/哔哩影视.js", + "id": 267, + "from": "drpy源仓库2" + }, + { + "rule": "哔哩直播", + "name": "哔哩直播.js", + "size": "13.55kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/哔哩直播.js", + "id": 268, + "from": "drpy源仓库2" + }, + { + "rule": "唐人街影视", + "name": "唐人街影视.js", + "size": "13.13kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/唐人街影视.js", + "id": 269, + "from": "drpy源仓库2" + }, + { + "rule": "喜马拉雅", + "name": "喜马拉雅.js", + "size": "3.53kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/喜马拉雅.js", + "id": 270, + "from": "drpy源仓库2" + }, + { + "rule": "喵喵", + "name": "喵喵.js", + "size": "0.99kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/喵喵.js", + "id": 271, + "from": "drpy源仓库2" + }, + { + "rule": "回响影视", + "name": "回响影视.js", + "size": "11.28kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/回响影视.js", + "id": 272, + "from": "drpy源仓库2" + }, + { + "rule": "土狗影院", + "name": "土狗影院.js", + "size": "1.42kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/土狗影院.js", + "id": 273, + "from": "drpy源仓库2" + }, + { + "rule": "在线之家", + "name": "在线之家.js", + "size": "5.94kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/在线之家.js", + "id": 274, + "from": "drpy源仓库2" + }, + { + "rule": "在线之家Ⅱ", + "name": "在线之家Ⅱ.js", + "size": "7.84kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/在线之家Ⅱ.js", + "id": 275, + "from": "drpy源仓库2" + }, + { + "rule": "城市影视", + "name": "城市影视.js", + "size": "7.66kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/城市影视.js", + "id": 276, + "from": "drpy源仓库2" + }, + { + "rule": "多瑙影视", + "name": "多瑙影视.js", + "size": "10.51kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/多瑙影视.js", + "id": 277, + "from": "drpy源仓库2" + }, + { + "rule": "大中影视", + "name": "大中影视.js", + "size": "15.48kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/大中影视.js", + "id": 278, + "from": "drpy源仓库2" + }, + { + "rule": "大师兄影视", + "name": "大师兄影视.js", + "size": "0.26kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/大师兄影视.js", + "id": 279, + "from": "drpy源仓库2" + }, + { + "rule": "大猪蹄子", + "name": "大猪蹄子.js", + "size": "17.79kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/大猪蹄子.js", + "id": 280, + "from": "drpy源仓库2" + }, + { + "rule": "大米星球", + "name": "大米星球.js", + "size": "11.26kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/大米星球.js", + "id": 281, + "from": "drpy源仓库2" + }, + { + "rule": "大豆影视", + "name": "大豆影视.js", + "size": "7.9kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/大豆影视.js", + "id": 282, + "from": "drpy源仓库2" + }, + { + "rule": "天天影视", + "name": "天天影视.js", + "size": "1.24kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/天天影视.js", + "id": 283, + "from": "drpy源仓库2" + }, + { + "rule": "天天视频", + "name": "天天视频.js", + "size": "8.3kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/天天视频.js", + "id": 284, + "from": "drpy源仓库2" + }, + { + "rule": "天空影视", + "name": "天空影视.js", + "size": "17.23kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/天空影视.js", + "id": 285, + "from": "drpy源仓库2" + }, + { + "rule": "奇优影院", + "name": "奇优影院.js", + "size": "1.95kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/奇优影院.js", + "id": 286, + "from": "drpy源仓库2" + }, + { + "rule": "奇珍异兽", + "name": "奇珍异兽.js", + "size": "22.83kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/奇珍异兽.js", + "id": 287, + "from": "drpy源仓库2" + }, + { + "rule": "奇米动漫", + "name": "奇米动漫.js", + "size": "11.56kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/奇米动漫.js", + "id": 288, + "from": "drpy源仓库2" + }, + { + "rule": "好多影视", + "name": "好多影视.js", + "size": "1.5kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/好多影视.js", + "id": 289, + "from": "drpy源仓库2" + }, + { + "rule": "子子影视", + "name": "子子影视.js", + "size": "2.4kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/子子影视.js", + "id": 290, + "from": "drpy源仓库2" + }, + { + "rule": "孜然影视", + "name": "孜然影视.js", + "size": "10.5kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/孜然影视.js", + "id": 291, + "from": "drpy源仓库2" + }, + { + "rule": "宅腐影视", + "name": "宅腐影视.js", + "size": "9.65kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/宅腐影视.js", + "id": 292, + "from": "drpy源仓库2" + }, + { + "rule": "小宝影视", + "name": "小宝影视.js", + "size": "1.53kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/小宝影视.js", + "id": 293, + "from": "drpy源仓库2" + }, + { + "rule": "小宝影院", + "name": "小宝影院.js", + "size": "1.36kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/小宝影院.js", + "id": 294, + "from": "drpy源仓库2" + }, + { + "rule": "小狗影视", + "name": "小狗影视.js", + "size": "10.79kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/小狗影视.js", + "id": 295, + "from": "drpy源仓库2" + }, + { + "rule": "小白菜电影", + "name": "小白菜电影.js", + "size": "1.12kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/小白菜电影.js", + "id": 296, + "from": "drpy源仓库2" + }, + { + "rule": "尘落影视", + "name": "尘落影视.js", + "size": "5.62kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/尘落影视.js", + "id": 297, + "from": "drpy源仓库2" + }, + { + "rule": "布雷蓝光", + "name": "布雷蓝光.js", + "size": "27.85kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/布雷蓝光.js", + "id": 298, + "from": "drpy源仓库2" + }, + { + "rule": "干饭影视", + "name": "干饭影视.js", + "size": "6.84kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/干饭影视.js", + "id": 299, + "from": "drpy源仓库2" + }, + { + "rule": "影渣渣", + "name": "影渣渣.js", + "size": "1.79kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/影渣渣.js", + "id": 300, + "from": "drpy源仓库2" + }, + { + "rule": "影视之家", + "name": "影视之家.js", + "size": "8.15kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/影视之家.js", + "id": 301, + "from": "drpy源仓库2" + }, + { + "rule": "影视工厂", + "name": "影视工厂.js", + "size": "6.87kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/影视工厂.js", + "id": 302, + "from": "drpy源仓库2" + }, + { + "rule": "往往影院", + "name": "往往影院.js", + "size": "1.35kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/往往影院.js", + "id": 303, + "from": "drpy源仓库2" + }, + { + "rule": "快云影院", + "name": "快云影院.js", + "size": "1.12kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/快云影院.js", + "id": 304, + "from": "drpy源仓库2" + }, + { + "rule": "快看影视", + "name": "快看影视.js", + "size": "2.17kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/快看影视.js", + "id": 305, + "from": "drpy源仓库2" + }, + { + "rule": "思乐影视", + "name": "思乐影视.js", + "size": "1.02kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/思乐影视.js", + "id": 306, + "from": "drpy源仓库2" + }, + { + "rule": "思古影视", + "name": "思古影视.js", + "size": "1.36kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/思古影视.js", + "id": 307, + "from": "drpy源仓库2" + }, + { + "rule": "我爱电影网", + "name": "我爱电影网.js", + "size": "1.25kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/我爱电影网.js", + "id": 308, + "from": "drpy源仓库2" + }, + { + "rule": "我爱跟剧", + "name": "我爱跟剧.js", + "size": "15.13kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/我爱跟剧.js", + "id": 309, + "from": "drpy源仓库2" + }, + { + "rule": "我的哔哩", + "name": "我的哔哩.js", + "size": "63.04kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/我的哔哩.js", + "id": 310, + "from": "drpy源仓库2" + }, + { + "rule": "捷华影视", + "name": "捷华影视.js", + "size": "1.36kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/捷华影视.js", + "id": 311, + "from": "drpy源仓库2" + }, + { + "rule": "新安影院", + "name": "新安影院.js", + "size": "1.68kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/新安影院.js", + "id": 312, + "from": "drpy源仓库2" + }, + { + "rule": "新思古影院", + "name": "新思古影院.js", + "size": "11.63kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/新思古影院.js", + "id": 313, + "from": "drpy源仓库2" + }, + { + "rule": "新视觉影视", + "name": "新视觉影视.js", + "size": "10.35kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/新视觉影视.js", + "id": 314, + "from": "drpy源仓库2" + }, + { + "rule": "星辰影视", + "name": "星辰影视.js", + "size": "1.59kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/星辰影视.js", + "id": 315, + "from": "drpy源仓库2" + }, + { + "rule": "映迷影院", + "name": "映迷影院.js", + "size": "1.76kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/映迷影院.js", + "id": 316, + "from": "drpy源仓库2" + }, + { + "rule": "朱古力", + "name": "朱古力.js", + "size": "0.51kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/朱古力.js", + "id": 317, + "from": "drpy源仓库2" + }, + { + "rule": "朴樱影视", + "name": "朴樱影视.js", + "size": "8.96kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/朴樱影视.js", + "id": 318, + "from": "drpy源仓库2" + }, + { + "rule": "来看点播", + "name": "来看点播.js", + "size": "10.83kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/来看点播.js", + "id": 319, + "from": "drpy源仓库2" + }, + { + "rule": "枫林网", + "name": "枫林网.js", + "size": "1.4kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/枫林网.js", + "id": 320, + "from": "drpy源仓库2" + }, + { + "rule": "楚门影院", + "name": "楚门影院.js", + "size": "12.75kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/楚门影院.js", + "id": 321, + "from": "drpy源仓库2" + }, + { + "rule": "模版", + "name": "模版.js", + "size": "14.86kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/模版.js", + "id": 322, + "from": "drpy源仓库2" + }, + { + "rule": "欧乐影院", + "name": "欧乐影院.js", + "size": "0.75kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/欧乐影院.js", + "id": 323, + "from": "drpy源仓库2" + }, + { + "rule": "欧帝影院", + "name": "欧帝影院.js", + "size": "11.33kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/欧帝影院.js", + "id": 324, + "from": "drpy源仓库2" + }, + { + "rule": "浮生半日", + "name": "浮生半日.js", + "size": "1.17kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/浮生半日.js", + "id": 325, + "from": "drpy源仓库2" + }, + { + "rule": "海兔影院", + "name": "海兔影院.js", + "size": "9.68kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/海兔影院.js", + "id": 326, + "from": "drpy源仓库2" + }, + { + "rule": "海外看影院", + "name": "海外看影院.js", + "size": "11.1kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/海外看影院.js", + "id": 327, + "from": "drpy源仓库2" + }, + { + "rule": "溪谷影视", + "name": "溪谷影视.js", + "size": "8.58kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/溪谷影视.js", + "id": 328, + "from": "drpy源仓库2" + }, + { + "rule": "熊猫影视", + "name": "熊猫影视.js", + "size": "3.21kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/熊猫影视.js", + "id": 329, + "from": "drpy源仓库2" + }, + { + "rule": "爱壹帆", + "name": "爱壹帆.js", + "size": "15.97kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/爱壹帆.js", + "id": 330, + "from": "drpy源仓库2" + }, + { + "rule": "爱猫影院", + "name": "爱猫影院.js", + "size": "1.28kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/爱猫影院.js", + "id": 331, + "from": "drpy源仓库2" + }, + { + "rule": "爱看剧影视", + "name": "爱看剧影视.js", + "size": "10.54kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/爱看剧影视.js", + "id": 332, + "from": "drpy源仓库2" + }, + { + "rule": "爱看影视", + "name": "爱看影视.js", + "size": "16.35kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/爱看影视.js", + "id": 333, + "from": "drpy源仓库2" + }, + { + "rule": "特狗影视", + "name": "特狗影视.js", + "size": "0.39kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/特狗影视.js", + "id": 334, + "from": "drpy源仓库2" + }, + { + "rule": "独播库", + "name": "独播库.js", + "size": "9.71kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/独播库.js", + "id": 335, + "from": "drpy源仓库2" + }, + { + "rule": "玄天", + "name": "玄天.js", + "size": "1.34kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/玄天.js", + "id": 336, + "from": "drpy源仓库2" + }, + { + "rule": "电影先生", + "name": "电影先生.js", + "size": "1.32kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/电影先生.js", + "id": 337, + "from": "drpy源仓库2" + }, + { + "rule": "番茄影视", + "name": "番茄影视.js", + "size": "4.07kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/番茄影视.js", + "id": 338, + "from": "drpy源仓库2" + }, + { + "rule": "皮皮鸭", + "name": "皮皮鸭.js", + "size": "16.82kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/皮皮鸭.js", + "id": 339, + "from": "drpy源仓库2" + }, + { + "rule": "盛世电影网", + "name": "盛世电影网.js", + "size": "13.86kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/盛世电影网.js", + "id": 340, + "from": "drpy源仓库2" + }, + { + "rule": "看BZ影视", + "name": "看BZ影视.js", + "size": "1.35kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/看BZ影视.js", + "id": 341, + "from": "drpy源仓库2" + }, + { + "rule": "看一看影视", + "name": "看一看影视.js", + "size": "2.63kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/看一看影视.js", + "id": 342, + "from": "drpy源仓库2" + }, + { + "rule": "看了么", + "name": "看了么.js", + "size": "9.79kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/看了么.js", + "id": 343, + "from": "drpy源仓库2" + }, + { + "rule": "看片狂人", + "name": "看片狂人.js", + "size": "1.61kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/看片狂人.js", + "id": 344, + "from": "drpy源仓库2" + }, + { + "rule": "看看电影", + "name": "看看电影.js", + "size": "16.73kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/看看电影.js", + "id": 345, + "from": "drpy源仓库2" + }, + { + "rule": "看视界", + "name": "看视界.js", + "size": "1.2kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/看视界.js", + "id": 346, + "from": "drpy源仓库2" + }, + { + "rule": "真不卡", + "name": "真不卡.js", + "size": "7.21kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/真不卡.js", + "id": 347, + "from": "drpy源仓库2" + }, + { + "rule": "短视频", + "name": "短视频.js", + "size": "1.78kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/短视频.js", + "id": 348, + "from": "drpy源仓库2" + }, + { + "rule": "石榴影院", + "name": "石榴影院.js", + "size": "7.54kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/石榴影院.js", + "id": 349, + "from": "drpy源仓库2" + }, + { + "rule": "碟调影视", + "name": "碟调影视.js", + "size": "1.38kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/碟调影视.js", + "id": 350, + "from": "drpy源仓库2" + }, + { + "rule": "神马影视", + "name": "神马影视.js", + "size": "9.82kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/神马影视.js", + "id": 351, + "from": "drpy源仓库2" + }, + { + "rule": "私人影院", + "name": "私人影院.js", + "size": "1.24kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/私人影院.js", + "id": 352, + "from": "drpy源仓库2" + }, + { + "rule": "秋霞", + "name": "秋霞.js", + "size": "0.46kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/秋霞.js", + "id": 353, + "from": "drpy源仓库2" + }, + { + "rule": "稀饭影视", + "name": "稀饭影视.js", + "size": "1.13kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/稀饭影视.js", + "id": 354, + "from": "drpy源仓库2" + }, + { + "rule": "米宝影院", + "name": "米宝影院.js", + "size": "1.7kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/米宝影院.js", + "id": 355, + "from": "drpy源仓库2" + }, + { + "rule": "网飞TV", + "name": "网飞TV.js", + "size": "15.35kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/网飞TV.js", + "id": 356, + "from": "drpy源仓库2" + }, + { + "rule": "美剧网", + "name": "美剧网.js", + "size": "13.79kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/美剧网.js", + "id": 357, + "from": "drpy源仓库2" + }, + { + "rule": "美视网", + "name": "美视网.js", + "size": "18.91kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/美视网.js", + "id": 358, + "from": "drpy源仓库2" + }, + { + "rule": "胖虎影视", + "name": "胖虎影视.js", + "size": "9.04kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/胖虎影视.js", + "id": 359, + "from": "drpy源仓库2" + }, + { + "rule": "腾云驾雾", + "name": "腾云驾雾.js", + "size": "12.58kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/腾云驾雾.js", + "id": 360, + "from": "drpy源仓库2" + }, + { + "rule": "艾斯影院", + "name": "艾斯影院.js", + "size": "1.05kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/艾斯影院.js", + "id": 361, + "from": "drpy源仓库2" + }, + { + "rule": "艾旦影视", + "name": "艾旦影视.js", + "size": "0.23kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/艾旦影视.js", + "id": 362, + "from": "drpy源仓库2" + }, + { + "rule": "艾菲影视", + "name": "艾菲影视.js", + "size": "1.07kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/艾菲影视.js", + "id": 363, + "from": "drpy源仓库2" + }, + { + "rule": "花屋影院", + "name": "花屋影院.js", + "size": "13.15kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/花屋影院.js", + "id": 364, + "from": "drpy源仓库2" + }, + { + "rule": "花猫TV", + "name": "花猫TV.js", + "size": "10.29kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/花猫TV.js", + "id": 365, + "from": "drpy源仓库2" + }, + { + "rule": "菜狗", + "name": "菜狗.js", + "size": "16.07kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/菜狗.js", + "id": 366, + "from": "drpy源仓库2" + }, + { + "rule": "落攻阁影视", + "name": "落攻阁影视.js", + "size": "9.1kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/落攻阁影视.js", + "id": 367, + "from": "drpy源仓库2" + }, + { + "rule": "蓝光影院", + "name": "蓝光影院.js", + "size": "6.49kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/蓝光影院.js", + "id": 368, + "from": "drpy源仓库2" + }, + { + "rule": "虎牙直播", + "name": "虎牙直播.js", + "size": "28.43kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/虎牙直播.js", + "id": 369, + "from": "drpy源仓库2" + }, + { + "rule": "蚂蚁影视", + "name": "蚂蚁影视.js", + "size": "1.73kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/蚂蚁影视.js", + "id": 370, + "from": "drpy源仓库2" + }, + { + "rule": "蛋蛋魔法", + "name": "蛋蛋魔法.js", + "size": "1.58kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/蛋蛋魔法.js", + "id": 371, + "from": "drpy源仓库2" + }, + { + "rule": "蜥蜴影视", + "name": "蜥蜴影视.js", + "size": "15.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/蜥蜴影视.js", + "id": 372, + "from": "drpy源仓库2" + }, + { + "rule": "被窝电影", + "name": "被窝电影.js", + "size": "6.16kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/被窝电影.js", + "id": 373, + "from": "drpy源仓库2" + }, + { + "rule": "西瓜影视", + "name": "西瓜影视.js", + "size": "1.26kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/西瓜影视.js", + "id": 374, + "from": "drpy源仓库2" + }, + { + "rule": "西瓜影视2", + "name": "西瓜影视2.js", + "size": "9.29kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/西瓜影视2.js", + "id": 375, + "from": "drpy源仓库2" + }, + { + "rule": "视中心影视", + "name": "视中心影视.js", + "size": "1.37kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/视中心影视.js", + "id": 376, + "from": "drpy源仓库2" + }, + { + "rule": "视觉影院", + "name": "视觉影院.js", + "size": "1.4kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/视觉影院.js", + "id": 377, + "from": "drpy源仓库2" + }, + { + "rule": "诺讯影视", + "name": "诺讯影视.js", + "size": "7.34kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/诺讯影视.js", + "id": 378, + "from": "drpy源仓库2" + }, + { + "rule": "豆瓣", + "name": "豆瓣.js", + "size": "12.75kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/豆瓣.js", + "id": 379, + "from": "drpy源仓库2" + }, + { + "rule": "豆芽影院", + "name": "豆芽影院.js", + "size": "11.87kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/豆芽影院.js", + "id": 380, + "from": "drpy源仓库2" + }, + { + "rule": "起飞影院", + "name": "起飞影院.js", + "size": "7.84kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/起飞影院.js", + "id": 381, + "from": "drpy源仓库2" + }, + { + "rule": "超前点播", + "name": "超前点播.js", + "size": "1.53kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/超前点播.js", + "id": 382, + "from": "drpy源仓库2" + }, + { + "rule": "追剧兔", + "name": "追剧兔.js", + "size": "1.2kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/追剧兔.js", + "id": 383, + "from": "drpy源仓库2" + }, + { + "rule": "追剧啦", + "name": "追剧啦.js", + "size": "1.63kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/追剧啦.js", + "id": 384, + "from": "drpy源仓库2" + }, + { + "rule": "追剧达人", + "name": "追剧达人.js", + "size": "10.29kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/追剧达人.js", + "id": 385, + "from": "drpy源仓库2" + }, + { + "rule": "追剧迷", + "name": "追剧迷.js", + "size": "1.05kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/追剧迷.js", + "id": 386, + "from": "drpy源仓库2" + }, + { + "rule": "酷云77", + "name": "酷云77.js", + "size": "8.28kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/酷云77.js", + "id": 387, + "from": "drpy源仓库2" + }, + { + "rule": "酷客影院", + "name": "酷客影院.js", + "size": "2.81kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/酷客影院.js", + "id": 388, + "from": "drpy源仓库2" + }, + { + "rule": "量子影视", + "name": "量子影视.js", + "size": "13.76kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/量子影视.js", + "id": 389, + "from": "drpy源仓库2" + }, + { + "rule": "金曼影视", + "name": "金曼影视.js", + "size": "22.03kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/金曼影视.js", + "id": 390, + "from": "drpy源仓库2" + }, + { + "rule": "闪影影院", + "name": "闪影影院.js", + "size": "1.62kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/闪影影院.js", + "id": 391, + "from": "drpy源仓库2" + }, + { + "rule": "雅克坊", + "name": "雅克坊.js", + "size": "1.04kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/雅克坊.js", + "id": 392, + "from": "drpy源仓库2" + }, + { + "rule": "零度影视", + "name": "零度影视.js", + "size": "13.7kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/零度影视.js", + "id": 393, + "from": "drpy源仓库2" + }, + { + "rule": "零柒影视", + "name": "零柒影视.js", + "size": "1.43kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/零柒影视.js", + "id": 394, + "from": "drpy源仓库2" + }, + { + "rule": "霹雳影视", + "name": "霹雳影视.js", + "size": "1.22kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/霹雳影视.js", + "id": 395, + "from": "drpy源仓库2" + }, + { + "rule": "音悦网", + "name": "音悦网.js", + "size": "1.23kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/音悦网.js", + "id": 396, + "from": "drpy源仓库2" + }, + { + "rule": "飞兔影视", + "name": "飞兔影视.js", + "size": "1.47kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/飞兔影视.js", + "id": 397, + "from": "drpy源仓库2" + }, + { + "rule": "飞飞影视", + "name": "飞飞影视.js", + "size": "13.47kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/飞飞影视.js", + "id": 398, + "from": "drpy源仓库2" + }, + { + "rule": "饭团影视", + "name": "饭团影视.js", + "size": "9.33kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/饭团影视.js", + "id": 399, + "from": "drpy源仓库2" + }, + { + "rule": "首播影院", + "name": "首播影院.js", + "size": "27.66kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/首播影院.js", + "id": 400, + "from": "drpy源仓库2" + }, + { + "rule": "骚火电影", + "name": "骚火电影.js", + "size": "1.94kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/骚火电影.js", + "id": 401, + "from": "drpy源仓库2" + }, + { + "rule": "鸭奈飞", + "name": "鸭奈飞.js", + "size": "10.49kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/鸭奈飞.js", + "id": 402, + "from": "drpy源仓库2" + }, + { + "rule": "麦豆", + "name": "麦豆.js", + "size": "1.06kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/麦豆.js", + "id": 403, + "from": "drpy源仓库2" + }, + { + "rule": "麻花影视", + "name": "麻花影视.js", + "size": "1.57kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/heroaku\/TVboxo\/main\/Js\/麻花影视.js", + "id": 404, + "from": "drpy源仓库2" + }, + { + "rule": "1080P", + "name": "1080P.js", + "size": "9.93kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/1080P.js", + "id": 405, + "from": "drpy源仓库3" + }, + { + "rule": "139影视", + "name": "139影视.js", + "size": "10.73kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/139影视.js", + "id": 406, + "from": "drpy源仓库3" + }, + { + "rule": "188影视", + "name": "188影视.js", + "size": "7.13kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/188影视.js", + "id": 407, + "from": "drpy源仓库3" + }, + { + "rule": "18av", + "name": "18av.js", + "size": "0.47kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/18av.js", + "id": 408, + "from": "drpy源仓库3" + }, + { + "rule": "18哈", + "name": "18哈.js", + "size": "0.77kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/18哈.js", + "id": 409, + "from": "drpy源仓库3" + }, + { + "rule": "310直播", + "name": "310直播.js", + "size": "0.49kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/310直播.js", + "id": 410, + "from": "drpy源仓库3" + }, + { + "rule": "333影视", + "name": "333影视.js", + "size": "10.32kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/333影视.js", + "id": 411, + "from": "drpy源仓库3" + }, + { + "rule": "348电影网", + "name": "348电影网.js", + "size": "6.84kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/348电影网.js", + "id": 412, + "from": "drpy源仓库3" + }, + { + "rule": "360影视", + "name": "360影视.js", + "size": "2.89kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/360影视.js", + "id": 413, + "from": "drpy源仓库3" + }, + { + "rule": "369影视", + "name": "369影视.js", + "size": "1.4kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/369影视.js", + "id": 414, + "from": "drpy源仓库3" + }, + { + "rule": "4K电影网", + "name": "4K电影网.js", + "size": "12.64kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/4K电影网.js", + "id": 415, + "from": "drpy源仓库3" + }, + { + "rule": "4khdr", + "name": "4khdr.js", + "size": "5.11kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/4khdr.js", + "id": 416, + "from": "drpy源仓库3" + }, + { + "rule": "4k剧院", + "name": "4k剧院.js", + "size": "9.97kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/4k剧院.js", + "id": 417, + "from": "drpy源仓库3" + }, + { + "rule": "539影视", + "name": "539影视.js", + "size": "10.21kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/539影视.js", + "id": 418, + "from": "drpy源仓库3" + }, + { + "rule": "555影视[飞]", + "name": "555影视[飞].js", + "size": "11.04kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/555影视[飞].js", + "id": 419, + "from": "drpy源仓库3" + }, + { + "rule": "555电影[V2]", + "name": "555电影[V2].js", + "size": "18.47kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/555电影[V2].js", + "id": 420, + "from": "drpy源仓库3" + }, + { + "rule": "567电影院", + "name": "567电影院.js", + "size": "6.92kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/567电影院.js", + "id": 421, + "from": "drpy源仓库3" + }, + { + "rule": "58动漫", + "name": "58动漫.js", + "size": "3.35kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/58动漫.js", + "id": 422, + "from": "drpy源仓库3" + }, + { + "rule": "69美剧", + "name": "69美剧.js", + "size": "13.1kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/69美剧.js", + "id": 423, + "from": "drpy源仓库3" + }, + { + "rule": "69美剧[V2]", + "name": "69美剧[V2].js", + "size": "7.11kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/69美剧[V2].js", + "id": 424, + "from": "drpy源仓库3" + }, + { + "rule": "6V新版[磁]", + "name": "6V新版[磁].js", + "size": "2.1kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/6V新版[磁].js", + "id": 425, + "from": "drpy源仓库3" + }, + { + "rule": "7喜影院", + "name": "7喜影院.js", + "size": "1.0kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/7喜影院.js", + "id": 426, + "from": "drpy源仓库3" + }, + { + "rule": "88看球", + "name": "88看球.js", + "size": "1.9kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/88看球.js", + "id": 427, + "from": "drpy源仓库3" + }, + { + "rule": "8号影院", + "name": "8号影院.js", + "size": "1.17kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/8号影院.js", + "id": 428, + "from": "drpy源仓库3" + }, + { + "rule": "97tvs", + "name": "97tvs.js", + "size": "5.35kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/97tvs.js", + "id": 429, + "from": "drpy源仓库3" + }, + { + "rule": "996影视", + "name": "996影视.js", + "size": "15.4kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/996影视.js", + "id": 430, + "from": "drpy源仓库3" + }, + { + "rule": "A8音乐", + "name": "A8音乐.js", + "size": "0.65kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/A8音乐.js", + "id": 431, + "from": "drpy源仓库3" + }, + { + "rule": "AGE动漫", + "name": "AGE动漫.js", + "size": "13.71kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/AGE动漫.js", + "id": 432, + "from": "drpy源仓库3" + }, + { + "rule": "AnFuns", + "name": "AnFuns.js", + "size": "4.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/AnFuns.js", + "id": 433, + "from": "drpy源仓库3" + }, + { + "rule": "Anime1动畫", + "name": "Anime1动畫.js", + "size": "4.79kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/Anime1动畫.js", + "id": 434, + "from": "drpy源仓库3" + }, + { + "rule": "Auete", + "name": "Auete.js", + "size": "3.97kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/Auete.js", + "id": 435, + "from": "drpy源仓库3" + }, + { + "rule": "B站影视", + "name": "B站影视.js", + "size": "9.13kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/B站影视.js", + "id": 436, + "from": "drpy源仓库3" + }, + { + "rule": "DJ音乐", + "name": "DJ音乐.js", + "size": "1.67kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/DJ音乐.js", + "id": 437, + "from": "drpy源仓库3" + }, + { + "rule": "Fun4K", + "name": "Fun4K.js", + "size": "11.64kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/Fun4K.js", + "id": 438, + "from": "drpy源仓库3" + }, + { + "rule": "HDmoli", + "name": "HDmoli.js", + "size": "5.7kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/HDmoli.js", + "id": 439, + "from": "drpy源仓库3" + }, + { + "rule": "JRKAN直播", + "name": "JRKAN直播.js", + "size": "2.45kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/JRKAN直播.js", + "id": 440, + "from": "drpy源仓库3" + }, + { + "rule": "JangoIndex", + "name": "JangoIndex.js", + "size": "0.91kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/JangoIndex.js", + "id": 441, + "from": "drpy源仓库3" + }, + { + "rule": "JustLive", + "name": "JustLive.js", + "size": "92.15kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/JustLive.js", + "id": 442, + "from": "drpy源仓库3" + }, + { + "rule": "KOK影院", + "name": "KOK影院.js", + "size": "13.48kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/KOK影院.js", + "id": 443, + "from": "drpy源仓库3" + }, + { + "rule": "KUBO影视[飞]", + "name": "KUBO影视[飞].js", + "size": "16.72kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/KUBO影视[飞].js", + "id": 444, + "from": "drpy源仓库3" + }, + { + "rule": "LIBVIO", + "name": "LIBVIO.js", + "size": "7.23kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/LIBVIO.js", + "id": 445, + "from": "drpy源仓库3" + }, + { + "rule": "Missav", + "name": "Missav.js", + "size": "0.88kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/Missav.js", + "id": 446, + "from": "drpy源仓库3" + }, + { + "rule": "NT动漫", + "name": "NT动漫.js", + "size": "9.21kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/NT动漫.js", + "id": 447, + "from": "drpy源仓库3" + }, + { + "rule": "NY影院", + "name": "NY影院.js", + "size": "14.41kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/NY影院.js", + "id": 448, + "from": "drpy源仓库3" + }, + { + "rule": "NyaFun", + "name": "NyaFun.js", + "size": "0.46kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/NyaFun.js", + "id": 449, + "from": "drpy源仓库3" + }, + { + "rule": "TVB云播", + "name": "TVB云播.js", + "size": "10.51kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/TVB云播.js", + "id": 450, + "from": "drpy源仓库3" + }, + { + "rule": "UM电影[V2]", + "name": "UM电影[V2].js", + "size": "17.0kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/UM电影[V2].js", + "id": 451, + "from": "drpy源仓库3" + }, + { + "rule": "UrleBird[飞]", + "name": "UrleBird[飞].js", + "size": "0.98kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/UrleBird[飞].js", + "id": 452, + "from": "drpy源仓库3" + }, + { + "rule": "aipanso", + "name": "aipanso.js", + "size": "3.17kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/aipanso.js", + "id": 453, + "from": "drpy源仓库3" + }, + { + "rule": "banan", + "name": "banan.js", + "size": "0.53kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/banan.js", + "id": 454, + "from": "drpy源仓库3" + }, + { + "rule": "cilixiong", + "name": "cilixiong.js", + "size": "4.9kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/cilixiong.js", + "id": 455, + "from": "drpy源仓库3" + }, + { + "rule": "cilixiongp", + "name": "cilixiongp.js", + "size": "4.9kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/cilixiongp.js", + "id": 456, + "from": "drpy源仓库3" + }, + { + "rule": "cokemv", + "name": "cokemv.js", + "size": "12.86kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/cokemv.js", + "id": 457, + "from": "drpy源仓库3" + }, + { + "rule": "cokemv[V2]", + "name": "cokemv[V2].js", + "size": "13.42kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/cokemv%5BV2%5D.js", + "id": 458, + "from": "drpy源仓库3" + }, + { + "rule": "ddys", + "name": "ddys.js", + "size": "6.15kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/ddys.js", + "id": 459, + "from": "drpy源仓库3" + }, + { + "rule": "ddys_d", + "name": "ddys_d.js", + "size": "6.15kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/ddys_d.js", + "id": 460, + "from": "drpy源仓库3" + }, + { + "rule": "drpy", + "name": "drpy.js", + "size": "13.12kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/drpy.js", + "id": 461, + "from": "drpy源仓库3" + }, + { + "rule": "dydhhy", + "name": "dydhhy.js", + "size": "3.73kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/dydhhy.js", + "id": 462, + "from": "drpy源仓库3" + }, + { + "rule": "dygang", + "name": "dygang.js", + "size": "5.49kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/dygang.js", + "id": 463, + "from": "drpy源仓库3" + }, + { + "rule": "funletu", + "name": "funletu.js", + "size": "2.12kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/funletu.js", + "id": 464, + "from": "drpy源仓库3" + }, + { + "rule": "huya", + "name": "huya.js", + "size": "29.02kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/huya.js", + "id": 465, + "from": "drpy源仓库3" + }, + { + "rule": "i275听书", + "name": "i275听书.js", + "size": "2.55kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/i275听书.js", + "id": 466, + "from": "drpy源仓库3" + }, + { + "rule": "if101[飞]", + "name": "if101[飞].js", + "size": "16.0kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/if101[飞].js", + "id": 467, + "from": "drpy源仓库3" + }, + { + "rule": "ikanbot2", + "name": "ikanbot2.js", + "size": "11.88kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/ikanbot2.js", + "id": 468, + "from": "drpy源仓库3" + }, + { + "rule": "ikanbot3", + "name": "ikanbot3.js", + "size": "10.6kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/ikanbot3.js", + "id": 469, + "from": "drpy源仓库3" + }, + { + "rule": "jianpian", + "name": "jianpian.js", + "size": "4.03kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/jianpian.js", + "id": 470, + "from": "drpy源仓库3" + }, + { + "rule": "jiyingw", + "name": "jiyingw.js", + "size": "8.06kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/jiyingw.js", + "id": 471, + "from": "drpy源仓库3" + }, + { + "rule": "jiyingwp", + "name": "jiyingwp.js", + "size": "8.06kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/jiyingwp.js", + "id": 472, + "from": "drpy源仓库3" + }, + { + "rule": "jsapi", + "name": "jsapi.js", + "size": "17.21kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/jsapi.js", + "id": 473, + "from": "drpy源仓库3" + }, + { + "rule": "kkpans", + "name": "kkpans.js", + "size": "4.64kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/kkpans.js", + "id": 474, + "from": "drpy源仓库3" + }, + { + "rule": "kuba", + "name": "kuba.js", + "size": "5.01kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/kuba.js", + "id": 475, + "from": "drpy源仓库3" + }, + { + "rule": "libvio", + "name": "libvio.js", + "size": "9.51kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/libvio.js", + "id": 476, + "from": "drpy源仓库3" + }, + { + "rule": "meijumi", + "name": "meijumi.js", + "size": "8.84kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/meijumi.js", + "id": 477, + "from": "drpy源仓库3" + }, + { + "rule": "meijumip", + "name": "meijumip.js", + "size": "8.96kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/meijumip.js", + "id": 478, + "from": "drpy源仓库3" + }, + { + "rule": "meow", + "name": "meow.js", + "size": "2.4kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/meow.js", + "id": 479, + "from": "drpy源仓库3" + }, + { + "rule": "mp4us", + "name": "mp4us.js", + "size": "4.82kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/mp4us.js", + "id": 480, + "from": "drpy源仓库3" + }, + { + "rule": "qimiao", + "name": "qimiao.js", + "size": "1.29kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/qimiao.js", + "id": 481, + "from": "drpy源仓库3" + }, + { + "rule": "rrdyw", + "name": "rrdyw.js", + "size": "4.32kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/rrdyw.js", + "id": 482, + "from": "drpy源仓库3" + }, + { + "rule": "template", + "name": "template.js", + "size": "14.86kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/template.js", + "id": 483, + "from": "drpy源仓库3" + }, + { + "rule": "tzfile", + "name": "tzfile.js", + "size": "3.36kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/tzfile.js", + "id": 484, + "from": "drpy源仓库3" + }, + { + "rule": "voflix", + "name": "voflix.js", + "size": "12.25kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/voflix.js", + "id": 485, + "from": "drpy源仓库3" + }, + { + "rule": "xb6v", + "name": "xb6v.js", + "size": "6.54kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/xb6v.js", + "id": 486, + "from": "drpy源仓库3" + }, + { + "rule": "xzys", + "name": "xzys.js", + "size": "4.73kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/xzys.js", + "id": 487, + "from": "drpy源仓库3" + }, + { + "rule": "yyets", + "name": "yyets.js", + "size": "2.72kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/yyets.js", + "id": 488, + "from": "drpy源仓库3" + }, + { + "rule": "yyetsp", + "name": "yyetsp.js", + "size": "2.77kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/yyetsp.js", + "id": 489, + "from": "drpy源仓库3" + }, + { + "rule": "两个BT", + "name": "两个BT.js", + "size": "8.3kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/两个BT.js", + "id": 490, + "from": "drpy源仓库3" + }, + { + "rule": "中国人", + "name": "中国人.js", + "size": "0.95kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/中国人.js", + "id": 491, + "from": "drpy源仓库3" + }, + { + "rule": "中国人线上看", + "name": "中国人线上看.js", + "size": "0.83kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/中国人线上看.js", + "id": 492, + "from": "drpy源仓库3" + }, + { + "rule": "乐鱼影视", + "name": "乐鱼影视.js", + "size": "9.85kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/乐鱼影视.js", + "id": 493, + "from": "drpy源仓库3" + }, + { + "rule": "人人影视", + "name": "人人影视.js", + "size": "8.54kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/人人影视.js", + "id": 494, + "from": "drpy源仓库3" + }, + { + "rule": "优酷", + "name": "优酷.js", + "size": "28.85kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/优酷.js", + "id": 495, + "from": "drpy源仓库3" + }, + { + "rule": "兄弟影视", + "name": "兄弟影视.js", + "size": "10.86kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/兄弟影视.js", + "id": 496, + "from": "drpy源仓库3" + }, + { + "rule": "免费看", + "name": "免费看.js", + "size": "20.62kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/免费看.js", + "id": 497, + "from": "drpy源仓库3" + }, + { + "rule": "兔小贝", + "name": "兔小贝.js", + "size": "0.99kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/兔小贝.js", + "id": 498, + "from": "drpy源仓库3" + }, + { + "rule": "六月听书", + "name": "六月听书.js", + "size": "1.61kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/六月听书.js", + "id": 499, + "from": "drpy源仓库3" + }, + { + "rule": "兰花影院", + "name": "兰花影院.js", + "size": "14.63kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/兰花影院.js", + "id": 500, + "from": "drpy源仓库3" + }, + { + "rule": "养端", + "name": "养端.js", + "size": "0.45kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/养端.js", + "id": 501, + "from": "drpy源仓库3" + }, + { + "rule": "农民影视", + "name": "农民影视.js", + "size": "13.67kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/农民影视.js", + "id": 502, + "from": "drpy源仓库3" + }, + { + "rule": "凌云影视", + "name": "凌云影视.js", + "size": "12.3kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/凌云影视.js", + "id": 503, + "from": "drpy源仓库3" + }, + { + "rule": "刺桐[V2]", + "name": "刺桐[V2].js", + "size": "15.7kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/刺桐[V2].js", + "id": 504, + "from": "drpy源仓库3" + }, + { + "rule": "剧迷su", + "name": "剧迷su.js", + "size": "4.8kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/剧迷su.js", + "id": 505, + "from": "drpy源仓库3" + }, + { + "rule": "动漫岛", + "name": "动漫岛.js", + "size": "9.13kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/动漫岛.js", + "id": 506, + "from": "drpy源仓库3" + }, + { + "rule": "北川影视", + "name": "北川影视.js", + "size": "10.02kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/北川影视.js", + "id": 507, + "from": "drpy源仓库3" + }, + { + "rule": "北极狐[V2]", + "name": "北极狐[V2].js", + "size": "24.6kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/北极狐[V2].js", + "id": 508, + "from": "drpy源仓库3" + }, + { + "rule": "华乐影院[飞]", + "name": "华乐影院[飞].js", + "size": "12.14kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/华乐影院[飞].js", + "id": 509, + "from": "drpy源仓库3" + }, + { + "rule": "南瓜影视", + "name": "南瓜影视.js", + "size": "11.15kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/南瓜影视.js", + "id": 510, + "from": "drpy源仓库3" + }, + { + "rule": "博看听书", + "name": "博看听书.js", + "size": "1.99kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/博看听书.js", + "id": 511, + "from": "drpy源仓库3" + }, + { + "rule": "厂长资源", + "name": "厂长资源.js", + "size": "6.94kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/厂长资源.js", + "id": 512, + "from": "drpy源仓库3" + }, + { + "rule": "去看吧", + "name": "去看吧.js", + "size": "12.15kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/去看吧.js", + "id": 513, + "from": "drpy源仓库3" + }, + { + "rule": "听书网", + "name": "听书网.js", + "size": "0.97kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/听书网.js", + "id": 514, + "from": "drpy源仓库3" + }, + { + "rule": "吸瓜", + "name": "吸瓜.js", + "size": "0.65kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/吸瓜.js", + "id": 515, + "from": "drpy源仓库3" + }, + { + "rule": "吼吼[V2]", + "name": "吼吼[V2].js", + "size": "14.95kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/吼吼[V2].js", + "id": 516, + "from": "drpy源仓库3" + }, + { + "rule": "咕噜[V2]", + "name": "咕噜[V2].js", + "size": "16.65kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/咕噜[V2].js", + "id": 517, + "from": "drpy源仓库3" + }, + { + "rule": "哔哩影视", + "name": "哔哩影视.js", + "size": "10.52kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/哔哩影视.js", + "id": 518, + "from": "drpy源仓库3" + }, + { + "rule": "哔哩直播", + "name": "哔哩直播.js", + "size": "17.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/哔哩直播.js", + "id": 519, + "from": "drpy源仓库3" + }, + { + "rule": "哔嘀影视", + "name": "哔嘀影视.js", + "size": "4.37kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/哔嘀影视.js", + "id": 520, + "from": "drpy源仓库3" + }, + { + "rule": "啦啦DJ", + "name": "啦啦DJ.js", + "size": "0.68kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/啦啦DJ.js", + "id": 521, + "from": "drpy源仓库3" + }, + { + "rule": "喜马拉雅", + "name": "喜马拉雅.js", + "size": "3.53kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/喜马拉雅.js", + "id": 522, + "from": "drpy源仓库3" + }, + { + "rule": "喵次元", + "name": "喵次元.js", + "size": "7.33kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/喵次元.js", + "id": 523, + "from": "drpy源仓库3" + }, + { + "rule": "四个圈影视", + "name": "四个圈影视.js", + "size": "14.49kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/四个圈影视.js", + "id": 524, + "from": "drpy源仓库3" + }, + { + "rule": "在线之家", + "name": "在线之家.js", + "size": "7.33kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/在线之家.js", + "id": 525, + "from": "drpy源仓库3" + }, + { + "rule": "多瑙影视", + "name": "多瑙影视.js", + "size": "14.21kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/多瑙影视.js", + "id": 526, + "from": "drpy源仓库3" + }, + { + "rule": "大师兄影视", + "name": "大师兄影视.js", + "size": "11.55kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/大师兄影视.js", + "id": 527, + "from": "drpy源仓库3" + }, + { + "rule": "大米星球", + "name": "大米星球.js", + "size": "11.71kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/大米星球.js", + "id": 528, + "from": "drpy源仓库3" + }, + { + "rule": "大米星球[V2]", + "name": "大米星球[V2].js", + "size": "18.78kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/大米星球[V2].js", + "id": 529, + "from": "drpy源仓库3" + }, + { + "rule": "天天视频[飞]", + "name": "天天视频[飞].js", + "size": "8.38kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/天天视频[飞].js", + "id": 530, + "from": "drpy源仓库3" + }, + { + "rule": "奇优影院", + "name": "奇优影院.js", + "size": "1.94kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/奇优影院.js", + "id": 531, + "from": "drpy源仓库3" + }, + { + "rule": "奇珍异兽", + "name": "奇珍异兽.js", + "size": "23.04kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/奇珍异兽.js", + "id": 532, + "from": "drpy源仓库3" + }, + { + "rule": "奇米动漫", + "name": "奇米动漫.js", + "size": "12.15kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/奇米动漫.js", + "id": 533, + "from": "drpy源仓库3" + }, + { + "rule": "奈飞中文", + "name": "奈飞中文.js", + "size": "17.88kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/奈飞中文.js", + "id": 534, + "from": "drpy源仓库3" + }, + { + "rule": "奈飞狗[V2]", + "name": "奈飞狗[V2].js", + "size": "15.96kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/奈飞狗[V2].js", + "id": 535, + "from": "drpy源仓库3" + }, + { + "rule": "好趣网", + "name": "好趣网.js", + "size": "2.28kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/好趣网.js", + "id": 536, + "from": "drpy源仓库3" + }, + { + "rule": "妮可动漫", + "name": "妮可动漫.js", + "size": "2.7kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/妮可动漫.js", + "id": 537, + "from": "drpy源仓库3" + }, + { + "rule": "子子影视", + "name": "子子影视.js", + "size": "2.15kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/子子影视.js", + "id": 538, + "from": "drpy源仓库3" + }, + { + "rule": "孜然影视", + "name": "孜然影视.js", + "size": "9.39kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/孜然影视.js", + "id": 539, + "from": "drpy源仓库3" + }, + { + "rule": "宝片[V2]", + "name": "宝片[V2].js", + "size": "20.67kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/宝片[V2].js", + "id": 540, + "from": "drpy源仓库3" + }, + { + "rule": "小品网", + "name": "小品网.js", + "size": "0.59kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/小品网.js", + "id": 541, + "from": "drpy源仓库3" + }, + { + "rule": "小宝影院[飞]", + "name": "小宝影院[飞].js", + "size": "14.05kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/小宝影院[飞].js", + "id": 542, + "from": "drpy源仓库3" + }, + { + "rule": "小狗影院", + "name": "小狗影院.js", + "size": "12.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/小狗影院.js", + "id": 543, + "from": "drpy源仓库3" + }, + { + "rule": "小白菜电影", + "name": "小白菜电影.js", + "size": "15.66kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/小白菜电影.js", + "id": 544, + "from": "drpy源仓库3" + }, + { + "rule": "尘落影视", + "name": "尘落影视.js", + "size": "6.37kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/尘落影视.js", + "id": 545, + "from": "drpy源仓库3" + }, + { + "rule": "干饭影视", + "name": "干饭影视.js", + "size": "8.84kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/干饭影视.js", + "id": 546, + "from": "drpy源仓库3" + }, + { + "rule": "广播迷FM", + "name": "广播迷FM.js", + "size": "2.63kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/广播迷FM.js", + "id": 547, + "from": "drpy源仓库3" + }, + { + "rule": "开眼视频", + "name": "开眼视频.js", + "size": "1.25kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/开眼视频.js", + "id": 548, + "from": "drpy源仓库3" + }, + { + "rule": "异世界动漫", + "name": "异世界动漫.js", + "size": "4.6kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/异世界动漫.js", + "id": 549, + "from": "drpy源仓库3" + }, + { + "rule": "影探[V2]", + "name": "影探[V2].js", + "size": "30.0kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/影探[V2].js", + "id": 550, + "from": "drpy源仓库3" + }, + { + "rule": "影渣渣", + "name": "影渣渣.js", + "size": "17.95kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/影渣渣.js", + "id": 551, + "from": "drpy源仓库3" + }, + { + "rule": "影视之家[V2]", + "name": "影视之家[V2].js", + "size": "16.12kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/影视之家[V2].js", + "id": 552, + "from": "drpy源仓库3" + }, + { + "rule": "影视工厂", + "name": "影视工厂.js", + "size": "0.09kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/影视工厂.js", + "id": 553, + "from": "drpy源仓库3" + }, + { + "rule": "影视工场", + "name": "影视工场.js", + "size": "7.81kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/影视工场.js", + "id": 554, + "from": "drpy源仓库3" + }, + { + "rule": "徕米TV", + "name": "徕米TV.js", + "size": "11.42kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/徕米TV.js", + "id": 555, + "from": "drpy源仓库3" + }, + { + "rule": "快看", + "name": "快看.js", + "size": "2.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/快看.js", + "id": 556, + "from": "drpy源仓库3" + }, + { + "rule": "思古影视", + "name": "思古影视.js", + "size": "14.2kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/思古影视.js", + "id": 557, + "from": "drpy源仓库3" + }, + { + "rule": "思古影视[V2]", + "name": "思古影视[V2].js", + "size": "13.38kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/思古影视[V2].js", + "id": 558, + "from": "drpy源仓库3" + }, + { + "rule": "怡萱动漫", + "name": "怡萱动漫.js", + "size": "9.5kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/怡萱动漫.js", + "id": 559, + "from": "drpy源仓库3" + }, + { + "rule": "悠久影院", + "name": "悠久影院.js", + "size": "7.12kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/悠久影院.js", + "id": 560, + "from": "drpy源仓库3" + }, + { + "rule": "我爱跟剧", + "name": "我爱跟剧.js", + "size": "15.02kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/我爱跟剧.js", + "id": 561, + "from": "drpy源仓库3" + }, + { + "rule": "我的哔哩", + "name": "我的哔哩.js", + "size": "77.44kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/我的哔哩.js", + "id": 562, + "from": "drpy源仓库3" + }, + { + "rule": "抓饭体育", + "name": "抓饭体育.js", + "size": "1.21kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/抓饭体育.js", + "id": 563, + "from": "drpy源仓库3" + }, + { + "rule": "播客", + "name": "播客.js", + "size": "1.96kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/播客.js", + "id": 564, + "from": "drpy源仓库3" + }, + { + "rule": "斗鱼直播", + "name": "斗鱼直播.js", + "size": "39.3kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/斗鱼直播.js", + "id": 565, + "from": "drpy源仓库3" + }, + { + "rule": "新片场", + "name": "新片场.js", + "size": "13.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/新片场.js", + "id": 566, + "from": "drpy源仓库3" + }, + { + "rule": "新视觉影视", + "name": "新视觉影视.js", + "size": "10.2kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/新视觉影视.js", + "id": 567, + "from": "drpy源仓库3" + }, + { + "rule": "时光影视", + "name": "时光影视.js", + "size": "13.77kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/时光影视.js", + "id": 568, + "from": "drpy源仓库3" + }, + { + "rule": "星辰", + "name": "星辰.js", + "size": "1.33kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/星辰.js", + "id": 569, + "from": "drpy源仓库3" + }, + { + "rule": "映迷[V2]", + "name": "映迷[V2].js", + "size": "16.34kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/映迷[V2].js", + "id": 570, + "from": "drpy源仓库3" + }, + { + "rule": "映迷影院", + "name": "映迷影院.js", + "size": "15.1kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/映迷影院.js", + "id": 571, + "from": "drpy源仓库3" + }, + { + "rule": "曲奇动漫", + "name": "曲奇动漫.js", + "size": "9.59kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/曲奇动漫.js", + "id": 572, + "from": "drpy源仓库3" + }, + { + "rule": "曲奇影视[V2]", + "name": "曲奇影视[V2].js", + "size": "14.96kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/曲奇影视[V2].js", + "id": 573, + "from": "drpy源仓库3" + }, + { + "rule": "有声小说吧", + "name": "有声小说吧.js", + "size": "1.79kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/有声小说吧.js", + "id": 574, + "from": "drpy源仓库3" + }, + { + "rule": "有声绘本网", + "name": "有声绘本网.js", + "size": "0.54kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/有声绘本网.js", + "id": 575, + "from": "drpy源仓库3" + }, + { + "rule": "朱古力", + "name": "朱古力.js", + "size": "0.51kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/朱古力.js", + "id": 576, + "from": "drpy源仓库3" + }, + { + "rule": "朴樱影视", + "name": "朴樱影视.js", + "size": "12.77kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/朴樱影视.js", + "id": 577, + "from": "drpy源仓库3" + }, + { + "rule": "楚门影院", + "name": "楚门影院.js", + "size": "11.32kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/楚门影院.js", + "id": 578, + "from": "drpy源仓库3" + }, + { + "rule": "模板", + "name": "模板.js", + "size": "14.94kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/模板.js", + "id": 579, + "from": "drpy源仓库3" + }, + { + "rule": "欧乐影院[飞]", + "name": "欧乐影院[飞].js", + "size": "15.22kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/欧乐影院[飞].js", + "id": 580, + "from": "drpy源仓库3" + }, + { + "rule": "欧帝影院", + "name": "欧帝影院.js", + "size": "11.68kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/欧帝影院.js", + "id": 581, + "from": "drpy源仓库3" + }, + { + "rule": "武享吧", + "name": "武享吧.js", + "size": "1.14kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/武享吧.js", + "id": 582, + "from": "drpy源仓库3" + }, + { + "rule": "歪片星球", + "name": "歪片星球.js", + "size": "8.83kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/歪片星球.js", + "id": 583, + "from": "drpy源仓库3" + }, + { + "rule": "海兔影院", + "name": "海兔影院.js", + "size": "8.75kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/海兔影院.js", + "id": 584, + "from": "drpy源仓库3" + }, + { + "rule": "海洋听书", + "name": "海洋听书.js", + "size": "2.01kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/海洋听书.js", + "id": 585, + "from": "drpy源仓库3" + }, + { + "rule": "清风DJ", + "name": "清风DJ.js", + "size": "5.96kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/清风DJ.js", + "id": 586, + "from": "drpy源仓库3" + }, + { + "rule": "热播之家", + "name": "热播之家.js", + "size": "10.37kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/热播之家.js", + "id": 587, + "from": "drpy源仓库3" + }, + { + "rule": "热播库", + "name": "热播库.js", + "size": "7.2kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/热播库.js", + "id": 588, + "from": "drpy源仓库3" + }, + { + "rule": "爱上你听书网", + "name": "爱上你听书网.js", + "size": "0.96kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/爱上你听书网.js", + "id": 589, + "from": "drpy源仓库3" + }, + { + "rule": "爱壹帆[飞]", + "name": "爱壹帆[飞].js", + "size": "15.39kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/爱壹帆[飞].js", + "id": 590, + "from": "drpy源仓库3" + }, + { + "rule": "爱弹幕", + "name": "爱弹幕.js", + "size": "8.53kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/爱弹幕.js", + "id": 591, + "from": "drpy源仓库3" + }, + { + "rule": "爱看", + "name": "爱看.js", + "size": "17.12kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/爱看.js", + "id": 592, + "from": "drpy源仓库3" + }, + { + "rule": "爱看影院", + "name": "爱看影院.js", + "size": "6.5kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/爱看影院.js", + "id": 593, + "from": "drpy源仓库3" + }, + { + "rule": "爱看机器人", + "name": "爱看机器人.js", + "size": "5.19kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/爱看机器人.js", + "id": 594, + "from": "drpy源仓库3" + }, + { + "rule": "爱车MV", + "name": "爱车MV.js", + "size": "0.63kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/爱车MV.js", + "id": 595, + "from": "drpy源仓库3" + }, + { + "rule": "爱迪[V2]", + "name": "爱迪[V2].js", + "size": "17.01kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/爱迪[V2].js", + "id": 596, + "from": "drpy源仓库3" + }, + { + "rule": "爱迪影视", + "name": "爱迪影视.js", + "size": "13.94kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/爱迪影视.js", + "id": 597, + "from": "drpy源仓库3" + }, + { + "rule": "独播库[飞]", + "name": "独播库[飞].js", + "size": "21.84kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/独播库[飞].js", + "id": 598, + "from": "drpy源仓库3" + }, + { + "rule": "猫了个咪", + "name": "猫了个咪.js", + "size": "1.89kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/猫了个咪.js", + "id": 599, + "from": "drpy源仓库3" + }, + { + "rule": "玄天", + "name": "玄天.js", + "size": "6.86kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/玄天.js", + "id": 600, + "from": "drpy源仓库3" + }, + { + "rule": "玩偶姐姐", + "name": "玩偶姐姐.js", + "size": "0.44kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/玩偶姐姐.js", + "id": 601, + "from": "drpy源仓库3" + }, + { + "rule": "电影先生", + "name": "电影先生.js", + "size": "13.02kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/电影先生.js", + "id": 602, + "from": "drpy源仓库3" + }, + { + "rule": "百忙无果", + "name": "百忙无果.js", + "size": "10.39kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/百忙无果.js", + "id": 603, + "from": "drpy源仓库3" + }, + { + "rule": "皮皮鸭", + "name": "皮皮鸭.js", + "size": "18.28kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/皮皮鸭.js", + "id": 604, + "from": "drpy源仓库3" + }, + { + "rule": "相声随身听", + "name": "相声随身听.js", + "size": "2.34kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/相声随身听.js", + "id": 605, + "from": "drpy源仓库3" + }, + { + "rule": "看了么", + "name": "看了么.js", + "size": "10.5kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/看了么.js", + "id": 606, + "from": "drpy源仓库3" + }, + { + "rule": "看韩剧", + "name": "看韩剧.js", + "size": "3.43kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/看韩剧.js", + "id": 607, + "from": "drpy源仓库3" + }, + { + "rule": "短视频", + "name": "短视频.js", + "size": "1.78kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/短视频.js", + "id": 608, + "from": "drpy源仓库3" + }, + { + "rule": "磁力熊[磁]", + "name": "磁力熊[磁].js", + "size": "6.25kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/磁力熊[磁].js", + "id": 609, + "from": "drpy源仓库3" + }, + { + "rule": "私人影院", + "name": "私人影院.js", + "size": "10.85kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/私人影院.js", + "id": 610, + "from": "drpy源仓库3" + }, + { + "rule": "秋霞", + "name": "秋霞.js", + "size": "8.97kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/秋霞.js", + "id": 611, + "from": "drpy源仓库3" + }, + { + "rule": "秋霞影视", + "name": "秋霞影视.js", + "size": "11.79kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/秋霞影视.js", + "id": 612, + "from": "drpy源仓库3" + }, + { + "rule": "童趣", + "name": "童趣.js", + "size": "8.0kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/童趣.js", + "id": 613, + "from": "drpy源仓库3" + }, + { + "rule": "米爱影视", + "name": "米爱影视.js", + "size": "11.91kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/米爱影视.js", + "id": 614, + "from": "drpy源仓库3" + }, + { + "rule": "素白白", + "name": "素白白.js", + "size": "11.97kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/素白白.js", + "id": 615, + "from": "drpy源仓库3" + }, + { + "rule": "网易公版影像", + "name": "网易公版影像.js", + "size": "0.98kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/网易公版影像.js", + "id": 616, + "from": "drpy源仓库3" + }, + { + "rule": "网飞.TV", + "name": "网飞.TV.js", + "size": "17.62kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/网飞.TV.js", + "id": 617, + "from": "drpy源仓库3" + }, + { + "rule": "美剧网", + "name": "美剧网.js", + "size": "14.62kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/美剧网.js", + "id": 618, + "from": "drpy源仓库3" + }, + { + "rule": "美益达[V2]", + "name": "美益达[V2].js", + "size": "16.61kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/美益达[V2].js", + "id": 619, + "from": "drpy源仓库3" + }, + { + "rule": "美视网", + "name": "美视网.js", + "size": "15.63kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/美视网.js", + "id": 620, + "from": "drpy源仓库3" + }, + { + "rule": "胖虎", + "name": "胖虎.js", + "size": "16.64kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/胖虎.js", + "id": 621, + "from": "drpy源仓库3" + }, + { + "rule": "腾云驾雾", + "name": "腾云驾雾.js", + "size": "12.93kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/腾云驾雾.js", + "id": 622, + "from": "drpy源仓库3" + }, + { + "rule": "花屋影院", + "name": "花屋影院.js", + "size": "12.46kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/花屋影院.js", + "id": 623, + "from": "drpy源仓库3" + }, + { + "rule": "花猫TV", + "name": "花猫TV.js", + "size": "10.29kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/花猫TV.js", + "id": 624, + "from": "drpy源仓库3" + }, + { + "rule": "苹果爱微", + "name": "苹果爱微.js", + "size": "1.05kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/苹果爱微.js", + "id": 625, + "from": "drpy源仓库3" + }, + { + "rule": "荐片", + "name": "荐片.js", + "size": "8.31kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/荐片.js", + "id": 626, + "from": "drpy源仓库3" + }, + { + "rule": "菜狗", + "name": "菜狗.js", + "size": "16.43kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/菜狗.js", + "id": 627, + "from": "drpy源仓库3" + }, + { + "rule": "落攻阁影视", + "name": "落攻阁影视.js", + "size": "11.38kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/落攻阁影视.js", + "id": 628, + "from": "drpy源仓库3" + }, + { + "rule": "落攻阁影视[V2]", + "name": "落攻阁影视[V2].js", + "size": "16.54kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/落攻阁影视[V2].js", + "id": 629, + "from": "drpy源仓库3" + }, + { + "rule": "蓝光影院", + "name": "蓝光影院.js", + "size": "11.03kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/蓝光影院.js", + "id": 630, + "from": "drpy源仓库3" + }, + { + "rule": "虎牙直播", + "name": "虎牙直播.js", + "size": "22.24kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/虎牙直播.js", + "id": 631, + "from": "drpy源仓库3" + }, + { + "rule": "蛋蛋剧", + "name": "蛋蛋剧.js", + "size": "8.5kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/蛋蛋剧.js", + "id": 632, + "from": "drpy源仓库3" + }, + { + "rule": "蛋蛋赞", + "name": "蛋蛋赞.js", + "size": "7.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/蛋蛋赞.js", + "id": 633, + "from": "drpy源仓库3" + }, + { + "rule": "蜥蜴影视", + "name": "蜥蜴影视.js", + "size": "14.36kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/蜥蜴影视.js", + "id": 634, + "from": "drpy源仓库3" + }, + { + "rule": "蜻蜓FM", + "name": "蜻蜓FM.js", + "size": "1.2kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/蜻蜓FM.js", + "id": 635, + "from": "drpy源仓库3" + }, + { + "rule": "被窝电影", + "name": "被窝电影.js", + "size": "6.16kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/被窝电影.js", + "id": 636, + "from": "drpy源仓库3" + }, + { + "rule": "西瓜影院", + "name": "西瓜影院.js", + "size": "1.11kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/西瓜影院.js", + "id": 637, + "from": "drpy源仓库3" + }, + { + "rule": "评书随身听", + "name": "评书随身听.js", + "size": "6.46kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/评书随身听.js", + "id": 638, + "from": "drpy源仓库3" + }, + { + "rule": "起飞影院", + "name": "起飞影院.js", + "size": "9.29kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/起飞影院.js", + "id": 639, + "from": "drpy源仓库3" + }, + { + "rule": "跑TV", + "name": "跑TV.js", + "size": "1.77kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/跑TV.js", + "id": 640, + "from": "drpy源仓库3" + }, + { + "rule": "路人甲[V2]", + "name": "路人甲[V2].js", + "size": "16.64kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/路人甲[V2].js", + "id": 641, + "from": "drpy源仓库3" + }, + { + "rule": "路漫漫", + "name": "路漫漫.js", + "size": "4.79kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/路漫漫.js", + "id": 642, + "from": "drpy源仓库3" + }, + { + "rule": "达达龟", + "name": "达达龟.js", + "size": "6.18kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/达达龟.js", + "id": 643, + "from": "drpy源仓库3" + }, + { + "rule": "追剧迷", + "name": "追剧迷.js", + "size": "1.27kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/追剧迷.js", + "id": 644, + "from": "drpy源仓库3" + }, + { + "rule": "酷6网", + "name": "酷6网.js", + "size": "0.87kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/酷6网.js", + "id": 645, + "from": "drpy源仓库3" + }, + { + "rule": "酷云77", + "name": "酷云77.js", + "size": "10.72kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/酷云77.js", + "id": 646, + "from": "drpy源仓库3" + }, + { + "rule": "酷奇MV", + "name": "酷奇MV.js", + "size": "1.07kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/酷奇MV.js", + "id": 647, + "from": "drpy源仓库3" + }, + { + "rule": "量子影视", + "name": "量子影视.js", + "size": "16.59kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/量子影视.js", + "id": 648, + "from": "drpy源仓库3" + }, + { + "rule": "量子资源", + "name": "量子资源.js", + "size": "2.99kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/量子资源.js", + "id": 649, + "from": "drpy源仓库3" + }, + { + "rule": "金曼影视", + "name": "金曼影视.js", + "size": "17.43kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/金曼影视.js", + "id": 650, + "from": "drpy源仓库3" + }, + { + "rule": "鑫鑫[V2]", + "name": "鑫鑫[V2].js", + "size": "16.02kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/鑫鑫[V2].js", + "id": 651, + "from": "drpy源仓库3" + }, + { + "rule": "阿布影院", + "name": "阿布影院.js", + "size": "10.63kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/阿布影院.js", + "id": 652, + "from": "drpy源仓库3" + }, + { + "rule": "飞兔影视", + "name": "飞兔影视.js", + "size": "7.35kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/飞兔影视.js", + "id": 653, + "from": "drpy源仓库3" + }, + { + "rule": "首播影院", + "name": "首播影院.js", + "size": "27.3kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/首播影院.js", + "id": 654, + "from": "drpy源仓库3" + }, + { + "rule": "骚火电影", + "name": "骚火电影.js", + "size": "3.97kb", + "url": "https:\/\/ghproxy.liuzhicong.com\/https:\/\/raw.githubusercontent.com\/gaotianliuyun\/gao\/master\/js\/骚火电影.js", + "id": 655, + "from": "drpy源仓库3" + } +] \ No newline at end of file diff --git a/drpy_t3/json/geoip.dat.gz b/drpy_t3/json/geoip.dat.gz new file mode 100644 index 0000000..de0f65f Binary files /dev/null and b/drpy_t3/json/geoip.dat.gz differ diff --git a/drpy_t3/json/lives.jpg b/drpy_t3/json/lives.jpg new file mode 100644 index 0000000..f28eeaa Binary files /dev/null and b/drpy_t3/json/lives.jpg differ diff --git a/drpy_t3/json/moli.json b/drpy_t3/json/moli.json new file mode 100644 index 0000000..e28c716 --- /dev/null +++ b/drpy_t3/json/moli.json @@ -0,0 +1,764 @@ +{ + "1": [ + { + "key": "0", + "name": "类型", + "value": [ + { + "n": "全部", + "v": "1" + }, + { + "n": "动作", + "v": "5" + }, + { + "n": "爱情", + "v": "6" + }, + { + "n": "科幻", + "v": "7" + }, + { + "n": "恐怖", + "v": "8" + }, + { + "n": "战争", + "v": "9" + }, + { + "n": "喜剧", + "v": "10" + }, + { + "n": "纪录片", + "v": "11" + }, + { + "n": "剧情", + "v": "12" + }, + { + "n": "犯罪", + "v": "30" + }, + { + "n": "动画", + "v": "32" + } + ] + }, + { + "key": "1", + "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": "2", + "name": "地区", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "美国", + "v": "美国" + }, + { + "n": "韩国", + "v": "韩国" + }, + { + "n": "英国", + "v": "英国" + }, + { + "n": "日本", + "v": "日本" + }, + { + "n": "泰国", + "v": "泰国" + }, + { + "n": "中国", + "v": "中国" + }, + { + "n": "其他", + "v": "其他" + } + ] + }, + { + "key": "3", + "name": "年份", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "2024", + "v": "2024" + }, + { + "n": "2023", + "v": "2023" + }, + { + "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": "4", + "name": "状态", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "完结", + "v": "w" + }, + { + "n": "连载中", + "v": "l" + } + ] + }, + { + "key": "5", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "评分", + "v": "douban" + } + ] + } + ], + "2": [ + { + "key": "0", + "name": "类型", + "value": [ + { + "n": "全部", + "v": "2" + }, + { + "n": "美剧", + "v": "15" + }, + { + "n": "韩剧", + "v": "16" + }, + { + "n": "日剧", + "v": "13" + }, + { + "n": "英剧", + "v": "34" + }, + { + "n": "中国", + "v": "14" + }, + { + "n": "泰剧", + "v": "29" + }, + { + "n": "综艺", + "v": "39" + }, + { + "n": "其他", + "v": "38" + } + ] + }, + { + "key": "1", + "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": "2", + "name": "地区", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "美国", + "v": "美国" + }, + { + "n": "韩国", + "v": "韩国" + }, + { + "n": "英国", + "v": "英国" + }, + { + "n": "日本", + "v": "日本" + }, + { + "n": "泰国", + "v": "泰国" + }, + { + "n": "中国", + "v": "中国" + }, + { + "n": "其他", + "v": "其他" + } + ] + }, + { + "key": "3", + "name": "年份", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "2024", + "v": "2024" + }, + { + "n": "2023", + "v": "2023" + }, + { + "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": "4", + "name": "状态", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "完结", + "v": "w" + }, + { + "n": "连载中", + "v": "l" + } + ] + }, + { + "key": "5", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "评分", + "v": "douban" + } + ] + } + ], + "41": [ + { + "key": "0", + "name": "类型", + "value": [ + { + "n": "全部", + "v": "41" + }, + { + "n": "日本", + "v": "42" + }, + { + "n": "其他", + "v": "43" + } + ] + }, + { + "key": "1", + "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": "2", + "name": "地区", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "美国", + "v": "美国" + }, + { + "n": "韩国", + "v": "韩国" + }, + { + "n": "英国", + "v": "英国" + }, + { + "n": "日本", + "v": "日本" + }, + { + "n": "泰国", + "v": "泰国" + }, + { + "n": "中国", + "v": "中国" + }, + { + "n": "其他", + "v": "其他" + } + ] + }, + { + "key": "3", + "name": "年份", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "2024", + "v": "2024" + }, + { + "n": "2023", + "v": "2023" + }, + { + "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": "4", + "name": "状态", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "完结", + "v": "w" + }, + { + "n": "连载中", + "v": "l" + } + ] + }, + { + "key": "5", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "评分", + "v": "douban" + } + ] + } + ] +} diff --git a/drpy_t3/json/pikpakclass.json b/drpy_t3/json/pikpakclass.json new file mode 100644 index 0000000..7779183 --- /dev/null +++ b/drpy_t3/json/pikpakclass.json @@ -0,0 +1,80 @@ +[ +{"type_id":"https://mypikpak.com/s/self", "type_name":"我的PikPak網盤", "version":"20240301"}, +{"type_id":"https://mypikpak.com/s/VNRT8Wr8BGyw1kt1HkijKR4Qo1","type_name":"高清劇集合集一二"}, +{"type_id":"https://mypikpak.com/s/VNThL9vJ7kj57e2Kr_dlOzc0o1","type_name":"每日更新" }, +{"type_id":"https://mypikpak.com/s/VNBG3CPruacfHy3KVrVR1Qbko1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧1"}, +{"type_id":"https://mypikpak.com/s/VNBXQHEBywwEP48SYNoLGhg-o1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧10"}, +{"type_id":"https://mypikpak.com/s/VNCKGMKeL4KQWxNSeNl-aNK8o1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧11"}, +{"type_id":"https://mypikpak.com/s/VNCKIgIdXbeMUnS27Hc7ifoho1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧12"}, +{"type_id":"https://mypikpak.com/s/VNCKK_lIL4KQWxNSeNl-b-Avo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧13"}, +{"type_id":"https://mypikpak.com/s/VNCPyF1ibAmUFsTwcgPpV2RPo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧14"}, +{"type_id":"https://mypikpak.com/s/VNCPyIV4bsikE1REQUzU3HAKo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧15"}, +{"type_id":"https://mypikpak.com/s/VNCPyLg-XbeMUnS27Hc8e-evo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧16"}, +{"type_id":"https://mypikpak.com/s/VNCPyOHZfY9FgjheL_s6tE0Eo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧17"}, +{"type_id":"https://mypikpak.com/s/VNCdGBWsTsU_1xrcd7arNGkyo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧18"}, +{"type_id":"https://mypikpak.com/s/VNCdGaN8bsik85HcYchTzGwpo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧19"}, +{"type_id":"https://mypikpak.com/s/VNCdGlQdbAmU3kIGsTh-INYQo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧20"}, +{"type_id":"https://mypikpak.com/s/VNCdGvg1QqH-jGYGfgcDoqWho1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧21"}, +{"type_id":"https://mypikpak.com/s/VNCdHOhJTsU_1xrcd7arNWAuo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧22"}, +{"type_id":"https://mypikpak.com/s/VNCdHU8Xbsik85HcYchTzRlwo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧23"}, +{"type_id":"https://mypikpak.com/s/VNDJ--9QP3sxqczyGV8n35pUo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧24"}, +{"type_id":"https://mypikpak.com/s/VNDJ-2f3xeTB-N74vaHopsB8o1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧25"}, +{"type_id":"https://mypikpak.com/s/VNDJ-6m_P3sxqczyGV8n37Lso1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧26"}, +{"type_id":"https://mypikpak.com/s/VNDJ-AxdxeTB-N74vaHoptVeo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧27"}, +{"type_id":"https://mypikpak.com/s/VNDJ-F3_OLXqy_gd7t0qYPsTo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧28"}, +{"type_id":"https://mypikpak.com/s/VNJ-KE7EDnDGgthutL8stFDco1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧29"}, +{"type_id":"https://mypikpak.com/s/VNBGhK25s795X1GmZKtAzarxo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧3"}, +{"type_id":"https://mypikpak.com/s/VNJ-KU-PpnUdNyThzczFHNY0o1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧30"}, +{"type_id":"https://mypikpak.com/s/VNKX8Tmvg-_M2ALfxiCXcfbOo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧31"}, +{"type_id":"https://mypikpak.com/s/VNKX8k1cDAay6DoGUEtaSmGjo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧32"}, +{"type_id":"https://mypikpak.com/s/VNLt5PTTTImas0d3tF0BaJ7Zo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧33"}, +{"type_id":"https://mypikpak.com/s/VNLt5dq-vYqkqbIuRJRjLoiso1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧34"}, +{"type_id":"https://mypikpak.com/s/VNLuwIBrvYqkY2pqZt625qhyo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧35"}, +{"type_id":"https://mypikpak.com/s/VNLuwKtrvYqkY2pqZt625r-eo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧36"}, +{"type_id":"https://mypikpak.com/s/VNLyAGr0Qwh14Yz40bSwR67do1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧37"}, +{"type_id":"https://mypikpak.com/s/VNLyAJDMZAcORH2HWUMhsvGWo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧38"}, +{"type_id":"https://mypikpak.com/s/VNLySlyJpr1J-y7W15G4N6xXo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧39"}, +{"type_id":"https://mypikpak.com/s/VNBGjxzm-8JG74imIZI6qg8Do1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧4"}, +{"type_id":"https://mypikpak.com/s/VNLySocLsRCm72XnqKv7pueto1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧40"}, +{"type_id":"https://mypikpak.com/s/VNLyXhUKwRiUO2berP7_qFoao1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧41"}, +{"type_id":"https://mypikpak.com/s/VNBH3M6lJXuc4t0v-pqB0dFQo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧5"}, +{"type_id":"https://mypikpak.com/s/VNBHRToB_DHT_nmBnwoud8QJo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧6"}, +{"type_id":"https://mypikpak.com/s/VNBHSrWiCjrm4NxyIs_56cHpo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧7"}, +{"type_id":"https://mypikpak.com/s/VNBXPhSLJktjoBJJe8ptXNbco1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧8"}, +{"type_id":"https://mypikpak.com/s/VNBXPwl3bA6kG0eqiyJI3ulOo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧9"}, +{"type_id":"https://mypikpak.com/s/VNDb64cFhcn-yqNU5EWDgRZno1","type_name":"/🕸️我的PikPak分享/电影75T/电影1"}, +{"type_id":"https://mypikpak.com/s/VNM8-8Xlpr1JhKCjzr3hvs2Vo1","type_name":"/🕸️我的PikPak分享/电影75T/电影10"}, +{"type_id":"https://mypikpak.com/s/VNDb67b3hcn-yqNU5EWDgUDWo1","type_name":"/🕸️我的PikPak分享/电影75T/电影2"}, +{"type_id":"https://mypikpak.com/s/VNDca2W6hcn-yqNU5EWE-PLOo1","type_name":"/🕸️我的PikPak分享/电影75T/电影3"}, +{"type_id":"https://mypikpak.com/s/VNE5x-MGTKDwgZ2rSxM1xhrNo1","type_name":"/🕸️我的PikPak分享/电影75T/电影4"}, +{"type_id":"https://mypikpak.com/s/VNEdL2CecnVliWDE0AMdROMzo1","type_name":"/🕸️我的PikPak分享/电影75T/电影5"}, +{"type_id":"https://mypikpak.com/s/VNF8bBfoU5Warn8hY_LZYs3Xo1","type_name":"/🕸️我的PikPak分享/电影75T/电影6"}, +{"type_id":"https://mypikpak.com/s/VNGGxkU4AYqxeOi-Ts-R_4koo1","type_name":"/🕸️我的PikPak分享/电影75T/电影7"}, +{"type_id":"https://mypikpak.com/s/VNGHC0J31cRSfFQDubOJoLCAo1","type_name":"/🕸️我的PikPak分享/电影75T/电影8"}, +{"type_id":"https://mypikpak.com/s/VNM7V9gdpr1JgySnCF-P07aJo1","type_name":"/🕸️我的PikPak分享/电影75T/电影9"}, +{"type_id":"https://mypikpak.com/s/VNRnagBUCfOipBFoWCX8EGSdo1","type_name":"/🕸️我的PikPak分享/高清电影/合集10"}, +{"type_id":"https://mypikpak.com/s/VNRR1cc0LmyyGDe21AoK6Ulho1","type_name":"/🕸️我的PikPak分享/高清电影/合集11"}, +{"type_id":"https://mypikpak.com/s/VNRlVwQYQgqv395kxGBhPmDoo1","type_name":"/🕸️我的PikPak分享/高清电影/合集2"}, +{"type_id":"https://mypikpak.com/s/VNRm3yZtBGywKa118vzvgAg6o1","type_name":"/🕸️我的PikPak分享/高清电影/合集3"}, +{"type_id":"https://mypikpak.com/s/VNRmWOmQBGywKa118vzvlRiZo1","type_name":"/🕸️我的PikPak分享/高清电影/合集4"}, +{"type_id":"https://mypikpak.com/s/VNRmoFmoroRROhEkho_8kY_1o1","type_name":"/🕸️我的PikPak分享/高清电影/合集5"}, +{"type_id":"https://mypikpak.com/s/VNRn6HqiBGywKa118vzvuqFqo1","type_name":"/🕸️我的PikPak分享/高清电影/合集6"}, +{"type_id":"https://mypikpak.com/s/VNRnJASUroRROhEkho_8tpGfo1","type_name":"/🕸️我的PikPak分享/高清电影/合集7"}, +{"type_id":"https://mypikpak.com/s/VNRlg0pS7aWN3HWJGVGp2pZTo1","type_name":"/🕸️我的PikPak分享/高清电影/合集8"}, +{"type_id":"https://mypikpak.com/s/VNRnQbMN7aWN3HWJGVGpSkxFo1","type_name":"/🕸️我的PikPak分享/高清电影/合集9"}, +{"type_id":"https://mypikpak.com/s/VNRTAMNvBGyw1kt1HkijL-n0o1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集11"}, +{"type_id":"https://mypikpak.com/s/VNRTAhOZLmyyX7yiCb6t1jTuo1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集14"}, +{"type_id":"https://mypikpak.com/s/VNRTBCKPLmyyX7yiCb6t1qEKo1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集18"}, +{"type_id":"https://mypikpak.com/s/VNRT8zZXg3b_VYsn0bCwlVh5o1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集3"}, +{"type_id":"https://mypikpak.com/s/VNRT9eYeBGyw1kt1HkijKmL_o1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集5"}, +{"type_id":"https://mypikpak.com/s/VNRTA2HOg3b_VYsn0bCwlhKyo1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集8"}, +{"type_id":"https://mypikpak.com/s/VNRTCK4Lg3b_VYsn0bCwmeWXo1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集24"}, +{"type_id":"https://mypikpak.com/s/VNRTCmbnCfOi1Zl2Ft25Sjw8o1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集30"}, +{"type_id":"https://mypikpak.com/s/VNRTD2ceyM2NQYlKo78MEzY0o1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集32"}, +{"type_id":"https://mypikpak.com/s/VNRTDH_KBGyw1kt1HkijMHG5o1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集34"}, +{"type_id":"https://mypikpak.com/s/VNRTDh9fQgqv_6lSY5Z75Z5Yo1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集35"}, +{"type_id":"https://mypikpak.com/s/VNRTDyshQgqv_6lSY5Z75a42o1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集37"}, +{"type_id":"https://mypikpak.com/s/VNRTEG11roRROhEkho_4qFPYo1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集39"}, +{"type_id":"https://mypikpak.com/s/VNRTFVbPBGyw1kt1HkijMoBko1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集41"} + +] diff --git a/drpy_t3/json/pikpakclass.json.db.gz b/drpy_t3/json/pikpakclass.json.db.gz new file mode 100644 index 0000000..7b6a688 Binary files /dev/null and b/drpy_t3/json/pikpakclass.json.db.gz differ diff --git a/drpy_t3/json/pushshare.txt b/drpy_t3/json/pushshare.txt new file mode 100644 index 0000000..665d99b --- /dev/null +++ b/drpy_t3/json/pushshare.txt @@ -0,0 +1,11 @@ +https://www.alipan.com/s/self 我的阿里云盘 +https://pan.quark.cn/s/self 我的夸克云盘 +https://pan.xunlei.com/s/self 我的迅雷云盘 +https://mypikpak.com/s/self 我的PikPak云盘 +https://docs.qq.com/sheet/DVXp5Q2dRTVRXb2VS?tab=ith4wt 阿里云资源每天更新 +https://docs.qq.com/sheet/DVHpJVmRhT3ViV09Q?tab=ppx5bp 资源大全3 +https://docs.qq.com/sheet/DVHpJVmRhT3ViV09Q?tab=qvnx1e 星火阿里云盘 +https://docs.qq.com/sheet/DVXFYSURJRG9qbWJi?tab=BB08J2 短剧更新1 +https://docs.qq.com/sheet/DVXFYSURJRG9qbWJi?tab=x5a2cy 短剧更新2 +magnet:?xt=urn:btih:448aa6f77f1c1a14eb233b1f06b614a8d3193c51 绝命毒师1-5季 pushset1 +magnet:?xt=urn:btih:6EF000064DC6402E00E65F3B2029226196CD55C1 权力的游戏第八季 pushset2 diff --git a/drpy_t3/json/quarkshare.txt b/drpy_t3/json/quarkshare.txt new file mode 100644 index 0000000..6965c04 --- /dev/null +++ b/drpy_t3/json/quarkshare.txt @@ -0,0 +1,15 @@ +self 我的夸克网盘 +5d35f4a6de53 高画质夸克电影合集 +8bf0934bfdaa Tacit0924-豆瓣电影Top250 +6862082b30d3 童年经典动漫大合集套装(7TB) +78183164f34e 经典怀旧_剧集纪录片综艺大合集_持续更新 +885fd4ba2d92 每日短剧更新 +432b5cd3a225 短剧162g +c54a8e47f82f 短剧114g +047991d5955e 经典剧集 +ecdf7d6ffaaa 经典港剧合集1 +187062318ebc 经典港剧合集2 +9ebb62b93194 2023-2024跨年晚会合集 +2c9b026382f2 超高分书籍6000套 +0b709fd1f95c 魔卡少女樱 +e90b9775a78a dj diff --git a/drpy_t3/json/sambashare.txt b/drpy_t3/json/sambashare.txt new file mode 100644 index 0000000..e6dcf82 --- /dev/null +++ b/drpy_t3/json/sambashare.txt @@ -0,0 +1,7 @@ +user:pass@192.168.101.13/share Samba分享 0 updated_at DESC +user:pass@192.168.101.13/share2 Samba分享2 0 updated_at DESC +user:pass@192.168.101.13/share8 Samba分享8 0 updated_at DESC +user:pass@192.168.101.13/share10 Samba分享10 0 updated_at DESC +user:pass@192.168.101.13/share11 Samba分享11 0 updated_at DESC +user:pass@192.168.101.13/share12 Samba分享12 0 updated_at DESC +user:pass@192.168.101.13/share13 Samba分享13 0 updated_at DESC diff --git a/drpy_t3/json/thundershare.txt b/drpy_t3/json/thundershare.txt new file mode 100644 index 0000000..f287420 --- /dev/null +++ b/drpy_t3/json/thundershare.txt @@ -0,0 +1,15 @@ +self 我的迅雷雲盤 +VNg6eg34ncoRGHp98SBeYRUmA1?pwd=ywp2 刘德华高清电影电视剧全集 +VNg6YRPKiFWtWRrEfTcmpo4nA1?pwd=3dk6 李连杰电影合集 +VNg6af5Yu4IVpCplLZEXpTCHA1?pwd=e3tk 周星驰电影合集 +VNg6ZDjEu4IVpCplLZEXovZMA1?pwd=i83r 成龙电影合集 +VNg6aYN6S67q560x6uBmiTxGA1?pwd=vcff 金庸武侠作品电视剧版合集 +VNgOl6jLwFWEAL3PSyCmyc9vA1?pwd=z3jn 邵氏电影合集中文字幕 +VNfYsaHU3GXpR3Wc6X2vLDRXA1?pwd=k327 1962-2015[欧美][动作][007系列4K][24部][409GB] +VNgOliKdkJeHX8To1KuRhkabA1?pwd=8dfq 中国大陆老电影合集 +VNgOnbo2VGbPDhR48Bgvh0GMA1?pwd=n59u TVB香港电视剧 +VNgOkmDE9KxEdCnfuqBq-nh6A1?pwd=nr2b 豆瓣top电影合集 +VNfGhoL9ptGD3gtENXxflDZ6A1?pwd=4a3t 5TB精选迅雷云盘资源 +VNgOlIg5E5iq61_VnPABvO3BA1?pwd=bxix 港台大陆三级影片 +VNg9Y19oPimZP2d2xRhFUkQ6A1?pwd=nr2c 中国电视剧合集 +VNjwyIJVrUPzmOwSA07z6EP1A1?pwd=a84q 抖音短剧合集 diff --git a/drpy_t3/json/tokenm.json b/drpy_t3/json/tokenm.json new file mode 100644 index 0000000..584d5ca --- /dev/null +++ b/drpy_t3/json/tokenm.json @@ -0,0 +1,61 @@ +{ +"use_internal_storage":false, +"token":"", +"open_token":"", +"open_api_url":"get|https://adrive.xdow.net/oauth/access_token", +"oauth_client_id":"", +"oauth_client_secret":"", +"oauth_auth_url":"", +"oauth_refresh_url":"", +"thread_limit":32, +"is_vip":true, +"vip_thread_limit":10, +"vod_flags":"auto|4kz", +"quark_thread_limit":32, +"quark_is_vip":false, +"quark_vip_thread_limit":32, +"quark_flags":"auto|4kz", +"uc_thread_limit":0, +"uc_is_vip":false, +"uc_vip_thread_limit":0, +"uc_flags":"auto|4kz", +"thunder_thread_limit":2, +"thunder_is_vip":false, +"thunder_vip_thread_limit":2, +"thunder_flags":"4k|4kz|auto", +"aliproxy":"", +"aliproxy_url":"", +"proxy":"", +"danmu":true, +"quark_danmu":true, +"quark_cookie":"", +"uc_cookie":"", +"thunder_username":"", +"thunder_password":"", +"thunder_captchatoken":"", +"yd_auth":"", +"yd_thread_limit":4, +"yd_flags":"auto|4kz", +"yd_danmu":true, +"pikpak_username":"", +"pikpak_password":"", +"pikpak_flags":"4k|auto", +"pikpak_thread_limit":2, +"pikpak_vip_thread_limit":2, +"pikpak_proxy":"", +"pikpak_proxy_onlyapi":false, +"pikpak_danmu":true, +"wgcf_key":"", +"wgcf_key2":"", +"wgcf_ipport":"", +"wgcf_xray_url":"./xray.gz", +"wgcf_geoip_url":"./geoip.dat.gz", +"wgcf_json_url":"./wgcf.json", +"wgcf_vless_id":"", +"wgcf_vless_optname":"singapore.com:443", +"wgcf_vless_worker":"", +"wgcf_vless_path":"/?ed=2048", +"wgcf_vless_protocol":"vless", +"wgcf_vless_network":"ws", +"wgcf_vless_tls":false +} diff --git a/drpy_t3/json/tokenm.readme.txt b/drpy_t3/json/tokenm.readme.txt new file mode 100644 index 0000000..1c9bd1c --- /dev/null +++ b/drpy_t3/json/tokenm.readme.txt @@ -0,0 +1,52 @@ +把zip文件解壓縮到安卓設備的/sdcard/easybox/drpy_dzlive +修改 json/tokenm.json,并填寫必要的内容 + +特別提示:發現影视壳并不能加载最新的jar,如果遇到jar表現異常,或者最新的jar承諾的功能改進沒有實現,請清除播放殼app的緩存后强杀播放壳后再試,清除方法1:在殼app的設置裏點擊“緩存”,清除方法2:設備的應用管理中,清除殼app的數據及緩存。 +特别警告:迅雷云盘限制极为严格,不要尝试单token多用户异地使用,或多线程使用,随时可能封号。 + +可以透过配置中的“網盤及彈幕配置”的視頻源來實現快捷方便的獲取32位token及opentoken的功能。在“網盤及彈幕配置”中掃過任何一個OpenToken后,會自動激活“轉存原畫”功能 + +提示:如果遇到極速GO原畫反復快速報錯,不一定是被封號,可嘗試殺掉播放器重啓,或重啓整個播放設備解決。 +提示2:如果遇到“轉存原畫”速度被限制在2M左右,那麽請嘗試在阿里云盤APP裏退出登錄,然後重新登錄,然後刪除播放設備SD卡的TV目錄,在播放器上重新掃碼登錄。 +提示3:zip包内預置的aliproxy從jar内的assets改爲zip内的aliproxy.gz,可以減少jar包對播放器内存的消耗,但因爲aliproxy.gz的釋出需要使用到殼上的proxy功能,所以如果播放設備安裝了多個類似的播放器,可能導致aliproxy釋放出錯或運行出錯。不要嘗試在同一個播放設備上運行多個播放殼,也不要嘗試把本jar加載到同一個播放設備的不同播放殼上。 + + +tokenm.json格式説明: +{ +"use_internal_storage":false, //如果播放設備(比如某些智能電視機)沒有SD卡讀寫權限,則把本項目設置爲true可以正常處理緩存 +"token":"這裏填寫阿里云盤的32位token,也可以不填寫,在播放阿里云盤内容時會彈出窗口,點擊QrCode,用阿里云盤app掃碼", +"open_token":"這裏填寫通過alist或其他openapi提供方申請的280位aliyun openapi token,也可以不寫,會自動隱藏轉存原畫", +"thread_limit":32, //這裏是阿里云盤的GO代理的并發協程數或java代理的并發綫程數,若遇到賬號被限制并發數,請將此數值改爲10 +"is_vip":true, //是否是阿里云盤的VIP用戶,設置為true后,使用vip_thread_limit設置的數值來并發加速。如本設置項目不是true,則自動隱藏“轉存原畫” +"vip_thread_limit":10, //這裏是阿里云盤的轉存原畫(OpenToken)并發綫程數,若遇到賬號被限制并發數,請將此數值改爲10 +"quark_thread_limit":32, //這裏是夸克網盤GO代理的并發協程數或java代理的并發綫程數,若遇到賬號被限制並發數,請將此數值改爲10 +"quark_vip_thread_limit":16, //這裏是夸克網盤設置quark_is_vip:true之後的并發綫程數,若遇到賬號被限制并發數,請將此數值改爲10 +"quark_is_vip":false, //是否是夸克網盤的VIP用戶,設置為true后,綫程數受quark_vip_thread_limit控制 +"vod_flags":"4k|4kz|auto", //這裏是播放阿里雲的畫質選項,4k代表不轉存原畫(GO原畫),4kz代表轉存原畫,其他都代表預覽畫質,可選的預覽畫質包括qhd,fhd,hd,sd,ld, +"quark_flags":"4kz|auto", //這裏是播放夸克網盤的畫質選項,4kz代表轉存原畫(GO原畫),其他都代表轉碼畫質,可選的預覽畫質包括4k,2k,super,high,low,normal +"uc_thread_limit":0, +"uc_is_vip":false, +"uc_flags":"4kz|auto", +"uc_vip_thread_limit":0, +"thunder_thread_limit":0, +"thunder_is_vip":false, +"thunder_vip_thread_limit":0, +"thunder_flags":"4k|4kz|auto", +"aliproxy":"這裏填寫外部的加速代理,用於在盒子性能不夠的情況下,使用外部的加速代理來加速播放,可以不填寫", +"proxy":"這裏填寫用於科學上網的地址,連接openapi或某些資源站可能會需要用到,可以不填寫", +"open_api_url":"https://api.xhofe.top/alist/ali_open/token", //這是alist的openapi接口地址,也可使用其他openapi提供商的地址。 +"danmu":true,//是否全局開啓阿里云盤所有csp的彈幕支持,聚合類CSP仍需單獨設置,例如Wogg, Wobg +"quark_danmu":true,//是否全局開啓夸克網盤的所有csp的彈幕支持, 聚合類CSP仍需單獨設置,例如Wogg, Wobg +"quark_cookie":"這裏填寫通過https://pan.quark.cn網站獲取到的cookie,會很長,全數填入即可。" +"uc_cookie":"這裏填寫通過https://drive.uc.cn網站登錄獲取的cookie", +"thunder_username":"這裏填入用戶名或手機號,如果是手機號,記得是類似'+86 139123457'這樣的格式,+86后有空格才對", +"thunder_password":"密碼", +"thunder_captchatoken":"首次使用迅雷網盤時,需要使用app彈出的登陸地址去接碼登錄,並獲取captchaToken,具體方法參考alist網站的文檔:https://alist.nn.ci/zh/guide/drivers/thunder.html", +"pikpak_username":"PikPak網盤的用戶名", +"pikpak_password":"PikPak網盤的密碼", +"pikpak_flags":"4k|auto", +"pikpak_thread_limit":2, +"pikpak_vip_thread_limit":2, +"pikpak_proxy":"用於科學上網連接PikPak網盤的代理服務器地址", +"pikpak_proxy_onlyapi":false +} diff --git a/drpy_t3/json/wgcf.json b/drpy_t3/json/wgcf.json new file mode 100644 index 0000000..aa097cf --- /dev/null +++ b/drpy_t3/json/wgcf.json @@ -0,0 +1,307 @@ +{ + "log": { + "loglevel": "debug" + }, + "dns": { + "disableFallbackIfMatch": true, + "hosts": {}, + "queryStrategy": "UseIP", + "servers": [ + { + "address": "tcp://1.1.1.1", + "concurrency": true + }, + { + "address": "tcp+local://223.5.5.5:53", + "concurrency": true, + "domains": [ + "full:cdn-all.xn--b6gac.eu.org" + ], + "skipFallback": true + } + ] + }, + "outbounds": [ + { + "settings": { + "secretKey": "KEY", + "mtu": 1400, + "peers": [ + { + "publicKey": "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=", + "endpoint" : "engage.cloudflareclient.com:2408", + "keepAlive": 30 + } + ], + "address": [ + "172.16.0.2/32", + "2606:4700:110:893c:845c:536b:5565:8106/128" + ], + "kernelMode": false, + "worker":16 + }, + "protocol": "wireguard", + "streamSettings": { + "network": "tcp" + }, + "tag":"directwarp" + }, + { + "settings": { + "secretKey": "KEY", + "mtu": 1280, + "peers": [ + { + "publicKey": "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=", + "endpoint" : "engage.cloudflareclient.com:2408", + "keepAlive": 30 + } + ], + "address": [ + "172.16.0.2/32", + "2606:4700:110:893c:845c:536b:5565:8106/128" + ], + "kernelMode": false, + "worker":16 + }, + "protocol": "wireguard", + "streamSettings": { + "network": "tcp" + }, + "tag":"warpoverwarp", + "proxySettings": { + "tag": "directwarp", + "transportLayer": true + } + }, + { + "protocol": "vless", + "settings": { + "vnext": [ + { + "address": "cdn-all.xn--b6gac.eu.org", + "port": 443, + "users": [ + { + "id": "VLESSID", + "encryption": "none", + "level":0 + } + ] + } + ] + }, + "streamSettings": { + "network": "ws", + "security": "tls", + "tlsSettings": { + "serverName": "VLESSCFWORKERNAME", + "allowInsecure": true + }, + "wsSettings": { + "headers": { + "Host": "VLESSCFWORKERNAME" + }, + "path": "/?ed=2048" + } + }, + "tag":"vlesscf", + "proxySettings": { + "tag": "directfragment", + "transportLayer": true + } + }, + { + "protocol": "vless", + "settings": { + "vnext": [ + { + "address": "cdn-all.xn--b6gac.eu.org", + "port": 443, + "users": [ + { + "id": "VLESSID", + "encryption": "none", + "level":0 + } + ] + } + ] + }, + "streamSettings": { + "network": "ws", + "security": "tls", + "tlsSettings": { + "serverName": "VLESSCFWORKERNAME", + "allowInsecure": true + }, + "wsSettings": { + "headers": { + "Host": "VLESSCFWORKERNAME" + }, + "path": "/?ed=2048" + } + }, + "tag":"vlesscfoverwarp", + "proxySettings": { + "tag": "directwarp", + "transportLayer": true + } + }, + { + "protocol": "freedom", + "tag": "direct" + }, + { + "protocol": "freedom", + "settings":{ + "fragment": { + "packets": "tlshello", + "length": "40-60", + "interval": "30-50" + } + }, + "tag": "directfragment" + } + ] + , + "inbounds":[ + { + "listen": "0.0.0.0", + "port": 10070, + "protocol": "http", + "settings": { + "allowTransparent": true + }, + "sniffing": { + "destOverride": [ + "http", + "tls", + "quic" + ], + "enabled": true, + "routeOnly": true + }, + "tag": "http" + }, + { + "port": 10071, + "protocol": "socks", + "settings": { + "udp": true, + "auth": "noauth" + }, + "tag":"socks5", + "sniffing": { + "destOverride": [ + "http", + "tls", + "quic" + ], + "enabled": true, + "routeOnly": true + } + }, + { + "port": 10072, + "protocol": "socks", + "settings": { + "udp": true, + "auth": "noauth" + }, + "tag":"socks5overvless", + "sniffing": { + "destOverride": [ + "http", + "tls", + "quic" + ], + "enabled": true, + "routeOnly": true + } + }, + { + "port": 10073, + "protocol": "socks", + "settings": { + "udp": true, + "auth": "noauth" + }, + "tag":"socks5overwarpoverwarp", + "sniffing": { + "destOverride": [ + "http", + "tls", + "quic" + ], + "enabled": true, + "routeOnly": true + } + }, + { + "port": 10074, + "protocol": "socks", + "settings": { + "udp": true, + "auth": "noauth" + }, + "tag":"socks5overvlessoverwarp", + "sniffing": { + "destOverride": [ + "http", + "tls", + "quic" + ], + "enabled": true, + "routeOnly": true + } + } + ], + "routing": { + "domainStrategy": "AsIs", + "rules": [ + { + "type": "field", + "ip": [ + "127.0.0.1" + ], + "outboundTag": "direct" + }, + { + "type": "field", + "inboundTag": [ + "socks5" + ], + "outboundTag": "directwarp" + }, + { + "type": "field", + "inboundTag": [ + "socks5overvless" + ], + "outboundTag": "vlesscf" + }, + { + "type": "field", + "inboundTag": [ + "http" + ], + "outboundTag": "vlesscf" + }, + { + "type": "field", + "inboundTag": [ + "socks5overwarpoverwarp" + ], + "outboundTag": "warpoverwarp" + }, + { + "type": "field", + "inboundTag": [ + "socks5overvlessoverwarp" + ], + "outboundTag": "vlesscfoverwarp" + } + ] + } +} diff --git a/drpy_t3/json/wogg.json b/drpy_t3/json/wogg.json new file mode 100644 index 0000000..121b998 --- /dev/null +++ b/drpy_t3/json/wogg.json @@ -0,0 +1,1558 @@ +{ + "1": [ + { + "key": "3", + "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": "1", + "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": "其他" + } + ] + }, + { + "key": "11", + "name": "年份", + "value": [ + { + "n": "2024", + "v": "2024" + }, + { + "n": "2023", + "v": "2023" + }, + { + "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": "5", + "name": "字母", + "value": [ + { + "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": "0-9" + } + ] + }, + { + "key": "2", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "2": [ + { + "key": "1", + "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": "其他" + } + ] + }, + { + "key": "4", + "name": "语言", + "value": [ + { + "n": "国语", + "v": "国语" + }, + { + "n": "英语", + "v": "英语" + }, + { + "n": "粤语", + "v": "粤语" + }, + { + "n": "闽南语", + "v": "闽南语" + }, + { + "n": "韩语", + "v": "韩语" + }, + { + "n": "日语", + "v": "日语" + }, + { + "n": "法语", + "v": "法语" + }, + { + "n": "德语", + "v": "德语" + }, + { + "n": "其它", + "v": "其它" + } + ] + }, + { + "key": "11", + "name": "年份", + "value": [ + { + "n": "2024", + "v": "2024" + }, + { + "n": "2023", + "v": "2023" + }, + { + "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": "5", + "name": "字母", + "value": [ + { + "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": "0-9" + } + ] + }, + { + "key": "2", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "3": [ + { + "key": "1", + "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": "其他" + } + ] + }, + { + "key": "4", + "name": "语言", + "value": [ + { + "n": "国语", + "v": "国语" + }, + { + "n": "英语", + "v": "英语" + }, + { + "n": "粤语", + "v": "粤语" + }, + { + "n": "闽南语", + "v": "闽南语" + }, + { + "n": "韩语", + "v": "韩语" + }, + { + "n": "日语", + "v": "日语" + }, + { + "n": "法语", + "v": "法语" + }, + { + "n": "德语", + "v": "德语" + }, + { + "n": "其它", + "v": "其它" + } + ] + }, + { + "key": "11", + "name": "年份", + "value": [ + { + "n": "2024", + "v": "2024" + }, + { + "n": "2023", + "v": "2023" + }, + { + "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": "5", + "name": "字母", + "value": [ + { + "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": "0-9" + } + ] + }, + { + "key": "2", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "4": [ + { + "key": "1", + "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": "其他" + } + ] + }, + { + "key": "4", + "name": "语言", + "value": [ + { + "n": "国语", + "v": "国语" + }, + { + "n": "英语", + "v": "英语" + }, + { + "n": "粤语", + "v": "粤语" + }, + { + "n": "闽南语", + "v": "闽南语" + }, + { + "n": "韩语", + "v": "韩语" + }, + { + "n": "日语", + "v": "日语" + }, + { + "n": "法语", + "v": "法语" + }, + { + "n": "德语", + "v": "德语" + }, + { + "n": "其它", + "v": "其它" + } + ] + }, + { + "key": "11", + "name": "年份", + "value": [ + { + "n": "2024", + "v": "2024" + }, + { + "n": "2023", + "v": "2023" + }, + { + "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": "5", + "name": "字母", + "value": [ + { + "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": "0-9" + } + ] + }, + { + "key": "2", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "5": [ + { + "key": "5", + "name": "字母", + "value": [ + { + "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": "0-9" + } + ] + }, + { + "key": "2", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "6": [ + { + "key": "5", + "name": "字母", + "value": [ + { + "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": "0-9" + } + ] + }, + { + "key": "2", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ] +} diff --git a/drpy_t3/json/xray.gz b/drpy_t3/json/xray.gz new file mode 100644 index 0000000..6958c9c Binary files /dev/null and b/drpy_t3/json/xray.gz differ diff --git a/drpy_t3/json/小学教育.json b/drpy_t3/json/小学教育.json new file mode 100644 index 0000000..f3ed0af --- /dev/null +++ b/drpy_t3/json/小学教育.json @@ -0,0 +1,1050 @@ +{ + "classes": [ + { + "type_name": "1年级语文", + "type_id": "1年级语文" + }, + { + "type_name": "1年级数学", + "type_id": "1年级数学" + }, + { + "type_name": "1年级英语", + "type_id": "1年级英语" + }, + { + "type_name": "2年级语文", + "type_id": "2年级语文" + }, + { + "type_name": "2年级数学", + "type_id": "2年级数学" + }, + { + "type_name": "2年级英语", + "type_id": "2年级英语" + }, + { + "type_name": "3年级语文", + "type_id": "3年级语文" + }, + { + "type_name": "3年级数学", + "type_id": "3年级数学" + }, + { + "type_name": "3年级英语", + "type_id": "3年级英语" + }, + { + "type_name": "4年级语文", + "type_id": "4年级语文" + }, + { + "type_name": "4年级数学", + "type_id": "4年级数学" + }, + { + "type_name": "4年级英语", + "type_id": "4年级英语" + }, + { + "type_name": "5年级语文", + "type_id": "5年级语文" + }, + { + "type_name": "5年级数学", + "type_id": "5年级数学" + }, + { + "type_name": "5年级英语", + "type_id": "5年级英语" + }, + { + "type_name": "6年级语文", + "type_id": "6年级语文" + }, + { + "type_name": "6年级数学", + "type_id": "6年级数学" + }, + { + "type_name": "6年级英语", + "type_id": "6年级英语" + } + ], + "filter": { + "1年级语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "1年级语文" + }, + { + "n": "沪教版", + "v": "沪教版1年级语文" + }, + { + "n": "人教版", + "v": "人教版1年级语文" + }, + { + "n": "北师大版", + "v": "北师大版1年级语文" + }, + { + "n": "苏教版", + "v": "苏教版1年级语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "1年级英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "1年级英语" + }, + { + "n": "沪教版", + "v": "沪教版1年级英语" + }, + { + "n": "人教版", + "v": "人教版1年级英语" + }, + { + "n": "北师大版", + "v": "北师大版1年级英语" + }, + { + "n": "苏教版", + "v": "苏教版1年级英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "1年级数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "1年级数学" + }, + { + "n": "沪教版", + "v": "沪教版1年级数学" + }, + { + "n": "人教版", + "v": "人教版1年级数学" + }, + { + "n": "北师大版", + "v": "北师大版1年级数学" + }, + { + "n": "苏教版", + "v": "苏教版1年级数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "2年级语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "2年级语文" + }, + { + "n": "沪教版", + "v": "沪教版2年级语文" + }, + { + "n": "人教版", + "v": "人教版2年级语文" + }, + { + "n": "北师大版", + "v": "北师大版2年级语文" + }, + { + "n": "苏教版", + "v": "苏教版2年级语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "2年级英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "2年级英语" + }, + { + "n": "沪教版", + "v": "沪教版2年级英语" + }, + { + "n": "人教版", + "v": "人教版2年级英语" + }, + { + "n": "北师大版", + "v": "北师大版2年级英语" + }, + { + "n": "苏教版", + "v": "苏教版2年级英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "2年级数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "2年级数学" + }, + { + "n": "沪教版", + "v": "沪教版2年级数学" + }, + { + "n": "人教版", + "v": "人教版2年级数学" + }, + { + "n": "北师大版", + "v": "北师大版2年级数学" + }, + { + "n": "苏教版", + "v": "苏教版2年级数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "3年级语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "3年级语文" + }, + { + "n": "沪教版", + "v": "沪教版3年级语文" + }, + { + "n": "人教版", + "v": "人教版3年级语文" + }, + { + "n": "北师大版", + "v": "北师大版3年级语文" + }, + { + "n": "苏教版", + "v": "苏教版3年级语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "3年级英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "3年级英语" + }, + { + "n": "沪教版", + "v": "沪教版3年级英语" + }, + { + "n": "人教版", + "v": "人教版3年级英语" + }, + { + "n": "北师大版", + "v": "北师大版3年级英语" + }, + { + "n": "苏教版", + "v": "苏教版3年级英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "3年级数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "3年级数学" + }, + { + "n": "沪教版", + "v": "沪教版3年级数学" + }, + { + "n": "人教版", + "v": "人教版3年级数学" + }, + { + "n": "北师大版", + "v": "北师大版3年级数学" + }, + { + "n": "苏教版", + "v": "苏教版3年级数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "4年级语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "4年级语文" + }, + { + "n": "沪教版", + "v": "沪教版4年级语文" + }, + { + "n": "人教版", + "v": "人教版4年级语文" + }, + { + "n": "北师大版", + "v": "北师大版4年级语文" + }, + { + "n": "苏教版", + "v": "苏教版4年级语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "4年级英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "4年级英语" + }, + { + "n": "沪教版", + "v": "沪教版4年级英语" + }, + { + "n": "人教版", + "v": "人教版4年级英语" + }, + { + "n": "北师大版", + "v": "北师大版4年级英语" + }, + { + "n": "苏教版", + "v": "苏教版4年级英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "4年级数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "4年级数学" + }, + { + "n": "沪教版", + "v": "沪教版4年级数学" + }, + { + "n": "人教版", + "v": "人教版4年级数学" + }, + { + "n": "北师大版", + "v": "北师大版4年级数学" + }, + { + "n": "苏教版", + "v": "苏教版4年级数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "5年级语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "5年级语文" + }, + { + "n": "沪教版", + "v": "沪教版5年级语文" + }, + { + "n": "人教版", + "v": "人教版5年级语文" + }, + { + "n": "北师大版", + "v": "北师大版5年级语文" + }, + { + "n": "苏教版", + "v": "苏教版5年级语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "5年级英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "5年级英语" + }, + { + "n": "沪教版", + "v": "沪教版5年级英语" + }, + { + "n": "人教版", + "v": "人教版5年级英语" + }, + { + "n": "北师大版", + "v": "北师大版5年级英语" + }, + { + "n": "苏教版", + "v": "苏教版5年级英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "5年级数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "5年级数学" + }, + { + "n": "沪教版", + "v": "沪教版5年级数学" + }, + { + "n": "人教版", + "v": "人教版5年级数学" + }, + { + "n": "北师大版", + "v": "北师大版5年级数学" + }, + { + "n": "苏教版", + "v": "苏教版5年级数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "6年级语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "6年级语文" + }, + { + "n": "沪教版", + "v": "沪教版6年级语文" + }, + { + "n": "人教版", + "v": "人教版6年级语文" + }, + { + "n": "北师大版", + "v": "北师大版6年级语文" + }, + { + "n": "苏教版", + "v": "苏教版6年级语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "6年级英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "6年级英语" + }, + { + "n": "沪教版", + "v": "沪教版6年级英语" + }, + { + "n": "人教版", + "v": "人教版6年级英语" + }, + { + "n": "北师大版", + "v": "北师大版6年级英语" + }, + { + "n": "苏教版", + "v": "苏教版6年级英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "6年级数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "6年级数学" + }, + { + "n": "沪教版", + "v": "沪教版6年级数学" + }, + { + "n": "人教版", + "v": "人教版6年级数学" + }, + { + "n": "北师大版", + "v": "北师大版6年级数学" + }, + { + "n": "苏教版", + "v": "苏教版6年级数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30-60分钟", + "v": "3" + }, + { + "n": "10-30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/drpy_t3/json/白嫖筛选.json b/drpy_t3/json/白嫖筛选.json new file mode 100644 index 0000000..5b17cc1 --- /dev/null +++ b/drpy_t3/json/白嫖筛选.json @@ -0,0 +1 @@ +{"1":[{"key":"类型","name":"类型","value":[{"n":"全部","v":"/id/1"},{"n":"动作片","v":"/id/6"},{"n":"喜剧片","v":"/id/7"},{"n":"爱情片","v":"/id/8"},{"n":"科幻片","v":"/id/9"},{"n":"恐怖片","v":"/id/10"},{"n":"剧情片","v":"/id/11"},{"n":"战争片","v":"/id/12"},{"n":"动画片","v":"/id/13"},{"n":"纪录片","v":"/id/14"}]},{"key":"剧情","name":"剧情","value":[{"n":"全部","v":""},{"n":"喜剧","v":"/class/喜剧"},{"n":"爱情","v":"/class/爱情"},{"n":"恐怖","v":"/class/恐怖"},{"n":"动作","v":"/class/动作"},{"n":"科幻","v":"/class/科幻"},{"n":"剧情","v":"/class/剧情"},{"n":"战争","v":"/class/战争"},{"n":"警匪","v":"/class/警匪"},{"n":"犯罪","v":"/class/犯罪"},{"n":"动画","v":"/class/动画"},{"n":"奇幻","v":"/class/奇幻"},{"n":"武侠","v":"/class/武侠"},{"n":"冒险","v":"/class/冒险"},{"n":"枪战","v":"/class/枪战"},{"n":"悬疑","v":"/class/悬疑"},{"n":"惊悚","v":"/class/惊悚"},{"n":"经典","v":"/class/经典"},{"n":"青春","v":"/class/青春"},{"n":"文艺","v":"/class/文艺"},{"n":"微电影","v":"/class/微电影"},{"n":"古装","v":"/class/古装"},{"n":"历史","v":"/class/历史"},{"n":"运动","v":"/class/运动"},{"n":"农村","v":"/class/农村"},{"n":"儿童","v":"/class/儿童"},{"n":"网络电影","v":"/class/网络电影"}]},{"key":"地区","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/中国大陆"},{"n":"中国香港","v":"/area/中国香港"},{"n":"中国台湾","v":"/area/中国台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"其它","v":"/area/其它"}]},{"key":"年份","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"/year/2024"},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"},{"n":"1999","v":"/year/1999"},{"n":"1998","v":"/year/1998"},{"n":"1997","v":"/year/1997"},{"n":"1996","v":"/year/1996"},{"n":"1995","v":"/year/1995"},{"n":"1994","v":"/year/1994"},{"n":"1993","v":"/year/1993"},{"n":"1992","v":"/year/1992"},{"n":"1991","v":"/year/1991"},{"n":"1990","v":"/year/1990"}]},{"key":"语言","name":"语言","value":[{"n":"全部","v":""},{"n":"汉语普通话","v":"/lang/汉语普通话"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"字母","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"排序","name":"排序","value":[{"n":"按时间","v":"/by/time"},{"n":"按人气","v":"/by/hits"},{"n":"按评分","v":"/by/score"}]}],"2":[{"key":"类型","name":"类型","value":[{"n":"全部","v":"/id/2"},{"n":"国剧","v":"/id/15"},{"n":"美剧","v":"/id/16"},{"n":"英剧","v":"/id/17"},{"n":"韩剧","v":"/id/18"},{"n":"泰剧","v":"/id/20"},{"n":"日剧","v":"/id/21"},{"n":"中国香港","v":"/id/22"},{"n":"中国台湾","v":"/id/23"},{"n":"其他","v":"/id/24"}]},{"key":"剧情","name":"剧情","value":[{"n":"全部","v":""},{"n":"古装","v":"/class/古装"},{"n":"战争","v":"/class/战争"},{"n":"青春偶像","v":"/class/青春偶像"},{"n":"喜剧","v":"/class/喜剧"},{"n":"家庭","v":"/class/家庭"},{"n":"犯罪","v":"/class/犯罪"},{"n":"动作","v":"/class/动作"},{"n":"奇幻","v":"/class/奇幻"},{"n":"剧情","v":"/class/剧情"},{"n":"历史","v":"/class/历史"},{"n":"经典","v":"/class/经典"},{"n":"乡村","v":"/class/乡村"},{"n":"情景","v":"/class/情景"},{"n":"商战","v":"/class/商战"},{"n":"网剧","v":"/class/网剧"},{"n":"其他","v":"/class/其他"}]},{"key":"地区","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/中国大陆"},{"n":"中国香港","v":"/area/中国香港"},{"n":"中国台湾","v":"/area/中国台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"其它","v":"/area/其它"}]},{"key":"年份","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"/year/2024"},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"},{"n":"1999","v":"/year/1999"},{"n":"1998","v":"/year/1998"},{"n":"1997","v":"/year/1997"},{"n":"1996","v":"/year/1996"},{"n":"1995","v":"/year/1995"},{"n":"1994","v":"/year/1994"},{"n":"1993","v":"/year/1993"},{"n":"1992","v":"/year/1992"},{"n":"1991","v":"/year/1991"},{"n":"1990","v":"/year/1990"}]},{"key":"语言","name":"语言","value":[{"n":"全部","v":""},{"n":"汉语普通话","v":"/lang/汉语普通话"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"字母","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"排序","name":"排序","value":[{"n":"按时间","v":"/by/time"},{"n":"按人气","v":"/by/hits"},{"n":"按评分","v":"/by/score"}]}],"3":[{"key":"类型","name":"类型","value":[{"n":"全部","v":"/id/3"},{"n":"国漫","v":"/id/25"},{"n":"日漫","v":"/id/26"},{"n":"欧美","v":"/id/27"},{"n":"其他","v":"/id/28"}]},{"key":"剧情","name":"剧情","value":[{"n":"全部","v":""},{"n":"情感","v":"/class/情感"},{"n":"科幻","v":"/class/科幻"},{"n":"热血","v":"/class/热血"},{"n":"推理","v":"/class/推理"},{"n":"搞笑","v":"/class/搞笑"},{"n":"冒险","v":"/class/冒险"},{"n":"萝莉","v":"/class/萝莉"},{"n":"校园","v":"/class/校园"},{"n":"动作","v":"/class/动作"},{"n":"机战","v":"/class/机战"},{"n":"运动","v":"/class/运动"},{"n":"战争","v":"/class/战争"},{"n":"少年","v":"/class/少年"},{"n":"少女","v":"/class/少女"},{"n":"社会","v":"/class/社会"},{"n":"原创","v":"/class/原创"},{"n":"亲子","v":"/class/亲子"},{"n":"益智","v":"/class/益智"},{"n":"励志","v":"/class/励志"},{"n":"其他","v":"/class/其他"}]},{"key":"地区","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/中国大陆"},{"n":"中国香港","v":"/area/中国香港"},{"n":"中国台湾","v":"/area/中国台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"其它","v":"/area/其它"}]},{"key":"年份","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"/year/2024"},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"}]},{"key":"语言","name":"语言","value":[{"n":"全部","v":""},{"n":"汉语普通话","v":"/lang/汉语普通话"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"字母","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"排序","name":"排序","value":[{"n":"按时间","v":"/by/time"},{"n":"按人气","v":"/by/hits"},{"n":"按评分","v":"/by/score"}]}],"4":[{"key":"类型","name":"类型","value":[{"n":"全部","v":"/id/4"},{"n":"内地","v":"/id/29"}]},{"key":"剧情","name":"剧情","value":[{"n":"全部","v":""},{"n":"爽文","v":"/class/爽文"}]},{"key":"地区","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"/area/内地"}]},{"key":"年份","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"/year/2024"},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"}]},{"key":"语言","name":"语言","value":[{"n":"全部","v":""},{"n":"汉语普通话","v":"/lang/汉语普通话"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"字母","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"排序","name":"排序","value":[{"n":"按时间","v":"/by/time"},{"n":"按人气","v":"/by/hits"},{"n":"按评分","v":"/by/score"}]}],"5":[{"key":"类型","name":"类型","value":[{"n":"全部","v":"/id/5"},{"n":"大陆综艺","v":"/id/30"},{"n":"日韩综艺","v":"/id/31"},{"n":"港台综艺","v":"/id/32"},{"n":"欧美综艺","v":"/id/33"}]},{"key":"剧情","name":"剧情","value":[{"n":"全部","v":""},{"n":"","v":""}]},{"key":"地区","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/中国大陆"},{"n":"中国香港","v":"/area/中国香港"},{"n":"中国台湾","v":"/area/中国台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"其它","v":"/area/其它"}]},{"key":"年份","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"}]},{"key":"语言","name":"语言","value":[{"n":"全部","v":""},{"n":"汉语普通话","v":"/lang/汉语普通话"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"字母","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"排序","name":"排序","value":[{"n":"按时间","v":"/by/time"},{"n":"按人气","v":"/by/hits"},{"n":"按评分","v":"/by/score"}]}]} \ No newline at end of file diff --git a/drpy_t3/lives/feilong.txt b/drpy_t3/lives/feilong.txt new file mode 100644 index 0000000..b6da905 --- /dev/null +++ b/drpy_t3/lives/feilong.txt @@ -0,0 +1,3798 @@ +龍🐉直播中国,#genre# +直播中国,https://gcalic.v.myalicdn.com/gc/wgw05_1/index.m3u8?contentid=2820180516001 +新疆天山(定海神针),http://gctxyc.liveplay.myqcloud.com/gc/xjtcdhsz_1/index.m3u8 +黄花城水长城02,http://gctxyc.liveplay.myqcloud.com/gc/wgw02_1/index.m3u8 +直播中国,https://gcalic.v.myalicdn.com/gc/wgw05_1/index.m3u8?contentid=2820180516001 +湖南张家界水绕四门,https://gcalic.v.myalicdn.com/gc/zjjsrsm_1/index.m3u8 +湖南张家界将军列队,https://gcalic.v.myalicdn.com/gc/zjjjjdl_1/index.m3u8 +湖南张家界迷魂台,https://gcalic.v.myalicdn.com/gc/zjjmht_1/index.m3u8 +湖南张家界宝峰湖,https://gcalic.v.myalicdn.com/gc/zjjbfh_1/index.m3u8 +湖南张家界御笔峰,https://gcalic.v.myalicdn.com/gc/zjjybf_1/index.m3u8 +四川峨眉山云海日出,https://gcalic.v.myalicdn.com/gc/emsarm_1/index.m3u8 +四川峨眉山远眺贡嘎山,https://gcalic.v.myalicdn.com/gc/emsyh_1/index.m3u8 +四川峨眉山贤菩萨铜像,https://gcalic.v.myalicdn.com/gc/emspxps_1/index.m3u8 +四川峨眉山远眺万佛顶,https://gcalic.v.myalicdn.com/gc/emswfs_1/index.m3u8 +新疆天山(定海神针),https://gcalic.v.myalicdn.com/gc/xjtcdhsz_1/index.m3u8 +新疆天山(定海神针),https://gcalic.v.myalicdn.com/gc/xjtcdhsz_1/index.m3u8 +新疆天山(马牙山),https://gcalic.v.myalicdn.com/gc/xjtcmys_1/index.m3u8 +新疆天山(灯杆山),https://gcalic.v.myalicdn.com/gc/xjtcdgs_1/index.m3u8 +湖南张家界天门山西线玻璃栈道,https://gcalic.v.myalicdn.com/gc/tms05_1/index.m3u8 +厦门鼓浪屿,https://gcalic.v.myalicdn.com/gc/gly01_1/index.m3u8 +厦门鼓浪屿,https://gcalic.v.myalicdn.com/gc/gly01_1/index.m3u8 +广西玉林大容山莲花山顶,https://gcalic.v.myalicdn.com/gc/drs01_1/index.m3u8 +八里沟风景区桃花湾瀑布,https://gcalic.v.myalicdn.com/gc/blg05_1/index.m3u8 +八里沟风景区天界山玻璃栈道,https://gcalic.v.myalicdn.com/gc/blg03_1/index.m3u8 +安徽池州九华山风景区九华山,https://gcalic.v.myalicdn.com/gc/jhs05_1/index.m3u8 +安徽池州九华山风景区九华山,https://gcalic.v.myalicdn.com/gc/jhs05_1/index.m3u8 +安徽池州九华山风景区花台,https://gcalic.v.myalicdn.com/gc/jhs01_1/index.m3u8 +江苏徐州云龙湖风景区云龙山观景台西,https://gcalic.v.myalicdn.com/gc/ylh04_1/index.m3u8 +南京玄武湖公园,https://gcalic.v.myalicdn.com/gc/xwh01_1/index.m3u8 +云南丽江蓝月谷,https://gcalic.v.myalicdn.com/gc/ylxs12_1/index.m3u8 +云南丽江玉龙山草甸,https://gcalic.v.myalicdn.com/gc/hkylxs06_1/index.m3u8 +云南丽江冰川,https://gcalic.v.myalicdn.com/gc/hkylxs05_1/index.m3u8 +云南丽江印象实景,https://gcalic.v.myalicdn.com/gc/hkylxs01_1/index.m3u8 +江苏南京牛首山,https://gcalic.v.myalicdn.com/gc/nss01_1/index.m3u8 +福建漳州醉美沙滩翡翠湾,https://gcalic.v.myalicdn.com/gc/fcw03_1/index.m3u8 +普陀山,https://gcalic.v.myalicdn.com/gc/pts01_1/index.m3u8 +浙江舟山东极岛,https://gcalic.v.myalicdn.com/gc/djd01_1/index.m3u8 +四川四姑娘山隆珠措,https://gcalic.v.myalicdn.com/gc/sgns02_1/index.m3u8 +丽江古城大研花巷观景,https://gcalic.v.myalicdn.com/gc/ljgcdyhxgjt_1/index.m3u8 +丽江古城大研花巷观景,https://gcalic.v.myalicdn.com/gc/ljgcdyhxgjt_1/index.m3u8 +丽江古城大水车,https://gcalic.v.myalicdn.com/gc/ljgcdsc_1/index.m3u8 +丽江古城万古楼遥望玉龙山,https://gcalic.v.myalicdn.com/gc/ljgcwglytylxs_1/index.m3u8 +狮子山鸟瞰丽江古城,https://gcalic.v.myalicdn.com/gc/ljgcszsnkgc_1/index.m3u8 +雪乡梦幻家园,https://gcalic.v.myalicdn.com/gc/mdjxxmhjyxj_1/index.m3u8 +雪乡大石碑,https://gcalic.v.myalicdn.com/gc/mdjxxdsb_1/index.m3u8 +乌镇蓝印花布,https://gcalic.v.myalicdn.com/gc/zjwzlyhb_1/index.m3u8 +乌镇西市河,https://gcalic.v.myalicdn.com/gc/zjwzbblh_1/index.m3u8 +乌镇西市河,https://gcalic.v.myalicdn.com/gc/zjwzbblh_1/index.m3u8 +乌镇龙形田,https://gcalic.v.myalicdn.com/gc/zjwzlxt_1/index.m3u8 +乌镇全景,https://gcalic.v.myalicdn.com/gc/zjwzblt_1/index.m3u8 +凤凰古城南华山,https://gcalic.v.myalicdn.com/gc/fhgcdnhs_1/index.m3u8 +凤凰古城东关门,https://gcalic.v.myalicdn.com/gc/fhgcdgm_1/index.m3u8 +黄花城水长城01,https://gcalic.v.myalicdn.com/gc/wgw01_1/index.m3u8 +黄花城水长城02,https://gcalic.v.myalicdn.com/gc/wgw02_1/index.m3u8 +黄花城水长城02,https://gcalic.v.myalicdn.com/gc/wgw02_1/index.m3u8 +黄花城水长城03,https://gcalic.v.myalicdn.com/gc/wgw03_1/index.m3u8 +鸣沙山,https://gcalic.v.myalicdn.com/gc/dhyyqst_1/index.m3u8 +月牙泉,https://gcalic.v.myalicdn.com/gc/dhyyqsm_1/index.m3u8 +五彩池,https://gcalic.v.myalicdn.com/gc/hlwcc_1/index.m3u8 +黄龙,https://gcalic.v.myalicdn.com/gc/hlzycc_1/index.m3u8 +望乡台,https://gcalic.v.myalicdn.com/gc/hlwxt_1/index.m3u8 +泰山主峰,https://gcalic.v.myalicdn.com/gc/taishan01_1/index.m3u8 +泰山大观峰,https://gcalic.v.myalicdn.com/gc/taishan03_1/index.m3u8 +泰山玉皇顶,https://gcalic.v.myalicdn.com/gc/taishan06_1/index.m3u8 +泰山玉皇顶,https://gcalic.v.myalicdn.com/gc/taishan06_1/index.m3u8 +泰山十八盘,https://gcalic.v.myalicdn.com/gc/taishan05_1/index.m3u8 +泰山望人松,https://gcalic.v.myalicdn.com/gc/taishan02_1/index.m3u8 +泰山南天门,https://gcalic.v.myalicdn.com/gc/hkts07_1/index.m3u8 +泰山白云亭悬崖,https://gcalic.v.myalicdn.com/gc/hkts02_1/index.m3u8 +泰山太平岭,https://gcalic.v.myalicdn.com/gc/hkts09_1/index.m3u8 +泰山太平岭,https://gcalic.v.myalicdn.com/gc/hkts09_1/index.m3u8 +泰山碧霞祠,https://gcalic.v.myalicdn.com/gc/hkts03_1/index.m3u8 +黄山始信新道,https://gcalic.v.myalicdn.com/gc/hsyg_1/index.m3u8 +黄山排云亭,https://gcalic.v.myalicdn.com/gc/hspyt_1/index.m3u8 +黄山飞来石,https://gcalic.v.myalicdn.com/gc/hsptgy_1/index.m3u8 +黄山,https://gcalic.v.myalicdn.com/gc/ahhs01_1/index.m3u8 +陕西洋县国宝朱鹮03,https://gcalic.v.myalicdn.com/gc/zh03_1/index.m3u8 +安徽黟县西递牌坊,https://gcalic.v.myalicdn.com/gc/yxxdpf_1/index.m3u8 +安徽黟县芦村远眺,https://gcalic.v.myalicdn.com/gc/yxlcyt_1/index.m3u8 +中央电视塔东,https://gcalic.v.myalicdn.com/gc/ztd_1/index.m3u8 +中央电视塔南,https://gcalic.v.myalicdn.com/gc/ztn_1/index.m3u8 +恒山悬空寺全景,https://gcalic.v.myalicdn.com/gc/hsxksqj_1/index.m3u8 +恒山悬空寺全景,https://gcalic.v.myalicdn.com/gc/hsxksqj_1/index.m3u8 +黄果树六角亭瀑布,https://gcalic.v.myalicdn.com/gc/hgsspzxdpb_1/index.m3u8 +天涯石,https://gcalic.v.myalicdn.com/gc/tyhjtys_1/index.m3u8 +天涯石,https://gcalic.v.myalicdn.com/gc/tyhjtys_1/index.m3u8 +六盘山红军长征景区,https://gcalic.v.myalicdn.com/gc/lpsgmjng01_1/index.m3u8 +贵州省兴义市万峰林,https://gcalic.v.myalicdn.com/gc/xywfl_1/index.m3u8 +云南大理崇圣寺三塔中景,https://gcalic.v.myalicdn.com/gc/dlst03_1/index.m3u8 +云南大理崇圣寺三塔远景,https://gcalic.v.myalicdn.com/gc/dlst01_1/index.m3u8 +广西桂林漓江景区,https://gcalic.v.myalicdn.com/gc/gllj01_1/index.m3u8 +青岛崂山双福,https://gcalic.v.myalicdn.com/gc/qdls03_1/index.m3u8 +青岛崂山八水河,https://gcalic.v.myalicdn.com/gc/qdls02_1/index.m3u8 +张掖七彩丹霞,https://gcalic.v.myalicdn.com/gc/zyqcdx01_1/index.m3u8 +都江堰鱼嘴,https://gcalic.v.myalicdn.com/gc/djyqyl1_1/index.m3u8 +乐山大佛全景,https://gcalic.v.myalicdn.com/gc/lsdfgfl_1/index.m3u8 +乐山大佛全景,https://gcalic.v.myalicdn.com/gc/lsdfgfl_1/index.m3u8 +熊猫01高清,http://rihou.cc:55/lib/migu.php?id=xmpd +熊猫1,http://rihou.cc:55/lib/migu.php?id=xm1 +熊猫2,http://rihou.cc:55/lib/migu.php?id=xm2 +熊猫3,http://rihou.cc:55/lib/migu.php?id=xm3 +熊猫5,http://rihou.cc:55/lib/migu.php?id=xm5 +熊猫6,http://rihou.cc:55/lib/migu.php?id=xm6 +熊猫7,http://rihou.cc:55/lib/migu.php?id=xm7 +熊猫8,http://rihou.cc:55/lib/migu.php?id=xm8 +邕城,http://rihou.cc:55/lib/migu.php?id=yc +遇龙河,http://rihou.cc:55/lib/migu.php?id=ylh +武汉江汉关,http://rihou.cc:55/lib/migu.php?id=whjhg +武汉黄鹤楼,http://rihou.cc:55/lib/migu.php?id=whhhl +吉林市临江门大桥,https://gcalic.v.myalicdn.com/gc/zh03_1/index.m3u8 +湖南张家界水绕四门,https://gcalic.v.myalicdn.com/gc/zjjsrsm_1/index.m3u8 +湖南张家界宝峰湖,https://gcalic.v.myalicdn.com/gc/zjjbfh_1/index.m3u8 +湖南张家界御笔峰,https://gcalic.v.myalicdn.com/gc/zjjybf_1/index.m3u8 +四川峨眉山云海日出,https://gcalic.v.myalicdn.com/gc/emsarm_1/index.m3u8 +四川峨眉山远眺贡嘎雪山,https://gcalic.v.myalicdn.com/gc/emsyh_1/index.m3u8 +四川峨眉山普贤菩萨铜像,https://gcalic.v.myalicdn.com/gc/emspxps_1/index.m3u8 +四川峨眉山远眺万佛顶,https://gcalic.v.myalicdn.com/gc/emswfs_1/index.m3u8 +新疆天山(定海神针),https://gcalic.v.myalicdn.com/gc/xjtcdhsz_1/index.m3u8 +新疆天山(马牙山),https://gcalic.v.myalicdn.com/gc/xjtcmys_1/index.m3u8 +新疆天山(灯杆山),https://gcalic.v.myalicdn.com/gc/xjtcdgs_1/index.m3u8 +湖南张家界天门山西线玻璃栈道,https://gcalic.v.myalicdn.com/gc/tms05_1/index.m3u8 +厦门鼓浪屿,https://gcalic.v.myalicdn.com/gc/gly01_1/index.m3u8 +广西玉林大容山莲花山顶,https://gcalic.v.myalicdn.com/gc/drs01_1/index.m3u8 +八里沟风景区桃花湾瀑布,https://gcalic.v.myalicdn.com/gc/blg05_1/index.m3u8 +安徽池州九华山风景区花台,https://gcalic.v.myalicdn.com/gc/jhs01_1/index.m3u8 +江苏徐州云龙湖风景区云龙山观景台西,https://gcalic.v.myalicdn.com/gc/ylh04_1/index.m3u8 +南京玄武湖公园,https://gcalic.v.myalicdn.com/gc/xwh01_1/index.m3u8 +云南丽江蓝月谷,https://gcalic.v.myalicdn.com/gc/ylxs12_1/index.m3u8 +云南丽江玉龙雪山草甸,https://gcalic.v.myalicdn.com/gc/hkylxs06_1/index.m3u8 +云南丽江冰川,https://gcalic.v.myalicdn.com/gc/hkylxs05_1/index.m3u8 +云南丽江印象实景,https://gcalic.v.myalicdn.com/gc/hkylxs01_1/index.m3u8 +江苏南京牛首山,https://gcalic.v.myalicdn.com/gc/nss01_1/index.m3u8 +福建漳州醉美沙滩翡翠湾,https://gcalic.v.myalicdn.com/gc/fcw03_1/index.m3u8 +普陀山,https://gcalic.v.myalicdn.com/gc/pts01_1/index.m3u8 +浙江舟山东极岛,https://gcalic.v.myalicdn.com/gc/djd01_1/index.m3u8 +四川四姑娘山隆珠措,https://gcalic.v.myalicdn.com/gc/sgns02_1/index.m3u8 +丽江古城大水车,https://gcalic.v.myalicdn.com/gc/ljgcdsc_1/index.m3u8 +丽江古城大研花巷观景,https://gcalic.v.myalicdn.com/gc/ljgcdyhxgjt_1/index.m3u8 +丽江古城万古楼遥望玉龙雪山,https://gcalic.v.myalicdn.com/gc/ljgcwglytylxs_1/index.m3u8 +雪乡梦幻家园,https://gcalic.v.myalicdn.com/gc/mdjxxmhjyxj_1/index.m3u8 +雪乡大石碑,https://gcalic.v.myalicdn.com/gc/mdjxxdsb_1/index.m3u8 +乌镇蓝印花布,https://gcalic.v.myalicdn.com/gc/zjwzlyhb_1/index.m3u8 +乌镇西市河,https://gcalic.v.myalicdn.com/gc/zjwzbblh_1/index.m3u8 +乌镇龙形田,https://gcalic.v.myalicdn.com/gc/zjwzlxt_1/index.m3u8 +乌镇全景,https://gcalic.v.myalicdn.com/gc/zjwzblt_1/index.m3u8 +黄花城水长城01,https://gcalic.v.myalicdn.com/gc/wgw01_1/index.m3u8 +黄花城水长城02,https://gcalic.v.myalicdn.com/gc/wgw02_1/index.m3u8 +黄花城水长城03,https://gcalic.v.myalicdn.com/gc/wgw03_1/index.m3u8 +月牙泉,https://gcalic.v.myalicdn.com/gc/dhyyqsm_1/index.m3u8 +鸣沙山,https://gcalic.v.myalicdn.com/gc/dhyyqst_1/index.m3u8 +五彩池,https://gcalic.v.myalicdn.com/gc/hlwcc_1/index.m3u8 +黄龙,https://gcalic.v.myalicdn.com/gc/hlzycc_1/index.m3u8 +泰山大观峰,https://gcalic.v.myalicdn.com/gc/taishan03_1/index.m3u8 +泰山主峰,https://gcalic.v.myalicdn.com/gc/taishan01_1/index.m3u8 +泰山玉皇顶,https://gcalic.v.myalicdn.com/gc/taishan06_1/index.m3u8 +泰山望人松,https://gcalic.v.myalicdn.com/gc/taishan02_1/index.m3u8 +泰山白云亭悬崖,https://gcalic.v.myalicdn.com/gc/hkts02_1/index.m3u8 +泰山南天门,https://gcalic.v.myalicdn.com/gc/hkts07_1/index.m3u8 +泰山太平岭,https://gcalic.v.myalicdn.com/gc/hkts09_1/index.m3u8 +泰山碧霞祠,https://gcalic.v.myalicdn.com/gc/hkts03_1/index.m3u8 +黄山始信新道,https://gcalic.v.myalicdn.com/gc/hsyg_1/index.m3u8 +黄山排云亭,https://gcalic.v.myalicdn.com/gc/hspyt_1/index.m3u8 +黄山飞来石,https://gcalic.v.myalicdn.com/gc/hsptgy_1/index.m3u8 +黄山,https://gcalic.v.myalicdn.com/gc/ahhs01_1/index.m3u8 +陕西洋县国宝朱鹮02,https://gcalic.v.myalicdn.com/gc/zh02_1/index.m3u8 +安徽黟县西递牌坊,https://gcalic.v.myalicdn.com/gc/yxxdpf_1/index.m3u8 +安徽黟县芦村远眺,https://gcalic.v.myalicdn.com/gc/yxlcyt_1/index.m3u8 +中央电视塔东,https://gcalic.v.myalicdn.com/gc/ztd_1/index.m3u8 +中央电视塔南,https://gcalic.v.myalicdn.com/gc/ztn_1/index.m3u8 +恒山悬空寺全景,https://gcalic.v.myalicdn.com/gc/hsxksqj_1/index.m3u8 +黄果树六角亭瀑布,https://gcalic.v.myalicdn.com/gc/hgsspzxdpb_1/index.m3u8 +天涯石,https://gcalic.v.myalicdn.com/gc/tyhjtys_1/index.m3u8 +六盘山红军长征景区,https://gcalic.v.myalicdn.com/gc/lpsgmjng01_1/index.m3u8 +贵州省兴义市万峰林,https://gcalic.v.myalicdn.com/gc/xywfl_1/index.m3u8 +云南大理崇圣寺三塔中景,https://gcalic.v.myalicdn.com/gc/dlst03_1/index.m3u8 +云南大理崇圣寺三塔远景,https://gcalic.v.myalicdn.com/gc/dlst01_1/index.m3u8 +广西桂林漓江景区,https://gcalic.v.myalicdn.com/gc/gllj01_1/index.m3u8 +青岛崂山双福,https://gcalic.v.myalicdn.com/gc/qdls03_1/index.m3u8 +青岛崂山八水河,https://gcalic.v.myalicdn.com/gc/qdls02_1/index.m3u8 +张掖七彩丹霞,https://gcalic.v.myalicdn.com/gc/zyqcdx01_1/index.m3u8 +都江堰鱼嘴,https://gcalic.v.myalicdn.com/gc/djyqyl1_1/index.m3u8 +乐山大佛全景,https://gcalic.v.myalicdn.com/gc/lsdfgfl_1/index.m3u8 +四川成都安顺廊桥,https://gcalic.v.myalicdn.com/gc/zsslsjjfsd_1/index.m3u8 +陕西凤堰古梯田,https://gcalic.v.myalicdn.com/gc/cntv407-zbzg_1/index.m3u8 +广东汕头市小公园,https://gcalic.v.myalicdn.com/gc/bsszjs_1/index.m3u8 +西藏林芝工布公园,https://gcalic.v.myalicdn.com/gc/bsszbcs_1/index.m3u8 +云南建水双龙桥,https://gcalic.v.myalicdn.com/gc/pshdxg01_1/index.m3u8 +陕西西安周至水街二号码头,https://gcalic.v.myalicdn.com/gc/cntv414-zbzg_1/index.m3u8 +陕西汉中宁强县青木川古镇,https://gcalic.v.myalicdn.com/gc/cntv406-zbzg_1/index.m3u8 +陕西西安樊川,https://gcalic.v.myalicdn.com/gc/cntv506-zbzg_1/index.m3u8 +陕西西安蓝田县白鹿原,https://gcalic.v.myalicdn.com/gc/yxhcnh_1/index.m3u8 +吉林四平战役纪念馆,https://gctxyc.liveplay.myqcloud.com/gc/taishan04_1/index.m3u8 +北京钟鼓楼,https://gctxyc.liveplay.myqcloud.com/gc/ztd_1_md.m3u8 +山西运城圣天湖,https://gctxyc.liveplay.myqcloud.com/gc/cntv486-zbzg_1/index.m3u8 +内蒙古呼伦贝尔哈萨尔大桥,https://gctxyc.liveplay.myqcloud.com/gc/ytshsx_1/index.m3u8 +辽宁沈阳浑河桥,https://gctxyc.liveplay.myqcloud.com/gc/ljgcdsc_1/index.m3u8 +中车齐车集团,https://gctxyc.liveplay.myqcloud.com/gc/zhhd01_1/index.m3u8 +黑龙江哈尔滨霁虹桥,https://gctxyc.liveplay.myqcloud.com/gc/hkts09_1/index.m3u8 +江苏无锡大剧院,https://gctxyc.liveplay.myqcloud.com/gc/hkts07_1/index.m3u8 +江苏南京玄武湖,https://gctxyc.liveplay.myqcloud.com/gc/xwh01_1/index.m3u8 +上海南浦大桥,https://gctxyc.liveplay.myqcloud.com/gc/tjhh01_1/index.m3u8 +浙江台州三门核电站,https://gctxyc.liveplay.myqcloud.com/gc/hsptgz_1/index.m3u8 +浙江舟山沈家门渔港,https://gctxyc.liveplay.myqcloud.com/gc/hgsspzxdpb_1/index.m3u8 +安徽歙县西递牌坊,https://gctxyc.liveplay.myqcloud.com/gc/yxxdpf_1/index.m3u8 +福建福安赛岐镇象环葡萄园,https://gctxyc.liveplay.myqcloud.com/gc/cntv402-zbzg_1/index.m3u8 +福建南平茶平乡万亩茶园,https://gctxyc.liveplay.myqcloud.com/gc/cntv401-zbzg_1/index.m3u8 +福建莆田湄洲妈祖祖庙,https://gctxyc.liveplay.myqcloud.com/gc/yxhcyz_1/index.m3u8 +福建武夷山,https://gctxyc.liveplay.myqcloud.com/gc/wysynf_1/index.m3u8 +山东威海成山头,https://gctxyc.liveplay.myqcloud.com/gc/drs01_1/index.m3u8 +河南信阳汪桥镇思乡谷,https://gctxyc.liveplay.myqcloud.com/gc/cntv546-zbzg_1/index.m3u8 +湖南郴州仰天湖,https://gctxyc.liveplay.myqcloud.com/gc/cntv451-zbzg_1/index.m3u8 +广东车八岭国家级自然保护区,https://gctxyc.liveplay.myqcloud.com/gc/ztx_1/index.m3u8 +广东珠海大剧院,https://gctxyc.liveplay.myqcloud.com/gc/dxsdtts_1/index.m3u8 +海南七仙岭温泉国家森林公园,https://gctxyc.liveplay.myqcloud.com/gc/cntv549-zbzg_1/index.m3u8 +重庆李子坝站轻轨,https://gctxyc.liveplay.myqcloud.com/gc/ylh04_1/index.m3u8 +重庆李子坝站轻轨,https://gctxyc.liveplay.myqcloud.com/gc/ylh04_1_md.m3u8 +贵州黔南州瓮安县建中镇,https://gctxyc.liveplay.myqcloud.com/gc/ytsbjy_1/index.m3u8 +贵州六盘水野玉海度假区玻璃桥,https://gctxyc.liveplay.myqcloud.com/gc/cntv535-zbzg_1/index.m3u8 +贵州黄果树瀑布,https://gctxyc.liveplay.myqcloud.com/gc/nxspthhpl_1/index.m3u8 +贵州黄果树瀑布,https://gctxyc.liveplay.myqcloud.com/gc/nxspthhpl_1_md.m3u8 +陕西汉中渔渡风景区,https://gctxyc.liveplay.myqcloud.com/gc/cntv404-zbzg_1/index.m3u8 +陕西西安樊川,https://gctxyc.liveplay.myqcloud.com/gc/cntv506-zbzg_1/index.m3u8 +陕西渭河湿地公园景区,https://gctxyc.liveplay.myqcloud.com/gc/zh02_1_md.m3u8 +陕西榆林杨家沟革命旧址,https://gctxyc.liveplay.myqcloud.com/gc/bgws7_1/index.m3u8 +宁夏将台堡,https://gctxyc.liveplay.myqcloud.com/gc/hlxsd_1/index.m3u8 +宁夏沙坡头,https://gctxyc.liveplay.myqcloud.com/gc/cntv466-zbzg_1/index.m3u8 +新疆巩留县蝶湖景区,https://gctxyc.liveplay.myqcloud.com/gc/hgsylztpb_1/index.m3u8 +新疆喀什达瓦昆景区,https://gctxyc.liveplay.myqcloud.com/gc/cntv524-zbzg_1/index.m3u8 +四川成都春熙路太古里,https://gctxyc.liveplay.myqcloud.com/gc/lhssjzd_1/index.m3u8 +四川成都环球中心,https://gctxyc.liveplay.myqcloud.com/gc/jsh02_1/index.m3u8 +四川甘孜州石渠县,https://gctxyc.liveplay.myqcloud.com/gc/dlst02_1/index.m3u8 +四川黄龙五彩池,https://gctxyc.liveplay.myqcloud.com/gc/hlwcc_1/index.m3u8 +四川西昌市邛海景区,https://gctxyc.liveplay.myqcloud.com/gc/xcqh01_1/index.m3u8 +四川峨眉山普贤菩萨,https://gctxyc.liveplay.myqcloud.com/gc/gccntv241-slf01_1/index.m3u8 +成都大熊猫幼年园A,https://gcwbndali.v.myalicdn.com/gcwbnd/xiongmao03_2/index.m3u8 +都江堰大熊猫24小时,https://gcwbndali.v.myalicdn.com/gcwbnd/ipanda1000_2/index.m3u8 +都江堰大熊猫B,https://gcwbndali.v.myalicdn.com/gcwbnd/xiongmao12_2/index.m3u8 +都江堰大熊猫D,https://gcwbndali.v.myalicdn.com/gcwbnd/xiongmao14_2/index.m3u8 +都江堰大熊猫E,https://gcwbndali.v.myalicdn.com/gcwbnd/xiongmao15_2/index.m3u8 +都江堰大熊猫F,https://gcwbndali.v.myalicdn.com/gcwbnd/xiongmao16_2/index.m3u8 +都江堰大熊猫G,https://gcwbndali.v.myalicdn.com/gcwbnd/xiongmao20_2/index.m3u8 +成都大熊猫幼年园B,https://gcwbndcnc.v.wscdns.com/gcwbnd/xiongmao04_2/index.m3u8 +成都大熊猫母子园B,https://gcwbndcnc.v.wscdns.com/gcwbnd/xiongmao08_2/index.m3u8 +都江堰大熊猫C,https://gcwbndcnc.v.wscdns.com/gcwbnd/xiongmao13_2/index.m3u8 +成都大熊猫成年园B,https://gcwbndtxy.liveplay.myqcloud.com/gcwbnd/xiongmao02_2/index.m3u8 +成都大熊猫幼儿园B,https://gcwbndtxy.liveplay.myqcloud.com/gcwbnd/xiongmao06_2/index.m3u8 +成都大熊猫一号别墅A,https://gcwbndtxy.liveplay.myqcloud.com/gcwbnd/xiongmao09_2/index.m3u8 +都江堰大熊猫24小时,https://gcwbndtxy.liveplay.myqcloud.com/gcwbnd/ipanda1000_2/index.m3u8 +成都大熊猫母子园A,https://gcwbndbd.a.bdydns.com/gcwbnd/xiongmao07_2/index.m3u8 +成都大熊猫一号别墅B,https://gcwbndbd.a.bdydns.com/gcwbnd/xiongmao10_2/index.m3u8 +湖南张家界天门山天空步道,https://mlivewbndtxy.liveplay.myqcloud.com/mlivewbnd/mlive_djy03_2/index.m3u8 +陕西榆林神木市大柳塔镇,https://mlivewbndbd.a.bdydns.com/mlivewbnd/mlive_sls02_2/index.m3u8 +成都大熊猫24小时,https://gcwbcdbd.a.bdydns.com/gcwbcd/cdrmipanda_1/index.m3u8 +新疆天山(定海神针),http://gctxyc.liveplay.myqcloud.com/gc/xjtcdhsz_1/index.m3u8 +黄花城水长城02,http://gctxyc.liveplay.myqcloud.com/gc/wgw02_1/index.m3u8 +仙都风景视,http://gctxyc.liveplay.myqcloud.com/gc/xdfjq01_1/index.m3u8 + + +龍🐉重温经典,#genre# + +重温经典,http://mtw.so/5NPX0U +重温经典,http://ali.hlspull.yximgs.com/live/awei_cwjd.flv +封神榜86版,http://43.138.170.29:35455/yy/1353426319 +射雕英雄传83版,http://43.138.170.29:35455/yy/1354210357 +红楼梦87版,http://43.138.170.29:35455/yy/1382745084 +三国演义94版,http://cfss.cc/cdn/hy/11602081.flv +新三国演义10版,http://43.138.170.29:35455/yy/23512910 +新水浒传11版,http://cfss.cc/cdn/hy/11342384.flv +天龙八部黄日华版,http://43.138.170.29:35455/yy/1351814644 +神雕侠侣古天乐版,http://cfss.cc/cdn/hy/23865171.flv +笑傲江湖吕颂贤版,http://cfss.cc/cdn/hy/23865142.flv +倚天屠龙记苏有朋版,http://43.138.170.29:35455/yy/1449856066 +倚天屠龙记吴启华版,http://cfss.cc/cdn/hy/23734246.flv +鹿鼎记陈小春版,http://cfss.cc/cdn/hy/23865080.flv +铁齿铜牙纪晓岚,http://cfss.cc/cdn/hy/11342396.flv +康熙微服私访记,https://live.metshop.top/yy/1352811698 +康熙王朝,http://cfss.cc/cdn/hy/11352940.flv +雍正王朝,http://cfss.cc/cdn/hy/11342439.flv +大汉天子,https://live.metshop.top/yy/1382736807 +宰相刘罗锅,http://43.138.170.29:35455/yy/1382745191 +神医喜来乐,http://43.138.170.29:35455/yy/1382714119 +忠烈杨家将,https://live.metshop.top/yy/1382749909 +少年歌行,http://43.138.170.29:35455/yy/1450556636 +雪中悍刀行,http://43.138.170.29:35455/yy/1382660835 +庆余年,http://cfss.cc/cdn/hy/11352960.flv +鹊刀门传奇,http://43.138.170.29:35455/yy/1355344777 +花千骨,http://43.138.170.29:35455/yy/1354943110 +知否知否应是绿肥红瘦,http://43.138.170.29:35455/yy/21881901 +神探狄仁杰,http://43.138.170.29:35455/yy/1351755386 +仙剑奇侠传,http://43.138.170.29:35455/yy/1382749903 +武林外传,http://43.138.170.29:35455/yy/1355652820 +宝莲灯前传,http://43.138.170.29:35455/yy/1354931631 +西游记后传,http://43.138.170.29:35455/yy/1382736846 +济公游记,http://43.138.170.29:35455/yy/1355265814 +上海滩80版,http://43.138.170.29:35455/yy/1382745184 +新白娘子传奇,http://43.138.170.29:35455/yy/1354930969 +福贵,http://43.138.170.29:35455/yy/1354926537 +金婚,http://43.138.170.29:35455/yy/1382736832 +正阳门下,http://43.138.170.29:35455/yy/1354931580 +黑冰,https://live.metshop.top/yy/1354932427 +天道,https://live.metshop.top/yy/1382735574 +血色浪漫,http://43.138.170.29:35455/yy/1354926676 +父母爱情,https://live.metshop.top/yy/1354926650 +情满四合院,http://43.138.170.29:35455/yy/1382736888 +永远一家人,http://43.138.170.29:35455/yy/1382736873 +爱情公寓,http://cfss.cc/cdn/hy/11336726.flv +我爱我家,https://live.metshop.top/yy/1382735557 +家有儿女,http://cfss.cc/cdn/hy/11352872.flv +回家的诱惑,http://43.138.170.29:35455/yy/1354658048 +粉红色女郎,http://43.138.170.29:35455/yy/1354888671 +放羊的星星,http://43.138.170.29:35455/yy/1355260662 +来自星星的你,http://43.138.170.29:35455/yy/1354930976 +繁花,http://cfss.cc/cdn/hy/21059580.flv +大江大河,https://live.metshop.top/yy/1382736806 +大江大河2,https://live.metshop.top/yy/1382736797 +我的前半生,http://43.138.170.29:35455/yy/1382735564 +小欢喜,https://live.metshop.top/yy/1382737888 +欢乐颂,http://43.138.170.29:35455/douyu/3756989 +好先生,http://43.138.170.29:35455/douyu/9650792 +我的体育老师,http://43.138.170.29:35455/yy/1382745169 +生逢灿烂的日子,http://43.138.170.29:35455/yy/1382745085 +狂飙,http://43.138.170.29:35455/yy/1355142167 +白夜追凶第一季,https://live.metshop.top/yy/1354932359 +士兵突击,http://43.138.170.29:35455/yy/1382828766 +火蓝刀锋,http://43.138.170.29:35455/yy/1382737892 +我是特种兵,http://43.138.170.29:35455/yy/37999586 +特种兵火凤凰,http://43.138.170.29:35455/yy/1463088777 +地下交通站,http://43.138.170.29:35455/yy/37880083 +小兵张嘎,http://43.138.170.29:35455/yy/1354930225 +津门飞鹰,http://43.138.170.29:35455/yy/1354143942 +五号特工组,http://43.138.170.29:35455/yy/1507704566 +怪医文三块,http://43.138.170.29:35455/yy/1354936154 +二炮手,http://43.138.170.29:35455/yy/1354930964 +风筝,http://43.138.170.29:35455/yy/1354931585 +伪装者,http://43.138.170.29:35455/yy/1382851593 +叛逆者,https://live.metshop.top/yy/1382736868 +鬼吹灯之怒晴湘西,http://cfss.cc/cdn/hy/11602075.flv +鬼吹灯之龙岭迷窟,http://cfss.cc/cdn/hy/29465863.flv +鬼吹灯之昆仑神宫,http://cfss.cc/cdn/hy/11601957.flv +鬼吹灯之云南虫谷,https://live.metshop.top/huya/11352898#http://cfss.cc/cdn/hy/11352898.flv +鬼吹灯之南海归墟,https://live.metshop.top/huya/11352883#http://cfss.cc/cdn/hy/11352883.flv +使徒行者,http://cfss.cc/cdn/hy/23734256.flv +飞虎之雷霆极战,https://live.metshop.top/yy/1382736869 +飞虎之潜行极战,https://live.metshop.top/yy/1354932420 +法证先锋Ⅰ,https://live.metshop.top/yy/1354930939 +法证先锋Ⅱ,https://live.metshop.top/yy/1354888736 +法证先锋Ⅲ,http://cfss.cc/cdn/hy/23863804.flv +法证先锋Ⅳ,http://cfss.cc/cdn/hy/23829543.flv +谈判专家,https://live.metshop.top/yy/1382735560 +读心神探,https://live.metshop.top/yy/1382736875 +心理追凶,https://live.metshop.top/yy/1354936207 +机动部队,https://live.metshop.top/yy/1354932371 +刑事侦缉档案,http://cfss.cc/cdn/hy/23734169.flv +鉴证实录,http://cfss.cc/cdn/hy/23903183.flv +扫黄先锋,http://cfss.cc/cdn/hy/23903196.flv +陀枪师姐,http://cfss.cc/cdn/hy/23860039.flv +创世纪,http://cfss.cc/cdn/hy/23749083.flv +流金岁月,http://43.138.170.29:35455/yy/1382736891 +笑看风云,http://cfss.cc/cdn/hy/23865058.flv +大时代,http://cfss.cc/cdn/hy/23865161.flv +缺宅男女,https://live.metshop.top/yy/1382745088 +男亲女爱,http://43.138.170.29:35455/yy/1382736715 +溏心风暴之家好月圆,https://live.metshop.top/yy/1354888747 +名媛望族,https://live.metshop.top/yy/1354932431 +楚汉骄雄,http://cfss.cc/cdn/hy/23740156.flv +洗冤录,http://cfss.cc/cdn/hy/23903130.flv +金枝欲孽,http://cfss.cc/cdn/hy/23865036.flv +大唐双龙传,http://cfss.cc/cdn/hy/23728674.flv +金玉满堂,https://live.metshop.top/yy/1382736881 +天下第一,https://live.metshop.top/yy/1382736838 +公主嫁到,https://live.metshop.top/yy/1382736915 +宫心计,https://live.metshop.top/yy/1354932429 +寻秦记,http://43.138.170.29:35455/yy/1382749900 +鹿鼎记梁朝伟版,http://cfss.cc/cdn/hy/23734183.flv +西游记张卫健版,http://43.138.170.29:35455/yy/1354936155 + + +龍🐉央視一,#genre# +CCTV-1,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel1/1300.m3u8 +CCTV-2,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel2/1300.m3u8 +CCTV-3,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel3/1300.m3u8 +CCTV-4,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel4/1300.m3u8 +CCTV-5,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel5/1300.m3u8 +CCTV-5+,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel13/1300.m3u8 +CCTV-6,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel6/1300.m3u8 +CCTV-7,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel7/1300.m3u8 +CCTV-8,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel8/1300.m3u8 +CCTV-9,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel9/1300.m3u8 +CCTV-10,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel10/1300.m3u8 +CCTV-11,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel41/1300.m3u8 +CCTV-12,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel11/1300.m3u8 +CCTV-13,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel39/1300.m3u8 +CCTV-14,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel12/1300.m3u8 +CCTV-15,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel40/1300.m3u8 +CCTV-16,http://116.162.6.191/1301-txt.otvstream.otvcloud.com/otv/skcc/live/channe1116/2300.m3u8 +CCTV-17,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel90/1300.m3u8 + + + +CCTV-2,http://liveop.cctv.cn:80/hls/CCTV28bee868714f04ea2af79947bb9b46fc3H/playlist.m3u8#https://cd-live-stream.news.cctvplus.com/live/smil:CHANNEL1.smil/playlist.m3u8 +CCTV-1,http://ttkx.live:55/lib/1ysp.php?id=cctv1 +CCTV-2,http://ttkx.live:55/lib/1ysp.php?id=cctv2 +CCTV-3,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel3/1300.m3u8 +CCTV-4,http://ttkx.live:55/lib/1ysp.php?id=cctv4 +CCTV-5,http://ttkx.live:55/lib/1ysp.php?id=cctv5 +CCTV5+,http://ttkx.live:55/lib/1ysp.php?id=cctv5p +CCTV-6,http://mobilelive-ds.ysp.cctv.cn/ysp/2013693901.m3u8 +CCTV-7,http://ttkx.live:55/lib/1ysp.php?id=cctv7 +CCTV-8,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel8/1300.m3u8 +CCTV-9,http://ttkx.live:55/lib/1ysp.php?id=cctv9 +CCTV-10,http://ttkx.live:55/lib/1ysp.php?id=cctv10 +CCTV-11,http://ttkx.live:55/lib/1ysp.php?id=cctv11 +CCTV-12,http://ttkx.live:55/lib/1ysp.php?id=cctv12 +CCTV-13,http://ttkx.live:55/lib/1ysp.php?id=cctv13 +CCTV-14,http://ttkx.live:55/lib/1ysp.php?id=cctv14 +CCTV-15,http://ttkx.live:55/lib/1ysp.php?id=cctv15 +CCTV-16,http://ttkx.live:55/lib/1ysp.php?id=cctv16 +CCTV-17,http://ttkx.live:55/lib/1ysp.php?id=cctv17 +CCTV-4K,http://ttkx.live:55/lib/1ysp.php?id=cctv4K +CCTV-8K,http://ttkx.live:55/lib/1ysp.php?id=cctv8K + +CCTV-1,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel1/1300.m3u8 +CCTV-1,https://node1.olelive.com:6443/live/CCTV1HD/hls.m3u8 +CCTV-1,http://ldncctvwbndks.v.kcdnvip.com/ldncctvwbnd/ldcctv1_2/index.m3u8 +CCTV-2,https://liveop.cctv.cn/hls/CCTV28bee868714f04ea2af79947bb9b46fc3H/playlist.m3u8 +CCTV-2,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel2/1300.m3u8 +CCTV-3,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel3/1300.m3u8 +CCTV-4,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel4/1300.m3u8 +CCTV-5,https://node1.olelive.com:6443/live/CCTV5HD/hls.m3u8 +CCTV-5,http://116.162.6.192/44a03-txt.otvstream.otvcloud.com/otv/skcc/live/channel5/1300.m3u8 +CCTV5+,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel13/1300.m3u8 +CCTV-6,http://mobilelive-timeshift.ysp.cctv.cn/timeshift/ysp/2013693901/timeshift.m3u8?delay=0&cdn=5202 +CCTV-6,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel6/1300.m3u8 +CCTV-7,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel7/1300.m3u8 +CCTV-8,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel8/1300.m3u8 +CCTV-9,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel9/1300.m3u8 +CCTV-9,https://node1.olelive.com:6443/live/CCTV9HD/hls.m3u8 +CCTV-10,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel10/1300.m3u8 +CCTV-12,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel12/1300.m3u8 +CCTV-13,https://node1.olelive.com:6443/live/CCTV13HD/hls.m3u8 +CCTV-14,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel11/1300.m3u8 +CGTN,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel14/1300.m3u8 +CGTN,https://live.cgtn.com/1000/prog_index.m3u8#https://news.cgtn.com/resource/live/english/cgtn-news.m3u8 +CGTN,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel15/1300.m3u8 +CGTN纪录,https://news.cgtn.com/resource/live/document/cgtn-doc.m3u8#https://livedoc.cgtn.com/500d/prog_index.m3u8 +CGTN俄语,https://liveru.cgtn.com/1000r/prog_index.m3u8 +CGTN法语,https://livefr.cgtn.com/1000f/prog_index.m3u8 +CGTN西语,https://livees.cgtn.com/1000e/prog_index.m3u8 +CETV-1,http://hwylivehd.centv.cn/cetv1/ypd.m3u8 +CETV-2,http://hwylivehd.centv.cn/cetv2/2020tsytk.m3u8 +CETV-3,http://hwylivehd.centv.cn/cetv3/bjdm.m3u8 +CETV-4,http://hwylivehd.centv.cn/cetv4/zjpd.m3u8 + +CCTV-1,http://27.40.16.70:8114/GD_CUCC/G_CCTV-1-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-1,http://rihou.cc:55/lib/migu.php?id=cctv1$咪咕代理 接口 +CCTV-1,http://www.ogrehq.com:4022/udp/228.1.1.28:8008$北京移动 组播 +CCTV-1,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.83:8012$河北联通 组播 +CCTV-1,http://xuys.top:8888/udp/225.1.1.12:5002$天津联通 组播 +CCTV-1,http://xuys.top:8888/udp/225.1.1.120:5002$天津联通 组播 +CCTV-1,http://wuqianmu.synology.me:4000/udp/232.0.0.27:1234$辽宁联通 组播 +CCTV-1,http://nas.tuyuannet.cn:8800/rtp/239.37.0.140:5540$吉林电信 组播 +CCTV-1,http://nas.tuyuannet.cn:8800/rtp/239.37.0.8:5540$吉林电信 组播 +CCTV-1,http://nas.tuyuannet.cn:8800/rtp/239.37.0.20:5540$吉林电信 组播 +CCTV-1,http://nas.tuyuannet.cn:8800/rtp/239.37.0.150:5540$吉林电信 组播 +CCTV-1,http://itms.xznet.org:41097/rtp/239.254.200.45:8008$河北电信 组播 +CCTV-2,http://27.40.16.70:8114/GD_CUCC/G_CCTV-2-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-2,http://rihou.cc:55/lib/migu.php?id=cctv2$咪咕代理 接口 +CCTV-2,http://www.ogrehq.com:4022/udp/228.1.1.24:8084$北京移动 组播 +CCTV-2,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.190:6065$河北联通 组播 +CCTV-2,http://xuys.top:8888/udp/225.1.1.13:5002$天津联通 组播 +CCTV-2,http://xuys.top:8888/udp/225.1.1.133:5002$天津联通 组播 +CCTV-2,http://wuqianmu.synology.me:4000/udp/232.0.0.135:1234$辽宁联通 组播 +CCTV-2,http://nas.tuyuannet.cn:8800/rtp/239.37.0.3:5540$吉林电信 组播 +CCTV-2,http://itms.xznet.org:41097/rtp/239.254.200.158:6000$河北电信 组播 +CCTV-3,http://27.40.16.70:8114/GD_CUCC/G_CCTV-3-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-3,http://rihou.cc:55/lib/migu.php?id=cctv3$咪咕代理 接口 +CCTV-3,http://www.ogrehq.com:4022/udp/228.1.1.191:8002$北京移动 组播 +CCTV-3,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.191:6057$河北联通 组播 +CCTV-3,http://xuys.top:8888/udp/225.1.1.14:5002$天津联通 组播 +CCTV-3,http://xuys.top:8888/udp/225.1.1.158:5002$天津联通 组播 +CCTV-3,http://wuqianmu.synology.me:4000/udp/232.0.0.170:1234$辽宁联通 组播 +CCTV-3,http://nas.tuyuannet.cn:8800/rtp/239.37.0.231:5540$吉林电信 组播 +CCTV-4,http://27.40.16.70:8114/GD_CUCC/G_CCTV-4-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-4,http://rihou.cc:55/lib/migu.php?id=cctv4$咪咕代理 接口 +CCTV-4,http://www.ogrehq.com:4022/udp/228.1.1.25:8092$北京移动 组播 +CCTV-4,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.251:6141$河北联通 组播 +CCTV-4,http://xuys.top:8888/udp/225.1.1.15:5002$天津联通 组播 +CCTV-4,http://xuys.top:8888/udp/225.1.1.150:5002$天津联通 组播 +CCTV-4,http://wuqianmu.synology.me:4000/udp/232.0.0.201:1234$辽宁联通 组播 +CCTV-4,http://nas.tuyuannet.cn:8800/rtp/239.37.1.25:5540$吉林电信 组播 +CCTV-4,http://itms.xznet.org:41097/rtp/239.254.200.190:6307$河北电信 组播 +CCTV-4欧洲,http://rihou.cc:55/lib/migu.php?id=cctv4o$咪咕代理 接口 +CCTV-4欧洲,http://www.ogrehq.com:4022/udp/228.1.1.213:4220$北京移动 组播 +CCTV-4欧洲,http://nas.tuyuannet.cn:8800/rtp/239.37.1.11:5540$吉林电信 组播 +CCTV-4欧洲,http://wuqianmu.synology.me:4000/udp/232.0.0.53:1234$辽宁联通 组播 +CCTV-4美洲,http://rihou.cc:55/lib/migu.php?id=cctv4a$咪咕代理 接口 +CCTV-4美洲,http://www.ogrehq.com:4022/udp/228.1.1.203:4220$北京移动 组播 +CCTV-4美洲,http://nas.tuyuannet.cn:8800/rtp/239.37.1.12:5540$吉林电信 组播 +CCTV-4美洲,http://wuqianmu.synology.me:4000/udp/232.0.0.59:1234$辽宁联通 组播 +CCTV-5,http://27.40.16.70:8114/GD_CUCC/G_CCTV-5-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-5,http://rihou.cc:55/lib/migu.php?id=cctv5$咪咕代理 接口 +CCTV-5,http://www.ogrehq.com:4022/udp/228.1.1.192:8002$北京移动 组播 +CCTV-5,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.181:6046$河北联通 组播 +CCTV-5,http://xuys.top:8888/udp/225.1.1.16:5002$天津联通 组播 +CCTV-5,http://xuys.top:8888/udp/225.1.1.160:5002$天津联通 组播 +CCTV-5,http://wuqianmu.synology.me:4000/udp/232.0.0.171:1234$辽宁联通 组播 +CCTV-5,http://nas.tuyuannet.cn:8800/rtp/239.37.0.232:5540$吉林电信 组播 +CCTV-5,http://itms.xznet.org:41097/rtp/239.254.200.14:6000$河北电信 组播 +CCTV-5+,http://27.40.16.70:8114/GD_CUCC/G_CCTV-5PLUS-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-5+,http://rihou.cc:55/lib/migu.php?id=cctv5p$咪咕代理 接口 +CCTV-5+,http://www.ogrehq.com:4022/udp/228.1.1.23:8004$北京移动 组播 +CCTV-5+,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.82:8013$河北联通 组播 +CCTV-5+,http://xuys.top:8888/udp/225.1.1.121:5002$天津联通 组播 +CCTV-5+,http://wuqianmu.synology.me:4000/udp/232.0.0.93:1234$辽宁联通 组播 +CCTV-5+,http://nas.tuyuannet.cn:8800/rtp/239.37.0.121:5540$吉林电信 组播 +CCTV-5+,http://itms.xznet.org:41097/rtp/239.254.200.46:8004$河北电信 组播 +CCTV-6,http://27.40.16.70:8114/GD_CUCC/G_CCTV-6-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-6,http://rihou.cc:55/lib/migu.php?id=cctv6$咪咕代理 接口 +CCTV-6,http://www.ogrehq.com:4022/udp/228.1.1.193:8002$北京移动 组播 +CCTV-6,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.193:6058$河北联通 组播 +CCTV-6,http://xuys.top:8888/udp/225.1.1.17:5002$天津联通 组播 +CCTV-6,http://xuys.top:8888/udp/225.1.1.195:5002$天津联通 组播 +CCTV-6,http://wuqianmu.synology.me:4000/udp/232.0.0.172:1234$辽宁联通 组播 +CCTV-6,http://nas.tuyuannet.cn:8800/rtp/239.37.0.233:5540$吉林电信 组播 +CCTV-7,http://27.40.16.70:8114/GD_CUCC/G_CCTV-7-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-7,http://rihou.cc:55/lib/migu.php?id=cctv7$咪咕代理 接口 +CCTV-7,http://www.ogrehq.com:4022/udp/228.1.1.26:8104$北京移动 组播 +CCTV-7,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.194:6059$河北联通 组播 +CCTV-7,http://xuys.top:8888/udp/225.1.1.18:5002$天津联通 组播 +CCTV-7,http://xuys.top:8888/udp/225.1.1.138:5002$天津联通 组播 +CCTV-7,http://wuqianmu.synology.me:4000/udp/232.0.0.136:1234$辽宁联通 组播 +CCTV-7,http://itms.xznet.org:41097/rtp/239.254.200.159:6000$河北电信 组播 +CCTV-8,http://27.40.16.70:8114/GD_CUCC/G_CCTV-8-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-8,http://rihou.cc:55/lib/migu.php?id=cctv8$咪咕代理 接口 +CCTV-8,http://www.ogrehq.com:4022/udp/228.1.1.194:8002$北京移动 组播 +CCTV-8,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.195:6060$河北联通 组播 +CCTV-8,http://xuys.top:8888/udp/225.1.1.19:5002$天津联通 组播 +CCTV-8,http://xuys.top:8888/udp/225.1.1.196:5002$天津联通 组播 +CCTV-8,http://wuqianmu.synology.me:4000/udp/232.0.0.173:1234$辽宁联通 组播 +CCTV-8,http://nas.tuyuannet.cn:8800/rtp/239.37.0.234:5540$吉林电信 组播 +CCTV-8,http://itms.xznet.org:41097/rtp/239.254.200.16:6000$河北电信 组播 +CCTV-9,http://27.40.16.70:8114/GD_CUCC/G_CCTV-9-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-9,http://rihou.cc:55/lib/migu.php?id=cctv9$咪咕代理 接口 +CCTV-9,http://www.ogrehq.com:4022/udp/228.1.1.27:8112$北京移动 组播 +CCTV-9,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.107:6020$河北联通 组播 +CCTV-9,http://xuys.top:8888/udp/225.1.1.20:5002$天津联通 组播 +CCTV-9,http://xuys.top:8888/udp/225.1.1.119:5002$天津联通 组播 +CCTV-9,http://wuqianmu.synology.me:4000/udp/232.0.0.137:1234$辽宁联通 组播 +CCTV-9,http://nas.tuyuannet.cn:8800/rtp/239.37.0.1:5540$吉林电信 组播 +CCTV-9,http://itms.xznet.org:41097/rtp/239.254.200.59:8112$河北电信 组播 +CCTV-10,http://27.40.16.70:8114/GD_CUCC/G_CCTV-10-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-10,http://rihou.cc:55/lib/migu.php?id=cctv10$咪咕代理 接口 +CCTV-10,http://www.ogrehq.com:4022/udp/228.1.1.29:8116$北京移动 组播 +CCTV-10,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.196:6061$河北联通 组播 +CCTV-10,http://xuys.top:8888/udp/225.1.1.21:5002$天津联通 组播 +CCTV-10,http://xuys.top:8888/udp/225.1.1.140:5002$天津联通 组播 +CCTV-10,http://wuqianmu.synology.me:4000/udp/232.0.0.138:1234$辽宁联通 组播 +CCTV-10,http://nas.tuyuannet.cn:8800/rtp/239.37.0.7:5540$吉林电信 组播 +CCTV-10,http://itms.xznet.org:41097/rtp/239.254.200.160:6000$河北电信 组播 +CCTV-11,http://27.40.16.70:8114/GD_CUCC/G_CCTV-11-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-11,http://rihou.cc:55/lib/migu.php?id=cctv11$咪咕代理 接口 +CCTV-11,http://www.ogrehq.com:4022/udp/228.1.1.182:8120$北京移动 组播 +CCTV-11,http://victoryblackcat.dscloud.me:8888/rtp/239.253.93.153:6321$河北联通 组播 +CCTV-11,http://xuys.top:8888/udp/225.1.1.22:5002$天津联通 组播 +CCTV-11,http://xuys.top:8888/udp/225.1.2.192:5002$天津联通 组播 +CCTV-11,http://wuqianmu.synology.me:4000/udp/232.0.0.178:1234$辽宁联通 组播 +CCTV-11,http://nas.tuyuannet.cn:8800/rtp/239.37.1.26:5540$吉林电信 组播 +CCTV-11,http://nas.tuyuannet.cn:8800/rtp/239.37.0.227:5540$吉林电信 组播 +CCTV-11,http://itms.xznet.org:41097/rtp/239.254.201.123:8120$河北电信 组播 +CCTV-12,http://27.40.16.70:8114/GD_CUCC/G_CCTV-12-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-12,http://rihou.cc:55/lib/migu.php?id=cctv12$咪咕代理 接口 +CCTV-12,http://www.ogrehq.com:4022/udp/228.1.1.30:8124$北京移动 组播 +CCTV-12,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.197:6062$河北联通 组播 +CCTV-12,http://xuys.top:8888/udp/225.1.1.23:5002$天津联通 组播 +CCTV-12,http://xuys.top:8888/udp/225.1.1.142:5002$天津联通 组播 +CCTV-12,http://wuqianmu.synology.me:4000/udp/232.0.0.139:1234$辽宁联通 组播 +CCTV-12,http://nas.tuyuannet.cn:8800/rtp/239.37.0.6:5540$吉林电信 组播 +CCTV-12,http://itms.xznet.org:41097/rtp/239.254.200.161:6000$河北电信 组播 +CCTV-13,http://27.40.16.70:8114/GD_CUCC/G_CCTV-13-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-13,http://rihou.cc:55/lib/migu.php?id=cctv13$咪咕代理 接口 +CCTV-13,http://www.ogrehq.com:4022/udp/228.1.1.212:8128$北京移动 组播 +CCTV-13,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.13:8008$河北联通 组播 +CCTV-13,http://xuys.top:8888/udp/225.1.1.24:5002$天津联通 组播 +CCTV-13,http://xuys.top:8888/udp/225.1.2.193:5002$天津联通 组播 +CCTV-13,http://wuqianmu.synology.me:4000/udp/232.0.0.15:1234$辽宁联通 组播 +CCTV-13,http://nas.tuyuannet.cn:8800/rtp/239.37.1.27:5540$吉林电信 组播 +CCTV-13,http://itms.xznet.org:41097/rtp/239.254.200.9:8264$河北电信 组播 +CCTV-14,http://27.40.16.70:8114/GD_CUCC/G_CCTV-14-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-14,http://rihou.cc:55/lib/migu.php?id=cctv14$咪咕代理 接口 +CCTV-14,http://www.ogrehq.com:4022/udp/228.1.1.31:8132$北京移动 组播 +CCTV-14,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.198:6063$河北联通 组播 +CCTV-14,http://xuys.top:8888/udp/225.1.1.25:5002$天津联通 组播 +CCTV-14,http://xuys.top:8888/udp/225.1.1.144:5002$天津联通 组播 +CCTV-14,http://wuqianmu.synology.me:4000/udp/232.0.0.140:1234$辽宁联通 组播 +CCTV-14,http://nas.tuyuannet.cn:8800/rtp/239.37.0.5:5540$吉林电信 组播 +CCTV-14,http://itms.xznet.org:41097/rtp/239.254.200.162:6000$河北电信 组播 +CCTV-15,http://27.40.16.70:8114/GD_CUCC/G_CCTV-15-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-15,http://rihou.cc:55/lib/migu.php?id=cctv15$咪咕代理 接口 +CCTV-15,http://www.ogrehq.com:4022/udp/228.1.1.183:8136$北京移动 组播 +CCTV-15,http://victoryblackcat.dscloud.me:8888/rtp/239.253.93.154:6322$河北联通 组播 +CCTV-15,http://xuys.top:8888/udp/225.1.1.26:5002$天津联通 组播 +CCTV-15,http://xuys.top:8888/udp/225.1.2.194:5002$天津联通 组播 +CCTV-15,http://wuqianmu.synology.me:4000/udp/232.0.0.179:1234$辽宁联通 组播 +CCTV-15,http://nas.tuyuannet.cn:8800/rtp/239.37.1.28:5540$吉林电信 组播 +CCTV-15,http://itms.xznet.org:41097/rtp/239.254.201.124:8136$河北电信 组播 +CCTV-16,http://27.40.16.70:8114/GD_CUCC/G_CCTV-16-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-16,http://xuys.top:8888/udp/225.1.2.237:5002$天津联通 组播 +CCTV-16,http://www.ogrehq.com:4022/udp/228.1.1.215:8002$北京移动 组播 +CCTV-16,http://wuqianmu.synology.me:4000/udp/232.0.0.182:1234$辽宁联通 组播 +CCTV-16,http://nas.tuyuannet.cn:8800/rtp/239.37.1.21:5540$吉林电信 组播 +CCTV-16,http://nas.tuyuannet.cn:8800/rtp/239.37.1.22:5540$吉林电信 组播 +CCTV-17,http://27.40.16.70:8114/GD_CUCC/G_CCTV-17-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +CCTV-17,http://rihou.cc:55/lib/migu.php?id=cctv17$咪咕代理 接口 +CCTV-17,http://www.ogrehq.com:4022/udp/228.1.1.181:8144$北京移动 组播 +CCTV-17,http://victoryblackcat.dscloud.me:8888/rtp/239.253.93.150:6318$河北联通 组播 +CCTV-17,http://xuys.top:8888/udp/225.1.2.52:5002$天津联通 组播 +CCTV-17,http://wuqianmu.synology.me:4000/udp/232.0.0.230:1234$辽宁联通 组播 +CCTV-17,http://nas.tuyuannet.cn:8800/rtp/239.37.0.2:5540$吉林电信 组播 +CCTV-17,http://itms.xznet.org:41097/rtp/239.254.201.120:8144$河北电信 组播 +CCTV-4K,http://27.222.3.214/liveali-tp4k.cctv.cn/live/4K10M.stream/1.m3u8 +CCTV-发现之旅,http://rihou.cc:55/lib/migu.php?id=fxzl$咪咕代理 接口 +CCTV-发现之旅,http://xuys.top:8888/udp/225.1.1.183:5002$天津联通 组播 +CCTV-风云剧场,http://xuys.top:8888/udp/225.1.2.174:5002$天津联通 组播 +CCTV-老故事,http://rihou.cc:55/lib/migu.php?id=lgs$咪咕代理 接口 +CCTV-老故事,http://xuys.top:8888/udp/225.1.1.188:5002$天津联通 组播 +CCTV-中学生,http://rihou.cc:55/lib/migu.php?id=zxs$咪咕代理 接口 +CCTV-中学生,http://xuys.top:8888/udp/225.1.1.193:5002$天津联通 组播 +CCTV-央视台球,http://victoryblackcat.dscloud.me:8888/rtp/239.253.93.231:6409$河北联通 组播 +CCTV-央视台球,http://xuys.top:8888/udp/225.1.2.170:5002$天津联通 组播 +CCTV-央视台球,http://wuqianmu.synology.me:4000/udp/232.0.0.60:1234$辽宁联通 组播 +CCTV-电视指南,http://victoryblackcat.dscloud.me:8888/rtp/239.253.93.249:6427$河北联通 组播 +CCTV-电视指南,http://xuys.top:8888/udp/225.1.2.167:5002$天津联通 组播 +CCTV-电视指南,http://wuqianmu.synology.me:4000/udp/232.0.0.91:1234$辽宁联通 组播 +CCTV-第一剧场,http://victoryblackcat.dscloud.me:8888/rtp/239.253.93.138:6428$河北联通 组播 +CCTV-第一剧场,http://xuys.top:8888/udp/225.1.2.175:5002$天津联通 组播 +CCTV-第一剧场,http://wuqianmu.synology.me:4000/udp/232.0.0.29:1234$辽宁联通 组播 +CCTV-风云剧场,http://victoryblackcat.dscloud.me:8888/rtp/239.253.93.251:6429$河北联通 组播 +CCTV-风云剧场,http://wuqianmu.synology.me:4000/udp/232.0.0.45:1234$辽宁联通 组播 +CCTV-怀旧剧场,http://victoryblackcat.dscloud.me:8888/rtp/239.253.93.252:6430$河北联通 组播 +CCTV-怀旧剧场,http://xuys.top:8888/udp/225.1.2.173:5002$天津联通 组播 +CCTV-怀旧剧场,http://wuqianmu.synology.me:4000/udp/232.0.0.38:1234$辽宁联通 组播 +CCTV-风云音乐,http://victoryblackcat.dscloud.me:8888/rtp/239.253.93.253:6431$河北联通 组播 +CCTV-风云音乐,http://xuys.top:8888/udp/225.1.2.176:5002$天津联通 组播 +CCTV-风云音乐,http://wuqianmu.synology.me:4000/udp/232.0.0.47:1234$辽宁联通 组播 +CCTV-风云足球,http://victoryblackcat.dscloud.me:8888/rtp/239.253.93.254:6432$河北联通 组播 +CCTV-风云足球,http://xuys.top:8888/udp/225.1.2.168:5002$天津联通 组播 +CCTV-风云足球,http://wuqianmu.synology.me:4000/udp/232.0.0.52:1234$辽宁联通 组播 +CCTV-高尔夫网球,http://victoryblackcat.dscloud.me:8888/rtp/239.253.93.122:6465$河北联通 组播 +CCTV-高尔夫网球,http://xuys.top:8888/udp/225.1.2.169:5002$天津联通 组播 +CCTV-兵器科技,http://victoryblackcat.dscloud.me:8888/rtp/239.253.93.47:6435$河北联通 组播 +CCTV-兵器科技,http://xuys.top:8888/udp/225.1.2.166:5002$天津联通 组播 +CCTV-兵器科技,http://wuqianmu.synology.me:4000/udp/232.0.0.58:1234$辽宁联通 组播 +CCTV-世界地理,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.131:6113$河北联通 组播 +CCTV-世界地理,http://xuys.top:8888/udp/225.1.2.171:5002$天津联通 组播 +CCTV-世界地理,http://wuqianmu.synology.me:4000/udp/232.0.0.63:1234$辽宁联通 组播 +CCTV-女性时尚,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.144:6114$河北联通 组播 +CCTV-女性时尚,http://xuys.top:8888/udp/225.1.2.172:5002$天津联通 组播 +CCTV-女性时尚,http://wuqianmu.synology.me:4000/udp/232.0.0.51:1234$辽宁联通 组播 +CCTV-央视文化精品,http://victoryblackcat.dscloud.me:8888/rtp/239.253.93.175:6439$河北联通 组播 +CCTV-央视文化精品,http://xuys.top:8888/udp/225.1.2.177:5002$天津联通 组播 +CCTV-央视文化精品,http://wuqianmu.synology.me:4000/udp/232.0.0.56:1234$辽宁联通 组播 +CGTN-英语新闻,http://rihou.cc:55/lib/migu.php?id=cgtn$咪咕代理 接口 +CGTN-英语新闻,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.15:8011$河北联通 组播 +CGTN-英语新闻,http://xuys.top:8888/udp/225.1.1.27:5002$天津联通 组播 +CGTN-英语新闻,http://wuqianmu.synology.me:4000/udp/232.0.0.188:1234$辽宁联通 组播 +CGTN-英语新闻,http://itms.xznet.org:41097/rtp/239.254.200.12:8056$河北电信 组播 +CGTN-西班牙语国际,http://rihou.cc:55/lib/migu.php?id=cgtne$咪咕代理 接口 +CGTN-西班牙语国际,http://wuqianmu.synology.me:4000/udp/232.0.0.6:1234$辽宁联通 组播 +CGTN-阿拉伯语国际,http://rihou.cc:55/lib/migu.php?id=cgtna$咪咕代理 接口 +CGTN-阿拉伯语国际,http://wuqianmu.synology.me:4000/udp/232.0.0.43:1234$辽宁联通 组播 +CGTN-法语国际,http://rihou.cc:55/lib/migu.php?id=cgtnf$咪咕代理 接口 +CGTN-法语国际,http://wuqianmu.synology.me:4000/udp/232.0.0.8:1234$辽宁联通 组播 +CGTN-俄罗斯语,http://rihou.cc:55/lib/migu.php?id=cgtnr$咪咕代理 接口 +CGTN-纪录,http://rihou.cc:55/lib/migu.php?id=cgtnjl$咪咕代理 接口 +CGTN-纪录,http://xuys.top:8888/udp/225.1.1.55:5002$天津联通 组播 +CGTN-纪录,http://wuqianmu.synology.me:4000/udp/232.0.0.198:1234$辽宁联通 组播 +中国天气,http://xuys.top:8888/udp/225.1.2.119:5002$天津联通 组播 +中国教育1,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.211:6069$河北联通 组播 +中国教育1,http://wuqianmu.synology.me:4000/udp/232.0.0.212:1234$辽宁联通 组播 +中国教育2,http://wuqianmu.synology.me:4000/udp/232.0.0.238:1234$辽宁联通 组播 +中国教育4,http://wuqianmu.synology.me:4000/udp/232.0.0.239:1234$辽宁联通 组播 +早期教育,http://victoryblackcat.dscloud.me:8888/rtp/239.253.93.164:6440$河北联通 组播 +CHC动作电影,http://xuys.top:8888/udp/225.1.1.221:5002$天津联通 组播 +CHC动作电影,http://xuys.top:8888/udp/225.1.1.215:5002$天津联通 组播 +CHC影迷电影,http://xuys.top:8888/udp/225.1.1.214:5002$天津联通 组播 +CHC家庭影院,http://xuys.top:8888/udp/225.1.1.220:5002$天津联通 组播 +CHC家庭影院,http://xuys.top:8888/udp/225.1.1.213:5002$天津联通 组播 +环球奇观,http://xuys.top:8888/udp/225.1.1.197:5002$天津联通 组播 +书画频道,http://xuys.top:8888/udp/225.1.2.22:5002$天津联通 组播 +早期教育,http://xuys.top:8888/udp/225.1.2.207:5002$天津联通 组播 + +CCTV1,http://222.223.118.222:2180/live/cctv1/index.m3u8 +CCTV2,http://222.223.118.222:2180/live/cctv2/index.m3u8 +CCTV3,http://222.223.118.222:2180/live/cctv3/index.m3u8 +CCTV4,http://222.223.118.222:2180/live/cctv4/index.m3u8 +CCTV5,http://222.223.118.222:2180/live/cctv5/index.m3u8 +CCTV5+HD,http://222.223.118.222:2180/live/cctv5q/index.m3u8 +CCTV6,http://222.223.118.222:2180/live/cctv6/index.m3u8 +CCTV7,http://222.223.118.222:2180/live/cctv7/index.m3u8 +CCTV8,http://222.223.118.222:2180/live/cctv8/index.m3u8 +CCTV9,http://222.223.118.222:2180/live/cctv9/index.m3u8 +CCTV10,http://222.223.118.222:2180/live/cctv10/index.m3u8 +CCTV11,http://222.223.118.222:2180/live/cctv11/index.m3u8 +CCTV12,http://222.223.118.222:2180/live/cctv12/index.m3u8 +CCTV13,http://222.223.118.222:2180/live/cctv13/index.m3u8 +CCTV14,http://222.223.118.222:2180/live/cctv14/index.m3u8 +CCTV15,http://222.223.118.222:2180/live/cctv15/index.m3u8 + + + +CCTV1,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=222 +CCTV2,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=270 +CCTV3,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=337 +CCTV4,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=275 +CCTV5,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=628 +CCTV5+,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=284 +CCTV6,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=215 +CCTV7,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=263 +CCTV8,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=305 +CCTV9,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=302 +CCTV10,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=242 +CCTV11,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=349 +CCTV12,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=232 +CCTV13,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=243 +CCTV14,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=303 +CCTV15,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=294 +重温经典频道,http://mtw.so/5NPX0U +CCTV01,http://171.108.239.76:8181/tsfile/live/1027_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV02,http://171.108.239.76:8181/tsfile/live/1028_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV03,http://171.108.239.76:8181/tsfile/live/1029_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV04,http://171.108.239.76:8181/tsfile/live/1030_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV05,http://171.108.239.76:8181/tsfile/live/1031_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV5+,http://171.108.239.76:8181/tsfile/live/1044_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV06,http://171.108.239.76:8181/tsfile/live/1032_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV07,http://171.108.239.76:8181/tsfile/live/1033_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV08,http://171.108.239.76:8181/tsfile/live/1034_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV09,http://171.108.239.76:8181/tsfile/live/1035_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV10,http://171.108.239.76:8181/tsfile/live/1036_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV11,http://171.108.239.76:8181/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV12,http://171.108.239.76:8181/tsfile/live/1038_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV13,http://171.108.239.76:8181/tsfile/live/1039_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV14,http://171.108.239.76:8181/tsfile/live/1040_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV15,http://171.108.239.76:8181/tsfile/live/1041_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV16,http://171.108.239.76:8181/tsfile/live/1042_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV17,http://171.108.239.76:8181/tsfile/live/1043_1.m3u8?key=txiptv&playlive=1&authid=0 + + + + + + +CCTV1,http://rihou.cc:55/lib/migu.php?id=cctv1 +CCTV2,http://rihou.cc:55/lib/migu.php?id=cctv2 +CCTV3,http://rihou.cc:55/lib/migu.php?id=cctv3 +CCTV4,http://rihou.cc:55/lib/migu.php?id=cctv4 +CCTV4,http://rihou.cc:55/lib/migu.php?id=cctv4a + CCTV4,http://rihou.cc:55/lib/migu.php?id=cctv4o +CCTV5,http://rihou.cc:55/lib/migu.php?id=cctv5 +CCTV5+,http://rihou.cc:55/lib/migu.php?id=cctv5p +CCTV6,http://rihou.cc:55/lib/migu.php?id=cctv6 +CCTV7,http://rihou.cc:55/lib/migu.php?id=cctv7 +CCTV8,http://rihou.cc:55/lib/migu.php?id=cctv8 +CCTV9,http://rihou.cc:55/lib/migu.php?id=cctv9 +CCTV10,http://rihou.cc:55/lib/migu.php?id=cctv10 +CCTV11,http://rihou.cc:55/lib/migu.php?id=cctv11 +CCTV12,http://rihou.cc:55/lib/migu.php?id=cctv12 +CCTV13,http://rihou.cc:55/lib/migu.php?id=cctv13 +CCTV14,http://rihou.cc:55/lib/migu.php?id=cctv14 +CCTV15,http://rihou.cc:55/lib/migu.php?id=cctv15 +CCTV17,http://rihou.cc:55/lib/migu.php?id=cctv17 + + +CCTV1,http://4170.hsmedia.top:8080/newlive/live/hls/1/live.m3u8 +CCTV2,http://4170.hsmedia.top:8080/newlive/live/hls/2/live.m3u8 +CCTV3,http://4170.hsmedia.top:8080/newlive/live/hls/3/live.m3u8 +CCTV4,http://4170.hsmedia.top:8080/newlive/live/hls/4/live.m3u8 +CCTV5,http://4170.hsmedia.top:8080/newlive/live/hls/5/live.m3u8 +CCTV6,http://4170.hsmedia.top:8080/newlive/live/hls/6/live.m3u8 +CCTV7,http://4170.hsmedia.top:8080/newlive/live/hls/7/live.m3u8 +CCTV8,http://4170.hsmedia.top:8080/newlive/live/hls/8/live.m3u8 +CCTV9,http://4170.hsmedia.top:8080/newlive/live/hls/9/live.m3u8 +CCTV10,http://4170.hsmedia.top:8080/newlive/live/hls/10/live.m3u8 +CCTV11,http://4170.hsmedia.top:8080/newlive/live/hls/11/live.m3u8 +CCTV12,http://4170.hsmedia.top:8080/newlive/live/hls/12/live.m3u8 +CCTV13,http://4170.hsmedia.top:8080/newlive/live/hls/13/live.m3u8 +CCTV14,http://4170.hsmedia.top:8080/newlive/live/hls/14/live.m3u8 +CCTV15,http://4170.hsmedia.top:8080/newlive/live/hls/15/live.m3u8 +CGTN,http://4170.hsmedia.top:8080/newlive/live/hls/16/live.m3u8 +CCTV17,http://4170.hsmedia.top:8080/newlive/live/hls/17/live.m3u8 + + + +CCTV1,http://1.24.190.98:10080/hls/1/index.m3u8 +CCTV2,http://1.24.190.98:10080/hls/2/index.m3u8 +CCTV3,http://1.24.190.98:10080/hls/3/index.m3u8 +CCTV4,http://1.24.190.98:10080/hls/4/index.m3u8 +CCTV5,http://1.24.190.98:10080/hls/5/index.m3u8 +CCTV5+,http://1.24.190.98:10080/hls/16/index.m3u8 +CCTV6,http://1.24.190.98:10080/hls/6/index.m3u8 +CCTV7,http://1.24.190.98:10080/hls/7/index.m3u8 +CCTV8,http://1.24.190.98:10080/hls/8/index.m3u8 +CCTV9,http://1.24.190.98:10080/hls/9/index.m3u8 +CCTV10,http://1.24.190.98:10080/hls/10/index.m3u8 +CCTV11,http://1.24.190.98:10080/hls/11/index.m3u8 +CCTV12,http://1.24.190.98:10080/hls/12/index.m3u8 +CCTV13,http://1.24.190.98:10080/hls/13/index.m3u8 +CCTV14,http://1.24.190.98:10080/hls/14/index.m3u8 +CCTV15,http://1.24.190.98:10080/hls/15/index.m3u8 + +CCTV1,http://124.116.183.146:9901/tsfile/live/0001_1.m3u8 +CCTV2,http://124.116.183.146:9901/tsfile/live/0002_1.m3u8 +CCTV3,http://124.116.183.146:9901/tsfile/live/0003_1.m3u8 +CCTV4,http://124.116.183.146:9901/tsfile/live/0004_1.m3u8 +CCTV5,http://124.116.183.146:9901/tsfile/live/0005_1.m3u8 +CCTV6,http://124.116.183.146:9901/tsfile/live/0006_1.m3u8 +CCTV7,http://124.116.183.146:9901/tsfile/live/0007_1.m3u8 +CCTV8,http://124.116.183.146:9901/tsfile/live/0008_1.m3u8 +CCTV13,http://124.116.183.146:9901/tsfile/live/0013_1.m3u8 +CCTV14,http://124.116.183.146:9901/tsfile/live/0014_1.m3u8 +CCTV15,http://124.116.183.146:9901/tsfile/live/0015_1.m3u8 + + +CCTV13,http://223.109.210.41/4309-tx.otvstream.otvcloud.com/otv/skcc/live/channel39/2300.m3u8 +CCTV1,https://ldncctvwbndhwy.cntv.myhwcdn.cn/ldncctvwbnd/ldcctv1_2/index.m3u8 +CCTV1综合,https://tv.cry33.com/51.php?id=2022576803.m3u8 +CCTV2财经,http://liveop.cctv.cn:80/hls/CCTV28bee868714f04ea2af79947bb9b46fc3H/playlist.m3u8 +CCTV2财经,https://tv.cry33.com/51.php?id=2022576703.m3u8 +CCTV3综艺,https://tv.cry33.com/51.php?id=2022576503.m3u8 +CCTV4国际,https://tv.cry33.com/51.php?id=2022576603.m3u8 +CCTV5体育,https://tv.cry33.com/51.php?id=2022576403.m3u8 +CCTV6电影,http://mobilelive-ds.ysp.cctv.cn/ysp/2013693901.m3u8 +CCTV6电影,https://tv.cry33.com/51.php?id=2013693903.m3u8 +CCTV7国防军事,https://tv.cry33.com/51.php?id=2022576203.m3u8 +CCTV8电视剧,https://tv.cry33.com/51.php?id=2022576103.m3u8 +CCTV9记录,https://tv.cry33.com/51.php?id=2022576003.m3u8 +CCTV10科教,https://tv.cry33.com/51.php?id=2022573003.m3u8 +CCTV11戏曲,https://tv.cry33.com/51.php?id=2022575903.m3u8 +CCTV12社会与法,https://tv.cry33.com/51.php?id=2022575803.m3u8 +CCTV13新闻,https://tv.cry33.com/51.php?id=2022575703.m3u8 +CCTV14少儿,https://tv.cry33.com/51.php?id=2022575603.m3u8 +CCTV15音乐,https://tv.cry33.com/51.php?id=2022575503.m3u8 +CCTV16奥林匹克,https://tv.cry33.com/51.php?id=2022575403.m3u8 +CCTV16-4K,https://tv.cry33.com/51.php?id=2022575103.m3u8 +CCTV17农业农村,https://tv.cry33.com/51.php?id=2022575303.m3u8 +CCTV5+体育赛事,https://tv.cry33.com/51.php?id=2022576303.m3u8 +CCTV4K超高清,https://tv.cry33.com/51.php?id=2022575203.m3u8 +CCTV8K超高清,https://tv.cry33.com/51.php?id=2020603423.m3u8 +CCTV8K超高清,https://tv.cry33.com/51.php?id=2020603463.m3u8 +CGTN,https://tv.cry33.com/51.php?id=2022575003.m3u8 +CGTN法语,https://tv.cry33.com/51.php?id=2022574903.m3u8 +CGTN俄语,https://tv.cry33.com/51.php?id=2022574803.m3u8 +CGTN阿拉伯语,https://tv.cry33.com/51.php?id=2022574603.m3u8 +CGTN西班牙语,https://tv.cry33.com/51.php?id=2022571703.m3u8 +CGTN外语纪录,https://tv.cry33.com/51.php?id=2022574703.m3u8 +CCTV风云剧场,https://tv.cry33.com/51.php?id=2012513603.m3u8 +CCTV第一剧场,https://tv.cry33.com/51.php?id=2012514403.m3u8 +CCTV怀旧剧场,https://tv.cry33.com/51.php?id=2012511203.m3u8 +CCTV世界地理,https://tv.cry33.com/51.php?id=2012513303.m3u8 +CCTV风云音乐,https://tv.cry33.com/51.php?id=2012514103.m3u8 +CCTV兵器科技,https://tv.cry33.com/51.php?id=2012513403.m3u8 +CCTV风云足球,https://tv.cry33.com/51.php?id=2012514203.m3u8 +CCTV高尔夫网球,https://tv.cry33.com/51.php?id=2012512503.m3u8 +CCTV女性时尚,https://tv.cry33.com/51.php?id=2012513903.m3u8 +CCTV央视文化精品,https://tv.cry33.com/51.php?id=2012513803.m3u8 +CCTV央视台球,https://tv.cry33.com/51.php?id=2012513703.m3u8 +CCTV电视指南,https://tv.cry33.com/51.php?id=2012514003.m3u8 +CCTV卫生健康,https://tv.cry33.com/51.php?id=2012513503.m3u8 +CCTV-娱乐,http://110.72.72.90:808/hls/66/index.m3u8 +中教一套,https://tv.cry33.com/51.php?id=2022823801.m3u8 +中教一套,http://182.137.255.59:5033/syhjcms_hls/98000000000000000001685674939564/index.m3u8?playtype=1&usercode=cl@is +中教一套,http://171.221.27.11:5010/syhjcms_hls/98000000000000000001685674939564/index.m3u8?playtype=1&usercode=cl@is +中教一套,http://118.122.242.46:5031/syhjcms_hls/98000000000000000001685674939564/index.m3u8?playtype=1&usercode=cl@is +中教一套,http://118.122.242.88:5033/syhjcms_hls/98000000000000000001685674939564/index.m3u8?playtype=1&usercode=cl@is +中教一套,http://182.139.250.132:5033/syhjcms_hls/98000000000000000001685674939564/index.m3u8?playtype=1&usercode=cl@is + + +CCTV13-新闻,http://live-play.cctvnews.cctv.com/cctv/merge_cctv13.flv + +CCTV1-综合,http://58.210.23.42:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV2-财经,http://liveop.cctv.cn:80/hls/CCTV28bee868714f04ea2af79947bb9b46fc3H/playlist.m3u8 +CCTV2-财经,http://58.210.23.42:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV3-综艺,http://58.210.23.42:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV4-国际,http://58.210.23.42:9901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV5-体育,http://58.210.23.42:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV5+高清,http://219.145.20.108:2883/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV6-电影,http://mobilelive-ds.ysp.cctv.cn/ysp/2013693901.m3u8 +CCTV6-电影,http://58.210.23.42:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV7-军农,http://58.210.23.42:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV8-电视剧,http://58.210.23.42:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV9-纪录,http://58.210.23.42:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV10-科教,http://58.210.23.42:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV11-戏曲,http://58.210.23.42:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV12-社会与法,http://58.210.23.42:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV13-新闻,http://58.210.23.42:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV14-少儿,http://58.210.23.42:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV15-音乐,http://58.210.23.42:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0 +纬来体育,http://hls.szsummer.cn/live/446035/playlist.m3u8?k=32f9ec7c13e4b390289143a8e1b2a898&t=1840341130 + +CCTV1-综合,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226231/index.m3u8 +CCTV2-财经,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226195/index.m3u8 +CCTV3-综艺,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226397/index.m3u8 +CCTV4-国际,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226191/index.m3u8 +CCTV5-体育,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226395/index.m3u8 +CCTV5+高清,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226221/index.m3u8 +CCTV6-电影,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226393/index.m3u8 +CCTV7-军农,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226192/index.m3u8 +TTCV8-电视剧,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226391/index.m3u8 +CCTV9-记录,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226197/index.m3u8 +CCTV10-科教,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226189/index.m3u8 +CCTV11-戏曲,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226240/index.m3u8 +CCTV12-社会与法,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226190/index.m3u8 +CCTV13-新闻,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226233/index.m3u8 +CCTV14-少儿,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226193/index.m3u8 +CCTV15-音乐,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225785/index.m3u8 +CCTV16-奥运,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226921/index.m3u8 +CCTV17-农业,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226198/index.m3u8 + +CCTV1-综合,http://219.145.20.108:2883/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV2-财经,http://219.145.20.108:2883/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV3-综艺,http://219.145.20.108:2883/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV4-国际,http://219.145.20.108:2883/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV5-体育,http://219.145.20.108:2883/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV6-电影,http://219.145.20.108:2883/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV7-军农,http://219.145.20.108:2883/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV8-电视剧,http://219.145.20.108:2883/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV9-纪录,http://219.145.20.108:2883/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV10-科教,http://219.145.20.108:2883/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV11-戏曲,http://219.145.20.108:2883/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV12-社会与法,http://219.145.20.108:2883/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV13-新闻,http://219.145.20.108:2883/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV14-少儿,http://219.145.20.108:2883/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV15-音乐,http://219.145.20.108:2883/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV5+高清,http://219.145.20.108:2883/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0 + +龍🐉央視二,#genre# +CCTV1,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel1/1300.m3u8 +CCTV1,https://node1.olelive.com:6443/live/CCTV1HD/hls.m3u8 +CCTV2,https://liveop.cctv.cn/hls/CCTV28bee868714f04ea2af79947bb9b46fc3H/playlist.m3u8 +CCTV2,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel2/1300.m3u8 +CCTV3,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel3/1300.m3u8 +CCTV4,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel4/1300.m3u8 +CCTV5,https://node1.olelive.com:6443/live/CCTV5HD/hls.m3u8 +CCTV5+,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel13/1300.m3u8 +CCTV6,http://mobilelive-timeshift.ysp.cctv.cn/timeshift/ysp/2013693901/timeshift.m3u8?delay=0&cdn=5202 +CCTV6,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel6/1300.m3u8 +CCTV7,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel7/1300.m3u8 +CCTV8,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel8/1300.m3u8 +CCTV9,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel9/1300.m3u8 +CCTV9,https://node1.olelive.com:6443/live/CCTV9HD/hls.m3u8 +CCTV10,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel10/1300.m3u8 +CCTV12,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel12/1300.m3u8 +CCTV-13,https://node1.olelive.com:6443/live/CCTV13HD/hls.m3u8 +CGTN,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel14/1300.m3u8 +CGTN,https://live.cgtn.com/1000/prog_index.m3u8 +CGTN,https://news.cgtn.com/resource/live/english/cgtn-news.m3u8 +CGTN纪录,https://news.cgtn.com/resource/live/document/cgtn-doc.m3u8 +CGTN纪录,https://livedoc.cgtn.com/500d/prog_index.m3u8 +CGTN俄语,https://liveru.cgtn.com/1000r/prog_index.m3u8 +CGTN法语,https://livefr.cgtn.com/1000f/prog_index.m3u8 +CGTN西语,https://livees.cgtn.com/1000e/prog_index.m3u8 +CETV-1,http://hwylivehd.centv.cn/cetv1/ypd.m3u8 +CETV-2,http://hwylivehd.centv.cn/cetv2/2020tsytk.m3u8 +CETV-3,http://hwylivehd.centv.cn/cetv3/bjdm.m3u8 +CETV-4,http://hwylivehd.centv.cn/cetv4/zjpd.m3u8 + + +CCTV1,http://cdn.u55u.cn/migu.php?id=cctv1$咪咕代理 接口 +CCTV2,http://cdn.u55u.cn/migu.php?id=cctv2$咪咕代理 接口 +CCTV3,http://cdn.u55u.cn/migu.php?id=cctv3$咪咕代理 接口 +CCTV4,http://cdn.u55u.cn/migu.php?id=cctv4$咪咕代理 接口 +CCTV4欧洲,http://cdn.u55u.cn/migu.php?id=cctv4o$咪咕代理 接口 +CCTV4美洲,http://cdn.u55u.cn/migu.php?id=cctv4a$咪咕代理 接口 +CCTV5,http://cdn.u55u.cn/migu.php?id=cctv5$咪咕代理 接口 +CCTV5+,http://cdn.u55u.cn/migu.php?id=cctv5p$咪咕代理 接口 +CCTV6,http://cdn.u55u.cn/migu.php?id=cctv6$咪咕代理 接口 +CCTV7,http://cdn.u55u.cn/migu.php?id=cctv7$咪咕代理 接口 +CCTV8,http://cdn.u55u.cn/migu.php?id=cctv8$咪咕代理 接口 +CCTV9,http://cdn.u55u.cn/migu.php?id=cctv9$咪咕代理 接口 +CCTV10,http://cdn.u55u.cn/migu.php?id=cctv10$咪咕代理 接口 +CCTV11,http://cdn.u55u.cn/migu.php?id=cctv11$咪咕代理 接口 +CCTV12,http://cdn.u55u.cn/migu.php?id=cctv12$咪咕代理 接口 +CCTV13,http://cdn.u55u.cn/migu.php?id=cctv13$咪咕代理 接口 +CCTV14,http://cdn.u55u.cn/migu.php?id=cctv14$咪咕代理 接口 +CCTV15,http://cdn.u55u.cn/migu.php?id=cctv15$咪咕代理 接口 +CCTV17,http://cdn.u55u.cn/migu.php?id=cctv17$咪咕代理 接口 +CCTV现之旅,http://cdn.u55u.cn/migu.php?id=fxzl$咪咕代理 接口 +CCTV-老故事,http://cdn.u55u.cn/migu.php?id=lgs$咪咕代理 接口 +CCTV中学生,http://cdn.u55u.cn/migu.php?id=zxs$咪咕代理 接口 +CCTV西班牙语,http://cdn.u55u.cn/migu.php?id=cgtne$咪咕代理 接口 +CCTV阿拉伯语,http://cdn.u55u.cn/migu.php?id=cgtna$咪咕代理 接口 +CCTV法语,http://cdn.u55u.cn/migu.php?id=cgtnf$咪咕代理 接口 +CCTV,http://cdn.u55u.cn/migu.php?id=cgtnr$咪咕代理 接口 + + + +CCTV1,http://113.98.122.166:9901/tsfile/live/1001_1.m3u8?key=txiptv +CCTV2,http://113.98.122.166:9901/tsfile/live/1002_1.m3u8?key=txiptv +CCTV3,http://113.98.122.166:9901/tsfile/live/1003_1.m3u8?key=txiptv +CCTV4,http://113.98.122.166:9901/tsfile/live/1004_1.m3u8?key=txiptv +CCTV5,http://113.98.122.166:9901/tsfile/live/1005_1.m3u8?key=txiptv +CCTV6,http://113.98.122.166:9901/tsfile/live/1006_1.m3u8?key=txiptv +CCTV7,http://113.98.122.166:9901/tsfile/live/1007_1.m3u8?key=txiptv +CCTV8,http://113.98.122.166:9901/tsfile/live/1008_1.m3u8?key=txiptv +CCTV9,http://113.98.122.166:9901/tsfile/live/1009_1.m3u8?key=txiptv +CCTV10,http://113.98.122.166:9901/tsfile/live/1010_1.m3u8?key=txiptv +CCTV11,http://113.98.122.166:9901/tsfile/live/1011_1.m3u8?key=txiptv +CCTV12,http://113.98.122.166:9901/tsfile/live/1012_1.m3u8?key=txiptv +CCTV13,http://113.98.122.166:9901/tsfile/live/1013_1.m3u8?key=txiptv +CCTV14,http://113.98.122.166:9901/tsfile/live/1014_1.m3u8?key=txiptv +CCTV15,http://113.98.122.166:9901/tsfile/live/1015_1.m3u8?key=txiptv +CCTV16,http://113.98.122.166:9901/tsfile/live/1016_1.m3u8?key=txiptv +CCTV17,http://113.98.122.166:9901/tsfile/live/1017_1.m3u8?key=txiptv + + + +CCTV1,http://1b6467f415.iok.la:9931/tsfile/live/1020_1.m3u8 +CCTV2,http://1b6467f415.iok.la:9931/tsfile/live/1021_1.m3u8 +CCTV3,http://1b6467f415.iok.la:9931/tsfile/live/1022_1.m3u8 +CCTV4,http://1b6467f415.iok.la:9931/tsfile/live/1023_1.m3u8 +CCTV5,http://1b6467f415.iok.la:9931/tsfile/live/1024_1.m3u8 +CCTV5+,http://1b6467f415.iok.la:9931/tsfile/live/1025_1.m3u8 +CCTV6,http://1b6467f415.iok.la:9931/tsfile/live/1026_1.m3u8 +CCTV7,http://1b6467f415.iok.la:9931/tsfile/live/1027_1.m3u8 +CCTV8,http://1b6467f415.iok.la:9931/tsfile/live/1028_1.m3u8 +CCTV9,http://1b6467f415.iok.la:9931/tsfile/live/1029_1.m3u8 +CCTV10,http://1b6467f415.iok.la:9931/tsfile/live/1030_1.m3u8 +CCTV11,http://1b6467f415.iok.la:9931/tsfile/live/1031_1.m3u8 +CCTV12,http://1b6467f415.iok.la:9931/tsfile/live/1032_1.m3u8 +CCTV13,http://1b6467f415.iok.la:9931/tsfile/live/1033_1.m3u8 +CCTV14,http://1b6467f415.iok.la:9931/tsfile/live/1034_1.m3u8 +CCTV-16,http://1b6467f415.iok.la:9931/tsfile/live/1094_1.m3u8 +CCTV15,http://1b6467f415.iok.la:9931/tsfile/live/1035_1.m3u8 +CCTV17,http://1b6467f415.iok.la:9931/tsfile/live/1130_1.m3u8 + + + +CCTV1,http://222.174.140.242:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$山东日照 电信 +CCTV2,http://222.174.140.242:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$山东日照 电信 +CCTV3,http://222.174.140.242:9901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0$山东日照 电信 +CCTV4,http://222.174.140.242:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$山东日照 电信 +CCTV5,http://222.174.140.242:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$山东日照 电信 +CCTV5+,http://222.174.140.242:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0$山东日照 电信 +CCTV6,http://222.174.140.242:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$山东日照 电信 +CCTV7,http://222.174.140.242:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0$山东日照 电信 +CCTV8,http://222.174.140.242:9901/tsfile/live/0008_2.m3u8?key=txiptv&playlive=1&authid=0$山东日照 电信 +CCTV9,http://222.174.140.242:9901/tsfile/live/0009_2.m3u8?key=txiptv&playlive=1&authid=0$山东日照 电信 +CCTV10,http://222.174.140.242:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0$山东日照 电信 +CCTV11,http://222.174.140.242:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0$山东日照 电信 +CCTV12,http://222.174.140.242:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$山东日照 电信 +CCTV13,http://221.1.210.106:8053/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$山东菏泽 联通 +CCTV14,http://222.174.140.242:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0$山东日照 电信 +CCTV15,http://222.174.140.242:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0$山东日照 电信 +CCTV16,http://1.30.18.218:20080/hls/16/index.m3u8$内蒙古呼和浩特 联通 +CCTV17,http://221.1.210.106:8053/tsfile/live/0019_1.m3u8?key=txiptv&playlive=1&authid=0$山东菏泽 联通 + + + + +CCTV1-综合,http://123.160.235.166:85/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV2-财经,http://123.160.235.166:85/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV3-综艺,http://123.160.235.166:85/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV4-国际,http://123.160.235.166:85/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV5-体育,http://123.160.235.166:85/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV6-电影,http://123.160.235.166:85/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV7-军农,http://123.160.235.166:85/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV8-电视剧,http://123.160.235.166:85/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV9-纪录,http://123.160.235.166:85/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV10-科教,http://123.160.235.166:85/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV11-戏曲,http://123.160.235.166:85/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV12-社会与法,http://123.160.235.166:85/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV13-新闻,http://123.160.235.166:85/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV14-少儿,http://123.160.235.166:85/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV15-音乐,http://123.160.235.166:85/tsfile/live/0015_1.m3u8? + + +CCTV1-综合,http://175.0.50.196:8899/tsfile/live/0017_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV2-财经,http://175.0.50.196:8899/tsfile/live/0018_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV3-综艺,http://175.0.50.196:8899/tsfile/live/0019_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV4-国际,http://175.0.50.196:8899/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV5-体育,http://175.0.50.196:8899/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV6-电影,http://175.0.50.196:8899/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV7-军农,http://175.0.50.196:8899/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV8-电视剧,http://175.0.50.196:8899/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV9-纪录,http://175.0.50.196:8899/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV10-科教,http://175.0.50.196:8899/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV11-戏曲,http://175.0.50.196:8899/tsfile/live/0011_2.m3u8?key=txiptv&playlive=1&authid=0 +CCTV12-社会与法,http://175.0.50.196:8899/tsfile/live/0012_2.m3u8?key=txiptv&playlive=1&authid=0 +CCTV13-新闻,http://175.0.50.196:8899/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV14-少儿,http://175.0.50.196:8899/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV15-音乐,http://175.0.50.196:8899/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0 + + +龍🐉卫视一,#genre# + +浙江卫视,https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8 +东方卫视,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel26/1300.m3u8 +广东卫视,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel16/1300.m3u8 +江苏卫视,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel18/1300.m3u8 +深圳卫视,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel17/2300.m3u8 +重庆卫视,https://sjlivecdn9.cbg.cn/202906282314/app_2/_definst_/ls_2.stream/chunklist.m3u8 +山西卫视,http://liveflash.sxrtv.com/live/sxwshd.m3u8?sub_m3u8=true&edge_slice=true +兵团卫视,https://test5.btzx.com.cn/live/2023bt.stream/playlist.m3u8 +三沙卫视,http://sunny2017.forver.one:4022/udp/239.21.2.9:5002 +海南卫视,https://live3.hnntv.cn/srs/tv/lywsgq.m3u8 +河南卫视,https://tv.cry33.com/hn.php?id=hnws +河北卫视,http://tv.pull.hebtv.com/jishi/weishipindao.m3u8?t=2510710360&k=f1b16a3a3866dafecb94ec2bb4160e58#http://tv.pull.hebtv.com/jishi/weishipindao.flv?t=2510710360&k=689e494c226aa7038632a897aa3dbd27#rtmp://tv.pull.hebtv.com/jishi/weishipindao?t=2510710360&k=6cdf3c059a496f8c8375f86e1fb53346 +山东卫视,http://livealone.iqilu.com/iqilu/sdtvhjOF03kn.m3u8 +宁夏卫视,https://hls.ningxiahuangheyun.com/live/nxws1M.m3u8 +甘肃卫视,https://hlss.gstv.com.cn/49048r/y3nga4.flv#rtmp://livein.gstv.com.cn/49048r/y3nga4 +三沙卫视,https://live3.hnntv.cn/srs/tv/ssws.m3u8 +厦门卫视,http://61.54.14.232:9801/tsfile/live/1046_1.m3u8 +内蒙古卫视,https://livestream-bt.nmtv.cn/nmtv/2314general.m3u8?txSecret=dc348a27bd36fe1bd63562af5e7269ea&txTime=771EF880 +西藏卫视,https://tv.cry33.com/xizang.php?id=0#http://php.jdshipin.com:8880/xztv.php?id=ws +人间卫视,http://61.216.67.119:1935/bltvhd/bltv1/chunklist_w1266569526.m3u8 +香港卫视,http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8 +香港卫视,http://zhibo.hkstv.tv/livestream/mutfysrq.flv#http://stream.qhbtv.com/adws/sd/live.m3u8 +延边卫视,http://live.ybtvyun.com/video/s10006-44f040627ca1/index.m3u8#http://live.ybtvyun.com/video/s10006-44f040627ca1/index.m3u8 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8 +香港卫视,http://zhibo.hkstv.tv/livestream/mutfysrq.flv +香港卫视,http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8 +香港卫视,http://zhibo.hkstv.tv/livestream/mutfysrq.flv +香港卫视,http://stream.qhbtv.com/adws/sd/live.m3u8 +凤凰中文,http://113.64.145.132:8081/hls/37/index.m3u8 +凤凰资讯,http://116.162.6.191/zycfcdn.gdwlcloud.com/PLTV/88888888/224/3221226320/index.m3u8 +凤凰资讯,http://113.64.145.229:8081/hls/36/index.m3u8 +凤凰资讯,http://php.jdshipin.com:8880/jydx.php?id=36 +凤凰香港,http://113.64.145.132:8081/hls/38/index.m3u8 +重温经典[5m768*576],http://117.114.153.25:8180/TV00000000000000000007@HHZT?$京移5M576 +星空卫视[3M1024*576],http://117.114.153.25:8180/TV00000000000000000071@HHZT +吉林卫视,http://27.40.16.70:8114/GD_CUCC/G_JILIN-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +吉林卫视,http://rihou.cc:55/lib/migu.php?id=jlws$咪咕代理 接口 +陕西卫视,http://27.40.16.70:8114/GD_CUCC/G_SHANXI-HQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +陕西卫视,http://rihou.cc:55/lib/migu.php?id=sxws$咪咕代理 接口 +东方卫视,http://27.40.16.70:8114/GD_CUCC/G_DONGFANG-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +东方卫视,http://rihou.cc:55/lib/migu.php?id=dfws$咪咕代理 接口 +青海卫视,http://27.40.16.70:8114/GD_CUCC/G_QINGHAI.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +青海卫视,http://rihou.cc:55/lib/migu.php?id=qhws$咪咕代理 接口 +湖北卫视,http://27.40.16.70:8114/GD_CUCC/G_HUBEI-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +湖北卫视,http://rihou.cc:55/lib/migu.php?id=hubws$咪咕代理 接口 +江西卫视,http://27.40.16.70:8114/GD_CUCC/G_JIANGXI-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +江西卫视,http://rihou.cc:55/lib/migu.php?id=jxws$咪咕代理 接口 +江苏卫视,http://27.40.16.70:8114/GD_CUCC/G_JIANGSU-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +江苏卫视,http://rihou.cc:55/lib/migu.php?id=jsws$咪咕代理 接口 +大湾区卫视,http://27.40.16.70:8114/GD_CUCC/G_NANFANG.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +大湾区卫视,http://rihou.cc:55/lib/migu.php?id=dwqws$咪咕代理 接口 +海南卫视,http://27.40.16.70:8114/GD_CUCC/G_HAINAN-HQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +海南卫视,http://rihou.cc:55/lib/migu.php?id=hinws$咪咕代理 接口 +河北卫视,http://27.40.16.70:8114/GD_CUCC/G_HEBEI-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +河北卫视,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.154:6011$河北联通 组播 +湖南卫视,http://27.40.16.70:8114/GD_CUCC/G_HUNAN-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +湖南卫视,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.84:8015$河北联通 组播 +浙江卫视,http://27.40.16.70:8114/GD_CUCC/G_ZHEJIANG-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +浙江卫视,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.90:8020$河北联通 组播 +北京卫视,http://27.40.16.70:8114/GD_CUCC/G_BEIJING-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +北京卫视,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.87:8014$河北联通 组播 +东南卫视,http://27.40.16.70:8114/GD_CUCC/G_DONGNAN-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +东南卫视,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.201:6146$河北联通 组播 +天津卫视,http://27.40.16.70:8114/GD_CUCC/G_TIANJIN-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +天津卫视,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.91:8021$河北联通 组播 +深圳卫视,http://27.40.16.70:8114/GD_CUCC/G_SHENZHEN-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +深圳卫视,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.86:8017$河北联通 组播 +山东卫视,http://27.40.16.70:8114/GD_CUCC/G_SHANDONG-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +山东卫视,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.207:8109$河北联通 组播 +广东卫视,http://27.40.16.70:8114/GD_CUCC/G_GUANGDONG-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +广东卫视,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.206:8108$河北联通 组播 +黑龙江卫视,http://27.40.16.70:8114/GD_CUCC/G_HEILONGJIANG-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +黑龙江卫视,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.85:8016$河北联通 组播 +辽宁卫视,http://27.40.16.70:8114/GD_CUCC/G_LIAONING-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +辽宁卫视,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.115:6056$河北联通 组播 +安徽卫视,http://27.40.16.70:8114/GD_CUCC/G_ANHUI-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +安徽卫视,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.209:6566$河北联通 组播 +四川卫视,http://27.40.16.70:8114/GD_CUCC/G_SICHUAN-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +四川卫视,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.16:6043$河北联通 组播 +重庆卫视,http://27.40.16.70:8114/GD_CUCC/G_CHONGQING-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +重庆卫视,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.10:6053$河北联通 组播 +河南卫视,http://27.40.16.70:8114/GD_CUCC/G_HENAN-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +河南卫视,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.137:6144$河北联通 组播 +贵州卫视,http://27.40.16.70:8114/GD_CUCC/G_GUIZHOU-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +贵州卫视,http://victoryblackcat.dscloud.me:8888/rtp/239.253.92.105:6055$河北联通 组播 +云南卫视,http://27.40.16.70:8114/GD_CUCC/G_YUNNAN-CQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +云南卫视,http://xuys.top:8888/udp/225.1.1.61:5002$天津联通 组播 +内蒙古卫视,http://27.40.16.70:8114/GD_CUCC/G_NEIMENGGU.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +内蒙古卫视,http://xuys.top:8888/udp/225.1.1.32:5002$天津联通 组播 +宁夏卫视,http://27.40.16.70:8114/GD_CUCC/G_NINGXIA.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +宁夏卫视,http://xuys.top:8888/udp/225.1.1.56:5002$天津联通 组播 +新疆卫视,http://27.40.16.70:8114/GD_CUCC/G_XINJIANG.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +新疆卫视,http://xuys.top:8888/udp/225.1.1.35:5002$天津联通 组播 +甘肃卫视,http://27.40.16.70:8114/GD_CUCC/G_GANSU-HQ.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +甘肃卫视,http://xuys.top:8888/udp/225.1.1.30:5002$天津联通 组播 +甘肃卫视,http://wuqianmu.synology.me:4000/udp/232.0.0.50:1234$辽宁联通 组播 +西藏卫视,http://27.40.16.70:8114/GD_CUCC/G_XIZANG.m3u8?Provider_id=&Pcontent_id=&FvSeid=ace +西藏卫视,http://xuys.top:8888/udp/225.1.1.51:5002$天津联通 组播 + + + + + +湖南卫视,http://222.223.118.222:2180/live/hunws/index.m3u8 +浙江卫视,http://222.223.118.222:2180/live/zjws/index.m3u8 +江苏卫视,http://222.223.118.222:2180/live/jsws/index.m3u8 +安徽卫视,http://222.223.118.222:2180/live/ahws/index.m3u8 +北京卫视,http://222.223.118.222:2180/live/bjws/index.m3u8 +天津卫视,http://222.223.118.222:2180/live/tjws/index.m3u8 +辽宁卫视,http://222.223.118.222:2180/live/lnws/index.m3u8 +山东卫视,http://222.223.118.222:2180/live/sdws/index.m3u8 +云南卫视,http://222.223.118.222:2180/live/ynws/index.m3u8 +河南卫视,http://222.223.118.222:2180/live/henws/index.m3u8 +黑龙江卫视,http://222.223.118.222:2180/live/hljws/index.m3u8 +四川卫视,http://222.223.118.222:2180/live/scws/index.m3u8 +江西卫视,http://222.223.118.222:2180/live/jxws/index.m3u8 +贵州卫视,http://222.223.118.222:2180/live/gzws/index.m3u8 +深圳卫视,http://222.223.118.222:2180/live/szws/index.m3u8 +湖北卫视,http://222.223.118.222:2180/live/hubws/index.m3u8 +东方卫视,http://222.223.118.222:2180/live/dfws/index.m3u8 +重庆卫视,http://222.223.118.222:2180/live/cqws/index.m3u8 +东南卫视,http://222.223.118.222:2180/live/dnws/index.m3u8 +广东卫视,http://222.223.118.222:2180/live/gdws/index.m3u8 +广西卫视,http://222.223.118.222:2180/live/gxws/index.m3u8 +吉林卫视,http://222.223.118.222:2180/live/jlws/index.m3u8 +陕西卫视,http://222.223.118.222:2180/live/sxws/index.m3u8 +山西卫视,http://222.223.118.222:2180/live/shxws/index.m3u8 +内蒙古卫视,http://222.223.118.222:2180/live/nmgws/index.m3u8 +青海卫视,http://222.223.118.222:2180/live/qhws/index.m3u8 +旅游卫视,http://222.223.118.222:2180/live/lyws/index.m3u8 +宁夏卫视,http://222.223.118.222:2180/live/nxws/index.m3u8 +甘肃卫视,http://222.223.118.222:2180/live/gsws/index.m3u8 +卡酷少儿,http://222.223.118.222:2180/live/kkse/index.m3u8 +金鹰卡通,http://222.223.118.222:2180/live/jykt/index.m3u8 +第一剧场,http://222.223.118.222:2180/live/dyjc/index.m3u8 +风云剧场,http://222.223.118.222:2180/live/fyjc/index.m3u8 +怀旧剧场,http://222.223.118.222:2180/live/hjjc/index.m3u8 +风云音乐,http://222.223.118.222:2180/live/fyyy/index.m3u8 +风云足球,http://222.223.118.222:2180/live/fyzq/index.m3u8 +高尔夫网球,http://222.223.118.222:2180/live/gefwq/index.m3u8 +武术世界,http://222.223.118.222:2180/live/wssj/index.m3u8 +国防军事,http://222.223.118.222:2180/live/gfjs/index.m3u8 +世界地理,http://222.223.118.222:2180/live/sjdl/index.m3u8 +汽摩,http://222.223.118.222:2180/live/qimo/index.m3u8 +老故事,http://222.223.118.222:2180/live/lgsh/index.m3u8 +环球奇观,http://222.223.118.222:2180/live/hqqg/index.m3u8 +文物宝库,http://222.223.118.222:2180/live/wwbk/index.m3u8 +国学频道,http://222.223.118.222:2180/live/gxpd/index.m3u8 +茶频道,http://222.223.118.222:2180/live/chapd/index.m3u8 +女新时尚,http://222.223.118.222:2180/live/nxss/index.m3u8 +文化精品,http://222.223.118.222:2180/live/whjp/index.m3u8 +梨园频道,http://222.223.118.222:2180/live/lypd/index.m3u8 +新闻综合,http://222.223.118.222:2180/live/xwzh/index.m3u8 +纪实HD,http://222.223.118.222:2180/live/jishhd/index.m3u8 +邢台综合,http://222.223.118.222:2180/live/hbxtzh/index.m3u8 +邢台公共,http://222.223.118.222:2180/live/hbxtgg/index.m3u8 +快乐垂钓,http://222.223.118.222:2180/live/klcd/index.m3u8 +睛彩河北,http://222.223.118.222:2180/live/qchb/index.m3u8 +早期教育,http://222.223.118.222:2180/live/zqjy/index.m3u8 +CCTV17,http://222.223.118.222:2180/live/cctv17/index.m3u8 +陶瓷频道,http://222.223.118.222:2180/live/tcpd/index.m3u8 +求索纪录,http://222.223.118.222:2180/live/qsjl/index.m3u8 + + + + +吉林卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=317 +湖南卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=295 +浙江卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=220 +东方卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=223 +辽宁卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=234 +北京卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=212 +贵州卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=245 +重庆卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=249 +云南卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=250 +海南卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=251 +安徽卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=298 +江西卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=315 +天津卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=319 +广西卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=321 +四川卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=322 +湖北卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=255 +陕西卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=268 +江苏卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=289 +东南卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=304 +黑龙江卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=351 +广东卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=352 +山东卫视,http://open.live-web.timetv.cn/live/hndx.m3u8?token=TV259836903HNDX04252008&channel=286 + + + +广东卫视,http://183.3.134.56:9901/tsfile/live/0018_1.m3u8?key=txiptv +湖南卫视,http://183.3.134.56:9901/tsfile/live/0128_1.m3u8?key=txiptv +浙江卫视,http://183.3.134.56:9901/tsfile/live/0124_1.m3u8?key=txiptv +江苏卫视,http://183.3.134.56:9901/tsfile/live/0127_1.m3u8?key=txiptv +东方卫视,http://183.3.134.56:9901/tsfile/live/0107_1.m3u8?key=txiptv +安徽卫视,http://183.3.134.56:9901/tsfile/live/0130_1.m3u8?key=txiptv +北京卫视,http://183.3.134.56:9901/tsfile/live/0122_1.m3u8?key=txiptv +天津卫视,http://183.3.134.56:9901/tsfile/live/0135_1.m3u8?key=txiptv +山东卫视,http://183.3.134.56:9901/tsfile/live/0131_1.m3u8?key=txiptv +江西卫视,http://183.3.134.56:9901/tsfile/live/0138_1.m3u8?key=txiptv +深圳卫视,http://183.3.134.56:9901/tsfile/live/0126_1.m3u8?key=txiptv +湖北卫视,http://183.3.134.56:9901/tsfile/live/0132_1.m3u8?key=txiptv +辽宁卫视,http://183.3.134.56:9901/tsfile/live/0121_1.m3u8?key=txiptv +黑龙江卫视,http://183.3.134.56:9901/tsfile/live/0143_1.m3u8?key=txiptv +贵州卫视,http://183.3.134.56:9901/tsfile/live/0120_1.m3u8?key=txiptv +四川卫视,http://183.3.134.56:9901/tsfile/live/0123_1.m3u8?key=txiptv +河南卫视,http://183.3.134.56:9901/tsfile/live/0139_1.m3u8?key=txiptv +云南卫视,http://183.3.134.56:9901/tsfile/live/0119_1.m3u8?key=txiptv +广西卫视,http://183.3.134.56:9901/tsfile/live/0113_1.m3u8?key=txiptv +吉林卫视,http://183.3.134.56:9901/tsfile/live/0116_1.m3u8?key=txiptv +陕西卫视,http://183.3.134.56:9901/tsfile/live/0136_1.m3u8?key=txiptv +山西卫视,http://183.3.134.56:9901/tsfile/live/0118_1.m3u8?key=txiptv +内蒙古卫视,http://183.3.134.56:9901/tsfile/live/0109_1.m3u8?key=txiptv +青海卫视,http://183.3.134.56:9901/tsfile/live/0140_1.m3u8?key=txiptv + + + +湖南卫视,http://4170.hsmedia.top:8080/newlive/live/hls/18/live.m3u8 +东方卫视,http://4170.hsmedia.top:8080/newlive/live/hls/19/live.m3u8 +江苏卫视,http://4170.hsmedia.top:8080/newlive/live/hls/20/live.m3u8 +北京卫视,http://4170.hsmedia.top:8080/newlive/live/hls/21/live.m3u8 +深圳卫视,http://4170.hsmedia.top:8080/newlive/live/hls/22/live.m3u8 +广东卫视,http://4170.hsmedia.top:8080/newlive/live/hls/23/live.m3u8 +天津卫视,http://4170.hsmedia.top:8080/newlive/live/hls/24/live.m3u8 +山东卫视,http://4170.hsmedia.top:8080/newlive/live/hls/25/live.m3u8 +湖北卫视,http://4170.hsmedia.top:8080/newlive/live/hls/26/live.m3u8 +黑龙江卫视,http://4170.hsmedia.top:8080/newlive/live/hls/27/live.m3u8 +重庆卫视,http://4170.hsmedia.top:8080/newlive/live/hls/28/live.m3u8 +辽宁卫视,http://4170.hsmedia.top:8080/newlive/live/hls/29/live.m3u8 +安徽卫视,http://4170.hsmedia.top:8080/newlive/live/hls/30/live.m3u8 +江西卫视,http://4170.hsmedia.top:8080/newlive/live/hls/31/live.m3u8 +河南卫视,http://4170.hsmedia.top:8080/newlive/live/hls/32/live.m3u8 +四川卫视,http://4170.hsmedia.top:8080/newlive/live/hls/33/live.m3u8 +东南卫视,http://4170.hsmedia.top:8080/newlive/live/hls/34/live.m3u8 +广西卫视,http://4170.hsmedia.top:8080/newlive/live/hls/35/live.m3u8 +河北卫视,http://4170.hsmedia.top:8080/newlive/live/hls/36/live.m3u8 +山西卫视,http://4170.hsmedia.top:8080/newlive/live/hls/37/live.m3u8 +陕西卫视,http://4170.hsmedia.top:8080/newlive/live/hls/38/live.m3u8 +贵州卫视,http://4170.hsmedia.top:8080/newlive/live/hls/39/live.m3u8 +青海卫视,http://4170.hsmedia.top:8080/newlive/live/hls/40/live.m3u8 +宁夏卫视,http://4170.hsmedia.top:8080/newlive/live/hls/41/live.m3u8 +甘肃卫视,http://4170.hsmedia.top:8080/newlive/live/hls/42/live.m3u8 +吉林卫视,http://4170.hsmedia.top:8080/newlive/live/hls/43/live.m3u8 +海南卫视,http://4170.hsmedia.top:8080/newlive/live/hls/44/live.m3u8 +内蒙古卫视,http://4170.hsmedia.top:8080/newlive/live/hls/45/live.m3u8 +新疆卫视,http://4170.hsmedia.top:8080/newlive/live/hls/46/live.m3u8 +西藏卫视,http://4170.hsmedia.top:8080/newlive/live/hls/47/live.m3u8 +云南卫视,http://4170.hsmedia.top:8080/newlive/live/hls/48/live.m3u8 +兵团卫视,http://4170.hsmedia.top:8080/newlive/live/hls/49/live.m3u8 +优漫宝贝,http://4170.hsmedia.top:8080/newlive/live/hls/50/live.m3u8 +北京少儿,http://4170.hsmedia.top:8080/newlive/live/hls/51/live.m3u8 +优漫卡通,http://4170.hsmedia.top:8080/newlive/live/hls/52/live.m3u8 +金鹰卡通,http://4170.hsmedia.top:8080/newlive/live/hls/53/live.m3u8 +动漫,http://4170.hsmedia.top:8080/newlive/live/hls/54/live.m3u8 +嘉佳卡通,http://4170.hsmedia.top:8080/newlive/live/hls/55/live.m3u8 +哈哈优漫,http://4170.hsmedia.top:8080/newlive/live/hls/56/live.m3u8 +黑莓动画,http://4170.hsmedia.top:8080/newlive/live/hls/57/live.m3u8 +电影,http://4170.hsmedia.top:8080/newlive/live/hls/58/live.m3u8 +电影2,http://4170.hsmedia.top:8080/newlive/live/hls/59/live.m3u8 +电视剧,http://4170.hsmedia.top:8080/newlive/live/hls/60/live.m3u8 +军事,http://4170.hsmedia.top:8080/newlive/live/hls/61/live.m3u8 +电视剧2,http://4170.hsmedia.top:8080/newlive/live/hls/63/live.m3u8 +IHOT动漫,http://4170.hsmedia.top:8080/newlive/live/hls/65/live.m3u8 +IHOT科幻,http://4170.hsmedia.top:8080/newlive/live/hls/66/live.m3u8 + + + +江苏卫视,https://tv.cry33.com/jstv.php?id=jsws +浙江卫视,https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8 +河南卫视,https://tv.cry33.com/hn.php?id=hnws +河北卫视,http://tv.pull.hebtv.com/jishi/weishipindao.m3u8?t=2510710360&k=f1b16a3a3866dafecb94ec2bb4160e58 + http://tv.pull.hebtv.com/jishi/weishipindao.flv?t=2510710360&k=689e494c226aa7038632a897aa3dbd27 + rtmp://tv.pull.hebtv.com/jishi/weishipindao?t=2510710360&k=6cdf3c059a496f8c8375f86e1fb53346 +山东卫视,http://livealone.iqilu.com/iqilu/sdtvhjOF03kn.m3u8 +宁夏卫视,https://hls.ningxiahuangheyun.com/live/nxws1M.m3u8 +甘肃卫视,https://hlss.gstv.com.cn/49048r/y3nga4.flv +甘肃卫视,rtmp://livein.gstv.com.cn/49048r/y3nga4 +内蒙古卫视,https://livestream-bt.nmtv.cn/nmtv/2314general.m3u8?txSecret=dc348a27bd36fe1bd63562af5e7269ea&txTime=771EF880 +西藏卫视,https://tv.cry33.com/xizang.php?id=0 +西藏卫视,http://php.jdshipin.com:8880/xztv.php?id=ws +人间卫视,http://61.216.67.119:1935/bltvhd/bltv1/chunklist_w1266569526.m3u8 +香港卫视,http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8 +香港卫视,http://zhibo.hkstv.tv/livestream/mutfysrq.flv +香港卫视文旅台,http://ali-play.lezhibo.com/lezhibo/6ad788f1bbab4c689ecdc0d64a1e1601.m3u8 +安多卫视,http://stream.qhbtv.com/adws/sd/live.m3u8 +延边卫视,http://live.ybtvyun.com/video/s10006-44f040627ca1/index.m3u8 +澳亚卫视,https://live.mastvnet.com/lsdream/lY44pmm/2000/live.m3u8 + + + +北京卫视,http://1.24.190.98:10080/hls/68/index.m3u8 +东方卫视,http://1.24.190.98:10080/hls/66/index.m3u8 +江苏卫视,http://1.24.190.98:10080/hls/61/index.m3u8 +湖南卫视,http://1.24.190.98:10080/hls/60/index.m3u8 +深圳卫视,http://1.24.190.98:10080/hls/76/index.m3u8 +广东卫视,http://1.24.190.98:10080/hls/79/index.m3u8 +湖北卫视,http://1.24.190.98:10080/hls/65/index.m3u8 +天津卫视,http://1.24.190.98:10080/hls/69/index.m3u8 +河北卫视,http://1.24.190.98:10080/hls/78/index.m3u8 +贵州卫视,http://1.24.190.98:10080/hls/91/index.m3u8 +黑龙江视,http://1.24.190.98:10080/hls/70/index.m3u8 +辽宁卫视,http://1.24.190.98:10080/hls/72/index.m3u8 +山东卫视,http://1.24.190.98:10080/hls/83/index.m3u8 +安徽卫视,http://1.24.190.98:10080/hls/85/index.m3u8 +四川卫视,http://1.24.190.98:10080/hls/86/index.m3u8 +海南卫视,http://1.24.190.98:10080/hls/99/index.m3u8 +内蒙古卫视,http://1.24.190.98:10080/hls/31/index.m3u8 +东南卫视,http://1.24.190.98:10080/hls/88/index.m3u8 +兵团卫视,http://1.24.190.98:10080/hls/89/index.m3u8 +广西卫视,http://1.24.190.98:10080/hls/90/index.m3u8 +云南卫视,http://1.24.190.98:10080/hls/92/index.m3u8 +宁夏卫视,http://1.24.190.98:10080/hls/93/index.m3u8 +吉林卫视,http://1.24.190.98:10080/hls/71/index.m3u8 +青海卫视,http://1.24.190.98:10080/hls/96/index.m3u8 + + + +北京卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.241:8000 +东方卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.136:8032 +浙江卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.137:8036 +江苏卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.135:8028 +湖南卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.132:8012 +深圳卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.134:8020 +广东卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.142:8048 +安徽卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.211:8064 +天津卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.141:1234 +重庆卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.122:8160 +山东卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.209:8052 +黑龙江视,http://www.liruixiang.cc:9000/rtp/239.3.1.133:8016 +河北卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.148:8072 +辽宁卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.210:8056 +湖北卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.138:8044 +吉林卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.240:8172 +贵州卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.149:8076 +东南卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.156:8148 +江西卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.123:8164 +海南卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.45:8304 +云南卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.26:8108 +兵团卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.144:4120 +厦门卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.143:4120 +四川卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.29:8288 +南方卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.161:8001 +宁夏卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.46:8124 +山西卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.42:8172 +广西卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.39:8300 +新疆卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.48:8160 +河南卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.27:8128 +甘肃卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.49:8188 +西藏卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.47:8164 +三沙卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.155:4120 +陕西卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.41:8140 +青海卫视,http://www.liruixiang.cc:9000/rtp/239.3.1.44:8184 +内蒙古视,http://www.liruixiang.cc:9000/rtp/239.3.1.43:8176 + + +北京卫视,http://fxgm.fxjf.work:19901/tsfile/live/0122_1.m3u8 +浙江卫视,http://fxgm.fxjf.work:19901/tsfile/live/0124_1.m3u8 +江苏卫视,http://fxgm.fxjf.work:19901/tsfile/live/0127_1.m3u8 +湖南卫视,http://fxgm.fxjf.work:19901/tsfile/live/0128_1.m3u8 +深圳卫视,http://fxgm.fxjf.work:19901/tsfile/live/0126_1.m3u8 +广东卫视,http://fxgm.fxjf.work:19901/tsfile/live/0125_1.m3u8 +天津卫视,http://fxgm.fxjf.work:19901/tsfile/live/0135_1.m3u8 +安徽卫视,http://fxgm.fxjf.work:19901/tsfile/live/0130_1.m3u8 +贵州卫视,http://fxgm.fxjf.work:19901/tsfile/live/0120_1.m3u8 +山东卫视,http://fxgm.fxjf.work:19901/tsfile/live/0131_1.m3u8 +山西卫视,http://fxgm.fxjf.work:19901/tsfile/live/0118_1.m3u8 +广西卫视,http://fxgm.fxjf.work:19901/tsfile/live/0113_1.m3u8 +湖北卫视,http://fxgm.fxjf.work:19901/tsfile/live/0132_1.m3u8 +江西卫视,http://fxgm.fxjf.work:19901/tsfile/live/0138_1.m3u8 +河北卫视,http://fxgm.fxjf.work:19901/tsfile/live/0117_1.m3u8 +河南卫视,http://fxgm.fxjf.work:19901/tsfile/live/0139_1.m3u8 +四川卫视,http://fxgm.fxjf.work:19901/tsfile/live/0123_1.m3u8 +重庆卫视,http://fxgm.fxjf.work:19901/tsfile/live/0142_1.m3u8 +东南卫视,http://fxgm.fxjf.work:19901/tsfile/live/0137_1.m3u8 +青海卫视,http://fxgm.fxjf.work:19901/tsfile/live/0140_1.m3u8 +云南卫视,http://fxgm.fxjf.work:19901/tsfile/live/0119_1.m3u8 +辽宁卫视,http://fxgm.fxjf.work:19901/tsfile/live/0121_1.m3u8 +陕西卫视,http://fxgm.fxjf.work:19901/tsfile/live/0136_1.m3u8 +内蒙古视,http://fxgm.fxjf.work:19901/tsfile/live/0109_1.m3u8 +宁夏卫视,http://fxgm.fxjf.work:19901/tsfile/live/0112_1.m3u8 +吉林卫视,http://fxgm.fxjf.work:19901/tsfile/live/0116_1.m3u8 +新疆卫视,http://fxgm.fxjf.work:19901/tsfile/live/0110_1.m3u8 +甘肃卫视,http://fxgm.fxjf.work:19901/tsfile/live/0141_1.m3u8 +西藏卫视,http://fxgm.fxjf.work:19901/tsfile/live/0111_1.m3u8 +黑龙江视,http://fxgm.fxjf.work:19901/tsfile/live/0143_1.m3u8 +厦门卫视,http://fxgm.fxjf.work:19901/tsfile/live/0129_1.m3u8 +兵团卫视,http://fxgm.fxjf.work:19901/tsfile/live/0115_1.m3u8 +海南卫视,http://fxgm.fxjf.work:19901/tsfile/live/1010_1.m3u8 +延边卫视,http://fxgm.fxjf.work:19901/tsfile/live/1011_1.m3u8 + + +北京卫视,http://nas.8211321.com:5555/rtp/239.61.2.32:8186 +东方卫视,http://nas.8211321.com:5555/rtp/239.61.2.28:8162 +湖南卫视,http://nas.8211321.com:5555/rtp/239.61.2.31:8180 +江苏卫视,http://nas.8211321.com:5555/rtp/239.61.2.30:8174 +浙江卫视,http://nas.8211321.com:5555/rtp/239.61.2.29:8168 +安徽卫视,http://nas.8211321.com:5555/rtp/239.61.2.248:9476 +天津卫视,http://nas.8211321.com:5555/rtp/239.61.2.180:9068 +深圳卫视,http://nas.8211321.com:5555/rtp/239.61.3.46:9794 +广东卫视,http://nas.8211321.com:5555/rtp/239.61.2.33:8192 +河北卫视,http://nas.8211321.com:5555/rtp/239.61.2.57:8336 +山东卫视,http://nas.8211321.com:5555/rtp/239.61.2.119:8708 +湖北卫视,http://nas.8211321.com:5555/rtp/239.61.2.120:8714 +黑龙江卫视,http://nas.8211321.com:5555/rtp/239.61.2.34:8198 +贵州卫视,http://nas.8211321.com:5555/rtp/239.61.2.159:8942 +四川卫视,http://nas.8211321.com:5555/rtp/239.61.2.251:9494 +江西卫视,http://nas.8211321.com:5555/rtp/239.61.2.182:9080 +辽宁卫视,http://nas.8211321.com:5555/rtp/239.61.2.181:9074 +重庆卫视,http://nas.8211321.com:5555/rtp/239.61.2.250:9488 +东南卫视,http://nas.8211321.com:5555/rtp/239.61.2.132:8708 +海峡卫视,http://nas.8211321.com:5555/rtp/239.61.2.151:8894 +厦门卫视,http://nas.8211321.com:5555/rtp/239.61.2.11:8060 +云南卫视,http://nas.8211321.com:5555/rtp/239.61.2.61:8360 +河南卫视,http://nas.8211321.com:5555/rtp/239.61.2.59:8348 +海南卫视,http://nas.8211321.com:5555/rtp/239.61.2.42:8246 +广西卫视,http://nas.8211321.com:5555/rtp/239.61.2.48:8282 +陕西卫视,http://nas.8211321.com:5555/rtp/239.61.2.38:8222 +青海卫视,http://nas.8211321.com:5555/rtp/239.61.2.60:8354 +宁夏卫视,http://nas.8211321.com:5555/rtp/239.61.2.56:8330 +中国教育-1,http://nas.8211321.com:5555/rtp/239.61.2.167:8990 +纪实人文,http://nas.8211321.com:5555/rtp/239.61.2.165:8978 +中国教育-2,http://nas.8211321.com:5555/rtp/239.61.3.6:9554 +中国气像,http://nas.8211321.com:5555/rtp/239.61.2.64:8378 +金鹰卡通,http://nas.8211321.com:5555/rtp/239.61.2.221:9314 +卡酷少儿,http://nas.8211321.com:5555/rtp/239.61.2.222:9320 +吉林卫视,http://nas.8211321.com:5555/rtp/239.61.2.223:9326 +山西卫视,http://nas.8211321.com:5555/rtp/239.61.2.224:9332 +甘肃卫视,http://nas.8211321.com:5555/rtp/239.61.2.225:9338 +内蒙古卫视,http://nas.8211321.com:5555/rtp/239.61.2.226:9344 +新疆卫视,http://nas.8211321.com:5555/rtp/239.61.2.227:9350 +兵团卫视,http://nas.8211321.com:5555/rtp/239.61.2.228:9356 +西藏卫视,http://nas.8211321.com:5555/rtp/239.61.2.229:9362 +大湾区卫视,http://nas.8211321.com:5555/rtp/239.61.3.5:9548 + +龍🐉卫视二,#genre# +浙江卫视,https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8 +东方卫视,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel26/1300.m3u8 +江苏卫视,http://116.162.6.192/4403-txt.otvstream.otvcloud.com/otv/skcc/live/channel18/1300.m3u8 +山西卫视,http://liveflash.sxrtv.com/live/sxwshd.m3u8?sub_m3u8=true&edge_slice=true +海南卫视,https://live3.hnntv.cn/srs/tv/lywsgq.m3u8 +河南卫视,https://tv.cry33.com/hn.php?id=hnws +河北卫视,http://tv.pull.hebtv.com/jishi/weishipindao.m3u8?t=2510710360&k=f1b16a3a3866dafecb94ec2bb4160e58 +河北卫视,http://tv.pull.hebtv.com/jishi/weishipindao.flv?t=2510710360&k=689e494c226aa7038632a897aa3dbd27#rtmp://tv.pull.hebtv.com/jishi/weishipindao?t=2510710360&k=6cdf3c059a496f8c8375f86e1fb53346 +山东卫视,http://livealone.iqilu.com/iqilu/sdtvhjOF03kn.m3u8 +宁夏卫视,https://hls.ningxiahuangheyun.com/live/nxws1M.m3u8 +甘肃卫视,https://hlss.gstv.com.cn/49048r/y3nga4.flv#rtmp://livein.gstv.com.cn/49048r/y3nga4 +三沙卫视,https://live3.hnntv.cn/srs/tv/ssws.m3u8 +厦门卫视,http://61.54.14.232:9801/tsfile/live/1046_1.m3u8 +内蒙古卫视,https://livestream-bt.nmtv.cn/nmtv/2314general.m3u8?txSecret=dc348a27bd36fe1bd63562af5e7269ea&txTime=771EF880 +西藏卫视,https://tv.cry33.com/xizang.php?id=0 +香港卫视,http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8 +香港卫视,http://zhibo.hkstv.tv/livestream/mutfysrq.flv +香港卫视,http://stream.qhbtv.com/adws/sd/live.m3u8 +延边卫视,http://live.ybtvyun.com/video/s10006-44f040627ca1/index.m3u8 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8 +凤凰中文,http://113.64.145.132:8081/hls/37/index.m3u8 +凤凰资讯,http://116.162.6.191/zycfcdn.gdwlcloud.com/PLTV/88888888/224/3221226320/index.m3u8 +凤凰资讯,http://113.64.145.229:8081/hls/36/index.m3u8 +凤凰资讯,http://php.jdshipin.com:8880/jydx.php?id=36 +凤凰香港,http://113.64.145.132:8081/hls/38/index.m3u8 +重温经典[5m768*576],http://117.114.153.25:8180/TV00000000000000000007@HHZT?$京移5M576 +星空卫视[3M1024*576],http://117.114.153.25:8180/TV00000000000000000071@HHZT + +龍🐉地方台,#genre# +荆州公共,http://jingzhou-live21.cjyun.org/10085/s10085-jingzhou-tv02.m3u8?auth_key=1735660799-0-0-1963c999651ea135890d90bcc5ae172d +荆州陇上,http://jingzhou-live21.cjyun.org/10085/s10085-jingzhou-tv03.m3u8?auth_key=1735660799-0-0-73625822ff2c77aefa1589e94281edad +荆州综合,http://jingzhou-live21.cjyun.org:80/10085/s10085-jingzhou-tv01.m3u8?auth_key=1735660799-0-0-e0477d4b5bc584e7518a1bde13892cbe +十堰新闻,http://p8.vzan.com/slowlive/034028687228317362/live.m3u8 +十堰经济,https://p8.vzan.com/slowlive/701367497774448672/live.m3u8 +荆门新闻,http://stream.jmtv.com.cn/xwzh/sd/live.m3u8?zhubd +荆门教育,http://stream.jmtv.com.cn/ggsh/sd/live.m3u8 +江夏新闻,http://59.175.226.142:280/gb28181/xwzh.m3u8?zhubd +麻城综合,http://119.36.30.199:8888/mctv1.m3u8 +武汉新闻,http://stream.appwuhan.com/1tzb/sd/live.m3u8 +武汉生活,http://stream.appwuhan.com/3tzb/sd/live.m3u8 +武汉经济,http://stream.appwuhan.com/4tzb/sd/live.m3u8 +武汉教育,http://stream.appwuhan.com/jyzb/sd/live.m3u8 +荆门新闻,http://stream.jmtv.com.cn/xwzh/sd/live.m3u8 +荆门教育,http://stream.jmtv.com.cn/ggsh/sd/live.m3u8 + + + +七星关台,https://p8.vzan.com:443/slowlive/147077707554082780/live.m3u8 +道真新闻,http://live.dzrmtzx.org.cn:90/live/dspd_1M.m3u8 +松桃新闻,http://live.strmtz8x.cn/stxw/sd/live.m3u8 +浙江公共,https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8 +浙江国际,https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8 +浙江少儿,https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8 +浙江教科,https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8 +浙江数码,https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8 +浙江民生,https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8 +浙江经济,https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8 +浙江钱江,https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8 + +南宁新闻,https://hls.nntv.cn/nnlive/XWZH_24.m3u8 +南宁公共,https://hls.nntv.cn/nnlive/GGPD_24.m3u8 +南宁文旅,https://hls.nntv.cn/nnlive/WLSH_24.m3u8 +南宁影院,https://hls.nntv.cn/nnlive/YSYL_24.m3u8 +苏州频道,http://tylive.kan0512.com/norecord/norecord_csztv2.m3u8 +石家庄新,http://pluslive1.sjzntv.cn/xmzh/playlist.m3u8 +石家庄娱,http://pluslive1.sjzntv.cn/yule/playlist.m3u8 +石家庄生,http://pluslive1.sjzntv.cn/shenghuo/playlist.m3u8 +石家庄都,http://pluslive1.sjzntv.cn/dushi/playlist.m3u8 +保定新闻,http://jwcdnqx.hebyun.com.cn/live/jybd/1500k/tzwj_video.m3u8 +保定生活,http://jwcdnqx.hebyun.com.cn/live/bddst/1500k/tzwj_video.m3u8 +保定公共,http://jwcdnqx.hebyun.com.cn/live/bdxw1/1500k/tzwj_video.m3u8 +定州新闻,https://jwliveqxzb.hebyun.com.cn/xxzhpd/xxzhpd.m3u8 +定州生活,https://jwliveqxzb.hebyun.com.cn/shpd/shpd.m3u8 +定州影院,https://jwliveqxzb.hebyun.com.cn/yspd/yspd.m3u8 + +余杭综合,http://l.cztvcloud.com/channels/lantian/SXyuhang1/720p.m3u8?zzhed +伊犁汉语,http://110.153.180.106:55555/out_1/index.m3u8 +浙江新闻,http://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8 +浙江钱江,http://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8 +浙江综合,http://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8 +yMG新闻,http://l.cztvcloud.com/channels/lantian/SXyuhang1/720p.m3u8 +嵊州新闻,http://l.cztvcloud.com/channels/lantian/SXshengzhou1/720p.m3u8?zzhed +上虞新闻,http://l.cztvcloud.com/channels/lantian/SXshangyu1/720p.m3u8?zzhed +上虞新商,http://l.cztvcloud.com/channels/lantian/SXshangyu3/720p.m3u8?zzhed +兰溪综合,http://l.cztvcloud.com/channels/lantian/SXlanxi1/720p.m3u8?zzhed +高平综合,http://live.gprmt.cn/gpnews/hd/live.m3u8 +吉县综合,http://jxlive.jxrmtzx.com:8091/live/xwzh.m3u8 +宜春综合,https://live.newsyc.com/ycyt/sd/live.m3u8 +清河经济,https://jwcdnqx.hebyun.com.cn/live/qinghe1/1500k/tzwj_video.m3u8 +清河新闻,https://jwcdnqx.hebyun.com.cn/live/qinghe/1500k/tzwj_video.m3u8 +平泉影院,https://jwliveqxzb.hebyun.com.cn/pqys/pqys.m3u8 +平泉综合,https://jwliveqxzb.hebyun.com.cn/pqzh/pqzh.m3u8 +承德公共,https://jwliveqxzb.hebyun.com.cn/cdsggshtv/cdsggshtv.m3u8 +承德新闻,https://jwliveqxzb.hebyun.com.cn/cdsxwzhtv/cdsxwzhtv.m3u8 +邯郸新闻,https://jwliveqxzb.hebyun.com.cn/hdxwzh/hdxwzh.m3u8 +邯郸公共,https://jwliveqxzb.hebyun.com.cn/hdgg/hdgg.m3u8 +邯郸科教,https://jwliveqxzb.hebyun.com.cn/hdkj/hdkj.m3u8 +石家庄闻,http://pluslive1.sjzntv.cn/xmzh/playlist.m3u8 +石家庄乐,http://pluslive1.sjzntv.cn/yule/playlist.m3u8 +石家庄活,http://pluslive1.sjzntv.cn/shenghuo/playlist.m3u8 +石家庄市,http://pluslive1.sjzntv.cn/dushi/playlist.m3u8 +望都综合,https://jwliveqxzb.hebyun.com.cn/wddst/wddst.m3u8 +兴隆影院,https://jwcdnqx.hebyun.com.cn/live/xlys/1500k/tzwj_video.m3u8 +兴隆综合,https://jwcdnqx.hebyun.com.cn/live/xlzh/1500k/tzwj_video.m3u8 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8 +安多卫视,http://stream.qhbtv.com/adws/sd/live.m3u8 +青海经视,http://stream.qhbtv.com/qhsh/sd/live.m3u8 +青海都市,http://stream.qhbtv.com/qhds/sd/live.m3u8 +石嘴山台,https://1972762460.cloudvdn.com/a.m3u8?domain=pili-live-hls-jrszs.szsnews.com&player=3QgAAE_-GGPN1qYX&secondToken=secondToken%3Ad3Hr2WvLUboLu5N3J4fOPjSY3XQ&streamid=jrszs%3Ajrszs%2Fggpd&v3=1 +河北都市,http://tv.pull.hebtv.com/jishi/dushipindao.m3u8?t=2510710360&k=0a371e84fa6980927f5b617687e1ad11 +兵团卫视,http://mobilelive-ds.ysp.cctv.cn/ysp/2022606701.m3u8 +兵团卫视,http://mobilelive-ds.ysp.cctv.cn/ysp/2022606701_fhd.m3u8 +兵团卫视,http://1.62.64.76/1.v.smtcdns.net/mobilelive-pull.ysp.cctv.cn/ysp/2022606701.m3u8 + +十堰新闻,http://p8.vzan.com/slowlive/034028687228317362/live.m3u8 +武汉生活,http://stream.appwuhan.com/3tzb/sd/live.m3u8 +深圳都市,http://livepull-tcyzb.sztv.com.cn/live/dushi01.m3u8#http://livepull-tcyzb.sztv.com.cn/showto_live/dushi01.m3u8 +深圳都市,http://livepull-tcyzb.sztv.com.cn/showto_live/dushi01.m3u8 +广东文化,https://glive.grtn.cn/live/wenhua_test0203.m3u8 +青海综合,http://lmt.scqstv.com/live1/live1.m3u8 +青海都市,http://stream.qhbtv.com/qhds/playlist.m3u8 +绍兴公共,http://live.shaoxing.com.cn/video/s10001-sxtv2/index.m3u8?zzhed +延边频道,http://live.ybtvyun.com/video/s10006-44f040627ca1/index.m3u8 +青海频道,http://stream.qhbtv.com/qhws/sd/live.m3u8 +都市频道,http://livepull-tcyzb.sztv.com.cn:80/live/dushi01.m3u8 +桂林新闻,https://pull.gltvs.com:443/live/glxw/playlist.m3u8?v=b0528684bf934e120e1c30fc808e6576&t=1796868188 +河北卫视,http://tv.pull.hebtv.com/jishi/weishipindao.m3u8?t=2510710360&k=3944fff7fdd8f8caf6adce2c9a0ef126 +石家庄市,http://pluslive1.sjzntv.cn/dushi/playlist.m3u8?zhebd +邯郸新闻,https://jwliveqxzb.hebyun.com.cn/hdxwzh/hdxwzh.m3u8 +唐河一套,http://tvpull.dxhmt.cn:9081/tv/11328-1.m3u8?zhend#http://tvpull.dxhmt.cn:9081/tv/11328-1.m3u8 +苏州新闻,http://tylive.kan0512.com/norecord/norecord_csztv1.m3u8 +枣庄新闻,http://stream.zztvzd.com/1/sd/live.m3u8?shandd +三明公共,http://stream.smntv.cn/smtv2/sd/live.m3u8 +漳州新闻,http://31182.hlsplay.aodianyun.com/lms_31182/tv_channel_175.m3u8 +广西贺州,http://zhz.gxhzxw.com:2935/live/HZXW-HD/chunklist.m3u8 +山西经济,http://liveflash.sxrtv.com/live/sxfinance.m3u8?sub_m3u8=true&edge_slice=true +延边卫视,http://live.ybtvyun.com/video/s10016-6f0dfd97912f/index.m3u8?zjild +万州综合,http://123.146.162.24:8017/iTXwrGs/800/live.m3u8?zzhongqd +卡拉玛依,http://klmysjtzb.rcsxzx.com/hls/klmy1.m3u8 +卡拉玛维,http://klmysjtzb.rcsxzx.com/hls/klmy2.m3u8 +伊犁汉语,http://110.153.180.106:55555/out_1/index.m3u8 +伊犁维语,http://110.153.180.106:55555/out_2/index.m3u8 +伊犁哈语,http://110.153.180.106:55555/out_3/index.m3u8 +伊犁经济,http://110.153.180.106:55555/out_4/index.m3u8 + +义乌新闻综合,https://44911.hlsplay.aodianyun.com/tv_radio_44911/tv_channel_1796.m3u8?auth_key=4830573978-0-0-92824c2c03f95906a3c49a4aa28f1709&extra_key=Yc1XsmxOKy2UBoPM4Wy5vCPsEYqnj06taCR2SRB2Xrg2w28NPilH03KdIbbM5wgSql-VBohSnoO9AOKl94q2t2DWMftz-XB-2qUX-UjXcS80StcSZahBFjrKLivXaRjiY5r2NOMKWMKFbv-S0Bz2G6iEXgCK8yGjtrFHDcPfAQEE0pvXq0Bwy34b7We8zARN&ali_ffmpeg_version=mpengine +浙江钱江都市,http://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8 +浙江经济生活,http://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8 +浙江教科影院,http://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8 +浙江民生休闲,http://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8 +浙江新闻频道,http://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8 +浙江少儿频道,http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8 +中国蓝新闻台,http://ali-m-l.cztv.com/channels/lantian/channel009/1080p.m3u8 +浙江国际频道,http://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8 +数码时代频道,http://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8 +武义新闻综合,http://l.cztvcloud.com/channels/lantian/SXwuyi1/720p.m3u8?zzhed +平湖新闻综合,http://l.cztvcloud.com/channels/lantian/SXpinghu1/720p.m3u8?zzhed +平湖民生休闲,http://l.cztvcloud.com/channels/lantian/SXpinghu2/720p.m3u8?zzhed +萧山新闻综合,http://l.cztvcloud.com/channels/lantian/SXxiaoshan1/720p.m3u8?zzhed +萧山生活频道,http://l.cztvcloud.com/channels/lantian/SXxiaoshan2/720p.m3u8?zzhed +淳安电视频道,https://wtmtyoutlive.watonemt.com/f2p7vq/lf76v9.m3u8?zzhed +淳安电视频道,https://wtmtylive.yunshicloud.com/tbziu1/ad592j.m3u8?zzhed +余杭综合频道,http://l.cztvcloud.com/channels/lantian/SXyuhang1/720p.m3u8?zzhed +余杭未来频道,http://l.cztvcloud.com/channels/lantian/SXyuhang3/720p.m3u8?zzhed +余姚姚江文化,http://l.cztvcloud.com/channels/lantian/SXyuyao3/720p.m3u8?zzhed +嵊州新闻综合,http://l.cztvcloud.com/channels/lantian/SXshengzhou1/720p.m3u8?zzhed +嵊州新闻综合,https://hlsv2.quklive.com/live/1626935015913208/index.m3u8?zzhed +诸暨新闻综合,http://l.cztvcloud.com/channels/lantian/SXzhuji3/720p.m3u8?zzhed +上虞新闻综合,http://l.cztvcloud.com/channels/lantian/SXshangyu1/720p.m3u8?zzhed +上虞文化影院,http://l.cztvcloud.com/channels/lantian/SXshangyu2/720p.m3u8?zzhed +上虞新商都台,http://l.cztvcloud.com/channels/lantian/SXshangyu3/720p.m3u8?zzhed +海宁新闻综合,http://live.hndachao.cn/xwzh/sd/live.m3u8?zzhed +海宁生活服务,http://live.hndachao.cn/shfw/sd/live.m3u8?zzhed +兰溪新闻综合,http://l.cztvcloud.com/channels/lantian/SXlanxi1/720p.m3u8?zzhed +广东普宁频道,http://ci.emdoor.tech:8080/touchtv.php?pk=2450 +广东普宁频道,http://163.197.220.190:1354/itouchtv.php?id=pnzh + +方城一套台,http://tvpull.dxhmt.cn:9081/tv/11322-1.m3u8?zhend +扶沟综合频道,http://tvpull.dxhmt.cn:9081/tv/11621-1.m3u8?zhend +滑县新闻,http://tvpull.dxhmt.cn:9081/tv/10526-1.m3u8?zhend +济源电视一套,http://tvpull.dxhmt.cn:9081/tv/19001-1.m3u8?zhend +郏县综合频道,http://tvpull.dxhmt.cn:9081/tv/10425-1.m3u8?zhend +焦作公共频道,http://zhpull.dxhmt.cn/jiaozuo/29b65b69130c4ef1a3283cc7b913da05/playlist.m3u8?zhend +焦作教育频道,http://zhpull.dxhmt.cn/jiaozuo/9c10435ad24c409baee219ec289e17d0/playlist.m3u8?zhend +焦作综合频道,http://zhpull.dxhmt.cn/jiaozuo/b75a92c9503e47cf9e89f7ff247b65f2/playlist.m3u8?zhend +睛彩焦作频道,http://zhpull.dxhmt.cn/jiaozuo/c5eb91b47f0e42318f34fc0247c8acaa/playlist.m3u8?zhend +内黄综合频道,http://tvpull.dxhmt.cn:9081/tv/10527-1.m3u8?zhend +嵩县综合新闻,http://tvpull.dxhmt.cn:9081/tv/10325-1.m3u8?zhend +唐河一套,http://tvpull.dxhmt.cn:9081/tv/11328-1.m3u8?zhend +桐柏新闻综合,http://tvpull.dxhmt.cn:9081/tv/11330-1.m3u8?zhend +温县综合,http://tvpull.dxhmt.cn:9081/tv/10825-1.m3u8?zhend +西华综合频道,http://tvpull.dxhmt.cn:9081/tv/11622-1.m3u8?zhend +新安新闻综合,http://tvpull.dxhmt.cn:9081/tv/10323-1.m3u8?zhend +新野综合,http://tvpull.dxhmt.cn:9081/tv/11329-1.m3u8?zhend +荥阳综合,http://tvpull.dxhmt.cn:9081/tv/10182-1.m3u8?zhend +宜阳综合频道,http://tvpull.dxhmt.cn:9081/tv/10327-1.m3u8?zhend +禹州公共,http://tvpull.dxhmt.cn:9081/tv/11081-2.m3u8 +禹州公共,http://tvpull.dxhmt.cn/tv/11081-2.m3u8?zhend +禹州综合,http://tvpull.dxhmt.cn:9081/tv/11081-1.m3u8?zhend +宝丰综合频道,http://tvpull.dxhmt.cn:9081/tv/10421-1.m3u8?zhend +郏县综合频道,http://tvpull.dxhmt.cn:9081/tv/10425-1.m3u8?zhend +焦作综合频道,http://zhpull.dxhmt.cn/jiaozuo/b75a92c9503e47cf9e89f7ff247b65f2/playlist.m3u8?zhend +焦作公共频道,http://zhpull.dxhmt.cn/jiaozuo/29b65b69130c4ef1a3283cc7b913da05/playlist.m3u8?zhend +焦作教育频道,http://zhpull.dxhmt.cn/jiaozuo/9c10435ad24c409baee219ec289e17d0/playlist.m3u8?zhend +睛彩焦作频道,http://zhpull.dxhmt.cn/jiaozuo/c5eb91b47f0e42318f34fc0247c8acaa/playlist.m3u8?zhend +济源电视一套,http://tvpull.dxhmt.cn:9081/tv/19001-1.m3u8?zhend +荥阳综合,http://tvpull.dxhmt.cn:9081/tv/10182-1.m3u8?zhend +嵩县综合新闻,http://wshls.live.migucloud.com/live/MZCYG799_C0/playlist.m3u8?zhend +宜阳综合频道,http://tvpull.dxhmt.cn:9081/tv/10327-1.m3u8?zhend +温县综合,http://tvpull.dxhmt.cn:9081/tv/10825-1.m3u8?zhend +方城一套,http://tvpull.dxhmt.cn:9081/tv/11322-1.m3u8?zhend +卫辉综合频道,http://tvpull.dxhmt.cn:9081/tv/10781-1.m3u8?zhend +济源电视一套,http://tvpull.dxhmt.cn:9081/tv/19001-1.m3u8?zhend +荥阳综合,http://tvpull.dxhmt.cn:9081/tv/10182-1.m3u8?zhend +嵩县综合新闻,http://wshls.live.migucloud.com/live/MZCYG799_C0/playlist.m3u8?zhend +嵩县综合新闻,http://tvpull.dxhmt.cn:9081/tv/10325-1.m3u8?zhend +新安新闻综合,http://tvpull.dxhmt.cn:9081/tv/10323-1.m3u8?zhend +方城一套,http://tvpull.dxhmt.cn:9081/tv/11322-1.m3u8?zhend +桐柏新闻综合,http://tvpull.dxhmt.cn:9081/tv/11330-1.m3u8?zhend +唐河一套,http://tvpull.dxhmt.cn:9081/tv/11328-1.m3u8?zhend +新野综合,http://tvpull.dxhmt.cn:9081/tv/11329-1.m3u8?zhend +扶沟综合频道,http://tvpull.dxhmt.cn:9081/tv/11621-1.m3u8?zhend +鹿邑新闻频道,http://tvpull.dxhmt.cn:9081/tv/11628-1.m3u8?zhend +西华综合频道,http://tvpull.dxhmt.cn:9081/tv/11622-1.m3u8?zhend +新蔡综合,http://tvpull.dxhmt.cn:9081/tv/11729-1.m3u8?zhend +卫辉综合频道,http://tvpull.dxhmt.cn:9081/tv/10781-1.m3u8?zhend +灵宝新闻综合,http://tvpull.dxhmt.cn:9081/tv/11282-1.m3u8?zhend +滑县新闻,http://tvpull.dxhmt.cn:9081/tv/10526-1.m3u8?zhend +内黄综合频道,http://tvpull.dxhmt.cn:9081/tv/10527-1.m3u8?zhend +禹州综合,http://tvpull.dxhmt.cn:9081/tv/11081-1.m3u8?zhend +禹州公共,http://tvpull.dxhmt.cn:9081/tv/11081-2.m3u8 +禹州公共,http://tvpull.dxhmt.cn/tv/11081-2.m3u8?zhend + + + +龍🐉新电影,#genre# +🔥月球叛军2:烙印之人,https://yzzy1.play-cdn20.com/20240419/40338_63fcf195/index.m3u8 +月球叛军:火之女,https://v.cdnlz11.com/20231222/18799_a3ec4c15/index.m3u8 +🔥热辣滚烫,https://tudou.play-cdn23.com/20240418/9956_59649369/index.m3u8 +超能敢死队:冰封之城,https://hn.bfvvs.com/play/lej49j5b/index.m3u8 +戏杀,https://hdzy.play-cdn23.com/20240410/3791_86c4e20a/index.m3u8 +🔥破毒行动,https://yzzy.play-cdn21.com/20240410/29382_b6fec4dc/index.m3u8 +🔥大“反”派,https://yzzy1.play-cdn20.com/20240412/35015_e7ba6c4e/index.m3u8 +🔥被我弄丢的你,https://yzzy.play-cdn21.com/20240412/31976_edf5c2e4/index.m3u8 +🔥人偶新娘,https://hdzy.play-cdn23.com/20240413/4007_9b4b57d9/index.m3u8 +🔥功夫熊猫4,https://yzzy.play-cdn21.com/20240410/29373_4da7f681/index.m3u8 +🔥哥斯拉大战金刚2:帝国崛起,https://leshiyuncdn.36s.top/20240328/WBcq2Xfp/index.m3u8 +🔥超意神探,https://v.cdnlz2.com/20240404/29406_adee19b4/index.m3u8 +蛇皮美人,https://leshiyuncdn.36s.top/20240404/Y1TNiu94/index.m3u8 +沙丘2,https://yzzy.play-cdn21.com/20240406/20152_6054e861/index.m3u8 +沙丘2,https://yzzy1.play-cdn20.com/20240307/19086_a0fef1f2/index.m3u8 +狂暴巨蜥,https://v.cdnlz12.com/20240327/13508_eaee7b94/index.m3u8 +扫黑行动之黄金,https://v.cdnlz12.com/20240326/13458_d6285376/index.m3u8 +妖神令,https://v.cdnlz12.com/20240328/13574_081df2fa/index.m3u8 +天地正气,https://v.cdnlz12.com/20240324/13368_682d336b/index.m3u8 +除暴安良,https://v.cdnlz7.com/20240302/16255_e02cc774/index.m3u8 +最后的法师,https://v.cdnlz11.com/20231112/18264_bf1bd3e6/index.m3u8 +第三个嫌疑人,https://v.cdnlz12.com/20240324/13369_6e36581e/index.m3u8 +新威龙杀阵,https://v.cdnlz12.com/20240321/13258_0f96066a/index.m3u8 +龙狱天棺,https://yzzy.play-cdn21.com/20240321/12261_976aa3bb/index.m3u8 +龙林逃生1,https://yzzy.play-cdn17.com/20230727/13244_9bc32f8c/index.m3u8 +龙林逃生2,https://yzzy.play-cdn21.com/20240321/12292_4b8671e9/index.m3u8 +国际空间站,https://v.cdnlz12.com/20230913/10341_d0be8370/index.m3u8 +十三太保之风云再起,https://s5.bfengbf.com/video/shisantaibaozhifengyunzaiqi/HD/index.m3u8 +罪恶名20202020单,https://vip.ffzy-play2.com/20240316/60003_d5b566e5/index.m3u8 +幽灵螳螂1,https://vip.lz-cdn3.com/20230213/17685_7205d5aa/index.m3u8 +幽灵螳螂2,https://s5.bfengbf.com/video/youlingtanglangIIzhitubian/HD/index.m3u8 +挑战2023,https://jx.sumun.cn/Vtche/LZ/466900376.m3u8 +怒潮2023,https://64.32.20.246/play/DdwzD5Mb/index.m3u8 +🔥新九品芝麻官2024,https://s5.bfengbf.com/video/xinjiupinzhimaguan2024/HD/index.m3u8 +弹头奇兵,https://yzzy.play-cdn21.com/20240318/12046_562785ce/index.m3u8 +[韩]破墓TC,https://s5.bfengbf.com/video/pomu/%E4%B8%AD%E5%AD%97/index.m3u8 +🔥潜行,https://yzzy1.play-cdn20.com/20240314/19480_87c97112/index.m3u8 +狂暴巨蜥,https://v.cdnlz12.com/20240327/13508_eaee7b94/index.m3u8 +扫黑行动之黄金,https://v.cdnlz12.com/20240326/13458_d6285376/index.m3u8 +妖神令,https://v.cdnlz12.com/20240328/13574_081df2fa/index.m3u8 +天地正气,https://v.cdnlz12.com/20240324/13368_682d336b/index.m3u8 +除暴安良,https://v.cdnlz7.com/20240302/16255_e02cc774/index.m3u8 +最后的法师,https://v.cdnlz11.com/20231112/18264_bf1bd3e6/index.m3u8 +第三个嫌疑人,https://v.cdnlz12.com/20240324/13369_6e36581e/index.m3u8 +🔥新威龙杀阵,https://v.cdnlz12.com/20240321/13258_0f96066a/index.m3u8 +🔥末日战士,https://v.cdnlz12.com/20240313/12834_ce325fe0/index.m3u8 +🔥周公伏妖,https://v.cdnlz12.com/20240313/12832_28e8b06c/index.m3u8 +🔥少女斗恶龙,https://v.cdnlz12.com/20240308/12567_d5565b64/index.m3u8 +🔥临时劫案,https://v.cdnlz12.com/20240306/12466_cad8e71b/2000k/hls/mixed.m3u8#https://yzzy.play-cdn19.com/20240306/22153_c54de4da/2000k/hls/mixed.m3u8 +🔥周处除三害,https://vip.ffzyread.com/20240301/24303_f0da8c06/2000k/hls/mixed.m3u8 +🔥陌路狂刀,https://v.cdnlz12.com/20240308/12526_77ee2ef5/2000k/hls/mixed.m3u8#https://yzzy1.play-cdn1.com/20240308/19202_84e12afe/2000k/hls/mixed.m3u8 +🔥聊斋志异之瞳人语,https://yzzy1.play-cdn20.com/20240305/18516_cd41cda3/2000k/hls/mixed.m3u8#https://hn.bfvvs.com/play/RdGJDE0b/index.m3u8 +🔥[智利]雕形拳,https://vip1.lz-cdn1.com/20230608/21094_b12a3627/2000k/hls/mixed.m3u8 +🔥热辣滚烫TC,https://vip.ffzy-online2.com/20240216/48497_7124419f/2000k/hls/mixed.m3u8#https://vip.ffzy-online2.com/20240216/48497_7124419f/index.m3u8 +🔥第二十条TC,https://v.cdnlz12.com/20240215/11572_dda99b8e/2000k/hls/mixed.m3u8 +🔥飞驰人生2TC,https://ikcdn01.ikzybf.com/20240212/jjCpFTXC/2000kb/hls/index.m3u8 +目中无人2,https://yzzy1.play-cdn1.com/20240210/15952_004b2a47/2000k/hls/index.m3u8 +战锋·尖峰对决,https://vip.ffzy-online6.com/20240221/26640_7e77660f/2000k/hls/index.m3u8 +惊天激战[美],https://v.cdnlz19.com/20240219/17331_1e41d0fd/2000k/hls/mixed.m3u8 +外星+人2[韩],https://v.cdnlz12.com/20240215/11573_4cb789fb/2000k/hls/mixed.m3u8 +破战,https://yzzy1.play-cdn20.com/20240216/17014_96791511/2000k/hls/mixed.m3u8 +金手指[国],https://ikcdn01.ikzybf.com/20240213/xZTh2qQA/2000kb/hls/index.m3u8 +金手指[粤],https://yzzy1.play-cdn1.com/20240213/16166_adb7cace/2000k/hls/index.m3u8 +缉恶,https://yzzy1.play-cdn1.com/20240212/16107_ce5c69e6/2000k/hls/index.m3u8 +狄仁杰之通天玄案,https://s.xlzys.com/play/BeXvzOlb/index.m3u8 +热血地雷战,https://s.xlzys.com/play/DbDDvWxb/index.m3u8#https://v11.suonizy-youku.com/202402/26/A8TWS7EeJe4/video/2000k_0X1080_64k_25/hls/index.m3u8 +古楼镇陵宫,https://v.cdnlz12.com/20240222/11772_cc17a068/2000k/hls/mixed.m3u8 +瞒天过海,https://hnzy.bfvvs.com/play/YerrBPke/index.m3u8 +非诚勿扰3,https://yzzy1.play-cdn20.com/20240210/16640_403958bf/2000k/hls/index.m3u8 +史上最强弟子,https://yzzy.play-cdn19.com/20240209/19332_06c6451f/2000k/hls/index.m3u8 +长津湖,https://s1.bfzycdn.com/video/changjinhu/HD%E5%9B%BD%E8%AF%AD/index.m3u8 +长津湖之水门桥,https://cdn17.yzzy-online.com/20230817/16230_2dbddb92/2000k/hls/index.m3u8 +一闪一闪亮星星,https://ikcdn01.ikzybf.com/20240213/vWZ9ePUu/2000kb/hls/index.m3u8 +照明商店,https://yzzy.play-cdn19.com/20240213/19794_4de23d38/2000k/hls/index.m3u8# +年会不能停,https://yzzy.play-cdn19.com/20240213/19788_da07138c/2000k/hls/index.m3u8 +北冥有鲲,https://vip.ffzy-online6.com/20240211/26120_e94353cd/2000k/hls/index.m3u8 +四平警事之钻石大劫案,https://v.cdnlz2.com/20240206/28771_69d6e63e/2000k/hls/mixed.m3u8 +露梁海战,https://v.cdnlz19.com/20240205/13018_c311202b/2000k/hls/mixed.m3u8 +黑白潜行,https://vip.ffzy-online6.com/20240204/25747_fb206ff2/2000k/hls/index.m3u8 +三大队,https://v.cdnlz2.com/20240201/28578_1ad90f25/2000k/hls/mixed.m3u8 +我本是高山,https://v.cdnlz12.com/20240128/11176_b475b264/2000k/hls/mixed.m3u8 +长白山猎人传说,https://vip.ffzy-online6.com/20240130/25459_dbbc3359/2000k/hls/index.m3u8 +[印]猛虎3,https://hnzy.bfvvs.com/play/Pdy4pmzb/index.m3u8 +[美]无法治愈,https://vip.lz-cdn3.com/20220624/8306_5b24c626/1000k/hls/mixed.m3u8 +[美]养蜂人抢先,https://www.yzzy.play-cdn20.com/20240130/14212_512dac09/2000k/hls/index.m3u8 +孤注一掷,https://v.cdnlz12.com/20240131/11213_0006f281/2000k/hls/mixed.m3u8 +大冒险王之金丝玉盘,https://hnzy.bfvvs.com/play/YerGjXpa/index.m3u8 +[国]爆裂点,https://v.cdnlz3.com/20240126/22924_311317eb/2000k/hls/mixed.m3u8 +[粤]爆裂点,https://v.cdnlz3.com/20240126/22925_ab576153/2000k/hls/mixed.m3u8 +[韩]荒野,https://v.cdnlz2.com/20240126/28294_cdfab943/2000k/hls/mixed.m3u8 +挡马夺刀,https://www.yzzy.play-cdn20.com/20240125/13928_02451c32/2000k/hls/index.m3u8 +速度与激情10,https://vip.lz-cdn3.com/20230609/19446_bd6c3340/2000k/hls/mixed.m3u8 +再见.李可乐,https://v.cdnlz12.com/20240124/11081_e095c299/2000k/hls/mixed.m3u8 +海王2.失落的王国,https://v.cdnlz12.com/20240123/11056_97ad71a3/2000k/hls/mixed.m3u8 +涉过愤怒的海,https://v.cdnlz3.com/20240112/22740_9e90a3db/2000k/hls/mixed.m3u8 +一击2.城市混战,https://cdn1.vip-vip-yzzy.com/20240112/11718_c34d3123/2000k/hls/index.m3u8 +刀尖,https://v.cdnlz12.com/20240117/11012_3f5cf514/2000k/hls/mixed.m3u8 +志愿军:雄兵出击,https://dghls.mcloud.139.com/hls/L1c36c04a53255f72579c1f62fe2ad8e1b/single/video/0/376/index.m3u8 +毒液2,https://vip.lzcdn2.com/20220530/7945_ffa14188/1200k/hls/mixed.m3u8 +西装暴徒,https://v.cdnlz3.com/20240118/22835_82f61c7e/2000k/hls/mixed.m3u8 +开国将帅授衔1955,https://cdn1.vip-vip-yzzy.com/20240113/12061_d95d9068/2000k/hls/index.m3u8 +粽邪3.鬼门开 ,https://ukzy.ukubf3.com/20231219/XiwVy98L/2000kb/hls/index.m3u8 +怪物,https://v.cdnlz3.com/20240106/22647_12bced2d/2000k/hls/index.m3u8 +月球叛军:火之女,https://v.cdnlz11.com/20231222/18799_a3ec4c15/2000k/hls/mixed.m3u8 +画江湖之不良帅,https://v.cdnlz11.com/20240111/19241_3af8d963/2000k/hls/mixed.m3u8 +追缉,https://v.cdnlz3.com/20231231/22557_d6b334ec/2000k/hls/mixed.m3u8 +无价之宝,https://cdn1.vip-vip-yzzy.com/20231228/10597_1384c055/2000k/hls/index.m3u8 +千鹤先生,https://v.cdnlz12.com/20240125/11104_24ac3055/2000k/hls/mixed.m3u8 +[韩]野兽们的战争,https://v.cdnlz11.com/20231217/18739_fd0f9b07/2000k/hls/mixed.m3u8 +二手杰作,https://v.cdnlz4.com/20231226/26302_f7a2357f/2000k/hls/mixed.m3u8 +不日成婚2,https://yzzy.play-cdn19.com/20231214/10520_b17d82c4/2000k/hls/index.m3u8 +好像也没那么热血沸腾,https://yzzy.play-cdn16.com/20231213/27660_19c61f1e/2000k/hls/index.m3u8 +[美]惊奇队长2,https://v1.cdnlz1.com/20231208/24476_e5cafe33/2000k/hls/mixed.m3u8 +前任4.英年早婚,https://ukzy.ukubf3.com/20231207/2i7LidCb/2000kb/hls/index.m3u8 +[韩]毒战2,https://v.cdnlz4.com/20231117/26156_c60ebe89/2000k/hls/mixed.m3u8 + + + + +龍🐉V6央視,#genre# +CCTV1,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN111128BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUU6FFmRK8Hl0ytyd5e5kWGEwoDIwMxbrlyyVy9x6ZDKnldIYKOjBOUjRyoym5n7Kg0yIYstFTUfqtC14fzxhy5Y +CCTV2,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000036BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfGVSARKsxkWGZw7vFUuOj2QZHeRzosIxVbl7i2QHFATHA3k5wDWG1qHkZQAleNv%2FbI +CCTV3,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727c125355/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMUNNEYLCPUtKY62j1Wp5u04wipypKUQ1TTuR2lXvBl5YpHqBJmlA19x22TD9bUOjk +CCTV4,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000037BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfH0ZQXwaiVktPr6ILPKXqwOUC2ZXft7ZULN6h9qLQPFOTSlVTfophiKaMb8h1kPV74 +CCTV5,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727e617ca0/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMSXw4ajlL%2FoUYC2RZQQDco6uQSifXBocz5ID6RePfIKQ4rFWiHjq%2FeZoDmrzW%2FKlw +CCTV5+,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63872908d48f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSBx06ZL9Bo6JOM%2BSTjxZRK254G1jtietGzDaHvFNRtjXOvFnbf%2BTao33JqYlfMYYn2z3agOn9gvNMT9KmBaR9o +CCTV6,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728804b1f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdazJhFQmuq4XUiks9ZrIlJN%2BknLs8H%2BSxcDXy%2BTesEc8Q0KCN89MjYoj85Sol1kbKI4 +CCTV7,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000038BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHYKFve4MwNzRa0jPXeHjqnBjPmzSdKDNWNHhnZSaMGCXKmdx8d%2BnYdhVK5ge22ot4 +CCTV8,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728970aa82/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdaymid9ta2tVUW0%2FdVrFqszC1EVEkAbpip1IYxn%2Ba2aA%2BVAihIiw9D8ejUsDbfU0K68 +CCTV9,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000039BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHArfvJF2pWpm4RxcBNhZ7j9vEUeCQte%2BbQaOGNIUEEK%2B3RBE1BC9EUsM18gnb%2FyAA +CCTV10,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949784BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5OuXozn3alq9%2BUx7ZLG1w9aOfkLjZvYj56D3xkOAtSOIoLsdw8c1%2BCwLDg1aS4esN4 +CCTV11,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000053BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Qj2xHA4vdPGsjBbxSL3p%2FmAObVTfznR%2Fpc%2B76QYmLRMuL3Lj9iabhv8arW7kJe6%2F4 +CCTV12,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000040BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUd3JM2PCgDefrKOVZLNt0QMAmpLefguRLiOPXiDRWhxHg8yim2giTBA8RILsb%2B8Y5pkFUyZBE%2FkNJAbwncEegkU +CCTV13,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000054BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0SuXozn3alq9%2BUx7ZLG1w9awc14iEUxQ5VsTsr5pEBsmF56tXUfsukRUpygmTCKvAI +CCTV14,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949788BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5PYKFve4MwNzRa0jPXeHjqnp7khdLaCMP6L4QpTf84Oz6DvCG1%2BJ81QvStkxO%2FoGm8 +CCTV15,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000055BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Tdo%2FUL80msfbhDYvoWpNl31Dy7jHvMl%2FzVUrNxhL1ek1YEGVDZ7lCg0LtKJY4Ku%2B8 +CCTV16,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226100/index.m3u8 +CCTV17,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728afa13b4/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdaz%2FyAI9to%2FMBBt%2FivcdSfljJ1%2FqqamWUjAiBAxNssfyBlZUDSXAIMtStS86hRHFuJM +CCTV4K,http://27.222.3.214/liveali-tp4k.cctv.cn/live/4K10M.stream/playlist.m3u8 + + +CCTV1,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225816/index.m3u8 +CCTV2,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225599/index.m3u8 +CCTV3,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225799/index.m3u8 +CCTV4,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225797/index.m3u8 +CCTV5,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225818/index.m3u8 +CCTV5+,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225507/index.m3u8 +CCTV6,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225814/index.m3u8 +CCTV7,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225671/index.m3u8 +CCTV8,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225795/index.m3u8 +CCTV9,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225676/index.m3u8 +CCTV10,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225677/index.m3u8 +CCTV11,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225517/index.m3u8 +CCTV12,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225669/index.m3u8 +CCTV13,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225812/index.m3u8 +CCTV14,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225674/index.m3u8 +CCTV15,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225513/index.m3u8 +CCTV16,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225893/index.m3u8 +CCTV17,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225708/index.m3u8 + +CCTV1,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN111128BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUU6FFmRK8Hl0ytyd5e5kWGEwoDIwMxbrlyyVy9x6ZDKnldIYKOjBOUjRyoym5n7Kg0yIYstFTUfqtC14fzxhy5Y +CCTV2,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000036BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfGVSARKsxkWGZw7vFUuOj2QZHeRzosIxVbl7i2QHFATHA3k5wDWG1qHkZQAleNv%2FbI +CCTV3,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727c125355/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMUNNEYLCPUtKY62j1Wp5u04wipypKUQ1TTuR2lXvBl5YpHqBJmlA19x22TD9bUOjk +CCTV4,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000037BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfH0ZQXwaiVktPr6ILPKXqwOUC2ZXft7ZULN6h9qLQPFOTSlVTfophiKaMb8h1kPV74 +CCTV5,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727e617ca0/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMSXw4ajlL%2FoUYC2RZQQDco6uQSifXBocz5ID6RePfIKQ4rFWiHjq%2FeZoDmrzW%2FKlwCCTV-5+,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63872908d48f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSBx06ZL9Bo6JOM%2BSTjxZRK254G1jtietGzDaHvFNRtjXOvFnbf%2BTao33JqYlfMYYn2z3agOn9gvNMT9KmBaR9o +CCTV6,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728804b1f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdazJhFQmuq4XUiks9ZrIlJN%2BknLs8H%2BSxcDXy%2BTesEc8Q0KCN89MjYoj85Sol1kbKI4 +CCTV7,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000038BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHYKFve4MwNzRa0jPXeHjqnBjPmzSdKDNWNHhnZSaMGCXKmdx8d%2BnYdhVK5ge22ot4 +CCTV8,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728970aa82/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdaymid9ta2tVUW0%2FdVrFqszC1EVEkAbpip1IYxn%2Ba2aA%2BVAihIiw9D8ejUsDbfU0K68 +CCTV9,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000039BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHArfvJF2pWpm4RxcBNhZ7j9vEUeCQte%2BbQaOGNIUEEK%2B3RBE1BC9EUsM18gnb%2FyAA +CCTV10,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949784BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5OuXozn3alq9%2BUx7ZLG1w9aOfkLjZvYj56D3xkOAtSOIoLsdw8c1%2BCwLDg1aS4esN4 +CCTV11,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000053BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Qj2xHA4vdPGsjBbxSL3p%2FmAObVTfznR%2Fpc%2B76QYmLRMuL3Lj9iabhv8arW7kJe6%2F4 +CCTV12,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000040BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUd3JM2PCgDefrKOVZLNt0QMAmpLefguRLiOPXiDRWhxHg8yim2giTBA8RILsb%2B8Y5pkFUyZBE%2FkNJAbwncEegkU +CCTV13,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000054BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0SuXozn3alq9%2BUx7ZLG1w9awc14iEUxQ5VsTsr5pEBsmF56tXUfsukRUpygmTCKvAI +CCTV14,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949788BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5PYKFve4MwNzRa0jPXeHjqnp7khdLaCMP6L4QpTf84Oz6DvCG1%2BJ81QvStkxO%2FoGm8 +CCTV15,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000055BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Tdo%2FUL80msfbhDYvoWpNl31Dy7jHvMl%2FzVUrNxhL1ek1YEGVDZ7lCg0LtKJY4Ku%2B8 + +CCTV1,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226559/index.m3u8 +CCTV2,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226540/index.m3u8 +CCTV3,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225799/index.m3u8 +CCTV4,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226428/index.m3u8 +CCTV5,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226019/index.m3u8 +CCTV5+,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225507/index.m3u8 +CCTV6,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226010/index.m3u8 +CCTV7,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225733/index.m3u8 +CCTV8,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226008/index.m3u8 +CCTV9,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225734/index.m3u8 +CCTV10,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225677/index.m3u8 +CCTV11,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226565/index.m3u8 +CCTV12,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225731/index.m3u8 +CCTV13,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226537/index.m3u8 +CCTV14,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225732/index.m3u8 +CCTV15,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226476/index.m3u8 +CCTV16,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225893/index.m3u8 +CCTV17,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/index.m3u8 + +CCTV1,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226016/index.m3u8 +CCTV2,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225588/index.m3u8 +CCTV3,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226021/index.m3u8 +CCTV4,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226007/index.m3u8 +CCTV5,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226019/index.m3u8 +CCTV5+,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225603/index.m3u8 +CCTV6,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226010/index.m3u8 +CCTV7,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225733/index.m3u8 +CCTV8,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226008/index.m3u8 +CCTV9,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225734/index.m3u8 +CCTV10,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225730/index.m3u8 +CCTV11,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225597/index.m3u8 +CCTV12,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225731/index.m3u8 +CCTV13,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226011/index.m3u8 +CCTV14,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225732/index.m3u8 +CCTV15,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225601/index.m3u8 +CCTV16,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226100/index.m3u8 +CCTV17,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225765/index.m3u8 + + +CCTV-1,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226016/index.m3u8 +CCTV-2,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225588/index.m3u8 +CCTV-3,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226021/index.m3u8 +CCTV-4,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226007/index.m3u8 +CCTV-5,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226019/index.m3u8 +CCTV-5+,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225603/index.m3u8 +CCTV-6,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226010/index.m3u8 +CCTV-7,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225733/index.m3u8 +CCTV-8,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226008/index.m3u8 +CCTV-9,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225734/index.m3u8 +CCTV-10,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225730/index.m3u8 +CCTV-11,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225597/index.m3u8 +CCTV-12,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225731/index.m3u8 +CCTV-13,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226011/index.m3u8 +CCTV-14,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225732/index.m3u8 +CCTV-15,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225601/index.m3u8 +CCTV-16,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226100/index.m3u8 +CCTV-17,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225765/index.m3u8 +CCTV兵器科技,http://111.20.35.108:6610/yinhe/2/ch00000090990000002515/index.m3u8?virtualDomain=yinhe.live_hls.zte.com +CCTV怀旧剧场,http://111.20.35.108:6610/yinhe/2/ch00000090990000002495/index.m3u8?virtualDomain=yinhe.live_hls.zte.com +CCTV第一剧场,http://111.20.35.108:6610/yinhe/2/ch00000090990000002498/index.m3u8?virtualDomain=yinhe.live_hls.zte.com +CCTV风云剧场,http://111.20.35.108:6610/yinhe/2/ch00000090990000002505/index.m3u8?virtualDomain=yinhe.live_hls.zte.com +CCTV风云音乐,http://111.20.35.108:6610/yinhe/2/ch00000090990000002525/index.m3u8?virtualDomain=yinhe.live_hls.zte.com +CCTV风云足球,http://111.20.35.108:6610/yinhe/2/ch00000090990000002499/index.m3u8?virtualDomain=yinhe.live_hls.zte.com +CCTV高尔夫网球,http://111.20.35.108:6610/yinhe/2/ch00000090990000002497/index.m3u8?virtualDomain=yinhe.live_hls.zte.com +CCTV女性时尚,http://111.20.35.108:6610/yinhe/2/ch00000090990000002475/index.m3u8?virtualDomain=yinhe.live_hls.zte.com +CCTV世界地理,http://111.20.35.108:6610/yinhe/2/ch00000090990000002485/index.m3u8?virtualDomain=yinhe.live_hls.zte.com +CCTV文化精品,http://111.20.35.108:6610/yinhe/2/ch00000090990000002535/index.m3u8?virtualDomain=yinhe.live_hls.zte.com +CCTV央视台球,http://111.20.35.108:6610/yinhe/2/ch00000090990000002496/index.m3u8?virtualDomain=yinhe.live_hls.zte.com +CCTV电视指南,http://111.20.35.108:6610/yinhe/2/ch00000090990000002545/index.m3u8?virtualDomain=yinhe.live_hls.zte.com + +CCTV-1,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226559/index.m3u8 +CCTV-2,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226540/index.m3u8 +CCTV-3,http://[2409:8087:1a01:df::4077]:80/PLTV/88888888/224/3221225799/index.m3u8 +CCTV-4,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226428/index.m3u8 +CCTV-5,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226019/index.m3u8 +CCTV-5+,http://[2409:8087:1a01:df::4077]:80/PLTV/88888888/224/3221225507/index.m3u8 +CCTV-6,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226010/index.m3u8 +CCTV-7,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225733/index.m3u8 +CCTV-8,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226008/index.m3u8 +CCTV-9,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225734/index.m3u8 +CCTV-10,http://[2409:8087:1a01:df::4077]:80/PLTV/88888888/224/3221225677/index.m3u8 +CCTV-11,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226565/index.m3u8 +CCTV-12,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225731/index.m3u8 +CCTV-13,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226537/index.m3u8 +CCTV-14,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225732/index.m3u8 +CCTV-15,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226476/index.m3u8 +CCTV-16,http://[2409:8087:1a01:df::4077]:80/PLTV/88888888/224/3221225893/index.m3u8 +CCTV-17,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/index.m3u8 +CCTV-4K,http://27.222.3.214/liveali-tp4k.cctv.cn/live/4K10M.stream/playlist.m3u8 +CCTV-8K,https://tv.cry33.com/ys4k.php?id=8k + +CETV-1,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8 +CETV-2,http://[2409:8087:1a0b:df::4013]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8 +CETV-3,http://[2409:8087:7004:20:1000::22]:6610/yinhe/2/ch00000090990000001309/index.m3u8?virtualDomain=yinhe.live_hls.zte.com +CETV-4,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8 +CGTN英语,http://live.cgtn.com/1000/prog_index.m3u8 +CGTN记录,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000528/index.m3u8?IAS + + +CCTV-01,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226016/index.m3u8 +CCTV-02,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225588/index.m3u8 +CCTV-03,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226021/index.m3u8 +CCTV-04,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226007/index.m3u8 +CCTV-05,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226019/index.m3u8 +CCTV05+,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225603/index.m3u8 +CCTV-06,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226010/index.m3u8 +CCTV-07,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225733/index.m3u8 +CCTV-08,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226008/index.m3u8 +CCTV-09,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225734/index.m3u8 +CCTV-10,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225730/index.m3u8 +CCTV-11,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225597/index.m3u8 +CCTV-12,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225731/index.m3u8 +CCTV-13,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226011/index.m3u8 +CCTV-14,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225732/index.m3u8 +CCTV-15,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225601/index.m3u8 +CCTV-16,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226100/index.m3u8 +CCTV-17,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225765/index.m3u8 + + + +CCTV1,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225816/index.m3u8 +CCTV3,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225799/index.m3u8 +CCTV-05,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225818/index.m3u8 +CCTV05+,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225507/index.m3u8 +CCTV-06,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225814/index.m3u8 +CCTV-07,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225671/index.m3u8 +CCTV-08,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225795/index.m3u8 +CCTV-09,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225676/index.m3u8 +CCTV-10,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225677/index.m3u8 +CCTV-11,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225517/index.m3u8 +CCTV-12,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225669/index.m3u8 +CCTV-13,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225812/index.m3u8 +CCTV-14,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225674/index.m3u8 +CCTV-15,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225513/index.m3u8 +CCTV-16,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225893/index.m3u8 +CCTV-17,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225708/index.m3u8 + +CCTV-01 综合,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226016/index.m3u8 +CCTV-02 财经,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225588/index.m3u8 +CCTV-03 综艺,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226021/index.m3u8 +CCTV-04 中文,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226007/index.m3u8 +CCTV-05 体育,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226019/index.m3u8 +CCTV05+赛事,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225603/index.m3u8 +CCTV-06 电影,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226010/index.m3u8 +CCTV-07 国防,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225733/index.m3u8 +CCTV-08 电视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226008/index.m3u8 +CCTV-09 纪录,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225734/index.m3u8 +CCTV-10 科教,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225730/index.m3u8 +CCTV-11 戏曲,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225597/index.m3u8 +CCTV-12 社会,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225731/index.m3u8 +CCTV-13 新闻,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226011/index.m3u8 +CCTV-14 少儿,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225732/index.m3u8 +CCTV-15 音乐,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225601/index.m3u8 +CCTV-16 奥林,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226100/index.m3u8 +CCTV-17 农业,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225765/index.m3u8 + +CCTV-01 综合,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226231/1.m3u8 +CCTV-02 财经,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226195/1.m3u8 +CCTV-03 综艺,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226397/1.m3u8 +CCTV-04 中文,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226191/1.m3u8 +CCTV-05 体育,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226395/1.m3u8 +CCTV05+赛事,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221225761/1.m3u8 +CCTV-06 电影,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226011/1.m3u8 +CCTV-07 国防,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226192/1.m3u8 +CCTV-08 电视,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226391/1.m3u8 +CCTV-09 纪录,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226197/1.m3u8 +CCTV-10 科教,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226189/1.m3u8 +CCTV-11 戏曲,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226240/1.m3u8 +CCTV-12 社会,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226190/1.m3u8 +CCTV-13 新闻,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226233/1.m3u8 +CCTV-14 少儿,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226193/1.m3u8 +CCTV-15 音乐,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221225785/1.m3u8 +CCTV-16 奥林,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226921/1.m3u8 +CCTV-17 农业,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226198/1.m3u8 + +CCTV-4K超清,http://[2409:8087:2001:20:2800:0:df6e:eb13]/ott.mobaibox.com/PLTV/3/224/3221228228/index.m3u8 +CCTV-8K超清,http://[2409:8087:2001:20:2800:0:df6e:eb03]/ott.mobaibox.com/PLTV/4/224/3221228165/index.m3u8 +CCTV-01 综合,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226231/1.m3u8 +CCTV-02 财经,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226195/1.m3u8 +CCTV-03 综艺,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226397/1.m3u8 +CCTV-04 中文,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226191/1.m3u8 +CCTV-05 体育,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226395/1.m3u8 +CCTV05+赛事,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221225761/1.m3u8 +CCTV-06 电影,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226011/1.m3u8 +CCTV-07 国防,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226192/1.m3u8 +CCTV-08 电视,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226391/1.m3u8 +CCTV-09 纪录,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226197/1.m3u8 +CCTV-10 科教,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226189/1.m3u8 +CCTV-11 戏曲,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226240/1.m3u8 +CCTV-12 社会,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226190/1.m3u8 +CCTV-13 新闻,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226233/1.m3u8 +CCTV-14 少儿,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226193/1.m3u8 +CCTV-15 音乐,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221225785/1.m3u8 +CCTV-16 奥林,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226921/1.m3u8 +CCTV-17 农业,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226198/1.m3u8 + +CCTV-4K超清,http://[2409:8087:2001:20:2800:0:df6e:eb13]/ott.mobaibox.com/PLTV/3/224/3221228228/index.m3u8 +CCTV-8K超清,http://[2409:8087:2001:20:2800:0:df6e:eb03]/ott.mobaibox.com/PLTV/4/224/3221228165/index.m3u8 + + +CCTV-01 综合,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226016/index.m3u8 +CCTV-02 财经,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225588/index.m3u8 +CCTV-03 综艺,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226021/index.m3u8 +CCTV-04 中文,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226007/index.m3u8 +CCTV-05 体育,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226019/index.m3u8 +CCTV05+赛事,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225603/index.m3u8 +CCTV-06 电影,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226010/index.m3u8 +CCTV-07 国防,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225733/index.m3u8 +CCTV-08 电视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226008/index.m3u8 +CCTV-09 纪录,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225734/index.m3u8 +CCTV-10 科教,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225730/index.m3u8 +CCTV-11 戏曲,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225597/index.m3u8 +CCTV-12 社会,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225731/index.m3u8 +CCTV-13 新闻,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226011/index.m3u8 +CCTV-14 少儿,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225732/index.m3u8 +CCTV-15 音乐,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225601/index.m3u8 +CCTV-16 奥林,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226100/index.m3u8 +CCTV-17 农业,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225765/index.m3u8 + +龍🐉V6卫视,#genre# + +湖南卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8 +浙江卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8 +江苏卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8 +东方卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8 +广东卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8 +广西卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226549/index.m3u8 +深圳卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8 +北京卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8 +东南卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8 +四川卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8 +天津卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8 +安徽卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8 +山东卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8 +江西卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8 +河北卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8 +河南卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8 +海南卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8 +湖北卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8 +贵州卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8 +辽宁卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.m3u8 +重庆卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8 +吉林卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8 +黑龙江视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8 + +凤凰中文,http://play-flive.ifeng.com/live/06OLEGEGM4G.m3u8 +凤凰资讯,http://play-flive.ifeng.com/live/06OLEEWQKN4.m3u8 +凤凰香港,http://113.64.145.91:8081/hls/38/index.m3u8 +深圳卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8 +重庆卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8 +广东卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8 +北京卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8 +湖南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8 +东方卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8 +四川卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8 +天津卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8 +安徽卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8 +山东卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8 +广西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226549/index.m3u8 +江苏卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8 +江西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8 +河北卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8 +河南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8 +浙江卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8 +海南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8 +湖北卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8 +山西卫视,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/00000001000000060000000000000318/index.m3u8?IAS +东南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8 +贵州卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8 +辽宁卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.m3u8 +黑龙江卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8 +内蒙古卫视,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000319/index.m3u8?IAS +宁夏卫视,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000309/index.m3u8?IAS +陕西卫视,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000313/index.m3u8?IAS +甘肃卫视,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8 +吉林卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8 +云南卫视,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000305/index.m3u8?IAS +三沙卫视,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?IAS +青海卫视,http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225628/index.m3u8 +新疆卫视,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225635/index.m3u8 +西藏卫视,http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000317/index.m3u8?IAS +兵团卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226439/index.m3u8 +延边卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8 +大湾区卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226442/index.m3u8 +安多卫视,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8 +厦门卫视,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000193/index.m3u8?IAS +康巴卫视,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8 + + + +湖南卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221226000/index.m3u8 +江苏卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225938/index.m3u8 +江苏卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8 +东方卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8 +东方卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225942/index.m3u8 +安徽卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8 +安徽卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225925/index.m3u8 +北京卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225931/index.m3u8 +北京卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8 +东南卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221226038/index.m3u8 +东南卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8 +东南卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225950/index.m3u8 +贵州卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221226030/index.m3u8 +贵州卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225974/index.m3u8 +贵州卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8 +海南卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225978/index.m3u8 +河北卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225961/index.m3u8 +河北卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225991/index.m3u8 +河南卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221226023/index.m3u8 +河南卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225988/index.m3u8 +河南卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8 +湖北卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225975/index.m3u8 +湖北卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221226015/index.m3u8 +江苏卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225938/index.m3u8 +江苏卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225929/index.m3u8 +江苏卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8 +江西卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225935/index.m3u8 +江西卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8 +山东卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225952/index.m3u8 +山东卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8 +甘肃卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8 +陕西卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225989/index.m3u8 +西安新闻,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225993/index.m3u8 +山西卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221226009/index.m3u8 +四川卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225970/index.m3u8 +四川卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8 +天津卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225972/index.m3u8 +天津卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8 +浙江卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8 +浙江卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225959/index.m3u8 +重庆卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225963/index.m3u8 +重庆卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8 +河北卫视,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/00000001000000060000000000000487/index.m3u8?fmmv6 +宁夏卫视,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000309/index.m3u8?fmmv6 +厦门卫视,http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000193/index.m3u8?fmmv6 +青海卫视,http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000320/index.m3u8?fmmv6 +新疆卫视,http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000316/index.m3u8?fmmv6 +纪实人文,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000365/index.m3u8?fmmv6 + + + + +四川卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8 + +广西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226380/index.m3u8 + +江西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8 +河北卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8 +河南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8 + +海南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8 + +山西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225624/index.m3u8 +东南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8 +贵州卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8 + +内蒙古卫,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8 +宁夏卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225632/index.m3u8 +陕西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225625/index.m3u8 +甘肃卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8 +吉林卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8 +云南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226444/index.m3u8 +三沙卫视,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8? +青海卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225628/index.m3u8 +新疆卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225635/index.m3u8 + +兵团卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226439/index.m3u8 +延边卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8 +大湾区卫,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226442/index.m3u8 +安多卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8 +厦门卫视,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226219/index.m3u8 +农林卫视,http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226229/index.m3u8 +康巴卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8 +CETV-1,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8 +CETV-2,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8 +CETV-3,http://[2409:8087:7004:20:1000::22]:6610/yinhe/2/ch00000090990000001309/index.m3u8?virtualDomain=yinhe.live_hls.zte.com +CETV-4,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8 +云南卫视,https://live.v1.mk/api/bestv.php?id=ynwshd8m/8000000 +青海卫视,http://[2409:8087:2001:20:2800:0:df6e:eb1b]/wh7f454c46tw1221605145_-1738716276/ott.mobaibox.com/PLTV/3/224/3221227554/index.m3u8?icpid=3&RTS=1668600311&from=40&popid=40&hms_devid=2116&prioritypopid=40&vqe=3 +新疆卫视,http://[2409:8087:2001:20:2800:0:df6e:eb0b]/wh7f454c46tw993550557_162751766/ott.mobaibox.com/PLTV/3/224/3221228290/index.m3u8?icpid=3&RTS=1668604377&from=40&popid=40&hms_devid=2038&prioritypopid=40&vqe=3 +山西卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221226009/index.m3u8 +陕西卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225989/index.m3u8 +黑龙江卫视,http://[2409:8087:2001:20:2800:0:df6e:eb0a]:80/wh7f454c46tw1932810369_1138674704/ott.mobaibox.com/PLTV/3/224/3221227323/index.m3u8?icpid=3&RTS=1674386343&from=40&popid=40&hms_devid=2038&prioritypopid=40&vqe=3#http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225985/index.m3u8#http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8#http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221226006/index.m3u8#https://live.v1.mk/api/bestv.php?id=hljwshd8m/8000000 +三沙卫视,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?IAS +龙江卫视,http://[2409:8087:2001:20:2800:0:df6e:eb17]/wh7f454c46tw3143044227_-926148572/ott.mobaibox.com/PLTV/3/224/3221227514/index.m3u8?icpid=3&RTS=1668597937&from=40&popid=40&hms_devid=2114&prioritypopid=40&vqe=3 + + +龍🐉V6地方,#genre# + +湖北综合,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072216f7da/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNLx3R3LdIBdA5q61lut1LwZcw4SC2tJubc%2Bq5t%2F61jvWCtjrJL0x%2BHncPgdmcbBW9I +湖北影视,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380728abccd2/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNKU1xiiKGJYFBZK9RpEkaggogtHJZW6nJQqLppbEYE%2BqJ9kJW%2FMvKldfS2dCii9VSI +湖北教育,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072a6cbbf6/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNKTFQuOKNd5i0HMa3ydMWIQ6kJ2fBJGJ77BLTXK72CqUYQsX3ZguYt0954s9hfZTfc +湖北生活,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072c62e405/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNKJPodw5BcDirSOw7egztI5bUvJjqPzSNAhrA37GrbRBIAjGQpzP0QmgsmuHnQyd2c +湖北公共,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380726d0ee3b/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNKgjpyhD%2FJd6SZjkcHAKXbsjwotAY57dianC4%2ByY7artm7J7F4GFO6G99D0bYMJRxI +湖北经视,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807203543e3/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNLVCQ3pDe4nBySab%2B3xPL123aTSCRugzF2ABe36IIJw2evZbYdWUo0ffUw53bflDgU +南国都市,http://php.jdshipin.com:8880/gztv.php?id=shenghuo +湖北教育,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072a6cbbf6/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNKTFQuOKNd5i0HMa3ydMWIQ6kJ2fBJGJ77BLTXK72CqUYQsX3ZguYt0954s9hfZTfc +黑莓电影,http://[2409:8087:1a0b:df::4014]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225743/index.m3u8 +黑莓动画,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8 +浙江新闻,https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8 +浙江国际,https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8 +浙江少儿,https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8 +浙江教科,https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8 +之江纪录,https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8 +浙江民生,https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8 +浙江经济,https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8 +浙江钱江,https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8 + +金鹰卡通,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000057BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0T0ZQXwaiVktPr6ILPKXqwOw2VoxnxHvBSRSzCCC3szSwIgrD0rUpRXeaqChwLXCf0 +湖南爱晚,http://222.241.154.37:9901/tsfile/live/23022_1.m3u8 +湖南视剧,http://222.241.154.37:9901/tsfile/live/23026_1.m3u8 +湖南电影,http://222.241.154.37:9901/tsfile/live/23025_1.m3u8 +湖南都市,http://222.241.154.37:9901/tsfile/live/23021_1.m3u8 +湖南国际,http://222.241.154.37:9901/tsfile/live/23024_1.m3u8 +湖南经视,http://222.241.154.37:9901/tsfile/live/23020_1.m3u8 +湖南娱乐,http://222.241.154.37:9901/tsfile/live/23023_1.m3u8 +湖南教育,http://222.241.154.37:9901/tsfile/live/23027_1.m3u8 +南京教科,http://live.nbs.cn/channels/njtv/jkpd/nbs06.m3u8 +南京生活,http://live.nbs.cn/channels/njtv/shpd/nbs06.m3u8 +南京娱乐,http://live.nbs.cn/channels/njtv/ylpd/500k.m3u8 +南京十八,http://live.nbs.cn/channels/njtv/sbpd/500k.m3u8 +南京少儿,http://live.nbs.cn/channels/njtv/sepd/nbs23.m3u8 +南京信息,http://live.nbs.cn/channels/njtv/xxpd/500k.m3u8 +苏州1套,http://tylive.kan0512.com/norecord/norecord_csztv1.m3u8 +苏州2套,http://tylive.kan0512.com/norecord/norecord_csztv2.m3u8 +苏州3套,http://tylive.kan0512.com/norecord/norecord_csztv3.m3u8 +苏州5套,http://tylive.kan0512.com/norecord/norecord_csztv5.m3u8 + +盐城3套,https://live1yc.0515yc.cn/ycst03/sd/live.m3u8?_upt=063361c91707142304 +无锡1套,http://stream.thmz.com/wxtv1/playlist.m3u8?_upt=df50c8ad1706195780 +无锡2套,http://stream.thmz.com/wxtv2/sd/live.m3u8?_upt=081040171706199780 +无锡3套,http://stream.thmz.com/wxtv3/sd/live.m3u8?_upt=978cd8731706199708 +无锡4套,http://stream.thmz.com/wxtv4/sd/live.m3u8?_upt=95a5f0d51706199864 +无锡5套,http://stream.thmz.com/wxtv5/sd/live.m3u8?_upt=31414f601706199828 + +扬州1套,http://cm-wshls.homecdn.com/live/8bb.m3u8 +扬州2套,http://cm-wshls.homecdn.com/live/8bd.m3u8 +扬州3套,http://cm-wshls.homecdn.com/live/8bf.m3u8 +镇江1套,http://zjtv-wshls.homecdn.com/live/2aa50.m3u8 +镇江2套,http://zjtv-wshls.homecdn.com/live/2aa16.m3u8 +连云港1套,http://live.lyg1.com/zhpd/sd/live.m3u8 +连云港2套,http://live.lyg1.com/ggpd/sd/live.m3u8 +湖北生活,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072c62e405/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNKJPodw5BcDirSOw7egztI5bUvJjqPzSNAhrA37GrbRBIAjGQpzP0QmgsmuHnQyd2c +湖北公共,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380726d0ee3b/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNKgjpyhD%2FJd6SZjkcHAKXbsjwotAY57dianC4%2ByY7artm7J7F4GFO6G99D0bYMJRxI +湖北经视,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807203543e3/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNLVCQ3pDe4nBySab%2B3xPL123aTSCRugzF2ABe36IIJw2evZbYdWUo0ffUw53bflDgU +湖北垄上,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072463c333/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNL%2Be1h4FfA5QqwJ7IPOz3p2qIS7djSxm17Htd%2FckZkm%2FVqsKHEJFJt26ju9iibzMEo +黑龙江文体,http://[2409:8087:1a01:df::4025]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226239/1.m3u8 +黑龙江都市,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226301/index.m3u8 +黑龙江农业科教,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226242/index.m3u8 +黑龙江少儿,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226304/index.m3u8 +黑龙江文化,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226239/index.m3u8 +黑龙江新闻法治,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226330/index.m3u8 +黑龙江影视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226298/index.m3u8 +HRB新闻综合,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226434/index.m3u8 +齐齐哈尔新闻综合,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226437/index.m3u8 +齐齐哈尔经济法治,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226555/index.m3u8 +佳木斯新闻综合,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226451/index.m3u8 +大庆新闻综合,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226484/index.m3u8 +双鸭山综合,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226529/index.m3u8 +鹤岗新闻综合,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226534/index.m3u8 +海南自贸,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000320/index.m3u8?IAS +海南新闻,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000321/index.m3u8?IAS +海南文旅,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000322/index.m3u8?IAS +海南少儿,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000323/index.m3u8?IAS +海南公共,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000382/index.m3u8?IAS +乌兰察布新闻综合,https://pluslive.wrbtv.cn/xwzhpd/sd/live.m3u8 +乌兰察布经济生活,https://pluslive.wrbtv.cn/jjshpd/sd/live.m3u8 + + + +南京教科,http://live.nbs.cn/channels/njtv/jkpd/nbs06.m3u8 +南京生活,http://live.nbs.cn/channels/njtv/shpd/nbs06.m3u8 +南京娱乐,http://live.nbs.cn/channels/njtv/ylpd/500k.m3u8 +南京十八,http://live.nbs.cn/channels/njtv/sbpd/500k.m3u8 +南京少儿,http://live.nbs.cn/channels/njtv/sepd/nbs23.m3u8 +南京信息,http://live.nbs.cn/channels/njtv/xxpd/500k.m3u8 +苏州1套,http://tylive.kan0512.com/norecord/norecord_csztv1.m3u8 +苏州2套,http://tylive.kan0512.com/norecord/norecord_csztv2.m3u8 +苏州3套,http://tylive.kan0512.com/norecord/norecord_csztv3.m3u8 +苏州5套,http://tylive.kan0512.com/norecord/norecord_csztv5.m3u8 +徐州1套,https://pull.live.xztv.tv/live/xztv01.flv +徐州2套,https://pull.live.xztv.tv/live/xztv02.flv +徐州3套,https://pull.live.xztv.tv/live/xztv03.flv +徐州4套,https://pull.live.xztv.tv/live/xztv04.flv +盐城3套,https://live1yc.0515yc.cn/ycst03/sd/live.m3u8?_upt=063361c91707142304 +常州都市,https://tv.cry33.com/cztv.php?id=czds +无锡1套,http://stream.thmz.com/wxtv1/playlist.m3u8?_upt=df50c8ad1706195780 +无锡2套,http://stream.thmz.com/wxtv2/sd/live.m3u8?_upt=081040171706199780 +无锡3套,http://stream.thmz.com/wxtv3/sd/live.m3u8?_upt=978cd8731706199708 +无锡4套,http://stream.thmz.com/wxtv4/sd/live.m3u8?_upt=95a5f0d51706199864 +无锡5套,http://stream.thmz.com/wxtv5/sd/live.m3u8?_upt=31414f601706199828 +南通1套,http://cm-wshls.homecdn.com/live/7cc9.m3u8 +南通2套,http://cm-wshls.homecdn.com/live/7cc7.m3u8 +南通3套,http://cm-wshls.homecdn.com/live/7cc5.m3u8 +扬州1套,http://cm-wshls.homecdn.com/live/8bb.m3u8 +扬州2套,http://cm-wshls.homecdn.com/live/8bd.m3u8 +扬州3套,http://cm-wshls.homecdn.com/live/8bf.m3u8 +镇江1套,http://zjtv-wshls.homecdn.com/live/2aa50.m3u8 +镇江2套,http://zjtv-wshls.homecdn.com/live/2aa16.m3u8 +泰州1套,http://stream1.mytaizhou.net/xwzh/sd/live.m3u8?_upt=f97c80491706200828 +泰州2套,http://stream1.mytaizhou.net/jjsh/sd/live.m3u8?_upt=ce6b5e321706200861 +泰州3套,http://stream1.mytaizhou.net/ysyl/sd/live.m3u8?_upt=014e4d741706200911 +连云港1套,http://live.lyg1.com/zhpd/sd/live.m3u8 +连云港2套,http://live.lyg1.com/ggpd/sd/live.m3u8 +湖北生活,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072c62e405/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNKJPodw5BcDirSOw7egztI5bUvJjqPzSNAhrA37GrbRBIAjGQpzP0QmgsmuHnQyd2c +湖北公共,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380726d0ee3b/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNKgjpyhD%2FJd6SZjkcHAKXbsjwotAY57dianC4%2ByY7artm7J7F4GFO6G99D0bYMJRxI +湖北经视,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807203543e3/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNLVCQ3pDe4nBySab%2B3xPL123aTSCRugzF2ABe36IIJw2evZbYdWUo0ffUw53bflDgU +湖北垄上,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072463c333/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNL%2Be1h4FfA5QqwJ7IPOz3p2qIS7djSxm17Htd%2FckZkm%2FVqsKHEJFJt26ju9iibzMEo +黑龙江文体,http://[2409:8087:1a01:df::4025]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226239/1.m3u8 +黑龙江都市,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226301/index.m3u8 +黑龙江农业科教,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226242/index.m3u8 +黑龙江少儿,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226304/index.m3u8 +黑龙江文化,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226239/index.m3u8 +黑龙江新闻法治,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226330/index.m3u8 +黑龙江影视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226298/index.m3u8 +HRB新闻综合,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226434/index.m3u8 +齐齐哈尔新闻综合,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226437/index.m3u8 +齐齐哈尔经济法治,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226555/index.m3u8 +佳木斯新闻综合,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226451/index.m3u8 +大庆新闻综合,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226484/index.m3u8 +双鸭山综合,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226529/index.m3u8 +鹤岗新闻综合,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226534/index.m3u8 +海南自贸,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000320/index.m3u8?IAS +海南新闻,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000321/index.m3u8?IAS +海南文旅,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000322/index.m3u8?IAS +海南少儿,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000323/index.m3u8?IAS +海南公共,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000382/index.m3u8?IAS +宝鸡1,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226383/index.m3u8 +宝鸡2,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226384/index.m3u8 +安康综合,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226385/index.m3u8 +西乡融媒,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226556/index.m3u8 +商洛1,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226378/index.m3u8 +城园,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226920/index.m3u8 +扶风,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221227005/index.m3u8 +汉中1,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226331/index.m3u8 +汉中2,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221225990/index.m3u8 +汉中3,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221225991/index.m3u8 +千阳,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226945/index.m3u8 +神木1,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226993/index.m3u8 +石泉电视台,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226965/index.m3u8 +岐山,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226982/index.m3u8 +吴起电视台,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226967/index.m3u8 +洋县电视台1,http://[2409:8087:7002:20::3]/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226938/index.m3u8 +紫阳综合,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221227002/index.m3u8 +FGTV_1,http://[2409:8087:7000:20::4]/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226990/index.m3u8 +佛坪电视台,http://[2409:8087:7002:20::3]/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226454/index.m3u8 +乌兰察布新闻综合,https://pluslive.wrbtv.cn/xwzhpd/sd/live.m3u8 +乌兰察布经济生活,https://pluslive.wrbtv.cn/jjshpd/sd/live.m3u8 + +龍🐉V6综合,#genre# +纪实人文,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225738/index.m3u8 +纪实科教,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225729/index.m3u8 +卡酷少儿,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225654/index.m3u8 +金鹰卡通,http://[2409:8087:1a0b:df::4008]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225653/index.m3u8 +哒啵赛事,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225675/index.m3u8 +优漫卡通,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8 +哈哈炫动,http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8 +黑莓动画,http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8 +黑莓电影,http://[2409:8087:1a0b:df::4014]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225743/index.m3u8 +超级体育,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8 +超级电影,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8 +超级视剧,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225716/index.m3u8 +东北热剧,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225741/index.m3u8 +海外剧场,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225671/index.m3u8 +中国功夫,http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225681/index.m3u8 +军旅剧场,http://[2409:8087:1a0b:df::4018]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225676/index.m3u8 +惊悚悬疑,http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8 +潮妈辣婆,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225685/index.m3u8 +精品体育,http://[2409:8087:1a0b:df::4004]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8 +精品纪录,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225672/index.m3u8 +家庭剧场,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225677/index.m3u8 +精品大剧,http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225670/index.m3u8 +军事评论,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225668/index.m3u8 +明星大片,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225664/index.m3u8 +欢乐剧场,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225742/index.m3u8 +精品萌宠,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226505/index.m3u8 +超级综艺,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225714/index.m3u8 +金牌综艺,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8 + + + + +龍🐉V6咪咕,#genre# +咪咕直播-1「IPV6」,http://[2409:8087:1a01:df::4023]/PLTV/88888888/224/3221225611/index.m3u8 +咪咕直播-2「IPV6」,http://[2409:8087:1a01:df::4005]/PLTV/88888888/224/3221225613/index.m3u8 +咪咕直播-3「IPV6」,http://[2409:8087:1a01:df::4014]/PLTV/88888888/224/3221225617/index.m3u8 +咪咕直播-4「IPV6」,http://[2409:8087:1a01:df::4017]/PLTV/88888888/224/3221225619/index.m3u8 +咪咕直播-5「IPV6」,http://[2409:8087:1a01:df::4058]/PLTV/88888888/224/3221225620/index.m3u8 +咪咕直播-6「IPV6」,http://[2409:8087:1a01:df::4015]/PLTV/88888888/224/3221225639/index.m3u8 +咪咕直播-7「IPV6」,http://[2409:8087:1a01:df::4015]/PLTV/88888888/224/3221225641/index.m3u8 +咪咕直播-8「IPV6」,http://[2409:8087:1a01:df::4011]/PLTV/88888888/224/3221225643/index.m3u8 +咪咕直播-9「IPV6」,http://[2409:8087:1a01:df::4002]/PLTV/88888888/224/3221225645/index.m3u8 +咪咕直播-10「IPV6」,http://[2409:8087:1a01:df::4016]/PLTV/88888888/224/3221225647/index.m3u8 +咪咕直播-11「IPV6」,http://[2409:8087:1a01:df::4022]/PLTV/88888888/224/3221225648/index.m3u8 +咪咕直播-12「IPV6」,http://[2409:8087:1a01:df::4003]/PLTV/88888888/224/3221225649/index.m3u8 +咪咕直播-13「IPV6」,http://[2409:8087:1a01:df::4003]/PLTV/88888888/224/3221225650/index.m3u8 +咪咕直播-14「IPV6」,http://[2409:8087:1a01:df::4014]/PLTV/88888888/224/3221225652/index.m3u8 +咪咕直播-15「IPV6」,http://[2409:8087:1a01:df::4013]/PLTV/88888888/224/3221225653/index.m3u8 +咪咕直播-16「IPV6」,http://[2409:8087:1a01:df::4017]/PLTV/88888888/224/3221225654/index.m3u8 +咪咕直播-17「IPV6」,http://[2409:8087:1a01:df::4019]/PLTV/88888888/224/3221225658/index.m3u8 +咪咕直播-18「IPV6」,http://[2409:8087:1a01:df::4012]/PLTV/88888888/224/3221225660/index.m3u8 +咪咕直播-19「IPV6」,http://[2409:8087:1a01:df::4023]/PLTV/88888888/224/3221225662/index.m3u8 +咪咕直播-20「IPV6」,http://[2409:8087:1a01:df::4062]/PLTV/88888888/224/3221225733/index.m3u8 +咪咕直播-21「IPV6」,http://[2409:8087:1a01:df::4048]/PLTV/88888888/224/3221225735/index.m3u8 +咪咕直播-22「IPV6」,http://[2409:8087:1a01:df::4025]/PLTV/88888888/224/3221225737/index.m3u8 +咪咕直播-23「IPV6」,http://[2409:8087:1a01:df::4074]/PLTV/88888888/224/3221225739/index.m3u8 +咪咕直播-24「IPV6」,http://[2409:8087:1a01:df::4070]/PLTV/88888888/224/3221225741/index.m3u8 +咪咕直播-25「IPV6」,http://[2409:8087:1a01:df::4050]/PLTV/88888888/224/3221225745/index.m3u8 +咪咕直播-26「IPV6」,http://[2409:8087:1a01:df::4050]/PLTV/88888888/224/3221225747/index.m3u8 +咪咕直播-27「IPV6」,http://[2409:8087:1a01:df::4039]/PLTV/88888888/224/3221225749/index.m3u8 +咪咕直播-28「IPV6」,http://[2409:8087:1a01:df::4030]/PLTV/88888888/224/3221225754/index.m3u8 +咪咕直播-29「IPV6」,http://[2409:8087:1a01:df::4025]/PLTV/88888888/224/3221225756/index.m3u8 +咪咕直播-30「IPV6」,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225758/index.m3u8 +咪咕直播-31「IPV6」,http://[2409:8087:1a01:df::4025]/PLTV/88888888/224/3221225760/index.m3u8 +咪咕直播-32「IPV6」,http://[2409:8087:1a01:df::4039]/PLTV/88888888/224/3221225762/index.m3u8 +咪咕直播-33「IPV6」,http://[2409:8087:1a01:df::4050]/PLTV/88888888/224/3221225764/index.m3u8 +咪咕直播-34「IPV6」,http://[2409:8087:1a01:df::4027]/PLTV/88888888/224/3221225766/index.m3u8 +咪咕直播-35「IPV6」,http://[2409:8087:1a01:df::4050]/PLTV/88888888/224/3221225768/index.m3u8 +咪咕直播-36「IPV6」,http://[2409:8087:1a01:df::4078]/PLTV/88888888/224/3221225782/index.m3u8 +咪咕直播-37「IPV6」,http://[2409:8087:1a01:df::4002]/PLTV/88888888/224/3221225895/index.m3u8 +咪咕直播-38「IPV6」,http://[2409:8087:1a01:df::4028]/PLTV/88888888/224/3221225897/index.m3u8 +咪咕直播-39「IPV6」,http://[2409:8087:1a01:df::4061]/PLTV/88888888/224/3221225899/index.m3u8 +咪咕直播-40「IPV6」,http://[2409:8087:1a01:df::4009]/PLTV/88888888/224/3221225901/index.m3u8 +咪咕直播-41「IPV6」,http://[2409:8087:1a01:df::4023]/PLTV/88888888/224/3221225903/index.m3u8 +咪咕直播-42「IPV6」,http://[2409:8087:1a01:df::4079]/PLTV/88888888/224/3221225904/index.m3u8 +咪咕直播-43「IPV6」,http://[2409:8087:1a01:df::4051]/PLTV/88888888/224/3221225905/index.m3u8 +咪咕直播-44「IPV6」,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225906/index.m3u8 +咪咕直播-45「IPV6」,http://[2409:8087:1a01:df::4055]/PLTV/88888888/224/3221225910/index.m3u8 +咪咕直播-46「IPV6」,http://[2409:8087:1a01:df::4076]/PLTV/88888888/224/3221225912/index.m3u8 +咪咕直播-47「IPV6」,http://[2409:8087:1a01:df::4027]/PLTV/88888888/224/3221225914/index.m3u8 +咪咕直播-48「IPV6」,http://[2409:8087:1a01:df::4076]/PLTV/88888888/224/3221226027/index.m3u8 +咪咕直播-49「IPV6」,http://[2409:8087:1a01:df::4068]/PLTV/88888888/224/3221226031/index.m3u8 +咪咕直播-50「IPV6」,http://[2409:8087:1a01:df::4062]/PLTV/88888888/224/3221226046/index.m3u8 +咪咕直播-51「IPV6」,http://[2409:8087:1a01:df::4041]/PLTV/88888888/224/3221226053/index.m3u8 +咪咕直播-52「IPV6」,http://[2409:8087:1a01:df::404d]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226124/index.m3u8 +咪咕直播-53「IPV6」,http://[2409:8087:1a01:df::403b]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226147/index.m3u8 +咪咕直播-54「IPV6」,http://[2409:8087:1a01:df::4033]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226398/index.m3u8 +咪咕直播-55「IPV6」,http://[2409:8087:1a01:df::402a]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226469/index.m3u8 +咪咕直播-56「IPV6」,http://[2409:8087:1a01:df::4046]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226472/index.m3u8 + + + + +龍🐉DY轮播,#genre# +电影_贺岁,http://cfss.cc/cdn/hy/11601971.flv +电影_玄幻,http://cfss.cc/cdn/hy/11342414.flv +电影_谍战,http://cfss.cc/cdn/hy/21059585.flv +电影_战争,http://cfss.cc/cdn/hy/21059592.flv +电影_喜剧,http://cfss.cc/cdn/hy/11352877.flv +电影_国产,http://cfss.cc/cdn/hy/11352973.flv +电影_周星星,http://cfss.cc/cdn/hy/11336587.flv +电影_梁家辉,http://cfss.cc/cdn/hy/11342429.flv +电影_斯坦森,http://cfss.cc/cdn/hy/21059588.flv +电影_八点档,http://cfss.cc/cdn/hy/880261.flv +电影_喜剧专场,http://cfss.cc/cdn/hy/11602044.flv +电影_欢笑影院,http://cfss.cc/cdn/hy/11352894.flv +电影_不挤影院,http://cfss.cc/cdn/hy/11352897.flv +电影_国产悬疑,http://cfss.cc/cdn/hy/11342395.flv +电影_黑帮斗争,http://cfss.cc/cdn/hy/11342419.flv +电影_镖行天下,http://cfss.cc/cdn/hy/11352969.flv +电影_高能反转,http://cfss.cc/cdn/hy/11352887.flv +电影_英叔,https://live.metshop.top/huya/11342421 +电影_发哥,https://live.metshop.top/huya/11342387 +电影_成龙,https://live.metshop.top/huya/11342386 +电影_王晶,https://live.metshop.top/huya/11602058 +电影_沈腾,https://live.metshop.top/huya/11601968 +电影_黄渤,https://live.metshop.top/huya/11352876 +电影_强森,https://live.metshop.top/huya/21059581 +电影_漫威,https://live.metshop.top/huya/11602034 +电影_宇宙,https://live.metshop.top/huya/11342428 +电影_怪兽,https://live.metshop.top/huya/21059577 +电影_热血,https://live.metshop.top/huya/11352934 +电影_贺岁,https://live.metshop.top/huya/11601971 +电影_玄幻,https://live.metshop.top/huya/11342414 +电影_谍战,https://live.metshop.top/huya/21059585 +电影_战争,https://live.metshop.top/huya/21059592 +电影_国产,https://live.metshop.top/huya/11352973 +电影_周星星,https://live.metshop.top/huya/11336587 +电影_梁家辉,https://live.metshop.top/huya/11342429 +电影_警匪,http://cfss.cc/cdn/hy/11352886.flv +电影_罪犯,http://cfss.cc/cdn/hy/11352962.flv +电影_枪战,http://cfss.cc/cdn/hy/21059579.flv +电影_海盗,http://cfss.cc/cdn/hy/21059595.flv +电影_赛车,http://cfss.cc/cdn/hy/11279247.flv +电影_国产,http://cfss.cc/cdn/hy/11602041.flv +电影_灾难片,http://live.metshop.top/huya/11602075?cdn=alicdn +电影_高分动作,http://live.metshop.top/huya/11352884?cdn=alicdn +电影_动作电影,http://live.metshop.top/huya/11602077?cdn=alicdn +电影_欢笑影院,http://live.metshop.top/huya/11352894?cdn=alicdn +电影_不挤影院,http://live.metshop.top/huya/11352897?cdn=alicdn +电影_快意江湖,http://live.metshop.top/huya/11342435?cdn=alicdn +电影_黑帮斗争,http://live.metshop.top/huya/11342419?cdn=alicdn +电影_嫣然影厅,http://live.metshop.top/huya/11601977?cdn=alicdn +电影_女神系列,http://live.metshop.top/huya/11336571?cdn=alicdn +电影_许氏三杰,http://live.metshop.top/huya/11602033?cdn=alicdn +电影_经典港片,http://live.metshop.top/huya/11352965?cdn=alicdn +电影_镖行天下,http://live.metshop.top/huya/11352969?cdn=alicdn +电影_高能反转,http://live.metshop.top/huya/11352887?cdn=alicdn +电影_喜乐影院,http://live.metshop.top/huya/21059580?cdn=alicdn +电影_蘑菇影厅,http://live.metshop.top/huya/11601981?cdn=alicdn +电影_搞笑恐怖,http://live.metshop.top/huya/11601960?cdn=alicdn +电影_死神来了,http://live.metshop.top/huya/11352903?cdn=alicdn +电影_变形金刚,http://live.metshop.top/huya/21059596?cdn=alicdn +搞笑_陈翔六点半,http://live.metshop.top/huya/11274154?cdn=alicdn +电影_星爷,http://cfss.cc/cdn/hy/11342412.flv +电影_英叔,http://cfss.cc/cdn/hy/11342421.flv +电影_发哥,http://cfss.cc/cdn/hy/11342387.flv +电影_成龙,http://cfss.cc/cdn/hy/11342386.flv +电影_王晶,http://cfss.cc/cdn/hy/11602058.flv +电影_强森,http://cfss.cc/cdn/hy/21059581.flv +电影_漫威,http://cfss.cc/cdn/hy/11602034.flv +电影_宇宙,http://cfss.cc/cdn/hy/11342428.flv +电影_武侠,http://cfss.cc/cdn/hy/11342427.flv +电影_救援,http://cfss.cc/cdn/hy/21059594.flv +电影_热血,http://cfss.cc/cdn/hy/11352934.flv +电影_盗墓,http://cfss.cc/cdn/hy/21059552.flv +电影_贺岁,http://cfss.cc/cdn/hy/11601971.flv +电影_玄幻,http://cfss.cc/cdn/hy/11342414.flv +电影_谍战,http://cfss.cc/cdn/hy/21059585.flv +电影_战争,http://cfss.cc/cdn/hy/21059592.flv +电影_喜剧,http://cfss.cc/cdn/hy/11352877.flv +电影_港片,http://cfss.cc/cdn/hy/11602043.flv +电影_国产,http://cfss.cc/cdn/hy/11352973.flv +电影_周星星,http://cfss.cc/cdn/hy/11336587.flv +电影_李连杰,http://cfss.cc/cdn/hy/11342390.flv +电影_洪金宝,http://cfss.cc/cdn/hy/11279251.flv +电影_梁家辉,http://cfss.cc/cdn/hy/11342429.flv +电影_许冠英,http://cfss.cc/cdn/hy/11601972.flv +电影_刘德华,http://cfss.cc/cdn/hy/11342424.flv +电影_斯坦森,http://cfss.cc/cdn/hy/21059588.flv +电影_八点档,http://cfss.cc/cdn/hy/880261.flv +电影_蜘蛛侠,http://cfss.cc/cdn/hy/21059599.flv +电影_贺岁片,http://cfss.cc/cdn/hy/11601986.flv +电影_功夫片,http://cfss.cc/cdn/hy/11352941.flv +电影_黑帮片,http://cfss.cc/cdn/hy/11336719.flv +电影_丧尸片,http://cfss.cc/cdn/hy/21059578.flv +电影_灾难片,http://cfss.cc/cdn/hy/11602075.flv +电影_谍战片,http://cfss.cc/cdn/hy/21059587.flv +电影_战争片,http://cfss.cc/cdn/hy/21059574.flv +电影_犯罪片,http://cfss.cc/cdn/hy/11352974.flv +电影_古装片,http://cfss.cc/cdn/hy/11336590.flv +电影_高分动作,http://cfss.cc/cdn/hy/11352884.flv +电影_动作电影,http://cfss.cc/cdn/hy/11602077.flv +电影_搞笑喜剧,http://cfss.cc/cdn/hy/11342423.flv +电影_喜剧专场,http://cfss.cc/cdn/hy/11602044.flv +电影_欢笑影院,http://cfss.cc/cdn/hy/11352894.flv +电影_不挤影院,http://cfss.cc/cdn/hy/11352897.flv +电影_国产悬疑,http://cfss.cc/cdn/hy/11342395.flv +电影_快意江湖,http://cfss.cc/cdn/hy/11342435.flv +电影_黑帮斗争,http://cfss.cc/cdn/hy/11342419.flv +电影_古墓系列,http://cfss.cc/cdn/hy/11352913.flv +电影_嫣然影厅,http://cfss.cc/cdn/hy/11601977.flv +电影_女神系列,http://cfss.cc/cdn/hy/11336571.flv +电影_经典女神,http://cfss.cc/cdn/hy/11352909.flv +电影_许氏三杰,http://cfss.cc/cdn/hy/11602033.flv +电影_经典港片,http://cfss.cc/cdn/hy/11352965.flv +电影_镖行天下,http://cfss.cc/cdn/hy/11352969.flv +电影_高能反转,http://cfss.cc/cdn/hy/11352887.flv +电影_喜乐影院,http://cfss.cc/cdn/hy/21059580.flv +电影_蘑菇影厅,http://cfss.cc/cdn/hy/11601981.flv +电影_搞笑恐怖,http://cfss.cc/cdn/hy/11601960.flv +电影_死神来了,http://cfss.cc/cdn/hy/11352903.flv +电影_变形金刚,http://cfss.cc/cdn/hy/21059596.flv +电影_怪兽系列,http://cfss.cc/cdn/hy/21059554.flv + +林正英 ,http://43.138.170.29:35455/douyu/218859 +刘德华电影1,http://43.138.170.29:35455/douyu/2516864 +斗鱼频道,http://epg.112114.xyz/douyu/8770422 +斗鱼频道,http://zzy789.xyz/douyu1.php?id=8770422 +豆瓣高分,http://43.138.170.29:35455/douyu/8770422 +喜剧电影,http://43.138.170.29:35455/douyu/9292492 +开心锤锤,http://43.138.170.29:35455/douyu/9018297 +轮播电影1y,http://tc-tct.douyucdn2.cn/dyliveflv1/122402rK7MO9bXSq_2000.flv?wsAuth=8cea39337984fd3341cc9ec569502e4f&token=cpn-androidmpro-0-122402-0fcea45d2300cfa0ac75fafd8679bb53af10de8c33ae99d9&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=p +轮播电影2y,http://tc-tct.douyucdn2.cn/dyliveflv1a/20415rnWbjg6Ex1K_2000.flv?wsAuth=2ccc7b4ba29208aaba62dae54cbbd68c&token=cpn-androidmpro-0-20415-b6774b3b3249db17fff84d73c7585c95e780dbccdb08e4bc&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=p +轮播电影3y,http://tc-tct.douyucdn2.cn/dyliveflv1/85894rmovieChow_2000.flv?wsAuth=7d054e041804e80af8aa7e975e2d8573&token=cpn-androidmpro-0-85894-a3575d938a4aa309c687f5fb85a1009fc65cfbeeb2672310&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=pla +轮播电影4y,http://tc-tct.douyucdn2.cn/dyliveflv1a/20415rnWbjg6Ex1K_2000.flv?wsAuth=99705a1921ddd49fb7079a02f02bedc4&token=cpn-androidmpro-0-20415-b6774b3b3249db17d8beee6676fdf877fe8b1576307ef8e6&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=p +鬼片恐怖惊悚,http://43.138.170.29:35455/douyu/2935323 +恐怖故事,http://43.138.170.29:35455/douyu/2337939 +科幻动作,http://43.138.170.29:35455/douyu/4332 +怡寳影院,http://43.138.170.29:35455/douyu/434971 +粤语电影,http://43.138.170.29:35455/douyu/6566671 +苹果影院,http://43.138.170.29:35455/douyu/2793084 +午夜故事,http://43.138.170.29:35455/douyu/8722254 +译制国语,http://43.138.170.29:35455/douyu/2436390 +蚂蚱影院,http://43.138.170.29:35455/douyu/6079455 +纪录片,http://43.138.170.29:35455/douyu/4360438 +贝爷求生,http://43.138.170.29:35455/douyu/454867 +恐怖丧尸鬼片,http://43.138.170.29:35455/douyu/263824 +荒野建造者,http://43.138.170.29:35455/douyu/9611578 +邦德影院,http://43.138.170.29:35455/douyu/9292499 +特辑影院,http://43.138.170.29:35455/douyu/3637778 +惊悚影院,http://43.138.170.29:35455/douyu/96577 +吃米滴虫,http://43.138.170.29:35455/douyu/315457 +漫威影片,http://43.138.170.29:35455/douyu/6140589 +刘德华电影1,http://43.138.170.29:35455/douyu/2516864 +豆瓣高分,http://43.138.170.29:35455/douyu/8770422 +林正英电影2,http://43.138.170.29:35455/douyu/7356023 +宇哥电影,http://43.138.170.29:35455/douyu/413573 +贝爷影厅2,http://43.138.170.29:35455/douyu/36337 +霍格影片,http://43.138.170.29:35455/douyu/8814650 +冰冰经典电影,http://43.138.170.29:35455/douyu/74374 +避风港影院,http://43.138.170.29:35455/douyu/9826611 +恐怖经典,http://43.138.170.29:35455/douyu/1165374 +华语电影,http://43.138.170.29:35455/douyu/3928 +喜剧电影,http://43.138.170.29:35455/douyu/9292492 +一起看恐怖片,http://43.138.170.29:35455/douyu/9412287 +片荒的日子,http://43.138.170.29:35455/douyu/4258555 +大胡子魏,http://43.138.170.29:35455/douyu/8792763 +童年回忆,http://43.138.170.29:35455/douyu/8915074 +爆笑解说,http://43.138.170.29:35455/douyu/8317926 +爆笑解说,http://43.138.170.29:35455/douyu/2660125 +下饭神剧,http://43.138.170.29:35455/douyu/276200 +悬疑犯罪,http://43.138.170.29:35455/douyu/9171887 +不一样的电影,http://43.138.170.29:35455/douyu/2632223 +科幻影视解说,http://43.138.170.29:35455/douyu/3508304 +开心锤锤,http://43.138.170.29:35455/douyu/9018297 +凛冬之地,http://43.138.170.29:35455/douyu/8945323 +看美剧,http://43.138.170.29:35455/douyu/8869614 +动漫直播,http://43.138.170.29:35455/douyu/1487654 + + + +龍🐉YY轮播,#genre# +超级鬼片,https://lunbo.freetv.top/yy/1355641195 +经典鬼片,https://lunbo.freetv.top/yy/29460894 +恐怖电影,https://lunbo.freetv.top/yy/24066336 +刘德华,http://43.138.170.29:35455/yy/1382745111 +周星驰,http://43.138.170.29:35455/yy/1354658049 +周星驰,http://43.138.170.29:35455/yy/1382736808 +周润发,http://43.138.170.29:35455/yy/1354888733 +周润发,http://43.138.170.29:35455/yy/1354889044 +林正英,http://43.138.170.29:35455/yy/1353685311 +林正英,http://43.138.170.29:35455/yy/34229877 +林正英,http://43.138.170.29:35455/yy/1453996620 +林正英,http://43.138.170.29:35455/yy/1354932444 +李连杰,http://43.138.170.29:35455/yy/74613175 +洪金宝,http://43.138.170.29:35455/yy/1354924839 +香港电影,http://43.138.170.29:35455/yy/1382736910 +经典电影,http://43.138.170.29:35455/yy/1450556636 +电影2,http://43.138.170.29:35455/yy/1354889048 +经典鬼片,http://43.138.170.29:35455/yy/1463783198 +经典鬼片,http://43.138.170.29:35455/yy/29460894 +香港鬼片2,http://43.138.170.29:35455/yy/1382737886 +香港鬼片3,http://43.138.170.29:35455/yy/24066336 +港片电影,http://43.138.170.29:35455/yy/1459801818 +超英集结,http://43.138.170.29:35455/yy/1382745091 +漫威英雄,http://43.138.170.29:35455/yy/1354932402 +港片赌片,http://43.138.170.29:35455/yy/1355076627 +惊恐盗暮鬼怪,http://43.138.170.29:35455/yy/1382749525 +张国荣,http://43.138.170.29:35455/yy/1354930961 +哥斯拉,http://43.138.170.29:35455/yy/1382736833 +大话西游,http://43.138.170.29:35455/yy/1382851590 +经典鬼片2,http://43.138.170.29:35455/yy/1355641195 +武侠港片,http://43.138.170.29:35455/yy/1451866697 + +龍🐉邵氏线,#genre# + +邵氏影院@代,http://mmitv.top:80/test/douyu.php?id=4246519 +邵氏影院@代,https://www.goodiptv.club/douyu/4246519 +邵氏影院@代,http://159.75.85.63:35455/douyu/4246519 +邵氏影院@代,http://43.138.170.29:35455/douyu/4246519 +邵氏影院@代,http://epg.112114.xyz/douyu/4246519 +天映频道@代,http://ali.hlspull.yximgs.com/live/huanqiuhklivejejcxlvofbjbvnjjsfjvbhfhcvxcvjsjbcvjfdvjsfcbjbnjtypj.flv +天映经典@代,http://ali.hlspull.yximgs.com/live/huanqiuhklivevcnydsjfjsetjjfcvbcdtsjjfvxcvsjnmbnljjhjjnmyhsjjftydj.flv +CCtv6影院代,http://182.139.250.132:5033/syhjcms_hls/98000000000000000001703664302519/index.m3u8?playtype=1&usercode=cl@is +CCtv6影院代,http://mobilelive-ds.ysp.cctv.cn/ysp/2013693901.m3u8 +战争电影@代,https://live.metshop.top/yy/1382736865 +豆瓣电影@代,http://diyp.112114.xyz/douyu/8770422 +重温经典@代,http://1.62.64.80/0b926d37065dc656266be75dd9d25565.v.smtcdns.net/zycfcdn.gdwlcloud.com/PLTV/88888888/224/3221225563/index.m3u8 +重温经典@代,http://1.62.64.234/2d07c55520f72f74e7a4710c981d91e2.v.smtcdns.net/zycfcdn.gdwlcloud.com/PLTV/88888888/224/3221225563/index.m3u8 +重温经典@代,http://111.31.107.123/1.v.smtcdns.net/zycfcdn.gdwlcloud.com/PLTV/88888888/224/3221225563/index.m3u8 +戏曲频道电信,http://182.139.250.132:5033/syhjcms_hls/98000000000000000001681695523229/614400/index.m3u8?playtype=1&usercode=cl@is&cl_cid=98000000000000000001681695523229 +星爷影院@代,http://mmitv.top:80/test/douyu.php?id=122402&u=4654622&cate +豆瓣高分@代,http://43.138.170.29:35455/douyu/8770422 +下饭神剧@代,http://43.138.170.29:35455/douyu/276200 +大吉大利影院,https://pull.kktv8.com/livekktv/128600025.flv +神乐影院-1台,https://tc-tc2-interact.douyucdn2.cn/dyliveflv1/85894rmovieChow_900p.m3u8 +神乐影院-2台,https://tc-tc2-interact.douyucdn2.cn/dyliveflv1a/122402rK7MO9bXSq_900.m3u8 +小猪优版剧院,https://www.goodiptv.club/douyu/10297898 +公众号天微科技,https://www.goodiptv.club/douyu/10297898 +绍兴影院频道,http://live.shaoxing.com.cn/video/s10001-sxtv3/index.m3u8 +南京影院频道,http://live.nbs.cn/channels/njtv/xxpd/m3u8:500k/live.m3u8 +平泉影院频道,https://jwliveqxzb.hebyun.com.cn/pqys/pqys.m3u8 +新昌休闲影院,http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8 +晴彩影院四川,http://182.139.250.132:5033/HUAWEI/20000001000000050000000000000371/index.m3u8?playtype=1&usercode=cl@is +CCTV-戏曲台,http://fzcds.cn:8822/hls/74/index.m3u8 +吃米滴虫✔原,http://159.75.85.63:35455/douyu/315457 +冰冰经典✔原,http://159.75.85.63:35455/douyu/74374 +星爷影院✔原,http://159.75.85.63:35455/douyu/508118 +瑶瑶恐怖✔原,http://159.75.85.63:35455/douyu/2935323 +怡寶影院✔原,http://159.75.85.63:35455/douyu/434971 +小黛兮影✔原,http://159.75.85.63:35455/douyu/11553944 +萌小鬼片✔原,http://159.75.85.63:35455/douyu/3928 +神乐影剧✔原,http://159.75.85.63:35455/douyu/122402 +可乐影院✔原,http://159.75.85.63:35455/douyu/20415 +小宇60帧✔原,http://159.75.85.63:35455/douyu/323876 +恐怖惊悚✔原,http://159.75.85.63:35455/douyu/96577 +電影劇場✔原,http://159.75.85.63:35455/douyu/7575350 +豆瓣高分✔原,http://159.75.85.63:35455/douyu/8770422 +漫威剧情✔原,http://159.75.85.63:35455/douyu/6140589 +霍格沃茨✔原,http://159.75.85.63:35455/douyu/8814650 +鱼宝恐怖✔原,http://159.75.85.63:35455/douyu/1165374 +小u*鬼片✔原,http://mmitv.top/test/douyu.php?id=96577&u=4150734&cate +吃奶滴虫✔原,http://159.75.85.63:35455/douyu/263824 +喜剧电影✔原,http://159.75.85.63:35455/douyu/9292492 +避风影院✔原,http://159.75.85.63:35455/douyu/9826611 +欧美大片✔原,http://159.75.85.63:35455/douyu/2793084 +贝爷max✔原,http://159.75.85.63:35455/douyu/4332 +贝爷影厅✔原,http://159.75.85.63:35455/douyu/252802 + +龍🐉经典剧,#genre# + +地道战,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/312e39c68cc441feb79d1c2d7e16cbbd/850.m3u8 +跟踪追击,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/059096230b4e46c0b5d4929ff98435d0/850.m3u8 +地雷战,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/a90c788a458e40508615d711b8aae1af/850.m3u8 +五朵金花,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/ae639196cf3949368c1b05776bb1d4fa/850.m3u8 +侦察兵,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/3e4727a0fca34aa8b9774472a4908eaf/850.m3u8 +红色娘子军,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/2ea3b03b3a414303b830f92579243001/850.m3u8 +洪湖赤卫队,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/2a58afdece3342eaac927648a2cccabd/850.m3u8 +狼牙山五壮士,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/71c649af833c43a9b61e4f5c913bbd6b/850.m3u8 +三毛从军记,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/919a08437d44499b87b7b4903f2b2ae6/850.m3u8 +祖国的花朵,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/ef10a9a9b1534fe38fd4fdfdac1ed493/850.m3u8 +闪闪的红星,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/b90fcf1a5425479baf3a045282a1f263/850.m3u8 +花儿朵朵,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/53a44d8649024b58b69f4468b922b8f0/850.m3u8 +神秘的旅伴,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/ef95b9f13e2c47b882b67ef52139786a/850.m3u8 +赛虎,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/34505162ca0848af9e23d33ed4018088/850.m3u8 +鸡毛信,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/41fcf9fefcf247c78e2d64c7af5d6edd/850.m3u8 +特别攻击队,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/c69eed95a2cd4752850bcac109151e37/850.m3u8 +南征北战,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/9557e1bfd91b4319975dfeffcc44d6b7/850.m3u8 +羊城暗哨,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/215e7a6713884bcab8cc461e245531af/850.m3u8 +51号兵站,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/fa6557276d644b5ea399956a6bf94e59/850.m3u8 +突破乌江,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/bf8ccfff8bc949a6a2ed6bcda45eb4e2/850.m3u8 +英雄儿女,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/479d044b7a3d465fa3a5b850d36b219c/850.m3u8 +柳堡的故事,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/706b979b8a934aaab677a11c410bb119/850.m3u8 +李双双,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/bac928d747984ed3bd17550879522f89/850.m3u8 +大闹天宫,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/a57c9e5e1696486e97d229a3ddb13749/850.m3u8 +铡刀下的红梅,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/6f0817bfbedd42c682d9152abd5402a3/850.m3u8 +牛郎织女,http://hls.cntv.myalicdn.com/asp/hls/2000/0303000a/3/default/adc6931516694659a7b54176e4b38299/2000.m3u8 +罗密欧与朱丽叶,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/95193e30bd454e77bc59a140f4e32ad2/850.m3u8 +红牡丹,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/921b8081b58b4c2f81fb233b6c8e89ac/850.m3u8 +三毛流浪记,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/b9ce94c233b043bebe30340f09868ed1/850.m3u8 +战上海,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/e84b188d1bf7484fb4907d99827cbd45/850.m3u8 +铁道游击队,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/46d8664dacad4dbb9c790256688048dc/850.m3u8 +红孩子,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/bf55b84744d64eeaaedc5ea603855597/850.m3u8 +董存瑞,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/b657281ba44a4b279f55ec860c12543b/850.m3u8 +宝葫芦的秘密,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/866474add7224067877bed430d9380ab/850.m3u8 +地下尖兵,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/188d5706e5774f06850e06e4f181c4bd/850.m3u8 +小兵张嘎,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/d8c05f3ca36d48e6b1997b523e885c5c/850.m3u8 +上甘岭,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/c91f7aae9b8b4c578a7d9ecdf94b9dca/850.m3u8 +平原游击队,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/180ef18dec9a4edeb9d2b520d57cfc7f/850.m3u8 +前哨,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/1e9c4ffe4002492484c0f50235299759/850.m3u8 +刘三姐,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/680e102dc8614632862cf49a236def6e/850.m3u8 +犬王,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/08d97be6d296434098297a505e2f05b5/850.m3u8 +举起手来-追击阿多丸,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/a1093561ad0a4071b68eeae884de01e7/850.m3u8 +马兰花,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/c89d105b9661464bb8c5c5f46977f6c4/850.m3u8 +冰山上的来客,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/c86d45b176d642738dabf9da7361653b/850.m3u8 +红日,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/f2ee6e22cd894be1bc8c90b19f47ae2e/850.m3u8 +战火中的青春,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/be0d797e3b494f5fa1cb6d48d29643f3/850.m3u8 +英雄虎胆,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/b7fcd0d4ebb045fe8e653ee71b4ef8fc/850.m3u8 +三进山城,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/ee157540ff2540ada0250edf3f6a3e0a/850.m3u8 +苦菜花,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/ec47d310d888464f8446af5e6e04ded8/850.m3u8 +渡江侦察记,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/d708e9c64aa34519af5490a793756c38/850.m3u8 +奇袭,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/ac8b28fb66104aa7a5e3cd5a10ea986b/850.m3u8 +小花,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/f97fb71bff5947ddaf905cc121c42ee4/850.m3u8 +智取华山,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/ef243e3fa20544df9cc24b72ace8efa0/850.m3u8 +少林寺,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/8af9ff377238407e927e597a1af47788/850.m3u8 +大气层消失,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/45122e56521f49b68020e3e66bc28ce8/850.m3u8 +霹雳贝贝,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/7accc94d5590415284af5db904e4be5a/850.m3u8 +泉水叮咚,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/8b039f6988a04ca8b086d35031a77204/850.m3u8 +柳毅传书,http://hls.cntv.kcdnvip.com/asp/hls/2000/0303000a/3/default/2ee71b96a3574889829e17d70b3f3c02/2000.m3u8 +卷席筒,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/8bebd13583e341e1b9d9e1180d36aaaa/850.m3u8 +墙头马上,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/c45285c6b2ac46a58d49c9351b18e369/850.m3u8 +五女拜寿,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/c38771a355214e97a855c213693a1153/850.m3u8 +女驸马,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/ba29b790f8ec435ba94fc072558431f0/850.m3u8 +林海雪原,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/5023f1dcc73b4090962ee31e017fb8e3/850.m3u8 +孙悟空三打白骨精,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/1e34b7a2f93d4efeaf7a583409b270cc/850.m3u8 +巴黎圣母院,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/dd86918aafb042c5b51584ffcf5b0e00/850.m3u8 +魂断蓝桥,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/7fc704c5b2e04e65bab92b3986883ab3/850.m3u8 +茜茜公主,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/ffa8a73877194632b0278898f297d07b/850.m3u8 +桂河大桥,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/b125a3edccb34637b336cb867e8a5d5d/850.m3u8 + + + +龍🐉游戏区,#genre# +穿越火线,http://tc-tct.douyucdn2.cn/dyliveflv1/605964rzzgGEOZHr.flv?wsAuth=43ef2d796067cbec9c238c73235a1005&token=cpn-androidmpro-0-605964-b9be22700076c085e82232beb0fbe7838e28994acafb3964&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=play1 +和平精英·手游,http://tc-tct.douyucdn2.cn/dyliveflv1/999rx47n2pp8pKD_2000.flv?wsAuth=6c429f39afed615e842e02ad1a9b1c6e&token=cpn-androidmpro-0-999-d32d75306aab2a7980ad37445844bcccf012d2bb110b5c33&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=play1 +梦幻西游·手游,http://tc-tct.douyucdn2.cn/dyliveflv1/9163712rMgvzHPS8.flv?wsAuth=08386df29327fb79ef1cf360dd01e99c&token=cpn-androidmpro-0-9163712-b202112df1a8ff8ce762e1d3561b3623df9da0ea0a74880e&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=play1 +跑跑卡丁车,http://tc-tct.douyucdn2.cn/dyliveflv1/7722576rWHyhVf6Z_2000.flv?wsAuth=05a690d94290609839e7c868f44fbc3d&token=cpn-androidmpro-0-7722576-6b878e1c279c4ee5468d3b8183a8170664764100093885bc&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=play1 +JJ斗地主,http://tc-tct.douyucdn2.cn/dyliveflv1a/488743rAHScWyyII_2000.flv?wsAuth=fd695c444eeee99cc6122ed396c805ba&token=cpn-androidmpro-0-488743-df8b1830ef2e6ce156759645768df95bf77749da61fcc901&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=play2 +云顶之弈,http://tc-tct.douyucdn2.cn/dyliveflv1/522423rw7NgKaYl9_2000p.flv?wsAuth=ce3c0d32c960ce39c10717b795f7ddf9&token=cpn-androidmpro-0-522423-99737a9b5bf363c27f62ed65c0f1025bd1ccd3a301de7e93&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=play1 +QQ飞车·手游,http://tc-tct.douyucdn2.cn/dyliveflv1a/5040227raXQRnvWY_2000.flv?wsAuth=0654cc930e81f0d2b58264196ded38af&token=cpn-androidmpro-0-5040227-432528579fe947129e217c8f3c39d0a94c81c1426c347bfb&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=play2 +CF·手游,http://tc-tct.douyucdn2.cn/dyliveflv1/868191rjy69PsEAz_2000.flv?wsAuth=63d571126613feca6067da321aaf2df2&token=cpn-androidmpro-0-868191-846aacab1859214c037e4d0c263121580403540feea39901&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=play1 +王者荣耀,http://tc-tct.douyucdn2.cn/dyliveflv1a/1863767rkpl2_2000p.flv?wsAuth=f73077d85e523eb95b6ce1ea3581b46b&token=cpn-androidmpro-0-1863767-7b520f6fe0a2b18db3c111c4e3c14350afd2dcaf43d0ef60&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=play2 +跑跑卡丁车·手游,http://tc-tct.douyucdn2.cn/dyliveflv1a/6672862r90xSwiRP_2000.flv?wsAuth=1c2c516dd80b1193241687841f128073&token=cpn-androidmpro-0-6672862-ee6297daa5d07f3494aad175947a679df4184f7934380258&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=play2 +永劫无间,http://tc-tct.douyucdn2.cn/dyliveflv1a/9662891rlaeIAP3A_2000.flv?wsAuth=07d3125e1ec93068330e14be22a09454&token=cpn-androidmpro-0-9662891-7de7dc707e1a51dddb241f8ecad4f36806d04b45752cbbd8&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=play2 + + + + +龍🐉格斗区,#genre# +2024年3月16日武林风,https://media2.hndt.com/data_01/1/3/2024/03/15/e688912b326aee2b7e2fc8d54c069cb8.mp4 +2024年3月9日武林风,https://media2.hndt.com/data_01/1/3/2024/03/11/0704e2e32ff05981422ab960e722892b/1766994972847058945_1920x1080_2000.m3u8 +2024年3月2日武林风,https://txmov2.a.kwimgs.com/upic/2024/03/02/11/BMjAyNDAzMDIxMTEyMTVfMTIyOTE2ODQ1Ml8xMjYzMzk2NjUzMjJfMF8z_b_B81d8b4120d76490a2becf33b6c2ae39a.mp4?tag=1-1709354572-std-1-cj51uhutd2-e3dc8b97d8371db4&clientCacheKey=3x8xiwbr34xyzpy_b.mp4&tt=b&di=7cdee4c6&bp=12681&ali_redirect_ex_hot=66666800&ali_redirect_ex_beacon=1 +2024年2月17日武林风全球功夫盛典[2],https://txmov2.a.kwimgs.com/upic/2024/02/18/22/BMjAyNDAyMTgyMjA2NThfMTIyOTE2ODQ1Ml8xMjUzMjM0NzUyNDhfMF8z_b_B1f6af89654b31207047069499cea04d9.mp4?tag=1-1708267113-std-1-hbjoaahdyu-ecb9fa9bb60959a9&clientCacheKey=3xdqece4hixmv9w_b.mp4&tt=b&di=276c0430&bp=12681&ali_redirect_ex_hot=66666800&ali_redirect_ex_beacon=1 +2024年2月3日武林风全球功夫盛典[1],https://media2.hndt.com/data_01/1/3/2024/02/02/9efd40fe4b35b248d702e962120c5dac.mp4 +武林风①,https://media2.hndt.com/data_01/1/3/2022/07/02/87f9a85d12bf30dd0c00d91489bfafad.mp4 +武林风②,https://media2.hndt.com/data_01/1/3/2022/07/01/66a0886a5b11efae6d95fb790844507c.mp4 +武林风③,https://txmov2.a.yximgs.com/bs3/video-hls/5230931045761004318_hlsb.m3u8?pkey=AAVTKbr7pJ8xZ2oLnj2D_utkZtu68l5j3B0HGCAmoJda5-fVEzVWFCNOZ43xQmWN7DnRDPTHVhz1k8eE8OGAiVQKjvdjPlnqL9fJAHubPbSJ-If0h8PaVqVNfRZANTTZbQs +武林风④,https://txmov2.a.yximgs.com/upic/2022/06/17/22/BMjAyMjA2MTcyMjI0MDNfODQ0MzgwOTA1Xzc2OTk4MzUyNzc0XzBfMw==_b_B8af7c147dfba60f9d8979f50f97a2548.mp4?pkey=AAWK6nlIWTZ6Zu2gltJ3isDKlTRDtfkhBYez6e6Soa0vP5yQUooquyCQx9u8duylsXXQQHHdZBy85HgPH0an2n3eHTBUAJO-EabYJll0h0iUQxMx9RIbOkMug5NjTCa1rw4&tag=1-1655476891- +武林风⑤,https://txmov2.a.yximgs.com/bs3/video-hls/5188146847734472653_hlsb.m3u8?pkey=AAW27VnZYedosyOZQx1hvnIua23jOxawv4eaMNL4XvcZqVWo1YQOvrLWpOs5tXtczGlig5pmclRuE4UQzgYCRafDvB5DiaY5RH-oIvZZUBU_VJWmT_YCssFAH-JIRrTJRHE +武林风⑥,https://media2.hndt.com/data_01/1/3/2022/05/27/df872767b848e27a5f9ce24dead7e68a.mp4?_=1 +武林风⑦,https://media2.hntv.tv/data_01/1/3/2022/05/13/b5ee319f375fa2f0f02f7e21c73fdbfa.mp4 +武林风⑧,https://media2.hntv.tv/data_01/1/3/2022/04/29/2c283887daa281c5cd0b04d91c3b145b.mp4 +武林风⑨,https://media2.hntv.tv/data_01/1/3/2022/04/29/2c283887daa281c5cd0b04d91c3b145b.mp4 +武林风⑩,https://vod.stream.hndt.com/HeNan1/20220422/HeNan1_20220422_2110_2240.mp4 +武林风⑪,https://vod.stream.hndt.com/HeNan1/20220422/HeNan1_20220422_2110_2240.mp4 +武林风⑫,https://vod.stream.hndt.com/HeNan1/20220422/HeNan1_20220422_2110_2240.mp4 +武林风⑬,https://vod.stream.hndt.com/HeNan1/20220415/HeNan1_20220415_2110_2240.mp4 +武林风⑭,https://vod.stream.hndt.com/HeNan1/20220415/HeNan1_20220415_2110_2240.mp4 + +UFC格斗之夜①,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜②,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜③,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜④,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜⑤,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜⑥,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜⑦,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜⑧,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜⑨,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜⑩,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜⑪,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜⑫,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜⑬,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜⑭,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜⑮,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜⑯,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜⑰,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗之夜⑱,https://txmov2.a.yximgs.com/bs3/video-hls/5189554226836202631_hlsb.m3u8?pkey=AAXSV7JAeO9odQjnMgyNIfPEebdRZsIbqDtZjPmCcngq2T3CpRqckqi4KWLMTP6c530T9vGf4V4Bhg9Zcy5rxoPU7dgU_WZCVRaBoyDNV2K2QZ93qPGe-Jav6ZOTDAYZP1k +UFC格斗①,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗②,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗③,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗④,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗⑤,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗⑥,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗⑦,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗⑧,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗⑨,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗⑩,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗⑪,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗⑫,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗⑬,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗⑭,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗⑮,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗⑯,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗⑰,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗⑱,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗⑲,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗⑳,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +UFC格斗㉑,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/8983d8c926edf403-e8bfe3f01cfa00a46eca126706bd7b1f-hls_1080p_h264_60_1.m3u8?pkey=ABBRbnXG8ub6M73LmC58Re5OToo6A8Ri64I86UPefcv6zytj5GaOBBp3auY1VHFouDRJDOfdcxTYd4Bhj8JAXIandAsR8MtUE6DC_7sLWZiknVnPOLLfTu1EAnm63boreF3g1S8IOU7iMlJArIveLlkEk9853uCGrvwqh2RmZgTwlu2Yy5M91OBRyQXXhSIBkkDANqVrKoTRsIW8Dt7P8eFS5TIWU8_nOEmGccAUJ9ky3ncc9WxMz9L9jpZamYmLfN0&safety_id=AALufSf0OHCmkfb0zHi92cpK +泰之战①,https://txmov2.a.yximgs.com/bs3/video-hls/5232338420747548479_hlsb.m3u8?pkey=AAUR7Wp4cKw3MEaOyv0EwH0kj1gOlii1ZrT8SUp9YTncOWbLEHJbYU-x-Yhtke7HqUQ6yr6Pbju4qJrcU5aaMmCaVrtTQFSkIPT20ZtqAdq3HfUJDPL1s0y8u3JSO6prRNg +泰之战②,https://txmov2.a.yximgs.com/bs3/video-hls/5232338420747548479_hlsb.m3u8?pkey=AAUR7Wp4cKw3MEaOyv0EwH0kj1gOlii1ZrT8SUp9YTncOWbLEHJbYU-x-Yhtke7HqUQ6yr6Pbju4qJrcU5aaMmCaVrtTQFSkIPT20ZtqAdq3HfUJDPL1s0y8u3JSO6prRNg +泰之战③,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/34378b42e3e24ee1-3df5d1ca280a33eaccd2770be028f6a8-hls_720p_2.m3u8?pkey=ABCDYFJSTiiZ1tDpFhypQIxzokOgBCEhbIo5T_S26NboLDyOFciN1mccYNCQQce6SliNQ-XoBFIKfeX2IS_C1sXXtbRLwVDDR4qyNW4NsBvJlTRspyB5nuEFJPaji5TIPQTnuu5Wgqrlvd0IBliMWyIwzz_Sl2W_7zbKbRAJxsQpvjOhI8yOwaJuImWvQ2GRp3tLEuauCdFB5Rl0zo9WqbS_JYu-ckvAZ5kgYtZ4NomZv5e4AcRqgho0TL0PtYuGVwI&safety_id=AALufSf0OHCmkfb0zHi92cpK +泰之战④,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/34378b42e3e24ee1-3df5d1ca280a33eaccd2770be028f6a8-hls_720p_2.m3u8?pkey=ABCDYFJSTiiZ1tDpFhypQIxzokOgBCEhbIo5T_S26NboLDyOFciN1mccYNCQQce6SliNQ-XoBFIKfeX2IS_C1sXXtbRLwVDDR4qyNW4NsBvJlTRspyB5nuEFJPaji5TIPQTnuu5Wgqrlvd0IBliMWyIwzz_Sl2W_7zbKbRAJxsQpvjOhI8yOwaJuImWvQ2GRp3tLEuauCdFB5Rl0zo9WqbS_JYu-ckvAZ5kgYtZ4NomZv5e4AcRqgho0TL0PtYuGVwI&safety_id=AALufSf0OHCmkfb0zHi92cpK +泰之战⑥,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/88bdbc14d3dc1d91-c6662fa18365a97c8b74884f4b46c785-hls_720p_2.m3u8?pkey=ABAv3Yy3BJc67SZRCdTebHV0amKct-vhu29SSWYf_P7_UrYqPOKzh7MPjOaxb-yeUxxsOLCaiLbmj1woFbnBiKpnn7VA5hHlB3bnIY_Z1vbX3M6NNbZ7GdJzZF92LBOGXBo_237hvP0ykpF9UNqDw_jIKm5tsz5TWHnIz7afliuTWAIwrUzCQAY4Gtj4HAltzfcx-_JTnU6oW0jfVCrPP1KANjHdda-wHSfPhrFgNgZim9Rh00Xi7Ab5Wv4hxTfzxq8&safety_id=AALufSf0OHCmkfb0zHi92cpK +泰之战⑦,https://txmov2.a.yximgs.com/mediacloud/acfun/acfun_video/88bdbc14d3dc1d91-c6662fa18365a97c8b74884f4b46c785-hls_720p_2.m3u8?pkey=ABAv3Yy3BJc67SZRCdTebHV0amKct-vhu29SSWYf_P7_UrYqPOKzh7MPjOaxb-yeUxxsOLCaiLbmj1woFbnBiKpnn7VA5hHlB3bnIY_Z1vbX3M6NNbZ7GdJzZF92LBOGXBo_237hvP0ykpF9UNqDw_jIKm5tsz5TWHnIz7afliuTWAIwrUzCQAY4Gtj4HAltzfcx-_JTnU6oW0jfVCrPP1KANjHdda-wHSfPhrFgNgZim9Rh00Xi7Ab5Wv4hxTfzxq8&safety_id=AALufSf0OHCmkfb0zHi92cpK +武林风①,https://media2.hndt.com/data_01/1/3/2022/07/02/87f9a85d12bf30dd0c00d91489bfafad.mp4 +武林风②,https://media2.hndt.com/data_01/1/3/2022/07/01/66a0886a5b11efae6d95fb790844507c.mp4 +武林风③,https://txmov2.a.yximgs.com/bs3/video-hls/5230931045761004318_hlsb.m3u8?pkey=AAVTKbr7pJ8xZ2oLnj2D_utkZtu68l5j3B0HGCAmoJda5-fVEzVWFCNOZ43xQmWN7DnRDPTHVhz1k8eE8OGAiVQKjvdjPlnqL9fJAHubPbSJ-If0h8PaVqVNfRZANTTZbQs +武林风④,https://txmov2.a.yximgs.com/upic/2022/06/17/22/BMjAyMjA2MTcyMjI0MDNfODQ0MzgwOTA1Xzc2OTk4MzUyNzc0XzBfMw==_b_B8af7c147dfba60f9d8979f50f97a2548.mp4?pkey=AAWK6nlIWTZ6Zu2gltJ3isDKlTRDtfkhBYez6e6Soa0vP5yQUooquyCQx9u8duylsXXQQHHdZBy85HgPH0an2n3eHTBUAJO-EabYJll0h0iUQxMx9RIbOkMug5NjTCa1rw4&tag=1-1655476891- +武林风⑤,https://txmov2.a.yximgs.com/bs3/video-hls/5188146847734472653_hlsb.m3u8?pkey=AAW27VnZYedosyOZQx1hvnIua23jOxawv4eaMNL4XvcZqVWo1YQOvrLWpOs5tXtczGlig5pmclRuE4UQzgYCRafDvB5DiaY5RH-oIvZZUBU_VJWmT_YCssFAH-JIRrTJRHE +武林风⑥,https://media2.hndt.com/data_01/1/3/2022/05/27/df872767b848e27a5f9ce24dead7e68a.mp4?_=1 +武林风⑦,https://media2.hntv.tv/data_01/1/3/2022/05/13/b5ee319f375fa2f0f02f7e21c73fdbfa.mp4 +武林风⑧,https://media2.hntv.tv/data_01/1/3/2022/04/29/2c283887daa281c5cd0b04d91c3b145b.mp4 +武林风⑨,https://media2.hntv.tv/data_01/1/3/2022/04/29/2c283887daa281c5cd0b04d91c3b145b.mp4 +武林风⑩,https://vod.stream.hndt.com/HeNan1/20220422/HeNan1_20220422_2110_2240.mp4 +武林风⑪,https://vod.stream.hndt.com/HeNan1/20220422/HeNan1_20220422_2110_2240.mp4 +武林风⑫,https://vod.stream.hndt.com/HeNan1/20220422/HeNan1_20220422_2110_2240.mp4 +武林风⑬,https://vod.stream.hndt.com/HeNan1/20220415/HeNan1_20220415_2110_2240.mp4 +武林风⑭,https://vod.stream.hndt.com/HeNan1/20220415/HeNan1_20220415_2110_2240.mp4 + + +龍🐉美食篇,#genre# +地锅鸡,https://vd4.bdstatic.com/mda-nee3w9hvysz2htkk/480p/h264/1652583640234131248/mda-nee3w9hvysz2htkk.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655033701-0-0-448270cbc0e8dd01b1d3e3e79c645ede&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0300946132&vid=11820591972211290892&abtest=all +河蟹一锅烩,https://vd2.bdstatic.com/mda-nekcx3v9ett2ris5/480p/h264/1653125375347700570/mda-nekcx3v9ett2ris5.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655033479-0-0-b49abd06012eb0b266a58d9dca5c7f5f&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0079449514&vid=6322076425195603579&abtest=all +红曲酱鸭,https://vd3.bdstatic.com/mda-neh81rk1eiuv3w27/480p/h264/1652854920609442406/mda-neh81rk1eiuv3w27.mp4?auth_key=1655033521-0-0-f906c86fac0f9d712e6b40db422982b9&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0121635443&vid=6641467693514512194&abtest=all +红烧海茄子,https://vd2.bdstatic.com/mda-ne9adpzib1w2s7i6/480p/h264/1652168146543774177/mda-ne9adpzib1w2s7i6.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655034801-0-0-619992652cfa0b8d01757056583c773a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1401746639&vid=10650375313183094889&abtest=all +鸿运猪头,https://vd3.bdstatic.com/mda-ndj8t1xtu0qf1vp7/480p/h264_delogo/1650436754621760647/mda-ndj8t1xtu0qf1vp7.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655035359-0-0-e2b5b52787d54808740e5abc56f67794&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1959759277&vid=11845744374558766684&abtest=all +姜辣棒骨,https://vd2.bdstatic.com/mda-nda9532dzfpmrpjb/480p/h264_delogo/1649660429454395375/mda-nda9532dzfpmrpjb.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655035937-0-0-e8dc2cb7fe4807a23083c7a22a38899c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2537470207&vid=17829729200355816866&abtest=all +炕锅羊头,https://vd2.bdstatic.com/mda-ndkbtvkkzmzry5gr/hd/cae_h264_delogo/1650858156241136824/mda-ndkbtvkkzmzry5gr.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655035320-0-0-148e9e7804a8284edd6678b00cb60beb&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1920864857&vid=8826414521234968806&abtest=all +麻辣兔头,https://vd2.bdstatic.com/mda-ndr9vd3muu069myi/480p/h264_delogo/1650956744271709907/mda-ndr9vd3muu069myi.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655035207-0-0-35a7618c2c86d9455e0d8550e048ead7&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1807001502&vid=10868651239061775579&abtest=all +麻辣小龙虾,https://vd3.bdstatic.com/mda-ndu9tguy0fay7ye1/480p/h264_delogo/1651215429015875965/mda-ndu9tguy0fay7ye1.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035125-0-0-f68c0c5448e434f9570361e845bdce0d&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1725743161&vid=9743722764712261597&abtest=all +梅菜扣肉,https://vd4.bdstatic.com/mda-ndc94dad3mfaia93/480p/h264_delogo/1649832429929756958/mda-ndc94dad3mfaia93.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035906-0-0-de5eee241441d09558105da7eef5dc68&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2506904726&vid=10980852652573181338&abtest=all +260买十来只小甲鱼,https://vd4.bdstatic.com/mda-nf29yjvnrcqwwy2q/480p/h264/1654240313985806512/mda-nf29yjvnrcqwwy2q.mp4?auth_key=1655032564-0-0-747aa1c4fdd90716418995aa885348a7&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2764614902&vid=9984932099035144842&abtest=all +霸王牛尾,https://vd3.bdstatic.com/mda-nf39wk2de3ryede7/480p/h264/1654326718567558149/mda-nf39wk2de3ryede7.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655032908-0-0-21cb435cc1f8eb263984e073bb6106c5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3108822864&vid=6595468946187502994&abtest=all +干锅牛蛙,https://vd4.bdstatic.com/mda-neu9v10u2tk22kwt/480p/h264/1653808467692279237/mda-neu9v10u2tk22kwt.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655033139-0-0-6ffe17fd9a49c1b38bd9efbed61a05e8&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3339243039&vid=14953153288685054828&abtest=all +鸡腰炖黄鳝,https://vd3.bdstatic.com/mda-nf5b4qfywy5pzjgu/480p/h264/1654502805261088051/mda-nf5b4qfywy5pzjgu.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655032849-0-0-433e12f29eaab498df3667819d6d9d5b&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3049228437&vid=3904751968646806841&abtest=all +酱焖牛棒骨,https://vd2.bdstatic.com/mda-nerafr1ft7affzwk/480p/h264/1653552110960778877/mda-nerafr1ft7affzwk.mp4?auth_key=1655033260-0-0-e4c291de85acb14f57b8728592bce8d0&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3460184673&vid=12330119679350378689&abtest=all +辣卤驼头,https://vd3.bdstatic.com/mda-newe17bhfrmd35a9/480p/h264/1653991101001259092/mda-newe17bhfrmd35a9.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655032944-0-0-352bdafaee4bbadacf814f1344beecd5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3144408041&vid=1387963609971371324&abtest=all +铁桶烤鸡,https://vd2.bdstatic.com/mda-nf9c27rq4xcbjmk4/480p/h264/1654931961791216300/mda-nf9c27rq4xcbjmk4.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655032635-0-0-7c3ad26ae39d51e736978d393ad44242&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2835878236&vid=15570804519629633873&abtest=all +雪山驼掌,https://vd2.bdstatic.com/mda-nf89bup48h33rnsi/480p/h264/1654758415054577400/mda-nf89bup48h33rnsi.mp4?auth_key=1655032748-0-0-b7c12af769785740b322753442e5c1ff&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2948153948&vid=2972680187953890553&abtest=all +四蹄同烩,https://vd3.bdstatic.com/mda-nefa29rfui86n3pw/480p/h264/1652685563112169821/mda-nefa29rfui86n3pw.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655033628-0-0-ad9c96bb17140c4d2d2f0a2ac1ab2acf&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0228464890&vid=9369566642451833404&abtest=all +酸菜泥鳅,https://vd4.bdstatic.com/mda-ndh7bpuzvpswnwp2/480p/h264_delogo/1650260306760166423/mda-ndh7bpuzvpswnwp2.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035790-0-0-f89005c95d654eed989de592e96986be&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2390503988&vid=10996931384139378668&abtest=all +糖醋牛排,https://vd2.bdstatic.com/mda-ne6apsvwr0mmengs/480p/h264/1651909954766095518/mda-ne6apsvwr0mmengs.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655034849-0-0-30a90703c068320a18a17d308cd93f61&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1449510204&vid=394264423709055760&abtest=all +土匪酥干,https://vd2.bdstatic.com/mda-ndua1tez8vc7zr5z/480p/h264_delogo/1651217539984001622/mda-ndua1tez8vc7zr5z.mp4?auth_key=1655035071-0-0-49402cbadff899380a97b36cc4c6108e&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1671740184&vid=13634275945822664360&abtest=all +土窑乳猪,https://vd3.bdstatic.com/mda-nds73vki5mn28pfm/480p/h264_delogo/1651038226344965832/mda-nds73vki5mn28pfm.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035158-0-0-4ded17b4474485bc7b777496f24a613a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1758484472&vid=16145146088565215341&abtest=all +兔包鸡,https://vd3.bdstatic.com/mda-ne086qd7pxsrab3f/480p/h264_delogo/1651385481542929517/mda-ne086qd7pxsrab3f.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655035021-0-0-5df18cbf9592a36078f609ffabfc46a4&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1621918400&vid=9952112813454050741&abtest=all +乡村1100买头羊,https://vd4.bdstatic.com/mda-kghmm8wqwjvp97gm/hd/mda-kghmm8wqwjvp97gm.mp4?auth_key=1655032152-0-0-e46ffacd02ed77fb1e67b3ad5a8fcff0&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2352305816&vid=17960476347117941562&abtest=all +羊捆肠,https://vd2.bdstatic.com/mda-ne26rr7p33rsj1y2/480p/h264_delogo/1651553280160812392/mda-ne26rr7p33rsj1y2.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655034984-0-0-0666823b4ae21283ba2882e471b26e6b&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1584919948&vid=9594074250590617930&abtest=all +羊杂火锅,https://vd2.bdstatic.com/mda-nde9j23ddgrpi71z/480p/h264_delogo/1650006049614014696/mda-nde9j23ddgrpi71z.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035873-0-0-2143d9b864f19b301bedb0a00da25984&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2473527228&vid=18167929374050651526&abtest=all +猪肉脯,https://vd2.bdstatic.com/mda-neg8b0x05h7m10p0/480p/h264/1652767840097582134/mda-neg8b0x05h7m10p0.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655033590-0-0-1c34d0e5c49e2665ceb69f50ccf08d84&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0190428084&vid=8563202664943920713&abtest=all +河蟹一锅烩,https://vd2.bdstatic.com/mda-nekcx3v9ett2ris5/480p/h264/1653125375347700570/mda-nekcx3v9ett2ris5.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655033479-0-0-b49abd06012eb0b266a58d9dca5c7f5f&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0079449514&vid=6322076425195603579&abtest=all +红曲酱鸭,https://vd3.bdstatic.com/mda-neh81rk1eiuv3w27/480p/h264/1652854920609442406/mda-neh81rk1eiuv3w27.mp4?auth_key=1655033521-0-0-f906c86fac0f9d712e6b40db422982b9&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0121635443&vid=6641467693514512194&abtest=all +猪肉脯,https://vd2.bdstatic.com/mda-neg8b0x05h7m10p0/480p/h264/1652767840097582134/mda-neg8b0x05h7m10p0.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655033590-0-0-1c34d0e5c49e2665ceb69f50ccf08d84&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0190428084&vid=8563202664943920713&abtest=all +四蹄同烩,https://vd3.bdstatic.com/mda-nefa29rfui86n3pw/480p/h264/1652685563112169821/mda-nefa29rfui86n3pw.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655033628-0-0-ad9c96bb17140c4d2d2f0a2ac1ab2acf&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0228464890&vid=9369566642451833404&abtest=all +地锅鸡,https://vd4.bdstatic.com/mda-nee3w9hvysz2htkk/480p/h264/1652583640234131248/mda-nee3w9hvysz2htkk.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655033701-0-0-448270cbc0e8dd01b1d3e3e79c645ede&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0300946132&vid=11820591972211290892&abtest=all +红烧海茄子,https://vd2.bdstatic.com/mda-ne9adpzib1w2s7i6/480p/h264/1652168146543774177/mda-ne9adpzib1w2s7i6.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655034801-0-0-619992652cfa0b8d01757056583c773a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1401746639&vid=10650375313183094889&abtest=all +糖醋牛排,https://vd2.bdstatic.com/mda-ne6apsvwr0mmengs/480p/h264/1651909954766095518/mda-ne6apsvwr0mmengs.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655034849-0-0-30a90703c068320a18a17d308cd93f61&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1449510204&vid=394264423709055760&abtest=all +羊捆肠,https://vd2.bdstatic.com/mda-ne26rr7p33rsj1y2/480p/h264_delogo/1651553280160812392/mda-ne26rr7p33rsj1y2.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655034984-0-0-0666823b4ae21283ba2882e471b26e6b&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1584919948&vid=9594074250590617930&abtest=all +兔包鸡,https://vd3.bdstatic.com/mda-ne086qd7pxsrab3f/480p/h264_delogo/1651385481542929517/mda-ne086qd7pxsrab3f.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655035021-0-0-5df18cbf9592a36078f609ffabfc46a4&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1621918400&vid=9952112813454050741&abtest=all +土匪酥干,https://vd2.bdstatic.com/mda-ndua1tez8vc7zr5z/480p/h264_delogo/1651217539984001622/mda-ndua1tez8vc7zr5z.mp4?auth_key=1655035071-0-0-49402cbadff899380a97b36cc4c6108e&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1671740184&vid=13634275945822664360&abtest=all +麻辣小龙虾,https://vd3.bdstatic.com/mda-ndu9tguy0fay7ye1/480p/h264_delogo/1651215429015875965/mda-ndu9tguy0fay7ye1.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035125-0-0-f68c0c5448e434f9570361e845bdce0d&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1725743161&vid=9743722764712261597&abtest=all +土窑乳猪,https://vd3.bdstatic.com/mda-nds73vki5mn28pfm/480p/h264_delogo/1651038226344965832/mda-nds73vki5mn28pfm.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035158-0-0-4ded17b4474485bc7b777496f24a613a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1758484472&vid=16145146088565215341&abtest=all +麻辣兔头,https://vd2.bdstatic.com/mda-ndr9vd3muu069myi/480p/h264_delogo/1650956744271709907/mda-ndr9vd3muu069myi.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655035207-0-0-35a7618c2c86d9455e0d8550e048ead7&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1807001502&vid=10868651239061775579&abtest=all +炕锅羊头,https://vd2.bdstatic.com/mda-ndkbtvkkzmzry5gr/hd/cae_h264_delogo/1650858156241136824/mda-ndkbtvkkzmzry5gr.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655035320-0-0-148e9e7804a8284edd6678b00cb60beb&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1920864857&vid=8826414521234968806&abtest=all +鸿运猪头,https://vd3.bdstatic.com/mda-ndj8t1xtu0qf1vp7/480p/h264_delogo/1650436754621760647/mda-ndj8t1xtu0qf1vp7.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655035359-0-0-e2b5b52787d54808740e5abc56f67794&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1959759277&vid=11845744374558766684&abtest=all +酸菜泥鳅,https://vd4.bdstatic.com/mda-ndh7bpuzvpswnwp2/480p/h264_delogo/1650260306760166423/mda-ndh7bpuzvpswnwp2.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035790-0-0-f89005c95d654eed989de592e96986be&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2390503988&vid=10996931384139378668&abtest=all +羊杂火锅,https://vd2.bdstatic.com/mda-nde9j23ddgrpi71z/480p/h264_delogo/1650006049614014696/mda-nde9j23ddgrpi71z.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035873-0-0-2143d9b864f19b301bedb0a00da25984&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2473527228&vid=18167929374050651526&abtest=all +梅菜扣肉,https://vd4.bdstatic.com/mda-ndc94dad3mfaia93/480p/h264_delogo/1649832429929756958/mda-ndc94dad3mfaia93.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035906-0-0-de5eee241441d09558105da7eef5dc68&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2506904726&vid=10980852652573181338&abtest=all +姜辣棒骨,https://vd2.bdstatic.com/mda-nda9532dzfpmrpjb/480p/h264_delogo/1649660429454395375/mda-nda9532dzfpmrpjb.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655035937-0-0-e8dc2cb7fe4807a23083c7a22a38899c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2537470207&vid=17829729200355816866&abtest=all +板肠螺狮粉,https://vd4.bdstatic.com/mda-nd98hi8r73ztrpya/480p/h264_delogo/1649573004142585909/mda-nd98hi8r73ztrpya.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655036003-0-0-dabd15ea0dd95129755c956d50da5fef&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2603471359&vid=8288566267298198452&abtest=all +大锅台,https://vd3.bdstatic.com/mda-nd89jph9c9hh7rcf/480p/h264_delogo/1649488575217940578/mda-nd89jph9c9hh7rcf.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655036071-0-0-5289bacc04858b3cb16d1e5fcb442da2&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2671193173&vid=10128460658145386557&abtest=all +盐焗鄂龟,https://vd3.bdstatic.com/mda-nd7c2f8nq4hcnrkn/480p/h264_delogo/1649407459996974581/mda-nd7c2f8nq4hcnrkn.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655036140-0-0-f311eaf138660e84836cc8ce5559e7b2&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2740696995&vid=8924502782467213214&abtest=all +果香排骨,https://vd3.bdstatic.com/mda-nd68ai08aj0ewj9s/480p/h264_delogo/1649313333330734786/mda-nd68ai08aj0ewj9s.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655036207-0-0-feb91443f39a8905fd834a69b4170c6d&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2807567938&vid=15309846064687821084&abtest=all +铁板鱿鱼,https://vd2.bdstatic.com/mda-nd47jpggnervrjev/480p/h264_delogo/1649138428625881592/mda-nd47jpggnervrjev.mp4?auth_key=1655036357-0-0-ac3c5503cbaae86d97c9a0b315d19524&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2957492859&vid=3160589265422527523&abtest=all +脆皮猪手,https://vd3.bdstatic.com/mda-nd37fvbi8ns75v8k/480p/h264_delogo/1649051367811032897/mda-nd37fvbi8ns75v8k.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655036409-0-0-f2e5408b79d1f40315a8f33c67fdf6fb&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3009075188&vid=7860934379477494781&abtest=all +牛架子,https://vd2.bdstatic.com/mda-nd18ibhe9e17sxv0/480p/h264_delogo/1648880628803892130/mda-nd18ibhe9e17sxv0.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655036457-0-0-b0bac9742c6ace4561c8f521c1bcaf85&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3057160852&vid=11761064184755722546&abtest=all +乾坤牛肚,https://vd3.bdstatic.com/mda-ncsc455a412m4wha/480p/h264_delogo/1648370949637453882/mda-ncsc455a412m4wha.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655036517-0-0-3c7b1fe1382c869d73153c5f225316e4&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3117533700&vid=8833269090986204171&abtest=all +鱼泡羊肉,https://vd3.bdstatic.com/mda-nck76h2megnj3mbh/480p/h264_delogo/1647841284503494555/mda-nck76h2megnj3mbh.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655036589-0-0-880e0f1de125181b5b9bb5f6476c661e&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3189017543&vid=10780357048643047061&abtest=all +红烧马鞍桥,https://vd4.bdstatic.com/mda-nci8vdhp6s1ppcg8/480p/h264_delogo/1647672848908064952/mda-nci8vdhp6s1ppcg8.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655036663-0-0-0818d0aeb59ba3a9eb89b30505ea46f5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3263147606&vid=11272322946744536045&abtest=all +牛肉汤,https://vd3.bdstatic.com/mda-ncg7mynaykcnexuw/480p/h264_delogo/1647496893316677116/mda-ncg7mynaykcnexuw.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655036697-0-0-5049e23603faba336b89cd56fa14bd35&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3297611495&vid=10038164832874949087&abtest=all +五花肉卷,https://vd4.bdstatic.com/mda-nca7q9hnjmqh2iw6/hd/cae_h264_delogo/1646984324539660807/mda-nca7q9hnjmqh2iw6.mp4?auth_key=1655036757-0-0-85759a1b396a5484fea9719f6289ddba&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3356934915&vid=13602902236587799952&abtest=all +扒鸡,https://vd3.bdstatic.com/mda-nc8a1imqiriahjd2/hd/cae_h264_delogo/1646811978078057591/mda-nc8a1imqiriahjd2.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655036784-0-0-ec2770049bd45db0649cd03b54cc0881&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3384576631&vid=2238279565543294477&abtest=all +碳烤牛蛙,https://vd2.bdstatic.com/mda-nc78zsmegndnzq8b/480p/h264_delogo/1646722879137832380/mda-nc78zsmegndnzq8b.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655036807-0-0-53893a25709e7523ab7ce56c7572d59a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3407937406&vid=10249442721586817393&abtest=all +烤娃娃鱼,https://vd3.bdstatic.com/mda-nc581x9xhdu2hy97/480p/h264_delogo/1646547280542647694/mda-nc581x9xhdu2hy97.mp4?auth_key=1655036844-0-0-f8a7a7558c735830c08499beccabf494&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3444083058&vid=3100447263476279517&abtest=all +香辣猪蹄,https://vd4.bdstatic.com/mda-nc0aebyi54haejjg/480p/h264_delogo/1646121677309172816/mda-nc0aebyi54haejjg.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655036937-0-0-2865b0b013f873a5389ff7815f4ca2c8&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3537905780&vid=13069224770405265005&abtest=all +铁板羊腰,https://vd3.bdstatic.com/mda-nbs76a3f70kr1p7z/480p/h264_delogo/1645939971169058430/mda-nbs76a3f70kr1p7z.mp4?auth_key=1655036969-0-0-f0668b07563e01efce1109fa29fe1493&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3569246752&vid=503945329068855314&abtest=all +干锅驴排,https://vd2.bdstatic.com/mda-nbr9bdfxwcr4gycy/480p/h264_delogo/1645859749729497000/mda-nbr9bdfxwcr4gycy.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655037028-0-0-817e5db534adce46fbcdd34b08b07d93&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0028654692&vid=662793154143694639&abtest=all +猪肚鸡,https://vd3.bdstatic.com/mda-nbp9ei7iz1phjnq9/hd/cae_h264_delogo/1645687952128151129/mda-nbp9ei7iz1phjnq9.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655037069-0-0-791c4af47a2ed975ecd114bfe7f8c447&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0069680214&vid=5082689025159486327&abtest=all +土窑甲鱼,https://vd2.bdstatic.com/mda-nbj8z1k8ea5utxd7/hd/cae_h264_nowatermark_delogo/1645341838851808364/mda-nbj8z1k8ea5utxd7.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655037104-0-0-bfaf717ba909ebe3aa949a51546ab548&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0104238481&vid=5574764205239806126&abtest=all +牛鞭火锅,https://vd4.bdstatic.com/mda-nbh8cz7cj4kzq9me/hd/cae_h264_nowatermark_delogo/1645166700349951420/mda-nbh8cz7cj4kzq9me.mp4?auth_key=1655037133-0-0-427317304b03c7650d491c3e00826159&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0133329035&vid=2874643620946063398&abtest=all +熏肥肠,https://vd2.bdstatic.com/mda-nbe3mtgtsfcp7kdg/hd/cae_h264_nowatermark_delogo/1644908120637406906/mda-nbe3mtgtsfcp7kdg.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037170-0-0-b568e06ec50c50788e98cda08d2a9d51&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0170849634&vid=3395772809045714873&abtest=all +全汤肥牛,https://vd2.bdstatic.com/mda-nbc9jdz0e547ga0m/hd/cae_h264_nowatermark_delogo/1644738793530014099/mda-nbc9jdz0e547ga0m.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037211-0-0-e333e4727bdc8a4ee1e333a40f3686fc&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0211510296&vid=7226776632075914153&abtest=all +叫花牛蹄,https://vd3.bdstatic.com/mda-nb82f0r4ehxpchn9/hd/cae_h264_nowatermark_delogo/1644394964122599695/mda-nb82f0r4ehxpchn9.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037263-0-0-72228e882810c7c4f1b5ed3d1b3a49f2&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0262954778&vid=10258566865842026441&abtest=all +香辣驴头,https://vd4.bdstatic.com/mda-nb5d0hz6bv4tckwf/hd/cae_h264_nowatermark_delogo/1644141076715754303/mda-nb5d0hz6bv4tckwf.mp4?auth_key=1655037321-0-0-ad3a7ff1165836492d89d0304bfa3ba9&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0321420638&vid=10996736921375310032&abtest=all +羊蹄血肠,https://vd2.bdstatic.com/mda-nb39vepdxvigcrjn/hd/cae_h264_nowatermark_delogo/1643960728217969923/mda-nb39vepdxvigcrjn.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037353-0-0-d21426c37711f030a5b0bafbfb2e0dce&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0353654814&vid=12816752308784095343&abtest=all +海鲜凤爪,https://vd3.bdstatic.com/mda-nb09atbmh54tx1dy/hd/cae_h264_nowatermark_delogo/1643700081927987800/mda-nb09atbmh54tx1dy.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037387-0-0-76617b8afcbb944c6f96a9fa2161dc1f&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0387224320&vid=3323052900774976687&abtest=all +肥肠鸡,https://vd2.bdstatic.com/mda-nav961ga5d6njuf7/hd/cae_h264_nowatermark_delogo/1643528150130489648/mda-nav961ga5d6njuf7.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655037446-0-0-accb9993f5c56712f68eb6bcc10d5ad8&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0446210838&vid=5728774520691302739&abtest=all +驴杂火锅,https://vd4.bdstatic.com/mda-natd8fqhddamndcf/hd/cae_h264_nowatermark_delogo/1643363346179801123/mda-natd8fqhddamndcf.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037476-0-0-10212199bd20ee9e8e27f08d6839767e&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0476545798&vid=1160656646864348805&abtest=all +烤全羊,https://vd4.bdstatic.com/mda-nar9cxbsfvrp10kh/hd/cae_h264_nowatermark_delogo/1643183099240871416/mda-nar9cxbsfvrp10kh.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037505-0-0-cb0aaacdc4b3f7e87340e7c300bcadeb&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0505844978&vid=17035328380334661422&abtest=all +牛肉酱,https://vd2.bdstatic.com/mda-nak7x5f1rjgqq2ub/hd/cae_h264_nowatermark_delogo/1642746165515514357/mda-nak7x5f1rjgqq2ub.mp4?auth_key=1655037586-0-0-6bbce1807e3e90d609b92d0a2197f761&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0586464048&vid=8482998811716257270&abtest=all +牛骨髓,https://vd2.bdstatic.com/mda-nai94ia9vzvb3mv3/hd/cae_h264_nowatermark_delogo/1642578572157820446/mda-nai94ia9vzvb3mv3.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655037613-0-0-0dcd67e03bedc80216d0a2cce793ad67&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0613036666&vid=18227113013263922370&abtest=all +蒜蓉虾尾,https://vd4.bdstatic.com/mda-naf8hkrjgwxbj8us/hd/cae_h264_nowatermark_delogo/1642316302701242007/mda-naf8hkrjgwxbj8us.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037642-0-0-0a2e5f66d87800fcd27948a991534731&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0642633258&vid=16462556052025207878&abtest=all +麻辣八爪,https://vd2.bdstatic.com/mda-nad9szzn7242x8k7/hd/cae_h264_nowatermark_delogo/1642145445591674821/mda-nad9szzn7242x8k7.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037674-0-0-9d8cd549c13645d23be6d079717822c0&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0674246809&vid=11217872974709049113&abtest=all +涮火锅,https://vd4.bdstatic.com/mda-na67fq41v8myeed4/hd/cae_h264_delogo/1643273295594908296/mda-na67fq41v8myeed4.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037770-0-0-4a73db93fe978b091e64dd51427c0fff&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0770662256&vid=3361054794105641742&abtest=all +牛肉生蚝,https://vd3.bdstatic.com/mda-na39suky43apd0y1/hd/cae_h264_delogo/1642482679484559135/mda-na39suky43apd0y1.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037836-0-0-abe38e70f64a1f717b3aa90c4172bfce&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0836912986&vid=5854775358506483714&abtest=all +固始鹅块,https://vd2.bdstatic.com/mda-na19ij023wzim6xu/hd/cae_h264_delogo/1643521798902946428/mda-na19ij023wzim6xu.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037875-0-0-83ff535f19cdb74b404736586bef5858&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0875764428&vid=16420128698490995780&abtest=all +一品锅,https://vd2.bdstatic.com/mda-mmw8zpq9h1du2uk3/hd/cae_h264_nowatermark/1640934182747498850/mda-mmw8zpq9h1du2uk3.mp4?auth_key=1655037915-0-0-e5f34e2c8c6c22a05759b8fea89d145a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0915558658&vid=3534618154135369010&abtest=all +胡辣羊头,https://vd4.bdstatic.com/mda-mms71px4squvd00p/hd/cae_h264_nowatermark/1640590775126218266/mda-mms71px4squvd00p.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037970-0-0-a8de30df388bf4bc4334bfd499064a93&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0970541550&vid=5534693109837298442&abtest=all +霸王兔,https://vd4.bdstatic.com/mda-mmp7he34swdh6gsw/hd/cae_h264_delogo/1643140446383773433/mda-mmp7he34swdh6gsw.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655038013-0-0-9d4d0895582fe798566151e3ffe1c128&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1013375367&vid=11350547968857944275&abtest=all +肥肠甲鱼,https://vd3.bdstatic.com/mda-mmm8c3hewxedh66d/hd/cae_h264_nowatermark/1640158495064205292/mda-mmm8c3hewxedh66d.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655038036-0-0-a2c8c1beff9caa0baf15149aba16f9ef&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1036844022&vid=14079846926121003957&abtest=all +烤全羊,https://vd3.bdstatic.com/mda-mmj8nq3seh9ffdnh/hd/cae_h264_delogo/1643139052644510616/mda-mmj8nq3seh9ffdnh.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655038070-0-0-c9ae4c20ac8d1f0ddb06a442fd417df6&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1070581740&vid=7791397655272587831&abtest=all +杀猪菜,https://vd4.bdstatic.com/mda-mmh8enzg9dufcjew/hd/cae_h264_delogo/1643148855922505652/mda-mmh8enzg9dufcjew.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655038099-0-0-f2f4d73fdf23b80f24d750f784037649&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1098964941&vid=10983940605509037492&abtest=all +牛瘪火锅,https://vd2.bdstatic.com/mda-mme8fmkv8b99th0e/hd/cae_h264_delogo/1643344430820658205/mda-mme8fmkv8b99th0e.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655038136-0-0-81d4655b92f38756cbe75d3a09c26844&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1136892942&vid=1972881066801322336&abtest=all +筋头八脑,https://vd4.bdstatic.com/mda-mm47strdf2zeu4x9/hd/cae_h264_nowatermark/1638685530136559736/mda-mm47strdf2zeu4x9.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655038221-0-0-d4a3a109f5b1e85d136affb47a86bb85&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1221486302&vid=18427407725363244422&abtest=all +铁板猪蹄,https://vd4.bdstatic.com/mda-mm19upe0w7ez7w6a/hd/cae_h264_delogo/1643294485844966415/mda-mm19upe0w7ez7w6a.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655038299-0-0-b66f9251670a14d75602c7838d5c37bb&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1299363477&vid=15953743817154897422&abtest=all +古法烧鸽,https://vd3.bdstatic.com/mda-mm099uaj0ke9fihc/hd/cae_h264_delogo/1643394054911732959/mda-mm099uaj0ke9fihc.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655038328-0-0-24729d553323f678544e3a29d8ba535a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1328609491&vid=4857230690725699951&abtest=all +煎猪舌,https://vd2.bdstatic.com/mda-mkuai8ivt3av9zkj/hd/cae_h264_delogo/1643299213879017531/mda-mkuai8ivt3av9zkj.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655038368-0-0-396cfe3bedebc336cc2ed04124775e60&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1368877154&vid=13877551118599665393&abtest=all +牛头宴,https://vd3.bdstatic.com/mda-mks9y8dy7impm9c2/hd/cae_h264_nowatermark/1638008851889524241/mda-mks9y8dy7impm9c2.mp4?auth_key=1655038417-0-0-201ef016f55053537c8da92303367c58&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1417127944&vid=8187387678536469261&abtest=all +火鸡闷饭,https://vd2.bdstatic.com/mda-mkq8kvnx6xptxf62/hd/cae_h264_delogo/1643237169792138546/mda-mkq8kvnx6xptxf62.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655038464-0-0-cd37771d3548a72466dea893a0dbf87c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1464024416&vid=3383676781628031336&abtest=all +姜辣牛排,https://vd4.bdstatic.com/mda-mkj9mb2e0d3uxz46/hd/cae_h264_delogo/1643237569847823147/mda-mkj9mb2e0d3uxz46.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655038533-0-0-8de2c016e06c678c89ba08a5843daba1&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1533733823&vid=3612463229561403288&abtest=all +白水羊头,https://vd2.bdstatic.com/mda-mkha4vvyawp5r1qm/hd/cae_h264_nowatermark/1637222214759381999/mda-mkha4vvyawp5r1qm.mp4?auth_key=1655038602-0-0-60675b1329861d9006a970785c381982&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1602639633&vid=8593366559295747886&abtest=all +猪脑花,https://vd4.bdstatic.com/mda-mke8ye6thivbi3ee/hd/cae_h264_nowatermark/1636960733213609865/mda-mke8ye6thivbi3ee.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655038654-0-0-a01673c426577deb519aea5ae1f79260&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1654280990&vid=4689139380671627088&abtest=all +羊肉暖锅,https://vd2.bdstatic.com/mda-mkc905af4gw0k2k4/hd/cae_h264_nowatermark/1636787396972251106/mda-mkc905af4gw0k2k4.mp4?auth_key=1655038682-0-0-ed11dc83a6da1af49e377b9c91cca7af&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1682380047&vid=2068483150629839983&abtest=all +麻辣香锅,https://vd2.bdstatic.com/mda-mkb9ewc5ncirbt3w/hd/cae_h264_nowatermark/1636703902467648330/mda-mkb9ewc5ncirbt3w.mp4?auth_key=1655038715-0-0-f4b23575749b0571d12220478b66e94c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1715331197&vid=3626079908275042619&abtest=all +烤五花,https://vd2.bdstatic.com/mda-mkabgb9y5zicbhy7/hd/cae_h264_delogo/1643148675355964834/mda-mkabgb9y5zicbhy7.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655038744-0-0-5336098a2609e69f43c3729f9c18a462&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1744659768&vid=4787275538437731463&abtest=all +鱼羊鲜,https://vd2.bdstatic.com/mda-mk89gvesx7b3v2sp/hd/cae_h264_nowatermark/1636442796730604113/mda-mk89gvesx7b3v2sp.mp4?auth_key=1655038776-0-0-4e3b8ba097a617bb9c4436c85a66d52f&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1776628144&vid=65227182157962730&abtest=all +羊肚包肉,https://vd4.bdstatic.com/mda-mk5d99p7c8mb0xg3/hd/cae_h264_delogo/1643307354471528651/mda-mk5d99p7c8mb0xg3.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655038825-0-0-0538bfb38404c15359376e8db40765af&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1825942656&vid=7275766357624895532&abtest=all +崩锅鸵鸟脖,https://vd2.bdstatic.com/mda-mk29gjfuymjq6z7t/hd/cae_h264_delogo/1643133846880662509/mda-mk29gjfuymjq6z7t.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655038873-0-0-2cd82618c7c77a4aa118207982ddf2b9&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1873581778&vid=5751203570637112090&abtest=all +大龙虾,https://vd3.bdstatic.com/mda-mjk90p9g5wc9n1at/hd/cae_h264_delogo/1643288388530304311/mda-mjk90p9g5wc9n1at.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655038990-0-0-e7fc879f362baf07da9a0651252050e4&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1990929487&vid=18056752908014310824&abtest=all +火焰醉鹅,https://vd3.bdstatic.com/mda-mjiatn4qf193dt08/hd/cae_h264_delogo/1643345184575680334/mda-mjiatn4qf193dt08.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655048025-0-0-eb09c86ea67d1a51c8fff3936c87a2b3&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0225267198&vid=10095541657962494981&abtest=all +海鲜火锅,https://vd2.bdstatic.com/mda-mjf9wydtwjykhs8g/hd/cae_h264_delogo/1643288227647929268/mda-mjf9wydtwjykhs8g.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655048110-0-0-1b5723da8043f318e4f297a496d11810&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0310512780&vid=10889186030930338226&abtest=all +碳烤三宝,https://vd2.bdstatic.com/mda-mje8f2z5nvnaqxx5/hd/cae_h264_delogo/1643299933931628442/mda-mje8f2z5nvnaqxx5.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655048140-0-0-5d03ea95219590cc74e1e90b924bddc5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0340633722&vid=9207932154469744116&abtest=all +土窑猪排,https://vd3.bdstatic.com/mda-mja9808byebsih24/hd/cae_h264_delogo/1643145464986574279/mda-mja9808byebsih24.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655048267-0-0-1d7ade69fcb79230184aaa069b510ea8&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0467544216&vid=15395825279250866027&abtest=all +糟鱼,https://vd2.bdstatic.com/mda-mj99qt5jmnr68x9i/hd/cae_h264_delogo/1643396392968044649/mda-mj99qt5jmnr68x9i.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655048300-0-0-fae488d44b10a521238a5234e764f7b7&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0500244543&vid=5445321693841193463&abtest=all +土窑乳猪,https://vd3.bdstatic.com/mda-nds73vki5mn28pfm/480p/h264_delogo/1651038226344965832/mda-nds73vki5mn28pfm.mp4?auth_key=1655048435-0-0-51d61eb0ec1d8fbfe1c959533d2f9075&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0635204816&vid=16145146088565215341&abtest=all +臭味相投,https://vd2.bdstatic.com/mda-mj68mqz61txfmbux/hd/cae_h264_delogo/1643398555352482143/mda-mj68mqz61txfmbux.mp4?v_from_s=hkapp-haokan-suzhou&auth_key=1655048547-0-0-abbe5df99e3cb8d44af4c92089f225df&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0747290485&vid=9316133598782000133&abtest=all +一圣两吃,https://vd3.bdstatic.com/mda-mj49wzs4nbtipw7r/hd/cae_h264_delogo/1643347230722924103/mda-mj49wzs4nbtipw7r.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655048583-0-0-65cf41e665dd7b4812ed17980ccbffc9&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0783812465&vid=1474341097213281207&abtest=all +肥肠鸵鸟,https://vd4.bdstatic.com/mda-mj3aznj03miqb90i/hd/cae_h264_delogo/1643395222269072007/mda-mj3aznj03miqb90i.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655048674-0-0-23dde4a707f273c5830644acd423c431&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0874377330&vid=12582352752573451618&abtest=all +驴板肠,https://vd3.bdstatic.com/mda-mir98exz23pc0kag/hd/cae_h264_delogo/1643268269600619303/mda-mir98exz23pc0kag.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655048865-0-0-f6df485c633ad487360c0f98afdfa900&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1065728472&vid=12213425554589901517&abtest=all +熏牛头,https://vd3.bdstatic.com/mda-mipad2w74c5ve16r/hd/cae_h264_nowatermark/1632470564677186726/mda-mipad2w74c5ve16r.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655049037-0-0-e49ca33b1492c8b406181a9550448c03&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1237735318&vid=3564792331748451907&abtest=all +茄汁牛排,https://vd2.bdstatic.com/mda-min84pfus06fa5ty/hd/cae_h264_delogo/1643399692479309748/mda-min84pfus06fa5ty.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655049079-0-0-3cf5aadaddada521ac98deb187aaaf70&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1278959445&vid=12380583999886786330&abtest=all +甲鱼两吃,https://vd2.bdstatic.com/mda-mik9hqxvc3d7wfa9/hd/cae_h264_nowatermark/1632209792414825761/mda-mik9hqxvc3d7wfa9.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655049248-0-0-9c2321e6483cb05142c2a38b3a85f9cd&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1448796100&vid=517908038500912846&abtest=all +骆驼脖子,https://vd2.bdstatic.com/mda-mih4j16kyuayu48t/hd/cae_h264_nowatermark/1631954645472769915/mda-mih4j16kyuayu48t.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655049902-0-0-a87e7ee8d479f9a46f780e08d8d382b6&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2102649959&vid=13449991231537939716&abtest=all +红油烧兔,https://vd3.bdstatic.com/mda-mif1ufq0yid8d08t/hd/cae_h264_nowatermark/1631771666930725095/mda-mif1ufq0yid8d08t.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655049952-0-0-7f8441ab416ccfcc7a766d4c08eade76&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2152259891&vid=4192445000353986497&abtest=all +蜂窝煤,https://vd2.bdstatic.com/mda-ncu8qjqrixkbq4dh/hd/cae_h264_delogo/1648539013955836156/mda-ncu8qjqrixkbq4dh.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655050058-0-0-6e30cdf0f83910724e55ae6df0cd3110&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2258630461&vid=16950748271499815250&abtest=all +土窑烤羊头,https://vd3.bdstatic.com/mda-miaa4mvnh3tvdx5v/hd/cae_h264_delogo/1643285147008260737/mda-miaa4mvnh3tvdx5v.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204366-0-0-31089ea4b9f00316d88a72090d166c07&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1766676433&vid=14138898109607446197&abtest=all +全羊宴,https://vd2.bdstatic.com/mda-mi8b8n1fapkfzy30/hd/cae_h264_nowatermark/1631177030299243081/mda-mi8b8n1fapkfzy30.mp4?auth_key=1655204410-0-0-3251cfef0e96bbbe4193a73d6a4cd92f&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1810327203&vid=2629651966226721826&abtest=all +牛肉干,https://vd2.bdstatic.com/mda-mi69jfdzkvwnvbvs/hd/cae_h264_delogo/1643393450199617691/mda-mi69jfdzkvwnvbvs.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204438-0-0-d5ebeacf2fcce06a01ab59547e29108c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1838395857&vid=5493966352868834919&abtest=all +虎皮鸵鸟爪,https://vd4.bdstatic.com/mda-net93dwtcueu4u9j/480p/h264/1653721609596437460/mda-net93dwtcueu4u9j.mp4?auth_key=1655204465-0-0-4555bfccb4bed5cf2bb84b2b81f39791&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1865212778&vid=7156446621409829348&abtest=all +酱焖牛棒骨,https://vd2.bdstatic.com/mda-nerafr1ft7affzwk/480p/h264/1653552110960778877/mda-nerafr1ft7affzwk.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204509-0-0-fe4375d1a5e8304fccf49d01b6324dce&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1909050999&vid=12330119679350378689&abtest=all +牛膝盖骨,https://vd2.bdstatic.com/mda-neqaikd1xvvtrc2a/480p/h264/1653464493901543639/mda-neqaikd1xvvtrc2a.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204544-0-0-a53c001488f603cd221661571b2f103b&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1944334658&vid=8419620275932311899&abtest=all +肥肠鹅,https://vd4.bdstatic.com/mda-nepbnx1gkwwfe6h4/480p/h264/1653380567130163019/mda-nepbnx1gkwwfe6h4.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204574-0-0-b9da591587e593e5f557c8194e75b886&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1974069537&vid=5831581271697130378&abtest=all +馍包羊腿,https://vd2.bdstatic.com/mda-nen8av4mmq6b6jdn/hd/cae_h264/1653291282172118783/mda-nen8av4mmq6b6jdn.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204602-0-0-efbc5c1de5c0ff8ee15421f8074a594c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2002854443&vid=778061406411546269&abtest=all +河蟹一锅烩,https://vd2.bdstatic.com/mda-nekcx3v9ett2ris5/480p/h264/1653125375347700570/mda-nekcx3v9ett2ris5.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204646-0-0-4f75622c2dcb0ff704cffc958aa2e91a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2046265149&vid=6322076425195603579&abtest=all +红曲酱鸭,https://vd3.bdstatic.com/mda-neh81rk1eiuv3w27/480p/h264/1652854920609442406/mda-neh81rk1eiuv3w27.mp4?auth_key=1655204675-0-0-4da5a87245bb475374748f8b4e1a45df&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2075350062&vid=6641467693514512194&abtest=all +猪肉脯,https://vd2.bdstatic.com/mda-neg8b0x05h7m10p0/480p/h264/1652767840097582134/mda-neg8b0x05h7m10p0.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204711-0-0-024d09eb08d08f43793d846e1093e578&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2111154281&vid=8563202664943920713&abtest=all +四蹄同烩,https://vd3.bdstatic.com/mda-nefa29rfui86n3pw/480p/h264/1652685563112169821/mda-nefa29rfui86n3pw.mp4?auth_key=1655204740-0-0-1de9b9617d3e512a2b1fb2c94a657ba1&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2140773727&vid=9369566642451833404&abtest=all +地锅鸡,https://vd4.bdstatic.com/mda-nee3w9hvysz2htkk/480p/h264/1652583640234131248/mda-nee3w9hvysz2htkk.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204769-0-0-307f31c8d52fc424d102f72fc60b80f3&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2169229312&vid=11820591972211290892&abtest=all +麻辣田螺,https://vd2.bdstatic.com/mda-nebbx1csfuye4nu0/480p/h264/1652344240987321761/mda-nebbx1csfuye4nu0.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204811-0-0-174455300eacf7613f0acb6e916341bf&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2211130595&vid=3348990192010659836&abtest=all +糖醋牛排,https://vd2.bdstatic.com/mda-ne6apsvwr0mmengs/480p/h264/1651909954766095518/mda-ne6apsvwr0mmengs.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204880-0-0-8050868679601ee7a1cb08726e9e82bf&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2280149339&vid=394264423709055760&abtest=all +水煮毛肚,https://vd3.bdstatic.com/mda-ncq9rn183n6gnvs7/480p/h264_delogo/1648192109377463064/mda-ncq9rn183n6gnvs7.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655205004-0-0-f98169ef2f34b0e782d65225cc0256e1&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2404287018&vid=4898549614574730434&abtest=all +石头烤肉,https://vd3.bdstatic.com/mda-mi4ab8i1w6w4y5jj/hd/cae_h264_nowatermark/1630828286668238373/mda-mi4ab8i1w6w4y5jj.mp4?auth_key=1655224094-0-0-4c0c81d29b6d8e6396e0250d44b739b1&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3494340903&vid=11287013436425742467&abtest=all +酱汁乳鸽,https://vd2.bdstatic.com/mda-mi2a6c3jc2a7j6hd/hd/cae_h264_nowatermark/1630655129237630780/mda-mi2a6c3jc2a7j6hd.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655224244-0-0-f07eacc56aaadd6ee5e73c1cd0cebcf2&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0044502052&vid=13481194564157475203&abtest=all +麻辣驴大排,https://vd2.bdstatic.com/mda-mi0arbxk7eckrcew/hd/cae_h264_nowatermark/1630484038350026458/mda-mi0arbxk7eckrcew.mp4?auth_key=1655224296-0-0-c1b64c518a1a522853ebe41160bf097a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0096043637&vid=9221544344203440669&abtest=all +香焖驴板肠,https://vd2.bdstatic.com/mda-mhuagwk8xqy4r0f3/hd/cae_h264_delogo/1643139533885975965/mda-mhuagwk8xqy4r0f3.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655224381-0-0-e70ac774b4f198c04cb31c91e4eeb8dd&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0181458419&vid=7010485010016896710&abtest=all +辣卤羊头,https://vd2.bdstatic.com/mda-mht8xwcyw34qjw51/hd/cae_h264_delogo/1650783822006328405/mda-mht8xwcyw34qjw51.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655224505-0-0-65823773e481cc498567701e3714ea0c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0305335743&vid=17644310508529398649&abtest=all +红烧牛鞭,https://vd3.bdstatic.com/mda-mhr9cvdz49zuvkv0/hd/cae_h264_nowatermark/1629962253314476344/mda-mhr9cvdz49zuvkv0.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655224544-0-0-62f9615455168cd152d260c49c3221bb&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0344050121&vid=4418756710345833871&abtest=all +牛架子,https://vd2.bdstatic.com/mda-nd18ibhe9e17sxv0/480p/h264_delogo/1648880628803892130/mda-nd18ibhe9e17sxv0.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655224607-0-0-0c9e1157287f77dbda2cbb670758980d&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0407350166&vid=11761064184755722546&abtest=all +牛鞭火锅,https://vd4.bdstatic.com/mda-nbh8cz7cj4kzq9me/hd/cae_h264_nowatermark_delogo/1645166700349951420/mda-nbh8cz7cj4kzq9me.mp4?auth_key=1655224669-0-0-72ae03d34ba3143dcb66b6b95a4eb635&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0469334287&vid=2874643620946063398&abtest=all +熏肥肠,https://vd2.bdstatic.com/mda-nbe3mtgtsfcp7kdg/hd/cae_h264_nowatermark_delogo/1644908120637406906/mda-nbe3mtgtsfcp7kdg.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655224716-0-0-132df145c9ecc0975e276ff35ee64c9c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0516069562&vid=3395772809045714873&abtest=all +叫花牛头,https://vd4.bdstatic.com/mda-nan9ayjfqc79ntag/hd/cae_h264_nowatermark_delogo/1642922236652462702/mda-nan9ayjfqc79ntag.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655224804-0-0-5e1abc459d6cd7c7614cd8628dd7ebfd&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0604825727&vid=780864674833455805&abtest=all +驴肉焖饼子,https://vd3.bdstatic.com/mda-mhkb8qqr7tfs2ayv/hd/cae_h264_nowatermark/1629533560474289772/mda-mhkb8qqr7tfs2ayv.mp4?auth_key=1655225037-0-0-41643ab13c15f208522e48dafc914584&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0837458498&vid=12177150870923519991&abtest=all +驴皮阿胶膏,https://vd2.bdstatic.com/mda-mhh9vz373qs26apd/hd/cae_h264_delogo/1643135339221745617/mda-mhh9vz373qs26apd.mp4?auth_key=1655257329-0-0-4dc784191a762c1877b4eaf12470f05f&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0729258624&vid=1665905482183797316&abtest=all +龙凤一锅焖,https://vd4.bdstatic.com/mda-mhc9q24e8aanyqfq/hd/cae_h264_nowatermark/1628843986055712987/mda-mhc9q24e8aanyqfq.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257406-0-0-bfc3d2f0c45a002785a3a2f18fca2d74&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0806911487&vid=12345621156566779145&abtest=all +叫花青蟹,https://vd4.bdstatic.com/mda-mhba45j94002q00p/hd/cae_h264_nowatermark/1628754279184882298/mda-mhba45j94002q00p.mp4?auth_key=1655257441-0-0-74939346279b1eecf1a476d32f39ac05&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0841777840&vid=4195214514960735448&abtest=all +卤牛舌,https://vd4.bdstatic.com/mda-mha9ctbvx0p7xpeg/hd/cae_h264_nowatermark/1628666552624701166/mda-mha9ctbvx0p7xpeg.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257501-0-0-304a2529a6a9b285d3d10fc72149c2a5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0901421755&vid=9780762439742807862&abtest=all +过桥排骨,https://vd2.bdstatic.com/mda-mh7bjjwcystw4mc0/hd/cae_h264_delogo/1643280138786882129/mda-mh7bjjwcystw4mc0.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257532-0-0-39d708415d86377f72b07876b181ab28&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0932409639&vid=9573940101718703463&abtest=all +肥肠鸡,https://vd2.bdstatic.com/mda-mh3and1rhqmr4k3h/hd/cae_h264_nowatermark/1628064525749686545/mda-mh3and1rhqmr4k3h.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257659-0-0-15cde9d5eaf863b7b194c2a7dbc6609b&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1059204417&vid=6994985705243832833&abtest=all +脆皮猪肘,https://vd2.bdstatic.com/mda-mh1a8fdarfcwwvt3/hd/cae_h264_nowatermark/1627890689120474219/mda-mh1a8fdarfcwwvt3.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257682-0-0-562ba571a9bf1f12fce74cf2f88c8fc5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1082723646&vid=13827458971573168633&abtest=all +牛头宴,https://vd3.bdstatic.com/mda-mgsa1vg25rckhjkk/hd/cae_h264_delogo/1643147762137003200/mda-mgsa1vg25rckhjkk.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257727-0-0-d37fe6926af0452a4bb75cf47b9a4e67&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1127449100&vid=1568144016198433247&abtest=all +干锅牛尾巴,https://vd4.bdstatic.com/mda-mgmav7wcir7rb2f8/480p/h264/1626940245358233958/mda-mgmav7wcir7rb2f8.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257764-0-0-685dbaa14b4a1b5075b9e96504dae580&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1164351639&vid=10080784919998694375&abtest=all +姜辣牛排,https://vd2.bdstatic.com/mda-mgkb1kwfauv71x6e/hd/cae_h264_delogo/1643244107842039684/mda-mgkb1kwfauv71x6e.mp4?auth_key=1655257794-0-0-22a98e536494b29bbb73a2969175ece1&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1194049235&vid=7155148110564772909&abtest=all +霸王别姬,https://vd3.bdstatic.com/mda-mgi998wmg5qes8g2/hd/cae_h264_delogo/1643130574446747111/mda-mgi998wmg5qes8g2.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257820-0-0-017a7323d60393592ee33fbe01a28c44&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1220661886&vid=12964101256118071361&abtest=all +干锅牛蹄,https://vd2.bdstatic.com/mda-mge91ri2iru3wykc/hd/cae_h264_nowatermark/1626337351411778855/mda-mge91ri2iru3wykc.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257870-0-0-a78cfff1dce4370d8671a8d667fdd05f&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1270126781&vid=7910494474868230546&abtest=all +甲鱼红烧肉,https://vd3.bdstatic.com/mda-mgd8m926mxmzpvyk/hd/cae_h264_nowatermark/1626246546733040179/mda-mgd8m926mxmzpvyk.mp4?auth_key=1655257895-0-0-d7b1041f9019885ad6749decf3b4c419&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1295580996&vid=8651845722237068177&abtest=all +烤鸵鸟,https://vd2.bdstatic.com/mda-mgc7ieuztjvigy0b/hd/cae_h264_delogo/1643347652547661468/mda-mgc7ieuztjvigy0b.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655538663-0-0-5302b6b49c1bb17f568ba0afc8e8ce45&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1263535191&vid=18402895477617002606&abtest=all +牛肚,https://vd3.bdstatic.com/mda-mgaahyx05kc17shj/hd/cae_h264_delogo/1643148219873544123/mda-mgaahyx05kc17shj.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655538716-0-0-e365bcfff0dc3b1d59452851d1a061c8&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1316564528&vid=124207598866063251&abtest=all +沙爆羊肚肉,https://vd4.bdstatic.com/mda-mg989gmh31icebre/hd/cae_h264_nowatermark/1625900251935570127/mda-mg989gmh31icebre.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655538741-0-0-4c666dd44b3d88113922d41e0f5afba4&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1341651933&vid=12602458672085290732&abtest=all +麻辣虾尾,https://vd4.bdstatic.com/mda-mg68s8tqk7821s6k/hd/cae_h264_nowatermark/1625641172105934010/mda-mg68s8tqk7821s6k.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655538969-0-0-7bfccc324c52478736dc70e062094866&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1569373880&vid=11811291272039624762&abtest=all +盐焗蜗牛,https://vd2.bdstatic.com/mda-mg261uczhazzbumj/hd/cae_h264_nowatermark/1625287386848136206/mda-mg261uczhazzbumj.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539042-0-0-b6d7d9647510a88457f7ce7d89a7bc53&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1642439863&vid=13411255577314359660&abtest=all +肥肠鱼,https://vd2.bdstatic.com/mda-mg0btvw520f4v5p3/hd/cae_h264_delogo/1643268316499059221/mda-mg0btvw520f4v5p3.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539075-0-0-188da7a211510a4529a7b450b946c22a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1675618344&vid=16038520668528867050&abtest=all +土窑焖牛肝,https://vd2.bdstatic.com/mda-mfv9tjrkir997dti/hd/cae_h264_delogo/1643341066464883120/mda-mfv9tjrkir997dti.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539100-0-0-8461a5d8bdcaca4e07452a05a96452a8&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1700682143&vid=1135914335542454643&abtest=all +麻辣牛蹄筋,https://vd2.bdstatic.com/mda-mft9aa1avhs9g0ph/hd/cae_h264_delogo/1643339235177987078/mda-mft9aa1avhs9g0ph.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539192-0-0-6ec30acd4a6af58127c4d1ea5c2be6ca&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1792820059&vid=8208704483460990256&abtest=all +麻辣海阔,https://vd2.bdstatic.com/mda-mfs99rqhgpt6v934/hd/cae_h264_delogo/1643303636102225625/mda-mfs99rqhgpt6v934.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539217-0-0-ebd2aaf57f08cf8f2ac3de4ff34a3cf3&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1817594664&vid=9950505995046552920&abtest=all +甲鱼牛宝腰子,https://vd3.bdstatic.com/mda-mfr98jrwgy0yib25/hd/cae_h264_delogo/1643299176541153962/mda-mfr98jrwgy0yib25.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539292-0-0-d837a2f38715ccfe24261b3ccc2884e6&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1892535846&vid=8382022140161735924&abtest=all +烤牛头,https://vd3.bdstatic.com/mda-mfn8rxujpfike758/hd/cae_h264_nowatermark/1624432761274873194/mda-mfn8rxujpfike758.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539425-0-0-2a1641d72c0a3f5ba1870b50b83d7b25&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2025095327&vid=18112967870396033807&abtest=all +醋焖牛棒骨,https://vd4.bdstatic.com/mda-mfk8c204weuzvhxa/hd/cae_h264_delogo/1643147501963347947/mda-mfk8c204weuzvhxa.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539585-0-0-24b9fe9d219b0f49b06df39857209fe9&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2185448310&vid=5252020132714521845&abtest=all +烤鳄鱼,https://vd2.bdstatic.com/mda-mfj7wkcb3ugdjps5/hd/cae_h264_nowatermark/1624172723749332267/mda-mfj7wkcb3ugdjps5.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539649-0-0-a175fefb3807e7439b792c13e1aed199&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2249886013&vid=12025283582895359559&abtest=all +糖熏羊腿,https://vd2.bdstatic.com/mda-mfg8vfbmg467mf0j/hd/cae_h264_nowatermark/1623912912615331814/mda-mfg8vfbmg467mf0j.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655540034-0-0-229eac90b59ad78cfc6309c3d70ca7af&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2634275153&vid=11714533152811144599&abtest=all +铁锅炖鳄鱼,https://vd2.bdstatic.com/mda-mffa8f1tufiwpwtr/hd/cae_h264_nowatermark/1623829700798483965/mda-mffa8f1tufiwpwtr.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655540065-0-0-313bc3b6b4df827ff2f37dbe061d1057&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2665644554&vid=6992502162957399959&abtest=all +乡村食叔1100买头羊,https://vd4.bdstatic.com/mda-kghmm8wqwjvp97gm/hd/mda-kghmm8wqwjvp97gm.mp4?auth_key=1655032152-0-0-e46ffacd02ed77fb1e67b3ad5a8fcff0&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2352305816&vid=17960476347117941562&abtest=all +食叔260买十来只小甲鱼,https://vd4.bdstatic.com/mda-nf29yjvnrcqwwy2q/480p/h264/1654240313985806512/mda-nf29yjvnrcqwwy2q.mp4?auth_key=1655032564-0-0-747aa1c4fdd90716418995aa885348a7&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2764614902&vid=9984932099035144842&abtest=all +食叔铁桶烤鸡,https://vd2.bdstatic.com/mda-nf9c27rq4xcbjmk4/480p/h264/1654931961791216300/mda-nf9c27rq4xcbjmk4.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655032635-0-0-7c3ad26ae39d51e736978d393ad44242&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2835878236&vid=15570804519629633873&abtest=all +食叔雪山驼掌,https://vd2.bdstatic.com/mda-nf89bup48h33rnsi/480p/h264/1654758415054577400/mda-nf89bup48h33rnsi.mp4?auth_key=1655032748-0-0-b7c12af769785740b322753442e5c1ff&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2948153948&vid=2972680187953890553&abtest=all +食叔鸡腰炖黄鳝,https://vd3.bdstatic.com/mda-nf5b4qfywy5pzjgu/480p/h264/1654502805261088051/mda-nf5b4qfywy5pzjgu.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655032849-0-0-433e12f29eaab498df3667819d6d9d5b&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3049228437&vid=3904751968646806841&abtest=all +食叔霸王牛尾,https://vd3.bdstatic.com/mda-nf39wk2de3ryede7/480p/h264/1654326718567558149/mda-nf39wk2de3ryede7.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655032908-0-0-21cb435cc1f8eb263984e073bb6106c5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3108822864&vid=6595468946187502994&abtest=all +食叔辣卤驼头,https://vd3.bdstatic.com/mda-newe17bhfrmd35a9/480p/h264/1653991101001259092/mda-newe17bhfrmd35a9.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655032944-0-0-352bdafaee4bbadacf814f1344beecd5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3144408041&vid=1387963609971371324&abtest=all +食叔干锅牛蛙,https://vd4.bdstatic.com/mda-neu9v10u2tk22kwt/480p/h264/1653808467692279237/mda-neu9v10u2tk22kwt.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655033139-0-0-6ffe17fd9a49c1b38bd9efbed61a05e8&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3339243039&vid=14953153288685054828&abtest=all +食叔酱焖牛棒骨,https://vd2.bdstatic.com/mda-nerafr1ft7affzwk/480p/h264/1653552110960778877/mda-nerafr1ft7affzwk.mp4?auth_key=1655033260-0-0-e4c291de85acb14f57b8728592bce8d0&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3460184673&vid=12330119679350378689&abtest=all +鲍汁豆腐,https://vd4.bdstatic.com/mda-nec91x1nvgejnd5u/480p/h264/1652425268946984260/mda-nec91x1nvgejnd5u.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655033746-0-0-1964bc131eb8a4757e126fa7072034c8&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0346634098&vid=13175973280064025498&abtest=all +地锅鸡,https://vd4.bdstatic.com/mda-nee3w9hvysz2htkk/480p/h264/1652583640234131248/mda-nee3w9hvysz2htkk.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655033701-0-0-448270cbc0e8dd01b1d3e3e79c645ede&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0300946132&vid=11820591972211290892&abtest=all +河蟹一锅烩,https://vd2.bdstatic.com/mda-nekcx3v9ett2ris5/480p/h264/1653125375347700570/mda-nekcx3v9ett2ris5.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655033479-0-0-b49abd06012eb0b266a58d9dca5c7f5f&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0079449514&vid=6322076425195603579&abtest=all +红曲酱鸭,https://vd3.bdstatic.com/mda-neh81rk1eiuv3w27/480p/h264/1652854920609442406/mda-neh81rk1eiuv3w27.mp4?auth_key=1655033521-0-0-f906c86fac0f9d712e6b40db422982b9&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0121635443&vid=6641467693514512194&abtest=all +红烧海茄子,https://vd2.bdstatic.com/mda-ne9adpzib1w2s7i6/480p/h264/1652168146543774177/mda-ne9adpzib1w2s7i6.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655034801-0-0-619992652cfa0b8d01757056583c773a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1401746639&vid=10650375313183094889&abtest=all +鸿运猪头,https://vd3.bdstatic.com/mda-ndj8t1xtu0qf1vp7/480p/h264_delogo/1650436754621760647/mda-ndj8t1xtu0qf1vp7.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655035359-0-0-e2b5b52787d54808740e5abc56f67794&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1959759277&vid=11845744374558766684&abtest=all +姜辣棒骨,https://vd2.bdstatic.com/mda-nda9532dzfpmrpjb/480p/h264_delogo/1649660429454395375/mda-nda9532dzfpmrpjb.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655035937-0-0-e8dc2cb7fe4807a23083c7a22a38899c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2537470207&vid=17829729200355816866&abtest=all +炕锅羊头,https://vd2.bdstatic.com/mda-ndkbtvkkzmzry5gr/hd/cae_h264_delogo/1650858156241136824/mda-ndkbtvkkzmzry5gr.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655035320-0-0-148e9e7804a8284edd6678b00cb60beb&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1920864857&vid=8826414521234968806&abtest=all +麻辣兔头,https://vd2.bdstatic.com/mda-ndr9vd3muu069myi/480p/h264_delogo/1650956744271709907/mda-ndr9vd3muu069myi.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655035207-0-0-35a7618c2c86d9455e0d8550e048ead7&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1807001502&vid=10868651239061775579&abtest=all +麻辣小龙虾,https://vd3.bdstatic.com/mda-ndu9tguy0fay7ye1/480p/h264_delogo/1651215429015875965/mda-ndu9tguy0fay7ye1.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035125-0-0-f68c0c5448e434f9570361e845bdce0d&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1725743161&vid=9743722764712261597&abtest=all +梅菜扣肉,https://vd4.bdstatic.com/mda-ndc94dad3mfaia93/480p/h264_delogo/1649832429929756958/mda-ndc94dad3mfaia93.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035906-0-0-de5eee241441d09558105da7eef5dc68&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2506904726&vid=10980852652573181338&abtest=all +260买十来只小甲鱼,https://vd4.bdstatic.com/mda-nf29yjvnrcqwwy2q/480p/h264/1654240313985806512/mda-nf29yjvnrcqwwy2q.mp4?auth_key=1655032564-0-0-747aa1c4fdd90716418995aa885348a7&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2764614902&vid=9984932099035144842&abtest=all +霸王牛尾,https://vd3.bdstatic.com/mda-nf39wk2de3ryede7/480p/h264/1654326718567558149/mda-nf39wk2de3ryede7.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655032908-0-0-21cb435cc1f8eb263984e073bb6106c5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3108822864&vid=6595468946187502994&abtest=all +干锅牛蛙,https://vd4.bdstatic.com/mda-neu9v10u2tk22kwt/480p/h264/1653808467692279237/mda-neu9v10u2tk22kwt.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655033139-0-0-6ffe17fd9a49c1b38bd9efbed61a05e8&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3339243039&vid=14953153288685054828&abtest=all +鸡腰炖黄鳝,https://vd3.bdstatic.com/mda-nf5b4qfywy5pzjgu/480p/h264/1654502805261088051/mda-nf5b4qfywy5pzjgu.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655032849-0-0-433e12f29eaab498df3667819d6d9d5b&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3049228437&vid=3904751968646806841&abtest=all +酱焖牛棒骨,https://vd2.bdstatic.com/mda-nerafr1ft7affzwk/480p/h264/1653552110960778877/mda-nerafr1ft7affzwk.mp4?auth_key=1655033260-0-0-e4c291de85acb14f57b8728592bce8d0&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3460184673&vid=12330119679350378689&abtest=all +辣卤驼头,https://vd3.bdstatic.com/mda-newe17bhfrmd35a9/480p/h264/1653991101001259092/mda-newe17bhfrmd35a9.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655032944-0-0-352bdafaee4bbadacf814f1344beecd5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3144408041&vid=1387963609971371324&abtest=all +铁桶烤鸡,https://vd2.bdstatic.com/mda-nf9c27rq4xcbjmk4/480p/h264/1654931961791216300/mda-nf9c27rq4xcbjmk4.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655032635-0-0-7c3ad26ae39d51e736978d393ad44242&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2835878236&vid=15570804519629633873&abtest=all +雪山驼掌,https://vd2.bdstatic.com/mda-nf89bup48h33rnsi/480p/h264/1654758415054577400/mda-nf89bup48h33rnsi.mp4?auth_key=1655032748-0-0-b7c12af769785740b322753442e5c1ff&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2948153948&vid=2972680187953890553&abtest=all +四蹄同烩,https://vd3.bdstatic.com/mda-nefa29rfui86n3pw/480p/h264/1652685563112169821/mda-nefa29rfui86n3pw.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655033628-0-0-ad9c96bb17140c4d2d2f0a2ac1ab2acf&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0228464890&vid=9369566642451833404&abtest=all +酸菜泥鳅,https://vd4.bdstatic.com/mda-ndh7bpuzvpswnwp2/480p/h264_delogo/1650260306760166423/mda-ndh7bpuzvpswnwp2.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035790-0-0-f89005c95d654eed989de592e96986be&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2390503988&vid=10996931384139378668&abtest=all +糖醋牛排,https://vd2.bdstatic.com/mda-ne6apsvwr0mmengs/480p/h264/1651909954766095518/mda-ne6apsvwr0mmengs.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655034849-0-0-30a90703c068320a18a17d308cd93f61&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1449510204&vid=394264423709055760&abtest=all +土匪酥干,https://vd2.bdstatic.com/mda-ndua1tez8vc7zr5z/480p/h264_delogo/1651217539984001622/mda-ndua1tez8vc7zr5z.mp4?auth_key=1655035071-0-0-49402cbadff899380a97b36cc4c6108e&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1671740184&vid=13634275945822664360&abtest=all +土窑乳猪,https://vd3.bdstatic.com/mda-nds73vki5mn28pfm/480p/h264_delogo/1651038226344965832/mda-nds73vki5mn28pfm.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035158-0-0-4ded17b4474485bc7b777496f24a613a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1758484472&vid=16145146088565215341&abtest=all +兔包鸡,https://vd3.bdstatic.com/mda-ne086qd7pxsrab3f/480p/h264_delogo/1651385481542929517/mda-ne086qd7pxsrab3f.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655035021-0-0-5df18cbf9592a36078f609ffabfc46a4&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1621918400&vid=9952112813454050741&abtest=all +乡村1100买头羊,https://vd4.bdstatic.com/mda-kghmm8wqwjvp97gm/hd/mda-kghmm8wqwjvp97gm.mp4?auth_key=1655032152-0-0-e46ffacd02ed77fb1e67b3ad5a8fcff0&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2352305816&vid=17960476347117941562&abtest=all +羊捆肠,https://vd2.bdstatic.com/mda-ne26rr7p33rsj1y2/480p/h264_delogo/1651553280160812392/mda-ne26rr7p33rsj1y2.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655034984-0-0-0666823b4ae21283ba2882e471b26e6b&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1584919948&vid=9594074250590617930&abtest=all +羊杂火锅,https://vd2.bdstatic.com/mda-nde9j23ddgrpi71z/480p/h264_delogo/1650006049614014696/mda-nde9j23ddgrpi71z.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035873-0-0-2143d9b864f19b301bedb0a00da25984&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2473527228&vid=18167929374050651526&abtest=all +猪肉脯,https://vd2.bdstatic.com/mda-neg8b0x05h7m10p0/480p/h264/1652767840097582134/mda-neg8b0x05h7m10p0.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655033590-0-0-1c34d0e5c49e2665ceb69f50ccf08d84&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0190428084&vid=8563202664943920713&abtest=all +河蟹一锅烩,https://vd2.bdstatic.com/mda-nekcx3v9ett2ris5/480p/h264/1653125375347700570/mda-nekcx3v9ett2ris5.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655033479-0-0-b49abd06012eb0b266a58d9dca5c7f5f&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0079449514&vid=6322076425195603579&abtest=all +红曲酱鸭,https://vd3.bdstatic.com/mda-neh81rk1eiuv3w27/480p/h264/1652854920609442406/mda-neh81rk1eiuv3w27.mp4?auth_key=1655033521-0-0-f906c86fac0f9d712e6b40db422982b9&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0121635443&vid=6641467693514512194&abtest=all +猪肉脯,https://vd2.bdstatic.com/mda-neg8b0x05h7m10p0/480p/h264/1652767840097582134/mda-neg8b0x05h7m10p0.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655033590-0-0-1c34d0e5c49e2665ceb69f50ccf08d84&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0190428084&vid=8563202664943920713&abtest=all +四蹄同烩,https://vd3.bdstatic.com/mda-nefa29rfui86n3pw/480p/h264/1652685563112169821/mda-nefa29rfui86n3pw.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655033628-0-0-ad9c96bb17140c4d2d2f0a2ac1ab2acf&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0228464890&vid=9369566642451833404&abtest=all +地锅鸡,https://vd4.bdstatic.com/mda-nee3w9hvysz2htkk/480p/h264/1652583640234131248/mda-nee3w9hvysz2htkk.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655033701-0-0-448270cbc0e8dd01b1d3e3e79c645ede&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0300946132&vid=11820591972211290892&abtest=all +鲍汁豆腐,https://vd4.bdstatic.com/mda-nec91x1nvgejnd5u/480p/h264/1652425268946984260/mda-nec91x1nvgejnd5u.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655033746-0-0-1964bc131eb8a4757e126fa7072034c8&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0346634098&vid=13175973280064025498&abtest=all +红烧海茄子,https://vd2.bdstatic.com/mda-ne9adpzib1w2s7i6/480p/h264/1652168146543774177/mda-ne9adpzib1w2s7i6.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655034801-0-0-619992652cfa0b8d01757056583c773a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1401746639&vid=10650375313183094889&abtest=all +糖醋牛排,https://vd2.bdstatic.com/mda-ne6apsvwr0mmengs/480p/h264/1651909954766095518/mda-ne6apsvwr0mmengs.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655034849-0-0-30a90703c068320a18a17d308cd93f61&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1449510204&vid=394264423709055760&abtest=all +羊捆肠,https://vd2.bdstatic.com/mda-ne26rr7p33rsj1y2/480p/h264_delogo/1651553280160812392/mda-ne26rr7p33rsj1y2.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655034984-0-0-0666823b4ae21283ba2882e471b26e6b&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1584919948&vid=9594074250590617930&abtest=all +兔包鸡,https://vd3.bdstatic.com/mda-ne086qd7pxsrab3f/480p/h264_delogo/1651385481542929517/mda-ne086qd7pxsrab3f.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655035021-0-0-5df18cbf9592a36078f609ffabfc46a4&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1621918400&vid=9952112813454050741&abtest=all +土匪酥干,https://vd2.bdstatic.com/mda-ndua1tez8vc7zr5z/480p/h264_delogo/1651217539984001622/mda-ndua1tez8vc7zr5z.mp4?auth_key=1655035071-0-0-49402cbadff899380a97b36cc4c6108e&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1671740184&vid=13634275945822664360&abtest=all +麻辣小龙虾,https://vd3.bdstatic.com/mda-ndu9tguy0fay7ye1/480p/h264_delogo/1651215429015875965/mda-ndu9tguy0fay7ye1.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035125-0-0-f68c0c5448e434f9570361e845bdce0d&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1725743161&vid=9743722764712261597&abtest=all +土窑乳猪,https://vd3.bdstatic.com/mda-nds73vki5mn28pfm/480p/h264_delogo/1651038226344965832/mda-nds73vki5mn28pfm.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035158-0-0-4ded17b4474485bc7b777496f24a613a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1758484472&vid=16145146088565215341&abtest=all +麻辣兔头,https://vd2.bdstatic.com/mda-ndr9vd3muu069myi/480p/h264_delogo/1650956744271709907/mda-ndr9vd3muu069myi.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655035207-0-0-35a7618c2c86d9455e0d8550e048ead7&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1807001502&vid=10868651239061775579&abtest=all +炕锅羊头,https://vd2.bdstatic.com/mda-ndkbtvkkzmzry5gr/hd/cae_h264_delogo/1650858156241136824/mda-ndkbtvkkzmzry5gr.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655035320-0-0-148e9e7804a8284edd6678b00cb60beb&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1920864857&vid=8826414521234968806&abtest=all +鸿运猪头,https://vd3.bdstatic.com/mda-ndj8t1xtu0qf1vp7/480p/h264_delogo/1650436754621760647/mda-ndj8t1xtu0qf1vp7.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655035359-0-0-e2b5b52787d54808740e5abc56f67794&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1959759277&vid=11845744374558766684&abtest=all +酸菜泥鳅,https://vd4.bdstatic.com/mda-ndh7bpuzvpswnwp2/480p/h264_delogo/1650260306760166423/mda-ndh7bpuzvpswnwp2.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035790-0-0-f89005c95d654eed989de592e96986be&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2390503988&vid=10996931384139378668&abtest=all +羊杂火锅,https://vd2.bdstatic.com/mda-nde9j23ddgrpi71z/480p/h264_delogo/1650006049614014696/mda-nde9j23ddgrpi71z.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035873-0-0-2143d9b864f19b301bedb0a00da25984&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2473527228&vid=18167929374050651526&abtest=all +梅菜扣肉,https://vd4.bdstatic.com/mda-ndc94dad3mfaia93/480p/h264_delogo/1649832429929756958/mda-ndc94dad3mfaia93.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655035906-0-0-de5eee241441d09558105da7eef5dc68&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2506904726&vid=10980852652573181338&abtest=all +姜辣棒骨,https://vd2.bdstatic.com/mda-nda9532dzfpmrpjb/480p/h264_delogo/1649660429454395375/mda-nda9532dzfpmrpjb.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655035937-0-0-e8dc2cb7fe4807a23083c7a22a38899c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2537470207&vid=17829729200355816866&abtest=all +板肠螺狮粉,https://vd4.bdstatic.com/mda-nd98hi8r73ztrpya/480p/h264_delogo/1649573004142585909/mda-nd98hi8r73ztrpya.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655036003-0-0-dabd15ea0dd95129755c956d50da5fef&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2603471359&vid=8288566267298198452&abtest=all +大锅台,https://vd3.bdstatic.com/mda-nd89jph9c9hh7rcf/480p/h264_delogo/1649488575217940578/mda-nd89jph9c9hh7rcf.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655036071-0-0-5289bacc04858b3cb16d1e5fcb442da2&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2671193173&vid=10128460658145386557&abtest=all +盐焗鄂龟,https://vd3.bdstatic.com/mda-nd7c2f8nq4hcnrkn/480p/h264_delogo/1649407459996974581/mda-nd7c2f8nq4hcnrkn.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655036140-0-0-f311eaf138660e84836cc8ce5559e7b2&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2740696995&vid=8924502782467213214&abtest=all +果香排骨,https://vd3.bdstatic.com/mda-nd68ai08aj0ewj9s/480p/h264_delogo/1649313333330734786/mda-nd68ai08aj0ewj9s.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655036207-0-0-feb91443f39a8905fd834a69b4170c6d&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2807567938&vid=15309846064687821084&abtest=all +铁板鱿鱼,https://vd2.bdstatic.com/mda-nd47jpggnervrjev/480p/h264_delogo/1649138428625881592/mda-nd47jpggnervrjev.mp4?auth_key=1655036357-0-0-ac3c5503cbaae86d97c9a0b315d19524&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2957492859&vid=3160589265422527523&abtest=all +脆皮猪手,https://vd3.bdstatic.com/mda-nd37fvbi8ns75v8k/480p/h264_delogo/1649051367811032897/mda-nd37fvbi8ns75v8k.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655036409-0-0-f2e5408b79d1f40315a8f33c67fdf6fb&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3009075188&vid=7860934379477494781&abtest=all +牛架子,https://vd2.bdstatic.com/mda-nd18ibhe9e17sxv0/480p/h264_delogo/1648880628803892130/mda-nd18ibhe9e17sxv0.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655036457-0-0-b0bac9742c6ace4561c8f521c1bcaf85&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3057160852&vid=11761064184755722546&abtest=all +乾坤牛肚,https://vd3.bdstatic.com/mda-ncsc455a412m4wha/480p/h264_delogo/1648370949637453882/mda-ncsc455a412m4wha.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655036517-0-0-3c7b1fe1382c869d73153c5f225316e4&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3117533700&vid=8833269090986204171&abtest=all +鱼泡羊肉,https://vd3.bdstatic.com/mda-nck76h2megnj3mbh/480p/h264_delogo/1647841284503494555/mda-nck76h2megnj3mbh.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655036589-0-0-880e0f1de125181b5b9bb5f6476c661e&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3189017543&vid=10780357048643047061&abtest=all +红烧马鞍桥,https://vd4.bdstatic.com/mda-nci8vdhp6s1ppcg8/480p/h264_delogo/1647672848908064952/mda-nci8vdhp6s1ppcg8.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655036663-0-0-0818d0aeb59ba3a9eb89b30505ea46f5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3263147606&vid=11272322946744536045&abtest=all +牛肉汤,https://vd3.bdstatic.com/mda-ncg7mynaykcnexuw/480p/h264_delogo/1647496893316677116/mda-ncg7mynaykcnexuw.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655036697-0-0-5049e23603faba336b89cd56fa14bd35&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3297611495&vid=10038164832874949087&abtest=all +五花肉卷,https://vd4.bdstatic.com/mda-nca7q9hnjmqh2iw6/hd/cae_h264_delogo/1646984324539660807/mda-nca7q9hnjmqh2iw6.mp4?auth_key=1655036757-0-0-85759a1b396a5484fea9719f6289ddba&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3356934915&vid=13602902236587799952&abtest=all +扒鸡,https://vd3.bdstatic.com/mda-nc8a1imqiriahjd2/hd/cae_h264_delogo/1646811978078057591/mda-nc8a1imqiriahjd2.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655036784-0-0-ec2770049bd45db0649cd03b54cc0881&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3384576631&vid=2238279565543294477&abtest=all +碳烤牛蛙,https://vd2.bdstatic.com/mda-nc78zsmegndnzq8b/480p/h264_delogo/1646722879137832380/mda-nc78zsmegndnzq8b.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655036807-0-0-53893a25709e7523ab7ce56c7572d59a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3407937406&vid=10249442721586817393&abtest=all +烤娃娃鱼,https://vd3.bdstatic.com/mda-nc581x9xhdu2hy97/480p/h264_delogo/1646547280542647694/mda-nc581x9xhdu2hy97.mp4?auth_key=1655036844-0-0-f8a7a7558c735830c08499beccabf494&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3444083058&vid=3100447263476279517&abtest=all +香辣猪蹄,https://vd4.bdstatic.com/mda-nc0aebyi54haejjg/480p/h264_delogo/1646121677309172816/mda-nc0aebyi54haejjg.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655036937-0-0-2865b0b013f873a5389ff7815f4ca2c8&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3537905780&vid=13069224770405265005&abtest=all +铁板羊腰,https://vd3.bdstatic.com/mda-nbs76a3f70kr1p7z/480p/h264_delogo/1645939971169058430/mda-nbs76a3f70kr1p7z.mp4?auth_key=1655036969-0-0-f0668b07563e01efce1109fa29fe1493&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3569246752&vid=503945329068855314&abtest=all +干锅驴排,https://vd2.bdstatic.com/mda-nbr9bdfxwcr4gycy/480p/h264_delogo/1645859749729497000/mda-nbr9bdfxwcr4gycy.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655037028-0-0-817e5db534adce46fbcdd34b08b07d93&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0028654692&vid=662793154143694639&abtest=all +猪肚鸡,https://vd3.bdstatic.com/mda-nbp9ei7iz1phjnq9/hd/cae_h264_delogo/1645687952128151129/mda-nbp9ei7iz1phjnq9.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655037069-0-0-791c4af47a2ed975ecd114bfe7f8c447&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0069680214&vid=5082689025159486327&abtest=all +土窑甲鱼,https://vd2.bdstatic.com/mda-nbj8z1k8ea5utxd7/hd/cae_h264_nowatermark_delogo/1645341838851808364/mda-nbj8z1k8ea5utxd7.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655037104-0-0-bfaf717ba909ebe3aa949a51546ab548&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0104238481&vid=5574764205239806126&abtest=all +牛鞭火锅,https://vd4.bdstatic.com/mda-nbh8cz7cj4kzq9me/hd/cae_h264_nowatermark_delogo/1645166700349951420/mda-nbh8cz7cj4kzq9me.mp4?auth_key=1655037133-0-0-427317304b03c7650d491c3e00826159&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0133329035&vid=2874643620946063398&abtest=all +熏肥肠,https://vd2.bdstatic.com/mda-nbe3mtgtsfcp7kdg/hd/cae_h264_nowatermark_delogo/1644908120637406906/mda-nbe3mtgtsfcp7kdg.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037170-0-0-b568e06ec50c50788e98cda08d2a9d51&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0170849634&vid=3395772809045714873&abtest=all +全汤肥牛,https://vd2.bdstatic.com/mda-nbc9jdz0e547ga0m/hd/cae_h264_nowatermark_delogo/1644738793530014099/mda-nbc9jdz0e547ga0m.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037211-0-0-e333e4727bdc8a4ee1e333a40f3686fc&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0211510296&vid=7226776632075914153&abtest=all +叫花牛蹄,https://vd3.bdstatic.com/mda-nb82f0r4ehxpchn9/hd/cae_h264_nowatermark_delogo/1644394964122599695/mda-nb82f0r4ehxpchn9.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037263-0-0-72228e882810c7c4f1b5ed3d1b3a49f2&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0262954778&vid=10258566865842026441&abtest=all +香辣驴头,https://vd4.bdstatic.com/mda-nb5d0hz6bv4tckwf/hd/cae_h264_nowatermark_delogo/1644141076715754303/mda-nb5d0hz6bv4tckwf.mp4?auth_key=1655037321-0-0-ad3a7ff1165836492d89d0304bfa3ba9&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0321420638&vid=10996736921375310032&abtest=all +羊蹄血肠,https://vd2.bdstatic.com/mda-nb39vepdxvigcrjn/hd/cae_h264_nowatermark_delogo/1643960728217969923/mda-nb39vepdxvigcrjn.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037353-0-0-d21426c37711f030a5b0bafbfb2e0dce&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0353654814&vid=12816752308784095343&abtest=all +海鲜凤爪,https://vd3.bdstatic.com/mda-nb09atbmh54tx1dy/hd/cae_h264_nowatermark_delogo/1643700081927987800/mda-nb09atbmh54tx1dy.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037387-0-0-76617b8afcbb944c6f96a9fa2161dc1f&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0387224320&vid=3323052900774976687&abtest=all +肥肠鸡,https://vd2.bdstatic.com/mda-nav961ga5d6njuf7/hd/cae_h264_nowatermark_delogo/1643528150130489648/mda-nav961ga5d6njuf7.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655037446-0-0-accb9993f5c56712f68eb6bcc10d5ad8&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0446210838&vid=5728774520691302739&abtest=all +驴杂火锅,https://vd4.bdstatic.com/mda-natd8fqhddamndcf/hd/cae_h264_nowatermark_delogo/1643363346179801123/mda-natd8fqhddamndcf.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037476-0-0-10212199bd20ee9e8e27f08d6839767e&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0476545798&vid=1160656646864348805&abtest=all +烤全羊,https://vd4.bdstatic.com/mda-nar9cxbsfvrp10kh/hd/cae_h264_nowatermark_delogo/1643183099240871416/mda-nar9cxbsfvrp10kh.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037505-0-0-cb0aaacdc4b3f7e87340e7c300bcadeb&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0505844978&vid=17035328380334661422&abtest=all +牛肉酱,https://vd2.bdstatic.com/mda-nak7x5f1rjgqq2ub/hd/cae_h264_nowatermark_delogo/1642746165515514357/mda-nak7x5f1rjgqq2ub.mp4?auth_key=1655037586-0-0-6bbce1807e3e90d609b92d0a2197f761&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0586464048&vid=8482998811716257270&abtest=all +牛骨髓,https://vd2.bdstatic.com/mda-nai94ia9vzvb3mv3/hd/cae_h264_nowatermark_delogo/1642578572157820446/mda-nai94ia9vzvb3mv3.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655037613-0-0-0dcd67e03bedc80216d0a2cce793ad67&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0613036666&vid=18227113013263922370&abtest=all +蒜蓉虾尾,https://vd4.bdstatic.com/mda-naf8hkrjgwxbj8us/hd/cae_h264_nowatermark_delogo/1642316302701242007/mda-naf8hkrjgwxbj8us.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037642-0-0-0a2e5f66d87800fcd27948a991534731&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0642633258&vid=16462556052025207878&abtest=all +麻辣八爪,https://vd2.bdstatic.com/mda-nad9szzn7242x8k7/hd/cae_h264_nowatermark_delogo/1642145445591674821/mda-nad9szzn7242x8k7.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037674-0-0-9d8cd549c13645d23be6d079717822c0&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0674246809&vid=11217872974709049113&abtest=all +涮火锅,https://vd4.bdstatic.com/mda-na67fq41v8myeed4/hd/cae_h264_delogo/1643273295594908296/mda-na67fq41v8myeed4.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037770-0-0-4a73db93fe978b091e64dd51427c0fff&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0770662256&vid=3361054794105641742&abtest=all +牛肉生蚝,https://vd3.bdstatic.com/mda-na39suky43apd0y1/hd/cae_h264_delogo/1642482679484559135/mda-na39suky43apd0y1.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037836-0-0-abe38e70f64a1f717b3aa90c4172bfce&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0836912986&vid=5854775358506483714&abtest=all +固始鹅块,https://vd2.bdstatic.com/mda-na19ij023wzim6xu/hd/cae_h264_delogo/1643521798902946428/mda-na19ij023wzim6xu.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037875-0-0-83ff535f19cdb74b404736586bef5858&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0875764428&vid=16420128698490995780&abtest=all +一品锅,https://vd2.bdstatic.com/mda-mmw8zpq9h1du2uk3/hd/cae_h264_nowatermark/1640934182747498850/mda-mmw8zpq9h1du2uk3.mp4?auth_key=1655037915-0-0-e5f34e2c8c6c22a05759b8fea89d145a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0915558658&vid=3534618154135369010&abtest=all +胡辣羊头,https://vd4.bdstatic.com/mda-mms71px4squvd00p/hd/cae_h264_nowatermark/1640590775126218266/mda-mms71px4squvd00p.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655037970-0-0-a8de30df388bf4bc4334bfd499064a93&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0970541550&vid=5534693109837298442&abtest=all +霸王兔,https://vd4.bdstatic.com/mda-mmp7he34swdh6gsw/hd/cae_h264_delogo/1643140446383773433/mda-mmp7he34swdh6gsw.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655038013-0-0-9d4d0895582fe798566151e3ffe1c128&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1013375367&vid=11350547968857944275&abtest=all +肥肠甲鱼,https://vd3.bdstatic.com/mda-mmm8c3hewxedh66d/hd/cae_h264_nowatermark/1640158495064205292/mda-mmm8c3hewxedh66d.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655038036-0-0-a2c8c1beff9caa0baf15149aba16f9ef&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1036844022&vid=14079846926121003957&abtest=all +烤全羊,https://vd3.bdstatic.com/mda-mmj8nq3seh9ffdnh/hd/cae_h264_delogo/1643139052644510616/mda-mmj8nq3seh9ffdnh.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655038070-0-0-c9ae4c20ac8d1f0ddb06a442fd417df6&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1070581740&vid=7791397655272587831&abtest=all +杀猪菜,https://vd4.bdstatic.com/mda-mmh8enzg9dufcjew/hd/cae_h264_delogo/1643148855922505652/mda-mmh8enzg9dufcjew.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655038099-0-0-f2f4d73fdf23b80f24d750f784037649&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1098964941&vid=10983940605509037492&abtest=all +牛瘪火锅,https://vd2.bdstatic.com/mda-mme8fmkv8b99th0e/hd/cae_h264_delogo/1643344430820658205/mda-mme8fmkv8b99th0e.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655038136-0-0-81d4655b92f38756cbe75d3a09c26844&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1136892942&vid=1972881066801322336&abtest=all +筋头八脑,https://vd4.bdstatic.com/mda-mm47strdf2zeu4x9/hd/cae_h264_nowatermark/1638685530136559736/mda-mm47strdf2zeu4x9.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655038221-0-0-d4a3a109f5b1e85d136affb47a86bb85&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1221486302&vid=18427407725363244422&abtest=all +铁板猪蹄,https://vd4.bdstatic.com/mda-mm19upe0w7ez7w6a/hd/cae_h264_delogo/1643294485844966415/mda-mm19upe0w7ez7w6a.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655038299-0-0-b66f9251670a14d75602c7838d5c37bb&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1299363477&vid=15953743817154897422&abtest=all +古法烧鸽,https://vd3.bdstatic.com/mda-mm099uaj0ke9fihc/hd/cae_h264_delogo/1643394054911732959/mda-mm099uaj0ke9fihc.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655038328-0-0-24729d553323f678544e3a29d8ba535a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1328609491&vid=4857230690725699951&abtest=all +煎猪舌,https://vd2.bdstatic.com/mda-mkuai8ivt3av9zkj/hd/cae_h264_delogo/1643299213879017531/mda-mkuai8ivt3av9zkj.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655038368-0-0-396cfe3bedebc336cc2ed04124775e60&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1368877154&vid=13877551118599665393&abtest=all +牛头宴,https://vd3.bdstatic.com/mda-mks9y8dy7impm9c2/hd/cae_h264_nowatermark/1638008851889524241/mda-mks9y8dy7impm9c2.mp4?auth_key=1655038417-0-0-201ef016f55053537c8da92303367c58&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1417127944&vid=8187387678536469261&abtest=all +火鸡闷饭,https://vd2.bdstatic.com/mda-mkq8kvnx6xptxf62/hd/cae_h264_delogo/1643237169792138546/mda-mkq8kvnx6xptxf62.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655038464-0-0-cd37771d3548a72466dea893a0dbf87c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1464024416&vid=3383676781628031336&abtest=all +姜辣牛排,https://vd4.bdstatic.com/mda-mkj9mb2e0d3uxz46/hd/cae_h264_delogo/1643237569847823147/mda-mkj9mb2e0d3uxz46.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655038533-0-0-8de2c016e06c678c89ba08a5843daba1&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1533733823&vid=3612463229561403288&abtest=all +白水羊头,https://vd2.bdstatic.com/mda-mkha4vvyawp5r1qm/hd/cae_h264_nowatermark/1637222214759381999/mda-mkha4vvyawp5r1qm.mp4?auth_key=1655038602-0-0-60675b1329861d9006a970785c381982&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1602639633&vid=8593366559295747886&abtest=all +猪脑花,https://vd4.bdstatic.com/mda-mke8ye6thivbi3ee/hd/cae_h264_nowatermark/1636960733213609865/mda-mke8ye6thivbi3ee.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655038654-0-0-a01673c426577deb519aea5ae1f79260&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1654280990&vid=4689139380671627088&abtest=all +羊肉暖锅,https://vd2.bdstatic.com/mda-mkc905af4gw0k2k4/hd/cae_h264_nowatermark/1636787396972251106/mda-mkc905af4gw0k2k4.mp4?auth_key=1655038682-0-0-ed11dc83a6da1af49e377b9c91cca7af&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1682380047&vid=2068483150629839983&abtest=all +麻辣香锅,https://vd2.bdstatic.com/mda-mkb9ewc5ncirbt3w/hd/cae_h264_nowatermark/1636703902467648330/mda-mkb9ewc5ncirbt3w.mp4?auth_key=1655038715-0-0-f4b23575749b0571d12220478b66e94c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1715331197&vid=3626079908275042619&abtest=all +烤五花,https://vd2.bdstatic.com/mda-mkabgb9y5zicbhy7/hd/cae_h264_delogo/1643148675355964834/mda-mkabgb9y5zicbhy7.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655038744-0-0-5336098a2609e69f43c3729f9c18a462&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1744659768&vid=4787275538437731463&abtest=all +鱼羊鲜,https://vd2.bdstatic.com/mda-mk89gvesx7b3v2sp/hd/cae_h264_nowatermark/1636442796730604113/mda-mk89gvesx7b3v2sp.mp4?auth_key=1655038776-0-0-4e3b8ba097a617bb9c4436c85a66d52f&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1776628144&vid=65227182157962730&abtest=all +羊肚包肉,https://vd4.bdstatic.com/mda-mk5d99p7c8mb0xg3/hd/cae_h264_delogo/1643307354471528651/mda-mk5d99p7c8mb0xg3.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655038825-0-0-0538bfb38404c15359376e8db40765af&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1825942656&vid=7275766357624895532&abtest=all +崩锅鸵鸟脖,https://vd2.bdstatic.com/mda-mk29gjfuymjq6z7t/hd/cae_h264_delogo/1643133846880662509/mda-mk29gjfuymjq6z7t.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655038873-0-0-2cd82618c7c77a4aa118207982ddf2b9&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1873581778&vid=5751203570637112090&abtest=all +大龙虾,https://vd3.bdstatic.com/mda-mjk90p9g5wc9n1at/hd/cae_h264_delogo/1643288388530304311/mda-mjk90p9g5wc9n1at.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655038990-0-0-e7fc879f362baf07da9a0651252050e4&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1990929487&vid=18056752908014310824&abtest=all +火焰醉鹅,https://vd3.bdstatic.com/mda-mjiatn4qf193dt08/hd/cae_h264_delogo/1643345184575680334/mda-mjiatn4qf193dt08.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655048025-0-0-eb09c86ea67d1a51c8fff3936c87a2b3&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0225267198&vid=10095541657962494981&abtest=all +海鲜火锅,https://vd2.bdstatic.com/mda-mjf9wydtwjykhs8g/hd/cae_h264_delogo/1643288227647929268/mda-mjf9wydtwjykhs8g.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655048110-0-0-1b5723da8043f318e4f297a496d11810&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0310512780&vid=10889186030930338226&abtest=all +碳烤三宝,https://vd2.bdstatic.com/mda-mje8f2z5nvnaqxx5/hd/cae_h264_delogo/1643299933931628442/mda-mje8f2z5nvnaqxx5.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655048140-0-0-5d03ea95219590cc74e1e90b924bddc5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0340633722&vid=9207932154469744116&abtest=all +土窑猪排,https://vd3.bdstatic.com/mda-mja9808byebsih24/hd/cae_h264_delogo/1643145464986574279/mda-mja9808byebsih24.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655048267-0-0-1d7ade69fcb79230184aaa069b510ea8&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0467544216&vid=15395825279250866027&abtest=all +糟鱼,https://vd2.bdstatic.com/mda-mj99qt5jmnr68x9i/hd/cae_h264_delogo/1643396392968044649/mda-mj99qt5jmnr68x9i.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655048300-0-0-fae488d44b10a521238a5234e764f7b7&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0500244543&vid=5445321693841193463&abtest=all +土窑乳猪,https://vd3.bdstatic.com/mda-nds73vki5mn28pfm/480p/h264_delogo/1651038226344965832/mda-nds73vki5mn28pfm.mp4?auth_key=1655048435-0-0-51d61eb0ec1d8fbfe1c959533d2f9075&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0635204816&vid=16145146088565215341&abtest=all +臭味相投,https://vd2.bdstatic.com/mda-mj68mqz61txfmbux/hd/cae_h264_delogo/1643398555352482143/mda-mj68mqz61txfmbux.mp4?v_from_s=hkapp-haokan-suzhou&auth_key=1655048547-0-0-abbe5df99e3cb8d44af4c92089f225df&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0747290485&vid=9316133598782000133&abtest=all +一圣两吃,https://vd3.bdstatic.com/mda-mj49wzs4nbtipw7r/hd/cae_h264_delogo/1643347230722924103/mda-mj49wzs4nbtipw7r.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655048583-0-0-65cf41e665dd7b4812ed17980ccbffc9&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0783812465&vid=1474341097213281207&abtest=all +肥肠鸵鸟,https://vd4.bdstatic.com/mda-mj3aznj03miqb90i/hd/cae_h264_delogo/1643395222269072007/mda-mj3aznj03miqb90i.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655048674-0-0-23dde4a707f273c5830644acd423c431&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0874377330&vid=12582352752573451618&abtest=all +驴板肠,https://vd3.bdstatic.com/mda-mir98exz23pc0kag/hd/cae_h264_delogo/1643268269600619303/mda-mir98exz23pc0kag.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655048865-0-0-f6df485c633ad487360c0f98afdfa900&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1065728472&vid=12213425554589901517&abtest=all +熏牛头,https://vd3.bdstatic.com/mda-mipad2w74c5ve16r/hd/cae_h264_nowatermark/1632470564677186726/mda-mipad2w74c5ve16r.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655049037-0-0-e49ca33b1492c8b406181a9550448c03&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1237735318&vid=3564792331748451907&abtest=all +茄汁牛排,https://vd2.bdstatic.com/mda-min84pfus06fa5ty/hd/cae_h264_delogo/1643399692479309748/mda-min84pfus06fa5ty.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655049079-0-0-3cf5aadaddada521ac98deb187aaaf70&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1278959445&vid=12380583999886786330&abtest=all +甲鱼两吃,https://vd2.bdstatic.com/mda-mik9hqxvc3d7wfa9/hd/cae_h264_nowatermark/1632209792414825761/mda-mik9hqxvc3d7wfa9.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655049248-0-0-9c2321e6483cb05142c2a38b3a85f9cd&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1448796100&vid=517908038500912846&abtest=all +烘扒牛蹄,https://vd2.bdstatic.com/mda-mij8cz664p3uf8f7/hd/cae_h264_delogo/1643355302897838535/mda-mij8cz664p3uf8f7.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655049329-0-0-03f42b172d3932a556db82503b22933c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1529538392&vid=8056477574405400816&abtest=all +骆驼脖子,https://vd2.bdstatic.com/mda-mih4j16kyuayu48t/hd/cae_h264_nowatermark/1631954645472769915/mda-mih4j16kyuayu48t.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655049902-0-0-a87e7ee8d479f9a46f780e08d8d382b6&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2102649959&vid=13449991231537939716&abtest=all +红油烧兔,https://vd3.bdstatic.com/mda-mif1ufq0yid8d08t/hd/cae_h264_nowatermark/1631771666930725095/mda-mif1ufq0yid8d08t.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655049952-0-0-7f8441ab416ccfcc7a766d4c08eade76&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2152259891&vid=4192445000353986497&abtest=all +蜂窝煤,https://vd2.bdstatic.com/mda-ncu8qjqrixkbq4dh/hd/cae_h264_delogo/1648539013955836156/mda-ncu8qjqrixkbq4dh.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655050058-0-0-6e30cdf0f83910724e55ae6df0cd3110&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2258630461&vid=16950748271499815250&abtest=all +土窑烤羊头,https://vd3.bdstatic.com/mda-miaa4mvnh3tvdx5v/hd/cae_h264_delogo/1643285147008260737/mda-miaa4mvnh3tvdx5v.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204366-0-0-31089ea4b9f00316d88a72090d166c07&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1766676433&vid=14138898109607446197&abtest=all +全羊宴,https://vd2.bdstatic.com/mda-mi8b8n1fapkfzy30/hd/cae_h264_nowatermark/1631177030299243081/mda-mi8b8n1fapkfzy30.mp4?auth_key=1655204410-0-0-3251cfef0e96bbbe4193a73d6a4cd92f&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1810327203&vid=2629651966226721826&abtest=all +牛肉干,https://vd2.bdstatic.com/mda-mi69jfdzkvwnvbvs/hd/cae_h264_delogo/1643393450199617691/mda-mi69jfdzkvwnvbvs.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204438-0-0-d5ebeacf2fcce06a01ab59547e29108c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1838395857&vid=5493966352868834919&abtest=all +虎皮鸵鸟爪,https://vd4.bdstatic.com/mda-net93dwtcueu4u9j/480p/h264/1653721609596437460/mda-net93dwtcueu4u9j.mp4?auth_key=1655204465-0-0-4555bfccb4bed5cf2bb84b2b81f39791&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1865212778&vid=7156446621409829348&abtest=all +酱焖牛棒骨,https://vd2.bdstatic.com/mda-nerafr1ft7affzwk/480p/h264/1653552110960778877/mda-nerafr1ft7affzwk.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204509-0-0-fe4375d1a5e8304fccf49d01b6324dce&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1909050999&vid=12330119679350378689&abtest=all +牛膝盖骨,https://vd2.bdstatic.com/mda-neqaikd1xvvtrc2a/480p/h264/1653464493901543639/mda-neqaikd1xvvtrc2a.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204544-0-0-a53c001488f603cd221661571b2f103b&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1944334658&vid=8419620275932311899&abtest=all +肥肠鹅,https://vd4.bdstatic.com/mda-nepbnx1gkwwfe6h4/480p/h264/1653380567130163019/mda-nepbnx1gkwwfe6h4.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204574-0-0-b9da591587e593e5f557c8194e75b886&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1974069537&vid=5831581271697130378&abtest=all +馍包羊腿,https://vd2.bdstatic.com/mda-nen8av4mmq6b6jdn/hd/cae_h264/1653291282172118783/mda-nen8av4mmq6b6jdn.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204602-0-0-efbc5c1de5c0ff8ee15421f8074a594c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2002854443&vid=778061406411546269&abtest=all +河蟹一锅烩,https://vd2.bdstatic.com/mda-nekcx3v9ett2ris5/480p/h264/1653125375347700570/mda-nekcx3v9ett2ris5.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204646-0-0-4f75622c2dcb0ff704cffc958aa2e91a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2046265149&vid=6322076425195603579&abtest=all +红曲酱鸭,https://vd3.bdstatic.com/mda-neh81rk1eiuv3w27/480p/h264/1652854920609442406/mda-neh81rk1eiuv3w27.mp4?auth_key=1655204675-0-0-4da5a87245bb475374748f8b4e1a45df&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2075350062&vid=6641467693514512194&abtest=all +猪肉脯,https://vd2.bdstatic.com/mda-neg8b0x05h7m10p0/480p/h264/1652767840097582134/mda-neg8b0x05h7m10p0.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204711-0-0-024d09eb08d08f43793d846e1093e578&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2111154281&vid=8563202664943920713&abtest=all +四蹄同烩,https://vd3.bdstatic.com/mda-nefa29rfui86n3pw/480p/h264/1652685563112169821/mda-nefa29rfui86n3pw.mp4?auth_key=1655204740-0-0-1de9b9617d3e512a2b1fb2c94a657ba1&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2140773727&vid=9369566642451833404&abtest=all +地锅鸡,https://vd4.bdstatic.com/mda-nee3w9hvysz2htkk/480p/h264/1652583640234131248/mda-nee3w9hvysz2htkk.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204769-0-0-307f31c8d52fc424d102f72fc60b80f3&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2169229312&vid=11820591972211290892&abtest=all +麻辣田螺,https://vd2.bdstatic.com/mda-nebbx1csfuye4nu0/480p/h264/1652344240987321761/mda-nebbx1csfuye4nu0.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204811-0-0-174455300eacf7613f0acb6e916341bf&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2211130595&vid=3348990192010659836&abtest=all +糖醋牛排,https://vd2.bdstatic.com/mda-ne6apsvwr0mmengs/480p/h264/1651909954766095518/mda-ne6apsvwr0mmengs.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655204880-0-0-8050868679601ee7a1cb08726e9e82bf&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2280149339&vid=394264423709055760&abtest=all +水煮毛肚,https://vd3.bdstatic.com/mda-ncq9rn183n6gnvs7/480p/h264_delogo/1648192109377463064/mda-ncq9rn183n6gnvs7.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655205004-0-0-f98169ef2f34b0e782d65225cc0256e1&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2404287018&vid=4898549614574730434&abtest=all +石头烤肉,https://vd3.bdstatic.com/mda-mi4ab8i1w6w4y5jj/hd/cae_h264_nowatermark/1630828286668238373/mda-mi4ab8i1w6w4y5jj.mp4?auth_key=1655224094-0-0-4c0c81d29b6d8e6396e0250d44b739b1&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3494340903&vid=11287013436425742467&abtest=all +酱汁乳鸽,https://vd2.bdstatic.com/mda-mi2a6c3jc2a7j6hd/hd/cae_h264_nowatermark/1630655129237630780/mda-mi2a6c3jc2a7j6hd.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655224244-0-0-f07eacc56aaadd6ee5e73c1cd0cebcf2&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0044502052&vid=13481194564157475203&abtest=all +麻辣驴大排,https://vd2.bdstatic.com/mda-mi0arbxk7eckrcew/hd/cae_h264_nowatermark/1630484038350026458/mda-mi0arbxk7eckrcew.mp4?auth_key=1655224296-0-0-c1b64c518a1a522853ebe41160bf097a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0096043637&vid=9221544344203440669&abtest=all +香焖驴板肠,https://vd2.bdstatic.com/mda-mhuagwk8xqy4r0f3/hd/cae_h264_delogo/1643139533885975965/mda-mhuagwk8xqy4r0f3.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655224381-0-0-e70ac774b4f198c04cb31c91e4eeb8dd&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0181458419&vid=7010485010016896710&abtest=all +辣卤羊头,https://vd2.bdstatic.com/mda-mht8xwcyw34qjw51/hd/cae_h264_delogo/1650783822006328405/mda-mht8xwcyw34qjw51.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655224505-0-0-65823773e481cc498567701e3714ea0c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0305335743&vid=17644310508529398649&abtest=all +红烧牛鞭,https://vd3.bdstatic.com/mda-mhr9cvdz49zuvkv0/hd/cae_h264_nowatermark/1629962253314476344/mda-mhr9cvdz49zuvkv0.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655224544-0-0-62f9615455168cd152d260c49c3221bb&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0344050121&vid=4418756710345833871&abtest=all +牛架子,https://vd2.bdstatic.com/mda-nd18ibhe9e17sxv0/480p/h264_delogo/1648880628803892130/mda-nd18ibhe9e17sxv0.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655224607-0-0-0c9e1157287f77dbda2cbb670758980d&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0407350166&vid=11761064184755722546&abtest=all +牛鞭火锅,https://vd4.bdstatic.com/mda-nbh8cz7cj4kzq9me/hd/cae_h264_nowatermark_delogo/1645166700349951420/mda-nbh8cz7cj4kzq9me.mp4?auth_key=1655224669-0-0-72ae03d34ba3143dcb66b6b95a4eb635&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0469334287&vid=2874643620946063398&abtest=all +熏肥肠,https://vd2.bdstatic.com/mda-nbe3mtgtsfcp7kdg/hd/cae_h264_nowatermark_delogo/1644908120637406906/mda-nbe3mtgtsfcp7kdg.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655224716-0-0-132df145c9ecc0975e276ff35ee64c9c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0516069562&vid=3395772809045714873&abtest=all +叫花牛头,https://vd4.bdstatic.com/mda-nan9ayjfqc79ntag/hd/cae_h264_nowatermark_delogo/1642922236652462702/mda-nan9ayjfqc79ntag.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655224804-0-0-5e1abc459d6cd7c7614cd8628dd7ebfd&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0604825727&vid=780864674833455805&abtest=all +香辣梭子蟹,https://vd4.bdstatic.com/mda-mhpb0c0wncgxc46z/hd/cae_h264_nowatermark/1629793200922512800/mda-mhpb0c0wncgxc46z.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655224994-0-0-53acf433a09b5b308d3ab5bf40ddf34d&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0794778106&vid=8439739901543690368&abtest=all +驴肉焖饼子,https://vd3.bdstatic.com/mda-mhkb8qqr7tfs2ayv/hd/cae_h264_nowatermark/1629533560474289772/mda-mhkb8qqr7tfs2ayv.mp4?auth_key=1655225037-0-0-41643ab13c15f208522e48dafc914584&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0837458498&vid=12177150870923519991&abtest=all +驴皮阿胶膏,https://vd2.bdstatic.com/mda-mhh9vz373qs26apd/hd/cae_h264_delogo/1643135339221745617/mda-mhh9vz373qs26apd.mp4?auth_key=1655257329-0-0-4dc784191a762c1877b4eaf12470f05f&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0729258624&vid=1665905482183797316&abtest=all +龙凤一锅焖,https://vd4.bdstatic.com/mda-mhc9q24e8aanyqfq/hd/cae_h264_nowatermark/1628843986055712987/mda-mhc9q24e8aanyqfq.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257406-0-0-bfc3d2f0c45a002785a3a2f18fca2d74&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0806911487&vid=12345621156566779145&abtest=all +叫花青蟹,https://vd4.bdstatic.com/mda-mhba45j94002q00p/hd/cae_h264_nowatermark/1628754279184882298/mda-mhba45j94002q00p.mp4?auth_key=1655257441-0-0-74939346279b1eecf1a476d32f39ac05&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0841777840&vid=4195214514960735448&abtest=all +卤牛舌,https://vd4.bdstatic.com/mda-mha9ctbvx0p7xpeg/hd/cae_h264_nowatermark/1628666552624701166/mda-mha9ctbvx0p7xpeg.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257501-0-0-304a2529a6a9b285d3d10fc72149c2a5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0901421755&vid=9780762439742807862&abtest=all +过桥排骨,https://vd2.bdstatic.com/mda-mh7bjjwcystw4mc0/hd/cae_h264_delogo/1643280138786882129/mda-mh7bjjwcystw4mc0.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257532-0-0-39d708415d86377f72b07876b181ab28&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0932409639&vid=9573940101718703463&abtest=all +肥肠鸡,https://vd2.bdstatic.com/mda-mh3and1rhqmr4k3h/hd/cae_h264_nowatermark/1628064525749686545/mda-mh3and1rhqmr4k3h.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257659-0-0-15cde9d5eaf863b7b194c2a7dbc6609b&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1059204417&vid=6994985705243832833&abtest=all +脆皮猪肘,https://vd2.bdstatic.com/mda-mh1a8fdarfcwwvt3/hd/cae_h264_nowatermark/1627890689120474219/mda-mh1a8fdarfcwwvt3.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257682-0-0-562ba571a9bf1f12fce74cf2f88c8fc5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1082723646&vid=13827458971573168633&abtest=all +牛头宴,https://vd3.bdstatic.com/mda-mgsa1vg25rckhjkk/hd/cae_h264_delogo/1643147762137003200/mda-mgsa1vg25rckhjkk.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257727-0-0-d37fe6926af0452a4bb75cf47b9a4e67&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1127449100&vid=1568144016198433247&abtest=all +干锅牛尾巴,https://vd4.bdstatic.com/mda-mgmav7wcir7rb2f8/480p/h264/1626940245358233958/mda-mgmav7wcir7rb2f8.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257764-0-0-685dbaa14b4a1b5075b9e96504dae580&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1164351639&vid=10080784919998694375&abtest=all +姜辣牛排,https://vd2.bdstatic.com/mda-mgkb1kwfauv71x6e/hd/cae_h264_delogo/1643244107842039684/mda-mgkb1kwfauv71x6e.mp4?auth_key=1655257794-0-0-22a98e536494b29bbb73a2969175ece1&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1194049235&vid=7155148110564772909&abtest=all +霸王别姬,https://vd3.bdstatic.com/mda-mgi998wmg5qes8g2/hd/cae_h264_delogo/1643130574446747111/mda-mgi998wmg5qes8g2.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257820-0-0-017a7323d60393592ee33fbe01a28c44&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1220661886&vid=12964101256118071361&abtest=all +干锅牛蹄,https://vd2.bdstatic.com/mda-mge91ri2iru3wykc/hd/cae_h264_nowatermark/1626337351411778855/mda-mge91ri2iru3wykc.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655257870-0-0-a78cfff1dce4370d8671a8d667fdd05f&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1270126781&vid=7910494474868230546&abtest=all +甲鱼红烧肉,https://vd3.bdstatic.com/mda-mgd8m926mxmzpvyk/hd/cae_h264_nowatermark/1626246546733040179/mda-mgd8m926mxmzpvyk.mp4?auth_key=1655257895-0-0-d7b1041f9019885ad6749decf3b4c419&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1295580996&vid=8651845722237068177&abtest=all +烤鸵鸟,https://vd2.bdstatic.com/mda-mgc7ieuztjvigy0b/hd/cae_h264_delogo/1643347652547661468/mda-mgc7ieuztjvigy0b.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655538663-0-0-5302b6b49c1bb17f568ba0afc8e8ce45&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1263535191&vid=18402895477617002606&abtest=all +牛肚,https://vd3.bdstatic.com/mda-mgaahyx05kc17shj/hd/cae_h264_delogo/1643148219873544123/mda-mgaahyx05kc17shj.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655538716-0-0-e365bcfff0dc3b1d59452851d1a061c8&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1316564528&vid=124207598866063251&abtest=all +沙爆羊肚肉,https://vd4.bdstatic.com/mda-mg989gmh31icebre/hd/cae_h264_nowatermark/1625900251935570127/mda-mg989gmh31icebre.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655538741-0-0-4c666dd44b3d88113922d41e0f5afba4&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1341651933&vid=12602458672085290732&abtest=all +麻辣虾尾,https://vd4.bdstatic.com/mda-mg68s8tqk7821s6k/hd/cae_h264_nowatermark/1625641172105934010/mda-mg68s8tqk7821s6k.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655538969-0-0-7bfccc324c52478736dc70e062094866&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1569373880&vid=11811291272039624762&abtest=all +盐焗蜗牛,https://vd2.bdstatic.com/mda-mg261uczhazzbumj/hd/cae_h264_nowatermark/1625287386848136206/mda-mg261uczhazzbumj.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539042-0-0-b6d7d9647510a88457f7ce7d89a7bc53&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1642439863&vid=13411255577314359660&abtest=all +肥肠鱼,https://vd2.bdstatic.com/mda-mg0btvw520f4v5p3/hd/cae_h264_delogo/1643268316499059221/mda-mg0btvw520f4v5p3.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539075-0-0-188da7a211510a4529a7b450b946c22a&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1675618344&vid=16038520668528867050&abtest=all +土窑焖牛肝,https://vd2.bdstatic.com/mda-mfv9tjrkir997dti/hd/cae_h264_delogo/1643341066464883120/mda-mfv9tjrkir997dti.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539100-0-0-8461a5d8bdcaca4e07452a05a96452a8&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1700682143&vid=1135914335542454643&abtest=all +麻辣牛蹄筋,https://vd2.bdstatic.com/mda-mft9aa1avhs9g0ph/hd/cae_h264_delogo/1643339235177987078/mda-mft9aa1avhs9g0ph.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539192-0-0-6ec30acd4a6af58127c4d1ea5c2be6ca&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1792820059&vid=8208704483460990256&abtest=all +麻辣海阔,https://vd2.bdstatic.com/mda-mfs99rqhgpt6v934/hd/cae_h264_delogo/1643303636102225625/mda-mfs99rqhgpt6v934.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539217-0-0-ebd2aaf57f08cf8f2ac3de4ff34a3cf3&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1817594664&vid=9950505995046552920&abtest=all +甲鱼牛宝腰子,https://vd3.bdstatic.com/mda-mfr98jrwgy0yib25/hd/cae_h264_delogo/1643299176541153962/mda-mfr98jrwgy0yib25.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539292-0-0-d837a2f38715ccfe24261b3ccc2884e6&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1892535846&vid=8382022140161735924&abtest=all +猪杂下酒菜,https://vd2.bdstatic.com/mda-mfq99v3i80gwe49e/hd/cae_h264_nowatermark/1624604580248864865/mda-mfq99v3i80gwe49e.mp4?auth_key=1655539325-0-0-5a56d16cf543e0bd5d3ed31f30ff714d&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=1925817603&vid=10648258954728214356&abtest=all +烤牛头,https://vd3.bdstatic.com/mda-mfn8rxujpfike758/hd/cae_h264_nowatermark/1624432761274873194/mda-mfn8rxujpfike758.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539425-0-0-2a1641d72c0a3f5ba1870b50b83d7b25&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2025095327&vid=18112967870396033807&abtest=all +醋焖牛棒骨,https://vd4.bdstatic.com/mda-mfk8c204weuzvhxa/hd/cae_h264_delogo/1643147501963347947/mda-mfk8c204weuzvhxa.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539585-0-0-24b9fe9d219b0f49b06df39857209fe9&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2185448310&vid=5252020132714521845&abtest=all +烤鳄鱼,https://vd2.bdstatic.com/mda-mfj7wkcb3ugdjps5/hd/cae_h264_nowatermark/1624172723749332267/mda-mfj7wkcb3ugdjps5.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655539649-0-0-a175fefb3807e7439b792c13e1aed199&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2249886013&vid=12025283582895359559&abtest=all +糖熏羊腿,https://vd2.bdstatic.com/mda-mfg8vfbmg467mf0j/hd/cae_h264_nowatermark/1623912912615331814/mda-mfg8vfbmg467mf0j.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655540034-0-0-229eac90b59ad78cfc6309c3d70ca7af&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2634275153&vid=11714533152811144599&abtest=all +铁锅炖鳄鱼,https://vd2.bdstatic.com/mda-mffa8f1tufiwpwtr/hd/cae_h264_nowatermark/1623829700798483965/mda-mffa8f1tufiwpwtr.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1655540065-0-0-313bc3b6b4df827ff2f37dbe061d1057&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2665644554&vid=6992502162957399959&abtest=all +乡村食叔1100买头羊,https://vd4.bdstatic.com/mda-kghmm8wqwjvp97gm/hd/mda-kghmm8wqwjvp97gm.mp4?auth_key=1655032152-0-0-e46ffacd02ed77fb1e67b3ad5a8fcff0&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2352305816&vid=17960476347117941562&abtest=all +食叔260买十来只小甲鱼,https://vd4.bdstatic.com/mda-nf29yjvnrcqwwy2q/480p/h264/1654240313985806512/mda-nf29yjvnrcqwwy2q.mp4?auth_key=1655032564-0-0-747aa1c4fdd90716418995aa885348a7&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2764614902&vid=9984932099035144842&abtest=all +食叔铁桶烤鸡,https://vd2.bdstatic.com/mda-nf9c27rq4xcbjmk4/480p/h264/1654931961791216300/mda-nf9c27rq4xcbjmk4.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1655032635-0-0-7c3ad26ae39d51e736978d393ad44242&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2835878236&vid=15570804519629633873&abtest=all +食叔雪山驼掌,https://vd2.bdstatic.com/mda-nf89bup48h33rnsi/480p/h264/1654758415054577400/mda-nf89bup48h33rnsi.mp4?auth_key=1655032748-0-0-b7c12af769785740b322753442e5c1ff&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2948153948&vid=2972680187953890553&abtest=all +食叔鸡腰炖黄鳝,https://vd3.bdstatic.com/mda-nf5b4qfywy5pzjgu/480p/h264/1654502805261088051/mda-nf5b4qfywy5pzjgu.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1655032849-0-0-433e12f29eaab498df3667819d6d9d5b&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3049228437&vid=3904751968646806841&abtest=all +食叔霸王牛尾,https://vd3.bdstatic.com/mda-nf39wk2de3ryede7/480p/h264/1654326718567558149/mda-nf39wk2de3ryede7.mp4?v_from_s=hkapp-haokan-hna&auth_key=1655032908-0-0-21cb435cc1f8eb263984e073bb6106c5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3108822864&vid=6595468946187502994&abtest=all +食叔辣卤驼头,https://vd3.bdstatic.com/mda-newe17bhfrmd35a9/480p/h264/1653991101001259092/mda-newe17bhfrmd35a9.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655032944-0-0-352bdafaee4bbadacf814f1344beecd5&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3144408041&vid=1387963609971371324&abtest=all +食叔干锅牛蛙,https://vd4.bdstatic.com/mda-neu9v10u2tk22kwt/480p/h264/1653808467692279237/mda-neu9v10u2tk22kwt.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1655033139-0-0-6ffe17fd9a49c1b38bd9efbed61a05e8&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3339243039&vid=14953153288685054828&abtest=all +食叔酱焖牛棒骨,https://vd2.bdstatic.com/mda-nerafr1ft7affzwk/480p/h264/1653552110960778877/mda-nerafr1ft7affzwk.mp4?auth_key=1655033260-0-0-e4c291de85acb14f57b8728592bce8d0&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3460184673&vid=12330119679350378689&abtest=all + +龍🐉看小品,#genre# +吃面,https://vd3.bdstatic.com/mda-kihjn2cq7103ivig/v1-cae/hd/mda-kihjn2cq7103ivig.mp4 +非诚来扰,https://vd3.bdstatic.com/mda-jk4sx2ggq7u355d6/hd/mda-jk4sx2ggq7u355d6.mp4 +幸福密码,https://vd3.bdstatic.com/mda-kj9ispnax8gpirkf/hd/mda-kj9ispnax8gpirkf.mp4 +狭路相逢,https://vd3.bdstatic.com/mda-kanfj7h320ueqgkg/v1-cae/hd/mda-kanfj7h320ueqgkg.mp4 +最佳酒友,https://vd3.bdstatic.com/mda-jheqyidz841gwxpy/hd/mda-jheqyidz841gwxpy.mp4 +整容归来,https://vd3.bdstatic.com/mda-ji1xe9cmasuh0722/hd/mda-ji1xe9cmasuh0722.mp4 +老王卖瓜,https://vd3.bdstatic.com/mda-jkrk9bk95f9utr9r/hd/mda-jkrk9bk95f9utr9r.mp4 +策划,https://vd3.bdstatic.com/mda-ki60ag5ub193axs9/hd/mda-ki60ag5ub193axs9.mp4?pd=19&vt=1&playlist=%5B%22sc%22%2C%22hd%22%5D +不差钱,https://vdse.bdstatic.com//769f31778a85f33825c44a9b0c70ac37.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2022-06-15T10%3A24%3A57Z%2F-1%2Fhost%2F9d4a74ab09dc18c2f4d9b0b8f77c621471a15359ec3b77c186f51611f4712005 +就差钱,https://vdse.bdstatic.com//812d49e751aa31530ec39debfe54a359.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2022-06-14T08%3A49%3A09Z%2F-1%2Fhost%2Fa58bdb86d23b53b6909e8e19d85dad9fed3adeba4a664a22eef9a7d32ac2486a +昨天今天明天,https://vd3.bdstatic.com/mda-ia4xz7n2s4hxbhby/logo/hd/mda-ia4xz7n2s4hxbhby.mp4?pd=19&vt=1&playlist=%5B%22hd%22%2C%22sc%22%5D +捐助,https://vd3.bdstatic.com/mda-jaqz8g17b9cvryks/hd/mda-jaqz8g17b9cvryks.mp4?pd=19&vt=1 +捐助后传,https://vd3.bdstatic.com/mda-kbsrpz9zmbbvznjw/hd/mda-kbsrpz9zmbbvznjw.mp4?pd=19&vt=1&playlist=%5B%22hd%22%2C%22sc%22%5D +小崔说事,https://vdse.bdstatic.com//2f54cd59170279f94c5b354179bda8c0.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2022-06-12T04%3A47%3A48Z%2F-1%2Fhost%2Fc0d35c8c0a00af3226ac1bc3a1510c1474d8054a30290740da4a2d567924f779 +中奖了,https://vd3.bdstatic.com/mda-kmkh9zy2b3gnx4bq/mda-kmkh9zy2b3gnx4bq.mp4?pd=19&vt=1 +卖拐,https://vd3.bdstatic.com/mda-mdgia7vnkscvxh6d/v1-hknm/hd/mda-mdgia7vnkscvxh6d.mp4?pd=19&vt=1 +功夫,https://vd3.bdstatic.com/mda-mjn3rmcivntas8ez/hd/cae_h264_nowatermark/1635016788091110865/mda-mjn3rmcivntas8ez.mp4?pd=19&vt=1 +相亲1,https://vd3.bdstatic.com/mda-ki5quadqsdi1tk9e/mda-ki5quadqsdi1tk9e.mp4?pd=-1&pt=0&cr=0&vt=0&cd=0&did=cfcd208495d565ef66e7dff9f98764da&logid=3024484252&vid=10808391094376007907&auth_key=1655295624-0-0-6fb10727b6c3c195f08ff9bebe036cd0&bcevod_channel=searchbox_feed +相亲2,https://vd3.bdstatic.com/mda-kipkytij74rnn9k3/hd/mda-kipkytij74rnn9k3.mp4?pd=19&vt=1&playlist=%5B%22sc%22%2C%22hd%22%5D +钟点工,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200fg10000c8e2e53c77ua6v88gk9g&ratio=720p&line=0 +火炬手,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200fg10000c54t79jc77u7est4rcn0&ratio=720p&line=0 +火炬手,https://vd3.bdstatic.com/mda-jar0302925j1nwep/hd/mda-jar0302925j1nwep.mp4?pd=19&vt=1&playlist=%5B%22hd%22%5D +生日快乐,https://vd3.bdstatic.com/mda-mkskgzkzsgvgcntm/540p/h264_cae/1638023743815756700/mda-mkskgzkzsgvgcntm.mp4?pd=19&vt=1 +狭路相逢,https://vd3.bdstatic.com/mda-kd0mku18u3rui7gz/v1-cae/hd/mda-kd0mku18u3rui7gz.mp4?pd=19&vt=1&playlist=%5B%22hd%22%2C%22sc%22%5D +超级大明星,https://vd3.bdstatic.com/mda-ji3f9bxs1cxwmui7/hd/mda-ji3f9bxs1cxwmui7.mp4?pd=19&vt=1&playlist=%5B%22hd%22%5D +阳仔演笑会2,https://vdse.bdstatic.com//b837548733e6bd32629f9134457ad811.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2022-06-14T12%3A24%3A48Z%2F-1%2Fhost%2F21b407cd58e7d2f39864128a9160659f1f4845e2cf4c01c6e2a3f30be1dbc557 +同桌的你,https://vd3.bdstatic.com/mda-kkfwqyn6sc4r5579/mda-kkfwqyn6sc4r5579.mp4?pd=19&vt=1 +中奖了,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200fg10000c416nhbc77ueljqcfms0&ratio=720p&line=0 +有钱了,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300fg10000c4mruerc77ua2hethfig&ratio=720p&line=0 +小草,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f580000bqvq5p2kgg1hr4fgtkng&ratio=720p&line=0 +小九老乐,https://vd3.bdstatic.com/mda-maqs355itqp221rx/v2-hknm/hd/mda-maqs355itqp221rx.mp4?pd=19&vt=1 +办班,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300f830000bqvq3vcssiod1f1acv10&ratio=720p&line=0 +年前年后,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300f250000br00c6t03hnekstiv2rg&ratio=720p&line=0 +卖梨,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f850000bqvq43ueankk4sopbea0&ratio=720p&line=0 +城市打工妹,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200fb00000br0007k2v0nbugkvpqc0&ratio=720p&line=0 +如此竞争,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200fe60000br000frls1kbc9rjapeg&ratio=720p&line=0 +儿子大了,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f020000bqvq3u89lgt8of4fk0tg&ratio=720p&line=0 +同学会,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f9c0000brabn8v70gfhplsfi78g&ratio=720p&line=0 +拜年,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0d00fg10000c83hhi3c77u01a8d7hp0&ratio=720p&line=0 +辽宁小品,http://epg.112114.xyz/douyu/9322175 +新虎口遐想,https://vd4.bdstatic.com/mda-jarfmdf8su7sckk3/hd/mda-jarfmdf8su7sckk3.mp4?auth_key=1655295819-0-0-df94f7531d93ff90ad12888c89a672ca&bcevod_channel=searchbox_feed&cd=0&pd=1&pt=3&logid=3219421685&vid=8705230262897615568&abtest=all +冯巩郭冬临狗不理包子,https://vd2.bdstatic.com/mda-jdqwqnk1xxszhw8c/mda-jdqwqnk1xxszhw8c.mp4?pd=-1&pt=0&cr=0&vt=0&cd=0&did=cfcd208495d565ef66e7dff9f98764da&logid=2275698282&vid=17330773072848394300&auth_key=1655291275-0-0-73fe6c276ababcdb43b87a4fda6002df&bcevod_channel=searchbox_feed +牛群冯巩领导冒号,https://vdse.bdstatic.com//123b1e01f5128d0e71b4f392ec1a971c.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2022-06-12T06%3A54%3A23Z%2F-1%2Fhost%2F6274ff464fd635b6108aacc556df42224f265e9b3f4bd3a37a74cbdbf985d0b8 +冯巩相声,https://vdse.bdstatic.com//65873c285f222c4cfeecf527f3e84259.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2022-06-15T09%3A55%3A46Z%2F-1%2Fhost%2F9119b3500a8e21fb21665d9576bbf410e5a0fa8904ccc1ce0d3aabde21c99c8a +牛群冯巩我的儿子,https://vdse.bdstatic.com//f27179e048a85dd2f00d16f6a13ac370.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2022-06-15T08%3A43%3A23Z%2F-1%2Fhost%2F026eb7ddc17de37a053903ceb90523b0265d8e5c7ed8eb5b20f5cc0de186f27c +牛群冯巩两个弄潮儿,https://vd3.bdstatic.com/mda-mkqdhm17rs7198m6/hd/cae_h264/1637859905115117938/mda-mkqdhm17rs7198m6.mp4?pd=19&vt=1 +要条件,https://vd2.bdstatic.com/mda-kgah4byryi8gsqk8/v1-cae/mda-kgah4byryi8gsqk8.mp4?pd=-1&pt=0&cr=0&vt=0&cd=0&did=cfcd208495d565ef66e7dff9f98764da&logid=1347013120&vid=11361264719745011699&auth_key=1655290347-0-0-5dfca4bc79fbe4b6685de35fd1e0a622&bcevod_channel=searchbox_feed +岳云鹏相声给我个机会,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300fab0000buf8p6s0srttfb9ulotg&ratio=720p&line=0 +孔云龙扒马褂,https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300fg10000c7la4l3c77u5vs0abgs0&ratio=720p&line=0 +经典小品[1920x1080],http://epg.112114.xyz/douyu/9067836 +相声小品[960x540],http://epg.112114.xyz/douyu/9286868 + + +龍🐉看戏曲,#genre# + +曲剧《桑林收子》,http://gcw.bdcdn.shoujiduoduo.com/v/190617/2282c7e70fc99fe1e7e065e32b1ab2b9.mp4 +曲剧《四郎探母》,http://gcw.bdcdn.shoujiduoduo.com/v/191208/1aef74e8889ab9199f60927ac66b0885.mp4 +曲剧《四郎探母》,http://gcw.bdcdn.shoujiduoduo.com/v/190218/c981286b5772c5c5351b202973680264.mp4 +曲剧《背靴访帅》,http://gcw.bdcdn.shoujiduoduo.com/v/200831/2d7d5874b132f83b8f6d7c2e24ee3cdf.mp4 +曲剧《李豁子做梦》,http://gcw.bdcdn.shoujiduoduo.com/v/191208/d1a3c9f90719f7eebdafd964b7bcb8f8.mp4 +曲剧《刘公案》,http://gcw.bdcdn.shoujiduoduo.com/v/190429/2ef6445a1215cf06049cac61d72f201e.mp4 +曲剧《风雪配》,http://gcw.bdcdn.shoujiduoduo.com/v/190702/3e371e8c94d2e1070319298ce2f9c2b7.mp4 +名家演唱会,http://gcw.bdcdn.shoujiduoduo.com/v/190710/acb4c10132c1db9122b9fc1d9bb662e1.mp4 +曲剧《十八哭》,http://gcw.bdcdn.shoujiduoduo.com/v/190304/7dc7811188639217fb8299804021325f.mp4 +曲剧《王华买爹》,http://gcw.bdcdn.shoujiduoduo.com/v/190902/19ce2ae8133857ae7ffc2dbe0c674a3b.mp4 +曲剧《李豁子说媒》,http://gcw.bdcdn.shoujiduoduo.com/v/190404/fe8abd72959145ed7ca5b56342849b89.mp4 +曲剧《卷席筒》,http://gcw.bdcdn.shoujiduoduo.com/v/190527/315a044c2b9cf3a17e2b37ef09e21cd5.mp4 +曲剧小段,http://gcw.bdcdn.shoujiduoduo.com/v/190513/4a77c50ae75a653dfbf5396f45c592e3.mp4 +曲剧【借簪子】全场,http://gcw.bdcdn.shoujiduoduo.com/v/190428/002d8daebc70bfbe6e809d28b55084af.mp4 +曲剧《荆钗记》,http://gcw.bdcdn.shoujiduoduo.com/v/190706/f24473d42d884882617f29ab1157b8ab.mp4 +曲剧《五福临门》【全场】,http://gcw.bdcdn.shoujiduoduo.com/v/200302/3b18c2c8f578035387fc737d88dd8f9e.mp4 +曲剧《李豁子》选段,http://gcw.bdcdn.shoujiduoduo.com/v/201105/3e869cb57c096666978b871997e1781e.mp4 +曲剧全集《惊蛰》-上集,http://gcw.bdcdn.shoujiduoduo.com/v/201105/8fb403bfce72a9ae63ec389b5c756092.mp4 +曲剧,http://gcw.bdcdn.shoujiduoduo.com/v/190419/9e086a2c7ef700f51bb480e522a947ae.mp4 +曲剧《李豁子说媒》-_超清,http://gcw.bdcdn.shoujiduoduo.com/v/190325/3635fa4901fb8f63a26cf623a9c3c549.mp4 +曲剧《武家坡》全场,http://gcw.bdcdn.shoujiduoduo.com/v/191207/d25810bf3aa56d64dcfa0722c0682570.mp4 +曲剧《卷席筒》海连池、刘兰玉、马二章(79年舞台版),http://gcw.bdcdn.shoujiduoduo.com/v/190501/effda381decab3a9da4e1d8090de384a.mp4 +曲剧《李豁子离婚》选段,http://gcw.bdcdn.shoujiduoduo.com/v/201115/66568433507300287649a7579cfe59d0.mp4 +曲剧【赵氏孤儿】全场,http://gcw.bdcdn.shoujiduoduo.com/v/190325/870b319c7c76d1454305c961de3193d7.mp4 +曲剧《龙情》,http://gcw.bdcdn.shoujiduoduo.com/v/190213/83b5aee6b0ae5ea6e0951c9169838997.mp4 +曲剧《哑女告状》完整版,http://gcw.bdcdn.shoujiduoduo.com/v/200608/7fcc1b27a03acfbf1b7b8379370387fa.mp4 +曲剧《卷席筒》选段,http://gcw.bdcdn.shoujiduoduo.com/v/200618/f72a7218b1eded2f2b7bf043176f92a7.mp4 +曲剧《铡赵王》,http://gcw.bdcdn.shoujiduoduo.com/v/190924/93b9d37f2c7420477a1b082c77a06220.mp4 +曲剧名家李亚军、刘艳丽曲剧《寇准背靴》小花园送饭选段!,http://gcw.bdcdn.shoujiduoduo.com/v/200331/c24282ad8c68477224055f19d324b30e.mp4 +张新芳——曲剧《陈三两》:陈三两迈步上公庭,http://gcw.bdcdn.shoujiduoduo.com/v/210118/6c7200369ec769f15448231b47e8bab3.mp4 +曲剧《秦香莲挂帅》,http://gcw.bdcdn.shoujiduoduo.com/v/191122/98131f0938de177cb3ffbe7aa49f6632.mp4 +曲剧海连池曲剧团《郭威反朝》03,http://gcw.bdcdn.shoujiduoduo.com/v/190225/9fbb0cb5e5338b29f6d9946fd7051adb.mp4 +曲剧《刘全进瓜》,http://gcw.bdcdn.shoujiduoduo.com/v/190920/bd1f1d3a930f50f5ffbed6792da7865a.mp4 +曲剧《楚山宝》,http://gcw.bdcdn.shoujiduoduo.com/v/191122/1ade9113a8bcc9385cc6e9df9871a27e.mp4 +曲剧《刘公案》选段,http://gcw.bdcdn.shoujiduoduo.com/v/201026/22e51c748600e5e42bc5a138c62c5160.mp4 +曲剧下朝来一边走一边长叹李天方,http://gcw.bdcdn.shoujiduoduo.com/v/190718/664cfdec0eb7ae39b7ff5c3daab7729c.mp4 +曲剧《风雪配》选段,http://gcw.bdcdn.shoujiduoduo.com/v/190404/59e91848a56166a30a275089daf59b9a.mp4 +曲剧《风雪配》选段,http://gcw.bdcdn.shoujiduoduo.com/v/190315/5d17a97a41c3debe8551adc2928b1ed8.mp4 +乔华云演唱曲剧《王小赶脚》选场,http://gcw.bdcdn.shoujiduoduo.com/v/190524/74c592424d50fd8dda66f52b9b30a650.mp4 +教闺女,http://gcw.bdcdn.shoujiduoduo.com/v/210127/870fd252bad1a37fbbc7f19196b2e9cf.mp4 +河南曲剧《四郎探母》【探母一折】,http://gcw.bdcdn.shoujiduoduo.com/v/190505/a7900e9cbc6b71e46d7a1a895b103033.mp4 +曲剧《李豁子说媒》,http://gcw.bdcdn.shoujiduoduo.com/v/190218/94ace5d3a1f02e68621b32b0b3477b9f.mp4 +曲剧《秦香莲》方素珍、侯庆祥、李春景-河南省曲剧团,http://gcw.bdcdn.shoujiduoduo.com/v/190907/9de92127ec2567101234d761b31c1a66.mp4 +马骐版河南曲剧《背靴访帅》姜还是老的辣!,http://gcw.bdcdn.shoujiduoduo.com/v/200919/906b70f4cd6f3ad139a2d4986cc48a78.mp4 +曲剧:刘垒、郭晓晓、郭艺芳《吴汉杀妻》内录音(洛阳市新安县曲剧团),http://gcw.bdcdn.shoujiduoduo.com/v/190213/bccccb0837a838d9996b9fae89e4d493.mp4 +中原名丑张晓英曲剧《老两口玩浪漫》真搞笑!,http://gcw.bdcdn.shoujiduoduo.com/v/190330/4f21f789c48f1c4a9c739e26056a65af.mp4 +曲剧-海连池《卷席筒》大老爷你稳坐在察院,http://gcw.bdcdn.shoujiduoduo.com/v/190511/4951d7d9e0b1a93c4fa696f45d5ac664.mp4 +曲剧《柜中缘》,http://gcw.bdcdn.shoujiduoduo.com/v/190224/a43970035d5ea22b1d9e0e7b60415bd4.mp4 +曲剧《包公辞朝》怒打王强-马遂合演唱,http://gcw.bdcdn.shoujiduoduo.com/v/191207/e3686f25f7c417454dbd2be4d0fbc87b.mp4 +秦芳欣表演,http://gcw.bdcdn.shoujiduoduo.com/v/190613/1b015c533e065640f025f440158384ae.mp4 +曲剧_陈三两(孔素红)陈三两漫步上公庭,http://gcw.bdcdn.shoujiduoduo.com/v/190710/916c9cf23da02dfea6e1bc13dd328bf6.mp4 +海连池曲剧《卷席筒》经典选段:小仓娃跪大堂诉冤枉,http://gcw.bdcdn.shoujiduoduo.com/v/190223/09e4765a1fdf115854f683e7fa863377.mp4 +十冬腊月天你不该拿着那芦花当丝棉,http://gcw.bdcdn.shoujiduoduo.com/v/190519/46d622ba7c7985c5e8045be5a1975188.mp4 +李天方夫妇演唱曲剧《苍娃找爹》就,http://gcw.bdcdn.shoujiduoduo.com/v/190624/0a20f9fccd7449afab722eed0ef0eedf.mp4 +曲剧名家胡希华曲剧《李豁子我遭了啥罪》,http://gcw.bdcdn.shoujiduoduo.com/v/190711/123d9450d12ba8ac814e5842c1463256.mp4 +“小仓娃我离了-登封小县”选段-曲剧《卷席筒》杨学,http://gcw.bdcdn.shoujiduoduo.com/v/190602/8b28dec624f172d186f11fc7290c48ff.mp4 +南阳市金红曲剧团演唱,http://gcw.bdcdn.shoujiduoduo.com/v/190714/79f329b25bd56d24d99d64c49da7ca84.mp4 +南阳市金红曲剧团演唱,http://gcw.bdcdn.shoujiduoduo.com/v/190926/edde31e6fcbc72a7ef2203b9b9cad3a0.mp4 +南阳市金红曲剧团演唱,http://gcw.bdcdn.shoujiduoduo.com/v/191003/1dacb6c7907dae26e14d1043cdcc8800.mp4 +不愧是戏曲上的不倒翁,http://gcw.bdcdn.shoujiduoduo.com/v/190617/d37e4e0a63b5cfd4ec0c05edb64351e4.mp4 +(曲剧【秦香莲】全场●河南省曲剧团●★mp4,http://gcw.bdcdn.shoujiduoduo.com/v/190318/114d1ca4f536bc0b172ceb9ddb07eb36.mp4 +李天方演唱,http://gcw.bdcdn.shoujiduoduo.com/v/190609/6690ac91bca405dca8cada0ced8b054d.mp4 +20130928李豁子唱段.曲剧表演艺术家李天方演唱,http://gcw.bdcdn.shoujiduoduo.com/v/190304/951409acd26e4d06be3d1b6ea1bc4ad8.mp4 +曲剧小折子《孤男寡女》李天方,http://gcw.bdcdn.shoujiduoduo.com/v/190706/3676c145c6f733a449f10d5bf1c6f500.mp4 +凄惨结局!,http://gcw.bdcdn.shoujiduoduo.com/v/190703/964530e611ef9c0f468187530ff35df5.mp4 +曲剧全场戏【下陈州】上集★,http://gcw.bdcdn.shoujiduoduo.com/v/191207/33327eea240ea54022d0024e4c8c8454.mp4 +南阳市宛东青年曲剧团,http://gcw.bdcdn.shoujiduoduo.com/v/191012/bb2fb4f0811d29c56dd6edfd9427b752.mp4 +好听,http://gcw.bdcdn.shoujiduoduo.com/v/190203/578c5362ec8840f354a99196387f11d5.mp4 +新婚夜红灯亮鼓乐齐鸣,http://gcw.bdcdn.shoujiduoduo.com/v/201113/680de1c6c1d7fdeac9c8f24a966cf008.mp4 +现代曲剧--《慈母情和慈母心》合集。,http://gcw.bdcdn.shoujiduoduo.com/v/201112/274d53474cf5251ff953ce385c73cc67.mp4 +(梨园春版),http://gcw.bdcdn.shoujiduoduo.com/v/190822/5668e504ad82c60607d315479d821990.mp4 +曲剧《红娘》曲剧名家刘青演唱,http://gcw.bdcdn.shoujiduoduo.com/v/201226/d0513575077086a2c479c2b06220e361.mp4 +河南省曲剧团,http://gcw.bdcdn.shoujiduoduo.com/v/190130/f825d70cb7e1820a4e75a050793dc241.mp4 +菏航,http://gcw.bdcdn.shoujiduoduo.com/v/200304/aa62b08f4acc8ddb492fdc3f5b60bb06.mp4 +团演唱,http://gcw.bdcdn.shoujiduoduo.com/v/190125/ae2171e37909f87af12c02403c484f9f.mp4 +王华买爹第1集,http://gcw.bdcdn.shoujiduoduo.com/episodes/210712/10033019/eac79457c0bbc458be19715b4bdc573f.mp4 +王华买爹第2集,http://gcw.bdcdn.shoujiduoduo.com/episodes/210712/10033019/060dde67d9a7e11898d2ab7d473b5509.mp4 +王华买爹第3集,http://gcw.bdcdn.shoujiduoduo.com/episodes/210712/10033019/55da4c403d2ea51fa5602f304d4febc3.mp4 +王华买爹第6集,http://gcw.bdcdn.shoujiduoduo.com/episodes/210712/10033019/27bfba291a0fb4f0bce5377b27f709f5.mp4 +王华买爹第7集,http://gcw.bdcdn.shoujiduoduo.com/episodes/210712/10033019/92fa5f80e4dc70d3fdea32b0c386a821.mp4 +郑州市曲剧团,http://gcw.bdcdn.shoujiduoduo.com/v/190404/52298ebc73c6ef8b36a34ad9e09c924d.mp4 +抱娇儿止不住悲声大放!,http://gcw.bdcdn.shoujiduoduo.com/v/190608/194edc031eeaed2d7f7ca2589e6768ec.mp4 +听臣把心病奏吾皇,http://gcw.bdcdn.shoujiduoduo.com/v/190624/2f080bc5a284f70f38b92664a9e3444f.mp4 +刘艳丽演唱曲剧《老鼠嫁女》好玩!,http://gcw.bdcdn.shoujiduoduo.com/v/200914/865e9898babe5bee65b4e7a834390aae.mp4 +曲剧大全1,http://gcw.bdcdn.shoujiduoduo.com/v/191009/7d5524c35adc0763d87868a140b051be.mp4 +年老人怎禁这风雪旋!,http://gcw.bdcdn.shoujiduoduo.com/v/190605/6b44b90dfad0379f6cc6ae14354af580.mp4 +秦腔《别窑》全折,http://gcw.bdcdn.shoujiduoduo.com/v/191208/f2edc3e9c5200b7a3361550d4be037b5.mp4 +秦腔《赶坡》片段,http://gcw.bdcdn.shoujiduoduo.com/v/201029/eb7fbb8b56dade1730ec3a521a276b3c.mp4 +107-秦腔商芳会辕门斩子,http://gcw.bdcdn.shoujiduoduo.com/v/190127/9d0b617538e671622e3db152c892e838.mp4 +纪念齐晓春先生,http://gcw.bdcdn.shoujiduoduo.com/v/210120/f4fb625fecd6e39818b90086e616ab19.mp4 +名家联袂演出,http://gcw.bdcdn.shoujiduoduo.com/v/210207/8d8d31cca2b5441954d9e52568d09a7b.mp4 +西安五一剧团,http://gcw.bdcdn.shoujiduoduo.com/v/201014/d06fec900e95d24c9ff73f3bb51625c0.mp4 +西安易俗社2018春节秦安清唱晚会,http://gcw.bdcdn.shoujiduoduo.com/v/190122/af3ec3b3a6cd383400360f8ee93b1e94.mp4 +杨红梅嗓音太棒了,http://gcw.bdcdn.shoujiduoduo.com/v/200320/4f229afb544e1b90383d1ee58069a816.mp4 +康亚蝉,http://gcw.bdcdn.shoujiduoduo.com/v/210211/005278db46b6f82dadd3fe7428220210.mp4 +陕西秦腔——丑角戏(烘窑),http://gcw.bdcdn.shoujiduoduo.com/v/200722/c8d90e93efef0566c219d9fc1ef7b06c.mp4 +张宁,http://gcw.bdcdn.shoujiduoduo.com/v/190514/10003147.mp4 +唐梨园秦腔剧院,http://gcw.bdcdn.shoujiduoduo.com/v/190507/bc0fcf2785f707597273caf592c9a78f.mp4 +伍敏中_全巧民_西安易俗社,http://gcw.bdcdn.shoujiduoduo.com/v/200310/80ae6bdea59162136af8fb3eba350725.mp4 +张武宏,http://gcw.bdcdn.shoujiduoduo.com/201805/1181-385.mp4 +怀旧电影《三滴血》,http://gcw.bdcdn.shoujiduoduo.com/201805/1772-690.mp4 +陈百甫板胡,http://gcw.bdcdn.shoujiduoduo.com/v/200205/969e241fff8b79bd1386f6f2a417a698.mp4 +秦腔折子戏《二进宫》,http://gcw.bdcdn.shoujiduoduo.com/v/190816/bc42f41cb749a3341bf1e7260a2413de.mp4 +李东峰,http://gcw.bdcdn.shoujiduoduo.com/v/200914/d2231ef87c6bd335ecf2e5172724e746.mp4 +陕西省戏曲研究院演出,http://gcw.bdcdn.shoujiduoduo.com/v/201030/536f534a25ebab5eb8d10ff75e31dc9c.mp4 +张武宏(西北名丑),http://gcw.bdcdn.shoujiduoduo.com/v/190818/9f90b4718102660ee28c3a1801cdec65.mp4 +秦腔全本《四进士》渭南市秦腔团,http://gcw.bdcdn.shoujiduoduo.com/v/190508/05ec40797c1591479c0cfe04e1eafa66.mp4 +秦腔全本《卖妙郎》银川市秦腔剧团演出,http://gcw.bdcdn.shoujiduoduo.com/v/190518/10003127.mp4 +全本(宁夏秦腔剧院),http://gcw.bdcdn.shoujiduoduo.com/v/190218/1f61dbee5ec4931e277ebd8fde51435b.mp4 +西安秦腔一团,http://gcw.bdcdn.shoujiduoduo.com/v/191208/d513328096fbe5995a2be8e17241f9cc.mp4 +安徽省安庆市黄梅戏三团,http://gcw.bdcdn.shoujiduoduo.com/v/191211/9ed54cfd1c55624e227f28ca40c6a4ab.mp4 +黄梅戏,http://gcw.bdcdn.shoujiduoduo.com/v/210120/965f4cee36d51eb13fe6121cd3aee2fb.mp4 +黄梅戏,http://gcw.bdcdn.shoujiduoduo.com/v/190221/6a38928efbe1f76f04f14a94197cc6d6.mp4 +严凤英韩再芬周源源,http://gcw.bdcdn.shoujiduoduo.com/v/190702/ed2662b8d3d3a875e01a53c669f4af50.mp4 +黄梅戏【春香闹学】,http://gcw.bdcdn.shoujiduoduo.com/v/201027/552dcdf37bdf2b4ff56d9e79bb58f527.mp4 +精彩好看!,http://gcw.bdcdn.shoujiduoduo.com/v/200227/9d52e829ee706c3d5170d13bfac85b70.mp4 +二人台红红火火二人台,http://gcw.bdcdn.shoujiduoduo.com/v/190706/e9cfd643c90fea9081e6ae5d18b654f0.mp4 +家乡二人台《走西口》刁敏亚苏,http://gcw.bdcdn.shoujiduoduo.com/v/200326/07539dd2fe81ac79a5e42a333a2993cd.mp4 +二人台传统剧目《种洋烟》,http://gcw.bdcdn.shoujiduoduo.com/v/200224/4b9ccc2437f42dcfe3614bb6ba90ecc7.mp4 +好看的二人台连续看,http://gcw.bdcdn.shoujiduoduo.com/v/191009/f8f14e1a3d2122b322acef4d40b963d4.mp4 +二人台《卖油》武利平,http://gcw.bdcdn.shoujiduoduo.com/v/191020/f30535c29135b2d97066f459aaf44ef2.mp4 +王茂林,http://gcw.bdcdn.shoujiduoduo.com/v/190925/29d1d265eb98e2ceb273c8090f19c71e.mp4 +王茂林,http://gcw.bdcdn.shoujiduoduo.com/v/191109/4ddcbf706025b04b2a1c97e501777bb6.mp4 +二人台-借笊篱,http://gcw.bdcdn.shoujiduoduo.com/v/200302/954ba57467c5a9e254a9fb248fb8fba8.mp4 +河曲二人台牌子曲《西江月》,http://gcw.bdcdn.shoujiduoduo.com/v/200201/c386dae48f7df5949df61261b070fdd0.mp4 +莺歌燕舞民间二人台,http://gcw.bdcdn.shoujiduoduo.com/v/190809/7ef0d301b8ba625ed23c6b11db351b52.mp4 +二人台《小叔子挎嫂嫂》,http://gcw.bdcdn.shoujiduoduo.com/v/190917/b887dfe149fd8b1cc5fbe3eac546b49a.mp4 +田威虎,http://gcw.bdcdn.shoujiduoduo.com/v/191227/bf06f5573bbab198867401145d650d5c.mp4 +锣鼓众唱二人台《红红火火》一种好听又好看的演唱形式,http://gcw.bdcdn.shoujiduoduo.com/v/191227/6f833e835ada606ecdd30334168ce6a4.mp4 +好看的二人台,http://gcw.bdcdn.shoujiduoduo.com/v/190620/a29c33a840fc002a2c024a2b8b41cc5d.mp4 +好看的二人台,http://gcw.bdcdn.shoujiduoduo.com/v/190826/8b998a18db42b0f852e6f4b045bff7c0.mp4 +好看的二人台,http://gcw.bdcdn.shoujiduoduo.com/v/190624/af0375b07c4a9337d8aa387ba0d3ae0a.mp4 +好看的二人台,http://gcw.bdcdn.shoujiduoduo.com/v/190802/0fa24b311630c9199c05493e4217f5b5.mp4 +家乡二人台乌兰牧骑后台的孩子们,http://gcw.bdcdn.shoujiduoduo.com/v/191017/84e49ef1fa9e8de8ced51fde056223e1.mp4 +团长:侯奇峰,http://gcw.bdcdn.shoujiduoduo.com/v/210303/9f9275b65ebccf90a2af213afd14ad3e.mp4 +阳高二人台农民艺术团排炼节目,http://gcw.bdcdn.shoujiduoduo.com/v/191108/8532cf712888e79cf19401ce0a8d7f21.mp4 +家乡二人台张飞牧牛,http://gcw.bdcdn.shoujiduoduo.com/v/200118/99156c2e46f88ed1ce3d2d915aa1ecd8.mp4 +二人台小放牛,http://gcw.bdcdn.shoujiduoduo.com/v/191212/c1ce88590d948dde187d414b0ed326ed.mp4 +四省区二人台大赛选拔赛,http://gcw.bdcdn.shoujiduoduo.com/v/201115/ce56c6788d775f623679ea5ada68a9a8.mp4 +家乡二人台向沙千里一壶酒,http://gcw.bdcdn.shoujiduoduo.com/v/200210/34cf1867a38b339d9e9e47ae274f89eb.mp4 +二人台跳粉墙,http://gcw.bdcdn.shoujiduoduo.com/v/191230/4f213a68f7844ffc506e69bd3309dd3f.mp4 +刘爱爱,http://gcw.bdcdn.shoujiduoduo.com/v/190604/10003232.mp4 +家乡二人台牌子曲枚韵赵官军,http://gcw.bdcdn.shoujiduoduo.com/v/191018/46fd3b500cf959d3d0f7dbdc13a3eb32.mp4 +云飞现场一首《亲亲的二人台》帅到全场尖叫!,http://gcw.bdcdn.shoujiduoduo.com/v/200122/2956c3d631e201b6427a847dc05c492f.mp4 +忻州侯奇峰演艺传媒二人台《走西口》杨美萍~刘文进,http://gcw.bdcdn.shoujiduoduo.com/v/191211/01b716a5bf14e2f8e7b7ba9048098d8d.mp4 +内蒙古二人台山曲/非物质文化遗产谢谢欣赏,http://gcw.bdcdn.shoujiduoduo.com/v/190626/cca8025a39b8f70e3c8e8295648290eb.mp4 +晋剧大全,http://gcw.bdcdn.shoujiduoduo.com/v/190716/9f9632997c1ec3491b5b83b803256242.mp4 +商永吉,http://gcw.bdcdn.shoujiduoduo.com/v/190311/7273ee44ef1416783240bbb95b6e5f7b.mp4 +百听不厌!,http://gcw.bdcdn.shoujiduoduo.com/v/190905/0ffb3123a3fe425d67064fab29954718.mp4 +冀萍,http://gcw.bdcdn.shoujiduoduo.com/v/190904/84a445bcf317af09f66bf582065f2708.mp4 +朱建军,http://gcw.bdcdn.shoujiduoduo.com/v/190919/da08a93b8ec15e3054aab32464f849ee.mp4 +名家王爱爱,http://gcw.bdcdn.shoujiduoduo.com/v/191225/8254f30470e315c1fee78fb1493424ec.mp4 +山西省晋剧院一团,http://gcw.bdcdn.shoujiduoduo.com/v/190531/3e0024131e184b61868238415002898d.mp4 +山西省晋剧院青年团《大清唱》中集,http://gcw.bdcdn.shoujiduoduo.com/v/190522/10003160.mp4 +山西晋剧全本戏大全,http://gcw.bdcdn.shoujiduoduo.com/v/190617/d81b7b3adaf01691f82d395275e2ae69.mp4 +陈云龙.flv,http://gcw.bdcdn.shoujiduoduo.com/v/190817/5c39eb0931ccee10c5f031c4a6395263.mp4 +刘汉银《杨八姐游春》,http://gcw.bdcdn.shoujiduoduo.com/v/190613/72d9f736805ff9ac6877786855acbe3d.mp4 +山西省小程玉英剧团,http://gcw.bdcdn.shoujiduoduo.com/v/201104/7f6a182e42bd064ee4427623e68fb02e.mp4 +评剧《花为媒》,http://hls.cntv.kcdnvip.com/asp/hls/2000/0303000a/3/default/48da40a19746409997717371a80fd9e6/2000.m3u8 +越剧《梁山伯与祝英台》,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/427eb50cc6844d47bcd35d2fac737a0a/850.m3u8 +京剧《野猪林》,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/d2ddcbd8cdba4473a541687e683c1aca/850.m3u8 +京剧《杜鹃山》02,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/5f76957927c5421e8bd75d0f53c95e4a/850.m3u8 +京剧《沙家浜》,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/6241c3f25a9a4dda9b05b9ba185500e0/850.m3u8 +京剧《穆桂英大战洪州》,http://hls.cntv.kcdnvip.com/asp/hls/2000/0303000a/3/default/aaa5a373d97a47d1bc95b1418b672b33/2000.m3u8 +黄梅戏《王老虎抢亲》,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/3b6ae81ae49f4c72b0c977023565c762/850.m3u8 +吕剧《李二嫂改嫁》01,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/90846f6758524d78997aad89df8c37e0/850.m3u8 +吕剧《李二嫂改嫁》02,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/47a9c8216d344c2dd45f11949dbbecb5/850.m3u8 +京剧《铁弓缘》,http://hls.cntv.myalicdn.com/asp/hls/2000/0303000a/3/default/e19f3238b0ba4849aa50d6b7f1118ab9/2000.m3u8 +越剧《碧玉簪》,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/9e90b1a2872b476b8a4f9882f9b63cde/850.m3u8 +京剧《杜鹃山》01,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/f468a89e0e394a718474523afe37c702/850.m3u8 +越剧《红楼梦》01,http://hls.cntv.myalicdn.com/asp/hls/2000/0303000a/3/default/f66e935661b44ff6b80a290537d5d204/2000.m3u8 +越剧《红楼梦》02,http://hls.cntv.myalicdn.com/asp/hls/2000/0303000a/3/default/10470613ead24f5cb435137b5f39ab98/2000.m3u8 +越剧《追鱼》,http://hls.cntv.myalicdn.com/asp/hls/2000/0303000a/3/default/3515e586d18743be99eb6cc2004cb995/2000.m3u8 +京剧《秦香莲》,http://hls.cntv.myalicdn.com/asp/hls/2000/0303000a/3/default/f8daefadadef41989225543875268a70/2000.m3u8 +黄梅戏《天仙配》,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/1cd056751daf430a943e63e6428c40d7/850.m3u8 + +龍🐉春晚篇,#genre# +春晚1983,https://vd2.bdstatic.com/mda-nmgf0aiczefpbjyv/360p/h264/1671273368681637465/mda-nmgf0aiczefpbjyv.mp4 +春晚1984,http://txmov2.a.kwimgs.com/upic/2022/01/31/15/BMjAyMjAxMzExNTU5NTRfNDAzMDAxOTlfNjYyNzMyMzg3MTRfMF8z_b_B192356dadbc90d207ba16964d4c2914c.mp4 +春晚1985,http://txmov2.a.kwimgs.com/upic/2022/01/31/16/BMjAyMjAxMzExNjAwMDFfNDAzMDAxOTlfNjYyNzMyNTAwMzJfMF8z_b_Be73c5abcbc0eeb2ec9fce6842e1362a4.mp4 +春晚1986,https://txmov2.a.kwimgs.com/bs3/video-hls/5231493982164619599_hlshd15.m3u8 +春晚1987,https://txmov2.a.kwimgs.com/bs3/video-hls/5195746663405928031_hlsb.m3u8 +春晚1988,https://txmov2.a.kwimgs.com/bs3/video-hls/5216575810935394655_hlsb.m3u8 +春晚1989,http://txmov2.a.kwimgs.com/upic/2022/01/31/16/BMjAyMjAxMzExNjAwMTVfNDAzMDAxOTlfNjYyNzMyNzQ2OTlfMF8z_b_Be477b27b9ce655d2372df56a5a3d96ef.mp4 +春晚1991,https://txmov2.a.kwimgs.com/bs3/video-hls/5210664837540712798_hlshd15.m3u8 +春晚1992,https://txmov2.a.kwimgs.com/bs3/video-hls/5256826755663896297_hlshd15.m3u8 +春晚1993,https://txmov2.a.kwimgs.com/bs3/video-hls/5217420261875933947_hlshd15.m3u8 +春晚1994,https://txmov2.a.kwimgs.com/bs3/video-hls/5197154061406974711_hlshd15.m3u8 +春晚1995,https://txmov2.a.kwimgs.com/bs3/video-hls/5255137907893179578_hlshd15.m3u8 +春晚1997,https://txmov2.a.kwimgs.com/bs3/video-hls/5230649583590411879_hlshd15.m3u8 +春晚1998,https://txmov2.a.kwimgs.com/bs3/video-hls/5225864507896315430_hlshd15.m3u8 +春晚1999,https://txmov2.a.kwimgs.com/bs3/video-hls/5258234133675308186_hlshd15.m3u8 +春晚2000,https://txmov2.a.kwimgs.com/bs3/video-hls/5216294359327079321_hlshd15.m3u8 +春晚2001,https://txmov2.a.kwimgs.com/bs3/video-hls/5228960735897942616_hlshd15.m3u8 +春晚2002,https://txmov2.a.kwimgs.com/bs3/video-hls/5255700858599864364_hlshd15.m3u8 +春晚2004,https://txmov2.a.kwimgs.com/bs3/video-hls/5223894184413450769_hlshd15.m3u8 +春晚2005,https://txmov2.a.kwimgs.com/bs3/video-hls/5254012008863954469_hlshd15.m3u8 +春晚2006,https://txmov2.a.kwimgs.com/bs3/video-hls/5194339310474320155_hlshd15.m3u8 +春晚2007,https://txmov2.a.kwimgs.com/bs3/video-hls/5219953534755647343_hlshd15.m3u8 +春晚2008,https://txmov2.a.kwimgs.com/bs3/video-hls/5194902262344826321_hlshd15.m3u8 +春晚2009,https://txmov2.a.kwimgs.com/bs3/video-hls/5210946337266019890_hlshd15.m3u8 +春晚1987,https://txmov2.a.kwimgs.com/bs3/video-hls/5195746663405928031_hlsb.m3u8 +春晚1988,https://txmov2.a.kwimgs.com/bs3/video-hls/5216575810935394655_hlsb.m3u8 +春晚1998,https://txmov2.a.kwimgs.com/bs3/video-hls/5225864507896315430_hlshd15.m3u8 +春晚2000,https://txmov2.a.kwimgs.com/bs3/video-hls/5216294359327079321_hlshd15.m3u8 +春晚2002,https://txmov2.a.kwimgs.com/bs3/video-hls/5255700858599864364_hlshd15.m3u8 +春晚2004,https://txmov2.a.kwimgs.com/bs3/video-hls/5223894184413450769_hlshd15.m3u8 +春晚2008,https://txmov2.a.kwimgs.com/bs3/video-hls/5194902262344826321_hlshd15.m3u8 +春晚2009,https://txmov2.a.kwimgs.com/bs3/video-hls/5210946337266019890_hlshd15.m3u8 +春晚2007,https://txmov2.a.kwimgs.com/bs3/video-hls/5219953534755647343_hlshd15.m3u8 +春晚2006,https://txmov2.a.kwimgs.com/bs3/video-hls/5194339310474320155_hlshd15.m3u8 +春晚2005,https://txmov2.a.kwimgs.com/bs3/video-hls/5254012008863954469_hlshd15.m3u8 +春晚2020,https://txmov2.a.kwimgs.com/bs3/video-hls/5248101009010430183_hlshd15.m3u8 +春晚1985,http://txmov2.a.kwimgs.com/bs3/video-hls/5227271857652377954_hlshd15.m3u8 +春晚1984,https://txmov2.a.kwimgs.com/bs3/video-hls/5229242184269609742_hlshd15.m3u8 +春晚1983,http://txmov2.a.kwimgs.com/bs3/video-hls/5207287136834522947_hlshd15.m3u8 +春晚1989,https://txmov2.a.kwimgs.com/bs3/video-hls/5194620763762726260_hlsb.m3u8 +春晚1996,https://txmov2.a.kwimgs.com/bs3/video-hls/5202783562064785590_hlshd15.m3u8 +春晚2003,https://txmov2.a.kwimgs.com/bs3/video-hls/5232338436280256836_hlshd15.m3u8 +春晚2013,https://txmov2.a.kwimgs.com/bs3/video-hls/5241627109089548390_hlshd15.m3u8 +春晚2018,https://txmov2.a.kwimgs.com/bs3/video-hls/5212635188105848764_hlshd15.m3u8 +春晚2019,https://txmov2.a.kwimgs.com/bs3/video-hls/5239093835831655107_hlshd15.m3u8 +春晚2017,https://txmov2.a.kwimgs.com/bs3/video-hls/5191524564569524830_hlshd15.m3u8 +春晚2021,https://txmov2.a.kwimgs.com/bs3/video-hls/5255700831151909807_hlshd15.m3u8 +春晚2022,https://txmov2.a.kwimgs.com/bs3/video-hls/5224457109297710655_hlshd15.m3u8 +春晚2023,https://txmov2.a.kwimgs.com/bs3/video-hls/5251197255879398624_hlshd15.m3u8 +春晚2024,https://p2.bdstatic.com/rtmp.liveshow.lss-user.baidubce.com/live/stream_bduid_6488563992_8982723413/merged_1707497046297_88536_25144_41936.m3u8 +2024珠江春晚,https://v10.dious.cc/20240209/lNN6pUqq/index.m3u8 +2024辽宁卫视春节联欢晚会“龙腾盛世中国年”上,https://v10.dious.cc/20240209/J95B9fT5/index.m3u8 +2024辽宁卫视春节联欢晚会“龙腾盛世中国年”下,https://v10.dious.cc/20240209/HWVp60d1/index.m3u8 +2024深圳春晚,https://v10.dious.cc/20240209/DKcsA9sZ/index.m3u8 +2024安徽卫视春节联欢晚会,https://v10.dious.cc/20240208/LHLdSBLv/index.m3u8 +2024吉林卫视春节联欢晚会,https://v10.dious.cc/20240208/9ahrnAPw/index.m3u8 +2024山东春节联欢晚会,https://v10.dious.cc/20240208/mJvkOFpp/index.m3u8 +2024河南春晚,https://v10.dious.cc/20240208/AN4hlNqo/index.m3u8 +2024山西春晚,https://v10.dious.cc/20240208/85CjUOf8/index.m3u8 +2024湖南卫视芒果TV春节联欢晚会,https://top.1080pzy.co/202402/04/MjEwstGXHa3/video/index.m3u8 +2024春节藏历新年联欢晚会,https://top.1080pzy.co/202402/10/qA9fsajXD03/video/index.m3u8 +2024川渝春节联欢晚会,https://top.1080pzy.co/202402/10/jBTNQuWPgZ3/video/index.m3u8 +2024年北京电视台龙年春节联欢晚会,https://v10.dious.cc/20240210/Ll7WeunD/index.m3u8 +2024湖北春晚,https://v10.dious.cc/20240210/pOo0DnPW/index.m3u8 +2024年云南省春节文艺晚,https://v10.dious.cc/20240210/yOFfQfxj/index.m3u8 +2024海南春节联欢会,https://v10.dious.cc/20240210/vaplHwkP/index.m3u8 +2024安徽农民春晚,https://v10.dious.cc/20240210/UnLrYixW/index.m3u8 +2024中国杂技大联欢,https://v10.dious.cc/20240210/672HyyQ9/index.m3u8 +2024粤港澳大湾区春节晚会,https://top.1080pzy.co/202402/11/8VQCAA76NZ3/video/index.m3u8 +2024粤港澳大湾区特别节目,https://top.1080pzy.co/202402/11/xkWszjeRYG3/video/index.m3u8 +2024江苏卫视龙年春节联欢晚会,https://top.1080pzy.co/202402/11/h1veKVuUdX3/video/index.m3u8 +2024东方卫视春节晚会,https://top.1080pzy.co/202402/11/VWVyPyEiFX3/video/index.m3u8 +2024天津卫视相声春晚,https://top.1080pzy.co/202402/11/wgYVqXxrEh3/video/index.m3u8 +启航2024中央广播电视总台跨年晚会,https://v10.dious.cc/20240101/jb33ogNp/index.m3u8 +2024浙江卫视跨年晚会,https://top.1080pzy.co/202401/01/CukCTWW1HW3/video/index.m3u8 +2024湖南卫视芒果TV跨年晚会,https://top.1080pzy.co/202401/01/1aNBTstEPe3/video/index.m3u8 +2024北京卫视跨年晚会,https://top.1080pzy.co/202401/01/CukCTWW1HW3/video/index.m3u8 +2024江苏卫视跨年演唱会,https://top.1080pzy.co/202401/01/uJzQMkFBLb3/video/index.m3u8 +梦圆东方·2024跨年盛会,https://top.1080pzy.co/202401/01/UXEYWWJxMx3/video/index.m3u8 +2024东南卫视思·享,https://top.1080pzy.co/202401/01/YTN1G765pd3/video/index.m3u8 +2024山东新年交响音乐会,https://top.1080pzy.co/202401/01/VZwAVHYr7M3/video/index.m3u8 +四川卫视2024花开天下国韵新年演唱会,https://cdn1.vip-vip-yzzy.com/20240101/10953_3f15684a/index.m3u8 + + + +龍🐉鈤韩篇,#genre# +韩004,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/239755956819.mp4 +韩005,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/239987758613.mp4 +韩006,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/239880949246.mp4 +韩007,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/239903717006.mp4 +韩008,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/239903321355.mp4 +韩009,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/239799872402.mp4 +韩010,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/239799088974.mp4 +韩011,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240024786285.mp4 +韩012,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240142715042.mp4 +韩013,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240025046562.mp4 +韩014,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240145171654.mp4 +韩015,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240147051191.mp4 +韩016,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/239805200933.mp4 +韩017,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/239910253332.mp4 +韩018,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/239806164759.mp4 +韩019,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/239807872136.mp4 +韩020,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240032526123.mp4 +妍02,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240167997205.mp4 +妍03,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240059400880.mp4 +妍04,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240407847242.mp4 +妍05,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240062596020.mp4 +妍06,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240170661907.mp4 +妍07,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240411259014.mp4 +妍08,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240174309994.mp4 +妍09,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240175225325.mp4 +妍10,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240066736888.mp4 +妍11,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240175161903.mp4 +妍12,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240295526170.mp4 +妍13,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240295818399.mp4 +妍14,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240177321736.mp4 +妍15,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240177941288.mp4 +妍16,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240070652257.mp4 +妍17,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240298266546.mp4 +妍18,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240070884570.mp4 +★021,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/239808028600.mp4 +★022,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240031614983.mp4 +★023,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240150331617.mp4 +★024,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/239809100782.mp4 +★025,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240151167718.mp4 +★026,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240033362815.mp4 +★027,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240151167938.mp4 +★028,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/240035466345.mp4 +★029,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/239811800375.mp4 +★030,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/239916285148.mp4 +★031,https://cloud.video.taobao.com//play/u/57349687/p/1/e/6/t/1/239927589941.mp4 + +龍㊙密码频道,#genre# +关注公众号,http://15799848.s21v.faiusr.com/58/ABUIABA6GAAgypLV4gUo-ZmUhwc.mp4 +天微科技,http://15799848.s21v.faiusr.com/58/ABUIABA6GAAglZTV4gUo1tiHrgM.mp4 +获取密码,http://15799848.s21v.faiusr.com/58/ABUIABA6GAAgmJbV4gUogpLGkgM.mp4 + + +龍🔞测试频道_8688,#genre# +TVB 翡翠台,http://60.30.198.43:5080/香蕉哥/tvb翡翠/hls.m3u8 +凤凰卫视中文台,http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701pcc72.flv +凤凰卫视资讯台,http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701pin72.flv +无线新闻粤,http://php.jdshipin.com:8880/smt.php?id=inews_twn + +耀才财经台,https://v3.mediacast.hk/webcast/bshdlive-pc/chunklist_w99771165.m3u8 + +RTHK34,https://rthktv34-live.akamaized.net/hls/live/2101642/RTHKTV34/stream04/streamPlaylist.m3u8 + +RTHK35,https://rthktv35-live.akamaized.net/hls/live/2101643/RTHKTV35/stream02/streamPlaylist.m3u8 +无线翡翠备,http://111.160.76.101:80/香蕉哥/tvb翡翠.live.flv +无线Plus备,http://php.jdshipin.com:8880/TVOD/iptv.php?id=tvbp +无线华丽台,http://php.jdshipin.com:8880/TVOD/iptv.php?id=huali +无线星河备,http://v2h.jdshipin.com/xinghe/xinghe.stream/chunklist.m3u8 +无线娱乐备,http://v2h.jdshipin.com/enew/enew.stream/chunklist.m3u8 +美亚电影国,http://php.jdshipin.com:8880/TVOD/iptv.php?id=meiya + + + + + + diff --git a/drpy_t3/lives/live_cntv.txt b/drpy_t3/lives/live_cntv.txt new file mode 100644 index 0000000..aad576f --- /dev/null +++ b/drpy_t3/lives/live_cntv.txt @@ -0,0 +1,62 @@ +央视频道,#genre# +CCTV4K,https://www.yangshipin.cn/tv/home?pid=600002264 +CCTV1,https://www.yangshipin.cn/tv/home?pid=600001859 +CCTV2,https://www.yangshipin.cn/tv/home?pid=600001800 +CCTV3(VIP),https://www.yangshipin.cn/tv/home?pid=600001801 +CCTV4,https://www.yangshipin.cn/tv/home?pid=600001814 +CCTV5(限免),https://www.yangshipin.cn/tv/home?pid=600001818 +CCTV5+(限免),https://www.yangshipin.cn/tv/home?pid=600001817 +CCTV6(VIP),https://www.yangshipin.cn/tv/home?pid=600001802 +CCTV7,https://www.yangshipin.cn/tv/home?pid=600004092 +CCTV8(VIP),https://www.yangshipin.cn/tv/home?pid=600001803 +CCTV9,https://www.yangshipin.cn/tv/home?pid=600004078 +CCTV10,https://www.yangshipin.cn/tv/home?pid=600001805 +CCTV11,https://www.yangshipin.cn/tv/home?pid=600001806 +CCTV12,https://www.yangshipin.cn/tv/home?pid=600001807 +CCTV13,https://www.yangshipin.cn/tv/home?pid=600001811 +CCTV14,https://www.yangshipin.cn/tv/home?pid=600001809 +CCTV15,https://www.yangshipin.cn/tv/home?pid=600001815 +CCTV16-HD,https://www.yangshipin.cn/tv/home?pid=600098637 +CCTV16(4K)(VIP),https://www.yangshipin.cn/tv/home?pid=600099502 +CCTV17,https://www.yangshipin.cn/tv/home?pid=600001810 +CGTN,https://www.yangshipin.cn/tv/home?pid=600014550 +CGTN法语频道,https://www.yangshipin.cn/tv/home?pid=600084704 +CGTN俄语频道,https://www.yangshipin.cn/tv/home?pid=600084758 +CGTN阿拉伯语频道,https://www.yangshipin.cn/tv/home?pid=600084782 +CGTN西班牙语频道,https://www.yangshipin.cn/tv/home?pid=600084744 +CGTN外语纪录频道,https://www.yangshipin.cn/tv/home?pid=600084781 +CCTV风云剧场频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099658 +CCTV第一剧场频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099655 +CCTV怀旧剧场频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099620 +CCTV世界地理频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099637 +CCTV风云音乐频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099660 +CCTV兵器科技频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099649 +CCTV风云足球频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099636 +CCTV高尔夫·网球频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099659 +CCTV女性时尚频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099650 +CCTV央视文化精品频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099653 +CCTV央视台球频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099652 +CCTV电视指南频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099656 +CCTV卫生健康频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099651 +卫视频道,#genre# +北京卫视,https://www.yangshipin.cn/tv/home?pid=600002309 +江苏卫视,https://www.yangshipin.cn/tv/home?pid=600002521 +东方卫视,https://www.yangshipin.cn/tv/home?pid=600002483 +浙江卫视,https://www.yangshipin.cn/tv/home?pid=600002520 +湖南卫视,https://www.yangshipin.cn/tv/home?pid=600002475 +湖北卫视,https://www.yangshipin.cn/tv/home?pid=600002508 +广东卫视,https://www.yangshipin.cn/tv/home?pid=600002485 +广西卫视,https://www.yangshipin.cn/tv/home?pid=600002509 +黑龙江卫视,https://www.yangshipin.cn/tv/home?pid=600002498 +海南卫视,https://www.yangshipin.cn/tv/home?pid=600002506 +重庆卫视,https://www.yangshipin.cn/tv/home?pid=600002531 +深圳卫视,https://www.yangshipin.cn/tv/home?pid=600002481 +四川卫视,https://www.yangshipin.cn/tv/home?pid=600002516 +河南卫视,https://www.yangshipin.cn/tv/home?pid=600002525 +福建东南卫视,https://www.yangshipin.cn/tv/home?pid=600002484 +贵州卫视,https://www.yangshipin.cn/tv/home?pid=600002490 +江西卫视,https://www.yangshipin.cn/tv/home?pid=600002503 +辽宁卫视,https://www.yangshipin.cn/tv/home?pid=600002505 +安徽卫视,https://www.yangshipin.cn/tv/home?pid=600002532 +河北卫视,https://www.yangshipin.cn/tv/home?pid=600002493 +山东卫视,https://www.yangshipin.cn/tv/home?pid=600002513 \ No newline at end of file diff --git a/drpy_t3/lives/nanfeng.txt b/drpy_t3/lives/nanfeng.txt new file mode 100644 index 0000000..e4b787e --- /dev/null +++ b/drpy_t3/lives/nanfeng.txt @@ -0,0 +1,1413 @@ +央视,#genre# +CCTV1,http://183.92.4.163:4000/udp/228.0.0.1:6108 +CCTV2,http://183.92.4.163:4000/udp/228.0.0.2:6108 +CCTV3,http://183.92.4.163:4000/udp/228.0.0.156:7156 +CCTV4,http://183.92.4.163:4000/udp/228.0.0.143:7143 +CCTV5,http://183.92.4.163:4000/udp/228.0.0.112:6108 +CCTV5+,http://183.92.4.163:4000/udp/228.0.0.17:6108 +CCTV6,http://183.92.4.163:4000/udp/228.0.0.157:7157 +CCTV7,http://183.92.4.163:4000/udp/228.0.0.7:6108 +CCTV8,http://183.92.4.163:4000/udp/228.0.0.158:7158 +CCTV9,http://183.92.4.163:4000/udp/228.0.0.9:6108 +CCTV10,http://183.92.4.163:4000/udp/228.0.0.10:6108 +CCTV11,http://183.92.4.163:4000/udp/228.0.0.242:6108 +CCTV12,http://183.92.4.163:4000/udp/228.0.0.12:6108 +CCTV13,http://183.92.4.163:4000/udp/228.0.0.202:6108 +CCTV14,http://183.92.4.163:4000/udp/228.0.0.14:6108 +CCTV15,http://183.92.4.163:4000/udp/228.0.0.15:6108 +CCTV16,http://183.92.4.163:4000/udp/228.0.0.249:6108 +CCTV17,http://183.92.4.163:4000/udp/228.0.0.161:7161 +CHC家庭影院,http://183.92.4.163:4000/udp/228.0.0.211:6108 +CHC动作电影,http://183.92.4.163:4000/udp/228.0.0.212:6108 +CHC高清电影,http://183.92.4.163:4000/udp/228.0.0.233:6108 +第一剧场,http://183.92.4.163:4000/udp/228.0.0.235:6108 +风云足球,http://183.92.4.163:4000/udp/228.0.0.236:6108 +怀旧剧场,http://183.92.4.163:4000/udp/228.0.0.237:6108 +CCTV1,http://www.furymax.top:85/rtp/239.254.96.96:8550 +CCTV2,http://1.195.111.251:11190/tsfile/live/0002_1.m3u8 +CCTV3,http://1.195.111.251:11190/tsfile/live/0003_1.m3u8 +CCTV4,http://1.195.111.251:11190/tsfile/live/0004_1.m3u8 +CCTV5,http://1.195.111.251:11190/tsfile/live/0005_1.m3u8 +CCTV6,http://1.195.111.251:11190/tsfile/live/0006_1.m3u8 +CCTV7,http://1.195.111.251:11190/tsfile/live/0007_1.m3u8 +CCTV8,http://1.195.111.251:11190/tsfile/live/0008_1.m3u8 +CCTV9,http://1.195.111.251:11190/tsfile/live/0009_1.m3u8 +CCTV10,http://1.195.111.251:11190/tsfile/live/0010_1.m3u8 +CCTV11,http://1.195.111.251:11190/tsfile/live/0011_1.m3u8 +CCTV12,http://1.195.111.251:11190/tsfile/live/0012_1.m3u8 +CCTV13,http://1.195.111.251:11190/tsfile/live/0013_1.m3u8 +CCTV14,http://1.195.111.251:11190/tsfile/live/0014_1.m3u8 +CCTV15,http://1.195.111.251:11190/tsfile/live/0015_1.m3u8 +CCTV10,http://1.195.111.251:11190/tsfile/live/0010_1.m3u8?%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E3%80%90%E6%99%B4%E5%9B%AD%E3%80%91%E6%95%B4%E7%90%86%E5%88%86%E4%BA%AB +CCTV11,http://1.195.111.251:11190/tsfile/live/0011_1.m3u8? +CCTV12,http://1.195.111.251:11190/tsfile/live/0012_1.m3u8?%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E3%80%90%E6%99%B4%E5%9B%AD%E3%80%91%E6%95%B4%E7%90%86%E5%88%86%E4%BA%AB +CCTV2,http://223.112.219.174:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV7,http://223.112.219.174:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV12,http://223.112.219.174:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV13,http://223.112.219.174:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV14,http://223.112.219.174:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV15,http://223.112.219.174:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0 + + +卫视,#genre# +湖北卫视HD,http://183.92.4.163:4000/udp/228.0.0.60:6108 +湖北卫视,http://183.92.4.163:4000/udp/228.0.0.232:6108 +湖南卫视HD,http://183.92.4.163:4000/udp/228.0.0.61:6108 +浙江卫视HD,http://183.92.4.163:4000/udp/228.0.0.65:6108 +江苏卫视HD,http://183.92.4.163:4000/udp/228.0.0.64:6108 +东方卫视HD,http://183.92.4.163:4000/udp/228.0.0.62:6108 +北京卫视HD,http://183.92.4.163:4000/udp/228.0.0.63:6108 +广东卫视HD,http://183.92.4.163:4000/udp/228.0.0.66:6108 +深圳卫视HD,http://183.92.4.163:4000/udp/228.0.0.67:6108 +黑龙江卫视HD,http://183.92.4.163:4000/udp/228.0.0.68:6108 +天津卫视HD,http://183.92.4.163:4000/udp/228.0.0.120:6108 +山东卫视HD,http://183.92.4.163:4000/udp/228.0.0.121:6108 +安徽卫视HD,http://183.92.4.163:4000/udp/228.0.0.122:6108 +辽宁卫视HD,http://183.92.4.163:4000/udp/228.0.0.123:6108 +东南卫视HD,http://183.92.4.163:4000/udp/228.0.0.144:7144 +江西卫视HD,http://183.92.4.163:4000/udp/228.0.0.147:7147 +重庆卫视HD,http://183.92.4.163:4000/udp/228.0.0.159:7159 +贵州卫视HD,http://183.92.4.163:4000/udp/228.0.0.160:7160 +宁夏卫视,http://183.92.4.163:4000/udp/228.0.0.30:6108 +广西卫视,http://183.92.4.163:4000/udp/228.0.0.37:6108 +海南卫视HD,http://183.92.4.163:4000/udp/228.0.0.165:7165 +河南卫视HD,http://183.92.4.163:4000/udp/228.0.0.230:6108 +四川卫视HD,http://183.92.4.163:4000/udp/228.0.0.231:6108 +吉林卫视,http://183.92.4.163:4000/udp/228.0.0.45:6108 +山西卫视,http://183.92.4.163:4000/udp/228.0.0.47:6108 +云南卫视,http://183.92.4.163:4000/udp/228.0.0.48:6108 +西藏卫视,http://183.92.4.163:4000/udp/228.0.0.51:6108 +内蒙古卫视,http://183.92.4.163:4000/udp/228.0.0.52:6108 +新疆卫视,http://183.92.4.163:4000/udp/228.0.0.53:6108 +青海卫视,http://183.92.4.163:4000/udp/228.0.0.54:6108 +河北卫视HD,http://183.92.4.163:4000/udp/228.0.0.168:7168 +陕西卫视,http://183.92.4.163:4000/udp/228.0.0.56:6108 +吉林卫视,http://183.92.4.163:4000/udp/228.0.0.45:6108 +山西卫视,http://183.92.4.163:4000/udp/228.0.0.47:6108 +云南卫视,http://183.92.4.163:4000/udp/228.0.0.48:6108 +西藏卫视,http://183.92.4.163:4000/udp/228.0.0.51:6108 +内蒙古卫视,http://183.92.4.163:4000/udp/228.0.0.52:6108 +新疆卫视,http://183.92.4.163:4000/udp/228.0.0.53:6108 +青海卫视,http://183.92.4.163:4000/udp/228.0.0.54:6108 +河北卫视HD,http://183.92.4.163:4000/udp/228.0.0.168:7168 +陕西卫视,http://183.92.4.163:4000/udp/228.0.0.56:6108 +甘肃卫视,http://183.92.4.163:4000/udp/228.0.0.57:6108 +卡酷动画,http://183.92.4.163:4000/udp/228.0.0.58:6108 +金鹰卡通,http://183.92.4.163:4000/udp/228.0.0.59:6108 +金鹰纪实HD,http://183.92.4.163:4000/udp/228.0.0.145:7145 +中国教育-1HD,http://183.92.4.163:4000/udp/228.0.0.146:7146 +三沙卫视,http://183.92.4.163:4000/udp/228.0.0.174:7174 +中国教育4,http://183.92.4.163:4000/udp/228.0.0.177:7177 +茶频道,http://183.92.4.163:4000/udp/228.0.0.234:6108 +湖北经视HD,http://183.92.4.163:4000/udp/228.0.0.125:6108 +湖北综合HD,http://183.92.4.163:4000/udp/228.0.0.126:6108 +湖北垄上HD,http://183.92.4.163:4000/udp/228.0.0.127:6108 +湖北公共HD,http://183.92.4.163:4000/udp/228.0.0.124:6108 +湖北影视HD,http://183.92.4.163:4000/udp/228.0.0.205:6108 +湖北教育HD,http://183.92.4.163:4000/udp/228.0.0.206:6108 +湖北生活HD,http://183.92.4.163:4000/udp/228.0.0.204:6108 +CETV2,http://183.92.4.163:4000/udp/228.0.0.198:7198 +环球奇观,http://183.92.4.163:4000/udp/228.0.0.73:6108 +国学频道,http://183.92.4.163:4000/udp/228.0.0.75:6108 +财富天下,http://183.92.4.163:4000/udp/228.0.0.88:6108 +老故事,http://183.92.4.163:4000/udp/228.0.0.238:6108 +新动漫,http://183.92.4.163:4000/udp/228.0.0.240:6108 +先锋乒羽,http://183.92.4.163:4000/udp/228.0.0.241:6108 +云南卫视,http://tvlive.ynradio.com/live/yunnanweishi/chunks.m3u8 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8 +延边卫视,http://live.ybtvyun.com/video/s10006-44f040627ca1/index.m3u8 +延边卫视,http://live.ybtvyun.com/video/s10006-28bc40431485/index.m3u8 +三沙卫视,https://pullsstv90080111.ssws.tv/live/SSTV20220729.m3u8 +安多卫视,http://stream.qhbtv.com/adws/sd/live.m3u8 +三沙卫视,https://pullsstv90080111.ssws.tv/live/SSTV20220729.m3u8 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8?_upt=f35a89681647856030 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8?_upt=63cf437e1591689484 +康巴卫视,http://111.202.12.159:8080/kYGHWzA/1000/live.m3u8 +康巴卫视,http://111.202.12.159:8080/3zvkK28/1000/live.m3u8 +延边卫视,http://live.ybtvyun.com/video/s10016-7e5f23de35df/index.m3u8 +浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel01/1080p.m3u8 +深圳卫视,http://api3.52tb.xyz/info?id=28&token=20230227aesvnb +东南卫视,http://api3.52tb.xyz/info?id=29&token=20230227aesvnb +河南卫视,http://api3.52tb.xyz/info?id=31&token=20230227aesvnb +海南卫视,http://api3.52tb.xyz/info?id=38&token=20230227aesvnb +吉林卫视,http://api3.52tb.xyz/info?id=40&token=20230227aesvnb +云南卫视,http://tvlive.ynradio.com/live/yunnanweishi/chunks.m3u8 +云南卫视,http://tvlive.ynradio.com/live/yunnanweishi/playlist.m3u8 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8?_upt=f35a89681647856030 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8?_upt=1da074361609506578 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8?_upt=63cf437e1591689484 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8 +三沙卫视,https://pullsstv90080111.ssws.tv/live/SSTV20220729.m3u8 +延边卫视,http://live.ybtvyun.com/video/s10016-6f0dfd97912f/index.m3u8 +延边卫视,http://live.ybtvyun.com/video/s10006-44f040627ca1/index.m3u8 +延边卫视,http://live.ybtvyun.com/video/s10006-90fe76c52091/index.m3u8 +东方卫视,http://223.112.219.174:9901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0 +北京卫视,http://223.112.219.174:9901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0 +浙江卫视,http://223.112.219.174:9901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0 +湖南卫视,http://223.112.219.174:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0 + + +IPV6,#genre# +CCTV-1 综合,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN111128BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUU6FFmRK8Hl0ytyd5e5kWGEwoDIwMxbrlyyVy9x6ZDKnldIYKOjBOUjRyoym5n7Kg0yIYstFTUfqtC14fzxhy5Y +CCTV-2 财经,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000036BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfGVSARKsxkWGZw7vFUuOj2QZHeRzosIxVbl7i2QHFATHA3k5wDWG1qHkZQAleNv%2FbI +CCTV-3 综艺,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727c125355/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMUNNEYLCPUtKY62j1Wp5u04wipypKUQ1TTuR2lXvBl5YpHqBJmlA19x22TD9bUOjk +CCTV-4 中文国际,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000037BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfH0ZQXwaiVktPr6ILPKXqwOUC2ZXft7ZULN6h9qLQPFOTSlVTfophiKaMb8h1kPV74 +CCTV-5 体育,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727e617ca0/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMSXw4ajlL%2FoUYC2RZQQDco6uQSifXBocz5ID6RePfIKQ4rFWiHjq%2FeZoDmrzW%2FKlw +CCTV-5+ 体育赛事,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63872908d48f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSBx06ZL9Bo6JOM%2BSTjxZRK254G1jtietGzDaHvFNRtjXOvFnbf%2BTao33JqYlfMYYn2z3agOn9gvNMT9KmBaR9o +CCTV-6 电影,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728804b1f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdazJhFQmuq4XUiks9ZrIlJN%2BknLs8H%2BSxcDXy%2BTesEc8Q0KCN89MjYoj85Sol1kbKI4 +CCTV-7 国防军事,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000038BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHYKFve4MwNzRa0jPXeHjqnBjPmzSdKDNWNHhnZSaMGCXKmdx8d%2BnYdhVK5ge22ot4 +CCTV-8 电视剧,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728970aa82/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdaymid9ta2tVUW0%2FdVrFqszC1EVEkAbpip1IYxn%2Ba2aA%2BVAihIiw9D8ejUsDbfU0K68 +CCTV-9 纪录,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000039BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHArfvJF2pWpm4RxcBNhZ7j9vEUeCQte%2BbQaOGNIUEEK%2B3RBE1BC9EUsM18gnb%2FyAA +CCTV-10 科教,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949784BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5OuXozn3alq9%2BUx7ZLG1w9aOfkLjZvYj56D3xkOAtSOIoLsdw8c1%2BCwLDg1aS4esN4 +CCTV-11 戏曲,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000053BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Qj2xHA4vdPGsjBbxSL3p%2FmAObVTfznR%2Fpc%2B76QYmLRMuL3Lj9iabhv8arW7kJe6%2F4 +CCTV-12 社会与法,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000040BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUd3JM2PCgDefrKOVZLNt0QMAmpLefguRLiOPXiDRWhxHg8yim2giTBA8RILsb%2B8Y5pkFUyZBE%2FkNJAbwncEegkU +CCTV-13 新闻,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000054BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0SuXozn3alq9%2BUx7ZLG1w9awc14iEUxQ5VsTsr5pEBsmF56tXUfsukRUpygmTCKvAI +CCTV-14 少儿,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949788BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5PYKFve4MwNzRa0jPXeHjqnp7khdLaCMP6L4QpTf84Oz6DvCG1%2BJ81QvStkxO%2FoGm8 +CCTV-15 音乐,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000055BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Tdo%2FUL80msfbhDYvoWpNl31Dy7jHvMl%2FzVUrNxhL1ek1YEGVDZ7lCg0LtKJY4Ku%2B8 +CCTV-16 奥林匹克,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226100/index.m3u8 +CCTV-17 农业农村,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728afa13b4/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdaz%2FyAI9to%2FMBBt%2FivcdSfljJ1%2FqqamWUjAiBAxNssfyBlZUDSXAIMtStS86hRHFuJM +CCTV-4K 超高清,http://27.222.3.214/liveali-tp4k.cctv.cn/live/4K10M.stream/playlist.m3u8 +CHC影迷电影,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380764b172c9/index.m3u8?m3u8_level=2 +CHC动作电影,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380763222d00/index.m3u8?m3u8_level=2 +CHC家庭影院,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807601b19dd/index.m3u8?m3u8_level=2 +CGTN英语,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806f4f64099/index.m3u8?m3u8_level=2 +CGTN记录,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63a15d0ee63f3/index.m3u8?m3u8_level=2 +CGTN俄语,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638071d299009/index.m3u8?m3u8_level=2 +CGTN法语,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806fb631afe/index.m3u8?m3u8_level=2 +CGTN西语,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806f81c8eb5/index.m3u8?m3u8_level=2 +CGTN阿语,http://livear.cgtn.com/1000a/prog_index.m3u8 +凤凰中文,http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701pcc72.m3u8 +凤凰资讯,http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701pin72.m3u8 +凤凰香港,http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701phk72.m3u8 +北京卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8 +湖南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8 +东方卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8 +四川卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8 +天津卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8 +安徽卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8 +山东卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8 +深圳卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8 +广东卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8 +广西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226549/index.m3u8 +江苏卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8 +江西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8 +河北卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8 +河南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8 +浙江卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8 +海南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8 +湖北卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8 +山西卫视,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/00000001000000060000000000000318/index.m3u8?IAS +东南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8 +贵州卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8 +辽宁卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.m3u8 +重庆卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8 +黑龙江卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8 +内蒙古卫视,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000319/index.m3u8?IAS +宁夏卫视,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000309/index.m3u8?IAS +陕西卫视,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000313/index.m3u8?IAS +吉林卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8 +甘肃卫视,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8 +云南卫视,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000305/index.m3u8?IAS +三沙卫视,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?IAS +青海卫视,http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225628/index.m3u8 +新疆卫视,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225635/index.m3u8 +西藏卫视,http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000317/index.m3u8?IAS +兵团卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226439/index.m3u8 +延边卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8 +安多卫视,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8 +厦门卫视,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000193/index.m3u8?IAS +康巴卫视,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8 +CETV-1,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8 +CETV-2,http://[2409:8087:1a0b:df::4013]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8 +CETV-4,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8 +爱上4K,http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000459/index.m3u8?IAS +纪实科教,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225729/index.m3u8 +乐游频道,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000092/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000092&IASHttpSessionId=OTT19019320240419154124000281 +卡酷少儿,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225654/index.m3u8 +金鹰卡通,http://[2409:8087:1a0b:df::4008]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225653/index.m3u8 +金鹰纪实,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN4766929BESTVSMGSMG/index.m3u8?m3u8_level=2 +茶友频道,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638729d8aca53/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSBx06ZL9Bo6JOM%2BSTjxZRIdUCZxTtaM%2Bza0L7mJjkPMmnEhAf%2Bi68sKjzRCbPoTU0E%2B6Pia2CkRtxgPs8Tmw7I +快乐垂钓,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638729b6002c4/index.m3u8?m3u8_level=2 +哒啵赛事,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225675/index.m3u8 +哒啵电竞,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000003000000066/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000003000000066&IASHttpSessionId=OTT19019320240419154124000281 +优漫卡通,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8 +哈哈炫动,http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8 +黑莓动画,http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8 +黑莓电影,http://[2409:8087:1a0b:df::4014]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225743/index.m3u8 +梨园频道,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380788ba7bed/index.m3u8?AuthInfo=toEYVdLfxymUP2l9NZpQI5%2BK6T7j%2FlRm%2BvbM9VO7bA0q1S1k1f36SqqriM0FZoFSAJRfCt8SS7X6sTRmXb81a8O4H%2FdroDKjLoDeaMQdyJQ +求索记录,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000010/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000010&IASHttpSessionId=OTT19019320240419154124000281 +求索动物,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000009/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000009&IASHttpSessionId=OTT19019320240419154124000281 +求索科学,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000011/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000011&IASHttpSessionId=OTT19019320240419154124000281 +求索生活,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000008&IASHttpSessionId=OTT19019320240419154124000281 +超级体育,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8 +超级电影,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8 +超级视剧,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225716/index.m3u8 +东北热剧,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225741/index.m3u8 +海外剧场,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225671/index.m3u8 +中国功夫,http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225681/index.m3u8 +军旅剧场,http://[2409:8087:1a0b:df::4018]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225676/index.m3u8 +惊悚悬疑,http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8 +潮妈辣婆,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225685/index.m3u8 +精品体育,http://[2409:8087:1a0b:df::4004]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8 +精品纪录,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225672/index.m3u8 +家庭剧场,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225677/index.m3u8 +精品大剧,http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225670/index.m3u8 +军事评论,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225668/index.m3u8 +明星大片,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225664/index.m3u8 +欢乐剧场,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225742/index.m3u8 +精品萌宠,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226505/index.m3u8 +超级综艺,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225714/index.m3u8 +金牌综艺,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8 +上海新闻,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000005/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000005&IASHttpSessionId=OTT19019320240419154124000281 +上海都市,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000012/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000012&IASHttpSessionId=OTT19019320240419154124000281 +上海外语,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000001/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000001&IASHttpSessionId=OTT19019320240419154124000281 +七彩戏剧,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000010/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000010&IASHttpSessionId=OTT19019320240419154124000281 +五星体育,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000007/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000007&IASHttpSessionId=OTT19019320240419154124000281 +东方影视,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000013/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000013&IASHttpSessionId=OTT19019320240419154124000281 +东方财经,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000090/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000090&IASHttpSessionId=OTT19019320240419154124000281 +法治天地,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000014/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000014&IASHttpSessionId=OTT19019320240419154124000281 +第一财经,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000004/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000004&IASHttpSessionId=OTT19019320240419154124000281 +浙江新闻,https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8 +浙江国际,https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8 +浙江少儿,https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8 +浙江教科,https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8 +之江纪录,https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8 +浙江民生,https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8 +浙江经济,https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8 +浙江钱江,https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8 +内蒙新闻,https://livestream-bt.nmtv.cn/nmtv/2316general.m3u8?txSecret=173f71025a2de64458989cfb281a0a37&txTime=771E8800 +内蒙经济,https://livestream-bt.nmtv.cn/nmtv/2317general.m3u8?txSecret=8e4b7cf6a2c8a75f74aef1a8a07cef43&txTime=771E8800 +内蒙少儿,https://livestream-bt.nmtv.cn/nmtv/2318general.m3u8?txSecret=ff5a1fd70ea228ee35b0d29895f37c56&txTime=771E8800 +内蒙文体,https://livestream-bt.nmtv.cn/nmtv/2319general.m3u8?txSecret=82ed51a2a4cbf85b62fec8ef2bfe4529&txTime=771E8800 +内蒙农牧,https://livestream-bt.nmtv.cn/nmtv/2320general.m3u8?txSecret=b5e44fcd9473993661f17746112ad1b7&txTime=771E8800 +蒙语卫视,https://livestream-bt.nmtv.cn/nmtv/2315general.m3u8?txSecret=e2b255285dd119a92c8aa5cdf00f8b84&txTime=771EF880 +蒙语文化,https://livestream-bt.nmtv.cn/nmtv/2321general.m3u8?txSecret=2250268a1d326dbbc4cbf0ba32649ca5&txTime=771E8800 + + +少儿频道,#genre# +倒霉特熊,https://newcntv.qcloudcdn.com/asp/hls/1200/0303000a/3/default/87f87ba569c147e3805f80e4844d2de9/1200.m3u8 +雲朵妈妈,https://newcntv.qcloudcdn.com/asp/hls/1200/0303000a/3/default/d8ad434c6b08421a927557a4d98da65c/1200.m3u8 +反转星球,https://newcntv.qcloudcdn.com/asp/hls/1200/0303000a/3/default/3ccdecc7d6e341c1920ad4eac5d82f38/1200.m3u8 +熊大熊二,https://newcntv.qcloudcdn.com/asp/hls/1200/0303000a/3/default/1733da751de64e6e910abda889d87a26/1200.m3u8 +狮子王國,https://newcntv.qcloudcdn.com/asp/hls/850/0303000a/3/default/c2e7e767f3144bed959ef20b8b961fe5/850.m3u8 +key=0b292c335e5837e947f9409c59228f3e6 + + +影视,#genre# +神乐剧场,https://tc-tc2-interact.douyucdn2.cn/dyliveflv1/85894rmovieChow_900p.m3u8 +神乐剧院,https://tc-tc2-interact.douyucdn2.cn/dyliveflv1a/122402rK7MO9bXSq_900.m3u8 +绍兴影院,http://live.shaoxing.com.cn/video/s10001-sxtv3/index.m3u8 +南宁影院,http://hls.nntv.cn/nnlive/NNTV_VOD_A.m3u8 +乌克兰影,http://serv25.vintera.tv:8081/test/aris/playlist.m3u8 +小宇60帧,http://maomao.kandiantv.cn/douyu1.php?id=323876 +恐怖惊悚,http://maomao.kandiantv.cn/douyu1.php?id=96577 +電影劇場,http://maomao.kandiantv.cn/douyu1.php?id=7575350 +豆瓣高分,http://maomao.kandiantv.cn/douyu1.php?id=8770422 +漫威剧情,http://maomao.kandiantv.cn/douyu1.php?id=6140589 +霍格沃茨,http://maomao.kandiantv.cn/douyu1.php?id=8814650 +鱼宝恐怖,http://maomao.kandiantv.cn/douyu1.php?id=1165374 +鬼片恐怖,http://maomao.kandiantv.cn/douyu1.php?id=2935323 +小U鬼片,http://maomao.kandiantv.cn/douyu1.php?id=96577 +吃奶滴虫,http://maomao.kandiantv.cn/douyu1.php?id=263824 +变种人片,http://maomao.kandiantv.cn/douyu1.php?id=9651304 +喜剧电影,http://maomao.kandiantv.cn/douyu1.php?id=9292492 +女神电影,http://maomao.kandiantv.cn/douyu1.php?id=747764 +华语经典,http://maomao.kandiantv.cn/douyu1.php?id=434971 +欧美大片,http://maomao.kandiantv.cn/douyu1.php?id=2793084 +贝爷影厅,http://maomao.kandiantv.cn/douyu1.php?id=252802 +万州影视,http://wanzhoulive.cbg.cn:8017/d4ceB1a/1000/live.m3u8 +绍兴影视,http://live.shaoxing.com.cn/video/s10001-sxtv3/index.m3u8 +溧水影视,http://live.lsrmw.cn/ysyl/sd/live.m3u8 +吉林影视,http://stream1.jlntv.cn/yspd/sd/live.m3u8 +滨海影视,http://traffic.jbh.tjbh.com/live/bhtv3/playlist.m3u8 +烟台影视,http://live.yantaitv.cn/live/e9f1d9045d474c31884d13fa4ffbbd16/a4a9b3704d854756907845107cc56129.m3u8 +菏泽影视,http://live.hznet.tv:1935/live/live3/500K/tzwj_video.m3u8 +北京影视,https://wstvcpudali.v.myalicdn.com/wstvcpud/udrmbtv4_1/index.m3u8?adapt=0&BR=audio +新昌休闲影视,http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8 +石河子影视文体,http://124.88.144.73:1935/live/jjsh/HasBahCa.m3u8 +南京影视,http://live.nbs.cn/channels/njtv/xxpd/m3u8:500k/live.m3u8 +吉林影视,http://stream1.jlntv.cn/yspd/sd/live.m3u8?_upt=f6b685651648171016 +烟台影视,http://live.yantaitv.cn/live/e9f1d9045d474c31884d13fa4ffbbd16/a4a9b3704d854756907845107cc56129-1.m3u8 +影视频道,http://112.30.194.221:20080/live/d18ff95cb1fb4bbcb56215e189fc12be/hls.m3u8 +美丽中国说,http://hls.cntv.myhwcdn.cn/asp/hls/4000/0303000a/3/default/8cdd688b04e4495ba1635e218419d6f9/4000.m3u8 +长城精品,http://38.64.72.148:80/hls/modn/list/4008/chunklist0.m3u8 +中国气象,http://hls.weathertv.cn/tslslive/qCFIfHB/hls/live_sd.m3u8 +CGTN Arabic,http://livear.cgtn.com/1000a/prog_index.m3u8 +CGTN Español,http://livees.cgtn.com/500e/prog_index.m3u8 +CGTN France,http://livefr.cgtn.com/1000f/prog_index.m3u8 + + +大杂烩,#genre# +碌曲综合,http://pili-live-hls.hfmt.net/gntv/lqtv.m3u8?zgand +临潭综合,http://pili-live-hls.hfmt.net/gntv/lttv.m3u8?zgand +夏河综合,http://pili-live-hls.hfmt.net/gntv/xhtv.m3u8?zgand +舟曲新闻,http://pili-live-hls.hfmt.net/gntv/zqtv.m3u8?zgand +西峰综合,http://pili-live-rtmp.luan2.hfmt.net/luan2/xifeng/123456.m3u8?zgand +文山州新闻综合,http://tvdrs.wsrtv.com.cn:8100/channellive/ch1.flv?zyund +文山州新闻综合,http://m3u8.channel.wsrtv.com.cn/cms/videos/nmip-media/channellive/channel7/playlist.m3u8?zyund +文山州公共,http://m3u8.channel.wsrtv.com.cn/cms/videos/nmip-media/channellive/channel8/playlist.m3u8?zyund +怒江新闻综合,http://livebroadcast.ccwb.cn/live/w1620805130988936.m3u8?zyund +砚山电视台,http://m3u8.channel.wsrtv.com.cn/cms/videos/nmip-media/channellive/channel16/playlist.m3u8?zyund +麻栗坡电视台,http://m3u8.channel.wsrtv.com.cn/cms/videos/nmip-media/channellive/channel18/playlist.m3u8?zyund +运城新闻综合,http://live.0359tv.com/lsdream/ss4Lj11/1000/live.m3u8?zshanxd +运城公共频道,http://live.0359tv.com/lsdream/t667aTY/1000/live.m3u8?zshanxd +运城科技教育,http://live.0359tv.com/lsdream/p5eq48m/1000/live.m3u8?zshanxd +晋中新闻,http://jzlive.jztvnews.com:90/live/jzzh.m3u8?zshanxd +晋中公共,http://jzlive.jztvnews.com:90/live/jzgg.m3u8?zshanxd +潞城新闻综合,http://59.48.42.6:62204/lucheng.m3u8?zshanxd +吉县新闻综合,http://jxlive.jxrmtzx.com:8091/live/xwzh.m3u8?zshanxd +高平综合,http://live.gprmt.cn/gpnews/hd/live.m3u8?zshanxd +江津新闻综合,http://222.179.155.21:1935/ch1.m3u8?zzhongqd +武隆综合频道,https://qxlmlive9.cbg.cn/applive/wltvzh/playlist.m3u8?zzhongqd +哈尔滨新闻综合,http://stream.hrbtv.net/xwzh/sd/live.m3u8?zheild +哈尔滨影,http://stream.hrbtv.net/yspd/sd/live.m3u8?zheild +哈尔滨生活,http://stream.hrbtv.net/shpd/sd/live.m3u8?zheild +哈尔滨娱乐,http://stream.hrbtv.net/ylpd/sd/live.m3u8?zheild +伊春综合,http://live.yichuntv.com/e5d7b4b95cf849d79fa3964431dca1f3/h264_800k_ts/index.m3u8?type=flv2hls_m3u8?zheild +伊春公共,http://live.yichuntv.com/1501fae792774811b2cd1366a078e666/h264_800k_ts/index.m3u8?type=flv2hls_m3u8?zheild +达茂综合,http://pili-live-hls.nmgapp12019.sobeylive.com/nmgapp12019/live164301116493025.m3u8?zneimd +库伦旗电视台,http://pili-live-hls.nmgapp12019.sobeylive.com/nmgapp12019/live161942247484390.m3u8?zneimd +奈曼旗电视台,http://pili-live-hls.nmgapp12019.sobeylive.com/nmgapp12019/live161888593025926.m3u8?zneimd +鄂托克旗电视台,http://110.19.181.138:10080/hls/F509Rh7GR/F509Rh7GR_live.m3u8?zneimd +鄂温克电视台,http://pili-live-hls.nmgapp12019.sobeylive.com/nmgapp12019/live162700604855057.m3u8?zneimd +兵团五师双河影,https://liveout.btzx.com.cn/62ds9e/6o77s4.m3u8?zxinjd +吉林都市,http://stream1.jlntv.cn/dspd/sd/live.m3u8?zjild +吉林生活,http://stream1.jlntv.cn/shpd/sd/live.m3u8?zjild +吉林影院,http://stream1.jlntv.cn/yspd/sd/live.m3u8?zjild +吉林乡村,http://stream1.jlntv.cn/xcpd/sd/live.m3u8?zjild +吉林公共,http://stream1.jlntv.cn/ggpd/sd/live.m3u8?zjild +吉林7频道,http://stream1.jlntv.cn/fzpd/sd/live.m3u8?zjild +东北戏曲频道,http://stream1.jlntv.cn/dbxq/playlist.m3u8?_upt=b234e6c41620650518?zjild +延边-1,http://live.ybtvyun.com/video/s10016-af95004b6d1a/index.m3u8?zjild +延边-2,http://live.ybtvyun.com/video/s10006-04819ee234a7/index.m3u8?zjild +延边朝鲜语综合,http://live.ybtvyun.com/video/s10006-b571c289a478/index.m3u8?zjild +延边朝鲜语综合,http://live.ybtvyun.com/video/s10016-19a16c47eb99/index.m3u8?zjild +延边汉语综合,http://live.ybtvyun.com/video/s10016-7e5f23de35df/index.m3u8?zjild +白山公共,http://stream8.jlntv.cn/baishan2/playlist.m3u8?zjild +长白山电视台,http://stream8.jlntv.cn/cbstv/sd/live.m3u8?zjild +九台综合,http://stream10.jlntv.cn/jiutaitv/sd/live.m3u8?zjild +靖宇综合,http://stream8.jlntv.cn/jytv/sd/live.m3u8?zjild +敦化一套,http://stream8.jlntv.cn/dhtv/playlist.m3u8?zjild +珲春新闻综合,http://stream8.jlntv.cn/hctv/sd/live.m3u8?zjild +龙井综合,http://stream8.jlntv.cn/ljtv/sd/live.m3u8?zjild +桦甸综合,http://stream10.jlntv.cn/huadian/sd/live.m3u8?zjild +磐石综合,http://stream5.jlntv.cn/ps/sd/live.m3u8?zjild +舒兰新闻综合,http://stream8.jlntv.cn/shulan/sd/live.m3u8?zjild +东丰综合,http://stream5.jlntv.cn/df/sd/live.m3u8?zjild +双辽综合,http://stream5.jlntv.cn/sl/sd/live.m3u8?zjild +辉南新闻综合,http://stream5.jlntv.cn/hn/sd/live.m3u8?zjild +柳河综合,http://stream5.jlntv.cn/lh/sd/live.m3u8?zjild +通化县综合,http://stream5.jlntv.cn/thx/sd/live.m3u8?zjild +汪清综合,http://stream5.jlntv.cn/wq/sd/live.m3u8?zjild +滨海新闻,http://traffic.jbh.tjbh.com/live/bhtv1/playlist.m3u8?ztianjd +滨海综艺,http://traffic.jbh.tjbh.com/live/bhtv2/playlist.m3u8?ztianjd +滨海影院,http://traffic.jbh.tjbh.com/live/bhtv3/playlist.m3u8?ztianjd + + +浙江综合,#genre# +绍兴新闻综合,http://live.shaoxing.com.cn/video/s10001-sxhb/index.m3u8?zzhed +绍兴新闻综合,http://live.shaoxing.com.cn/video/s10001-sxtv1/index.m3u8?zzhed +绍兴文化影院,http://live.shaoxing.com.cn/video/s10001-sxtv3/index.m3u8?zzhed +武义新闻综合,http://l.cztvcloud.com/channels/lantian/SXwuyi1/720p.m3u8?zzhed +平湖新闻综合,http://l.cztvcloud.com/channels/lantian/SXpinghu1/720p.m3u8?zzhed +平湖民生休闲,http://l.cztvcloud.com/channels/lantian/SXpinghu2/720p.m3u8?zzhed +萧山新闻综合,http://l.cztvcloud.com/channels/lantian/SXxiaoshan1/720p.m3u8?zzhed +萧山生活频道,http://l.cztvcloud.com/channels/lantian/SXxiaoshan2/720p.m3u8?zzhed +余杭综合频道,http://l.cztvcloud.com/channels/lantian/SXyuhang1/720p.m3u8?zzhed +余杭未来E频道,http://l.cztvcloud.com/channels/lantian/SXyuhang3/720p.m3u8?zzhed +余姚新闻综合,http://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8?zzhed +余姚姚江文化,http://l.cztvcloud.com/channels/lantian/SXyuyao3/720p.m3u8?zzhed +嵊州新闻综合,http://l.cztvcloud.com/channels/lantian/SXshengzhou1/720p.m3u8?zzhed +诸暨新闻综合,http://l.cztvcloud.com/channels/lantian/SXzhuji3/720p.m3u8?zzhed +上虞新闻综合,http://l.cztvcloud.com/channels/lantian/SXshangyu1/720p.m3u8?zzhed +上虞文化影院,http://l.cztvcloud.com/channels/lantian/SXshangyu2/720p.m3u8?zzhed +上虞新商都,http://l.cztvcloud.com/channels/lantian/SXshangyu3/720p.m3u8?zzhed +兰溪新闻综合,http://l.cztvcloud.com/channels/lantian/SXlanxi1/720p.m3u8?zzhed + + +江苏综合,#genre# +淮安公共频道,http://live1.habctv.com/ggpdsl/sd/live.m3u8?zjiangsd +淮安影院娱乐,http://live1.habctv.com/ysylsl/sd/live.m3u8?zjiangsd +无锡新闻综合,http://stream.thmz.com/wxtv1/sd/live.m3u8?zjiangsd +无锡娱乐,http://stream.thmz.com/wxtv2/sd/live.m3u8?zjiangsd +张家港新闻综合,http://3gvod.zjgonline.com.cn:1935/live/xinwenzonghe2/playlist.m3u8?zjiangsd +张家港民生频道,http://3gvod.zjgonline.com.cn:1935/live/shehuishenghuo2/playlist.m3u8?zjiangsd +溧水新闻综合,http://live.lsrmw.cn/zhpd/sd/live.m3u8?zjiangsd +溧水影院娱乐,http://live.lsrmw.cn/ysyl/sd/live.m3u8?zjiangsd +金湖新闻综合,http://jinhu-tv-hls.cm.jstv.com/jinhu-tv/jinhuzh.m3u8?zjiangsd +金坛新闻频道,http://jintan-tv-ori-hls.jstv.com/jintan-tv-ori/jintan_xw.m3u8?zjiangsd +沭阳综合频道,http://shuyang-tv-hls.cm.jstv.com/shuyang-tv/shuyangzh.m3u8?zjiangsd +泗阳综合频道,http://siyang-tv-hls.cm.jstv.com/siyang-tv/siyangzh.m3u8?zjiangsd +泗阳资讯频道,http://siyang-tv-hls.cm.jstv.com/siyang-tv/siyangzx.m3u8?zjiangsd + + +山东综合,#genre# +青岛城阳,http://pili-live-rtmp.56.i2863.com/i2863-56/live_56_307317.m3u8?shandd +烟台新闻综合,http://live.yantaitv.cn/live/3e81a8879da44c5dadf3bd9c10468e1c/9b776d420ee4438199b7657c8eb88f07-1.m3u8?shandd +烟台公共,http://live.yantaitv.cn/live/e50f104a4ffe4a41b2217cbda534146f/d86092e69df94668b33390278b061700-1.m3u8?shandd +烟台经济科技,http://live.yantaitv.cn/live/27f84144e95a4652ae9e5c211b2a6b55/405f3e33ba384aa0a16014d0becd1261-1.m3u8?shandd +烟台影,http://live.yantaitv.cn/live/e9f1d9045d474c31884d13fa4ffbbd16/a4a9b3704d854756907845107cc56129-1.m3u8 +菏泽新闻综合,http://live.hznet.tv:1935/live/live1/500K/tzwj_video.m3u8?shandd +菏泽经济生活,http://live.hznet.tv:1935/live/live2/500K/tzwj_video.m3u8?shandd +菏泽影,http://live.hznet.tv:1935/live/live3/500K/tzwj_video.m3u8?shandd +枣庄新闻综合,http://stream.zztvzd.com/1/sd/live.m3u8?shandd +枣庄教育,http://stream.zztvzd.com/2/sd/live.m3u8?shandd +枣庄公共,http://stream.zztvzd.com/3/sd/live.m3u8?shandd +东营综合,http://stream.hhek.cn/xwzh/sd/live.m3u8?shandd +东营公共,http://stream.hhek.cn/ggpd/sd/live.m3u8?shandd +东营科教,http://stream.hhek.cn/dyjy/sd/live.m3u8?shandd + + +四川综合,#genre# +凉山语,http://file.yizu.tv/nmip-media/channellive/channel107323/playlist.m3u8?zsicd +德阳新闻综合,http://scdytv.cn:1935/live/m_xwpd_livevideo/playlist.m3u8?zsicd +甘孜综合,http://tv.drs.ganzitv.com:8100/channellive/gztv.flv?zsicd +叙州新闻综合,http://pili-live-hls.ybcxjd.com/jdh-live/2108111201035597.m3u8?zsicd +万源新闻综合,http://live.wanyuannews.com/wytv/hd/live.m3u8?zsicd +营山电视台,http://file.ysxtv.cn/cms/videos/nmip-media/channellive/channel4/playlist.m3u8?zsicd +松潘新闻综合,http://live.spccmc.com:90/live/spxwzh.m3u8?zsicd +汶川新闻综合,http://live.iwcmt.cn:90/live/zhxw.m3u8?zsicd +利州综合,http://tvfile.lzgbdst.com/nmip-media/channellive/channel106876/playlist.m3u8?zsicd +利州综合,http://tv.drs.lzgbdst.com:8100/channellive/lztv2.flv?zsicd +泸县新闻综合,http://lxfile.lxxcb.cn/nmip-media/channellive/channel103799/playlist.m3u8?zsicd + + +安徽综合,#genre# +宿州公共,http://live.ahsz.tv/video/s10001-ggpd/index.m3u8?zanhd +六安新闻综合,http://pili-live-rtmp.luan2.hfmt.net/luan2/jjpd.m3u8?zanhd +六安公共,http://pili-live-rtmp.luan2.hfmt.net/luan2/ggpd.m3u8?zanhd +固镇新闻,http://www.guzhenm.com:7001/hls/hd-live.m3u8?zanhd +灵璧综合,http://live.cms.anhuinews.com/video/s10003-lbtv/index.m3u8?zanhd + + +河南综合,#genre# +焦作综合频道,http://zhpull.dxhmt.cn/jiaozuo/b75a92c9503e47cf9e89f7ff247b65f2/playlist.m3u8?zhend +焦作公共频道,http://zhpull.dxhmt.cn/jiaozuo/29b65b69130c4ef1a3283cc7b913da05/playlist.m3u8?zhend +焦作教育频道,http://zhpull.dxhmt.cn/jiaozuo/9c10435ad24c409baee219ec289e17d0/playlist.m3u8?zhend +睛彩焦作频道,http://zhpull.dxhmt.cn/jiaozuo/c5eb91b47f0e42318f34fc0247c8acaa/playlist.m3u8?zhend +鹤壁综合频道,http://pili-live-hls.hebitv.com/hebi/hebi.m3u8?zhend沁阳新闻综合,http://live.qinyangtv.com:82/channel1/sd/live.m3u8?zhend + + +河北综合,#genre# +河北农民,https://jwplay.hebyun.com.cn/live/hbnmtv/1500k/tzwj_video.m3u8?zhebd +石家庄新闻综合,http://pluslive1.sjzntv.cn/xmzh/playlist.m3u8?zhebd +石家庄娱乐,http://pluslive1.sjzntv.cn/yule/playlist.m3u8?zhebd +石家庄生活,http://pluslive1.sjzntv.cn/shenghuo/playlist.m3u8?zhebd +石家庄都市,http://pluslive1.sjzntv.cn/dushi/playlist.m3u8?zhebd +鹿泉一套,https://jwcdnqx.hebyun.com.cn/live/luquanyi/1500k/tzwj_video.m3u8?zhebd + + +数字,#genre# +苏州4K频道,http://liveshowbak2.kan0512.com/ksz-norecord/csztv4k_4k.m3u8 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8?_upt=1da074361609506578 +安多卫视,http://stream.qhbtv.com/adws/sd/live.m3u8 +延边卫视,http://live.ybtvyun.com/video/s10006-44f040627ca1/index.m3u8 +中国环球电视,http://live.cgtn.com/500/prog_index.m3u8 +中国党员教育,http://12371ksc.v.kcdnvip.com/12371/dangyuanwang_1/index.m3u8 +地雷战,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/a90c788a458e40508615d711b8aae1af/850.m3u8 +地道战,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/312e39c68cc441feb79d1c2d7e16cbbd/850.m3u8 +跟踪追击,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/059096230b4e46c0b5d4929ff98435d0/850.m3u8 +红牡丹,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/921b8081b58b4c2f81fb233b6c8e89ac/850.m3u8 +侦察兵,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/3e4727a0fca34aa8b9774472a4908eaf/850.m3u8 +三毛流浪记,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/b9ce94c233b043bebe30340f09868ed1/850.m3u8 +红色娘子军,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/2ea3b03b3a414303b830f92579243001/850.m3u8 +五朵金花,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/ae639196cf3949368c1b05776bb1d4fa/850.m3u8 +洪湖赤卫队,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/2a58afdece3342eaac927648a2cccabd/850.m3u8 +狼牙山五壮士,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/71c649af833c43a9b61e4f5c913bbd6b/850.m3u8 +战上海,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/e84b188d1bf7484fb4907d99827cbd45/850.m3u8 +铁道游击队,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/46d8664dacad4dbb9c790256688048dc/850.m3u8 +红孩子,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/bf55b84744d64eeaaedc5ea603855597/850.m3u8 +宝葫芦的秘密,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/866474add7224067877bed430d9380ab/850.m3u8 +董存瑞,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/b657281ba44a4b279f55ec860c12543b/850.m3u8 +地下尖兵,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/188d5706e5774f06850e06e4f181c4bd/850.m3u8 +三毛从军记,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/919a08437d44499b87b7b4903f2b2ae6/850.m3u8 +小兵张嘎,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/d8c05f3ca36d48e6b1997b523e885c5c/850.m3u8 +闪闪的红星,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/b90fcf1a5425479baf3a045282a1f263/850.m3u8 +祖国的花朵,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/ef10a9a9b1534fe38fd4fdfdac1ed493/850.m3u8 +花儿朵朵,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/53a44d8649024b58b69f4468b922b8f0/850.m3u8 +上甘岭,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/c91f7aae9b8b4c578a7d9ecdf94b9dca/850.m3u8 +平原游击队,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/180ef18dec9a4edeb9d2b520d57cfc7f/850.m3u8 +神秘的旅伴,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/ef95b9f13e2c47b882b67ef52139786a/850.m3u8 +前哨,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/1e9c4ffe4002492484c0f50235299759/850.m3u8 +刘三姐,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/680e102dc8614632862cf49a236def6e/850.m3u8 +赛虎,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/34505162ca0848af9e23d33ed4018088/850.m3u8 +犬王,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/08d97be6d296434098297a505e2f05b5/850.m3u8 +特别攻击队,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/c69eed95a2cd4752850bcac109151e37/850.m3u8 +举起手来-追击阿多丸,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/a1093561ad0a4071b68eeae884de01e7/850.m3u8 +鸡毛信,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/41fcf9fefcf247c78e2d64c7af5d6edd/850.m3u8 +马兰花,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/c89d105b9661464bb8c5c5f46977f6c4/850.m3u8 +南征北战,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/9557e1bfd91b4319975dfeffcc44d6b7/850.m3u8 +羊城暗哨,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/215e7a6713884bcab8cc461e245531af/850.m3u8 +冰山上的来客,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/c86d45b176d642738dabf9da7361653b/850.m3u8 +51号兵站,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/fa6557276d644b5ea399956a6bf94e59/850.m3u8 +红日,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/f2ee6e22cd894be1bc8c90b19f47ae2e/850.m3u8 +战火中的青春,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/be0d797e3b494f5fa1cb6d48d29643f3/850.m3u8 +英雄虎胆,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/b7fcd0d4ebb045fe8e653ee71b4ef8fc/850.m3u8 +突破乌江,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/bf8ccfff8bc949a6a2ed6bcda45eb4e2/850.m3u8 +三进山城,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/ee157540ff2540ada0250edf3f6a3e0a/850.m3u8 +苦菜花,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/ec47d310d888464f8446af5e6e04ded8/850.m3u8 +智取华山,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/ef243e3fa20544df9cc24b72ace8efa0/850.m3u8 +渡江侦察记,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/d708e9c64aa34519af5490a793756c38/850.m3u8 +奇袭,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/ac8b28fb66104aa7a5e3cd5a10ea986b/850.m3u8 +小花,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/f97fb71bff5947ddaf905cc121c42ee4/850.m3u8 +少林寺,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/8af9ff377238407e927e597a1af47788/850.m3u8 +英雄儿女,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/479d044b7a3d465fa3a5b850d36b219c/850.m3u8 +大气层消失,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/45122e56521f49b68020e3e66bc28ce8/850.m3u8 +霹雳贝贝,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/7accc94d5590415284af5db904e4be5a/850.m3u8 +泉水叮咚,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/8b039f6988a04ca8b086d35031a77204/850.m3u8 +柳堡的故事,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/706b979b8a934aaab677a11c410bb119/850.m3u8 +李双双,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/bac928d747984ed3bd17550879522f89/850.m3u8 +大闹天宫,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/a57c9e5e1696486e97d229a3ddb13749/850.m3u8 +柳毅传书,http://hls.cntv.kcdnvip.com/asp/hls/2000/0303000a/3/default/2ee71b96a3574889829e17d70b3f3c02/2000.m3u8 +卷席筒,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/8bebd13583e341e1b9d9e1180d36aaaa/850.m3u8 +铡刀下的红梅,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/6f0817bfbedd42c682d9152abd5402a3/850.m3u8 +墙头马上,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/c45285c6b2ac46a58d49c9351b18e369/850.m3u8 +花为媒,http://hls.cntv.kcdnvip.com/asp/hls/2000/0303000a/3/default/48da40a19746409997717371a80fd9e6/2000.m3u8 +牛郎织女,http://hls.cntv.myalicdn.com/asp/hls/2000/0303000a/3/default/adc6931516694659a7b54176e4b38299/2000.m3u8 +梁山伯与祝英台,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/427eb50cc6844d47bcd35d2fac737a0a/850.m3u8 +铁弓缘,http://hls.cntv.myalicdn.com/asp/hls/2000/0303000a/3/default/e19f3238b0ba4849aa50d6b7f1118ab9/2000.m3u8 +碧玉簪,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/9e90b1a2872b476b8a4f9882f9b63cde/850.m3u8 +野猪林,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/d2ddcbd8cdba4473a541687e683c1aca/850.m3u8 +五女拜寿,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/c38771a355214e97a855c213693a1153/850.m3u8 +杜鹃山01,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/f468a89e0e394a718474523afe37c702/850.m3u8 +杜鹃山02,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/5f76957927c5421e8bd75d0f53c95e4a/850.m3u8 +沙家浜,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/6241c3f25a9a4dda9b05b9ba185500e0/850.m3u8 +红楼梦01,http://hls.cntv.myalicdn.com/asp/hls/2000/0303000a/3/default/f66e935661b44ff6b80a290537d5d204/2000.m3u8 +红楼梦02,http://hls.cntv.myalicdn.com/asp/hls/2000/0303000a/3/default/10470613ead24f5cb435137b5f39ab98/2000.m3u8 +追鱼,http://hls.cntv.myalicdn.com/asp/hls/2000/0303000a/3/default/3515e586d18743be99eb6cc2004cb995/2000.m3u8 +穆桂英大战洪州,http://hls.cntv.kcdnvip.com/asp/hls/2000/0303000a/3/default/aaa5a373d97a47d1bc95b1418b672b33/2000.m3u8 +秦香莲,http://hls.cntv.myalicdn.com/asp/hls/2000/0303000a/3/default/f8daefadadef41989225543875268a70/2000.m3u8 +王老虎抢亲,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/3b6ae81ae49f4c72b0c977023565c762/850.m3u8 +女驸马,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/ba29b790f8ec435ba94fc072558431f0/850.m3u8 +天仙配,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/1cd056751daf430a943e63e6428c40d7/850.m3u8 +李二嫂改嫁01,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/90846f6758524d78997aad89df8c37e0/850.m3u8 +李二嫂改嫁02,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/47a9c8216d344c2dd45f11949dbbecb5/850.m3u8 +林海雪原,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/5023f1dcc73b4090962ee31e017fb8e3/850.m3u8 +万水千山,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/8804d527d9d94b818b42624730203fa9/850.m3u8 +孙悟空三打白骨精,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/1e34b7a2f93d4efeaf7a583409b270cc/850.m3u8 +巴黎圣母院,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/dd86918aafb042c5b51584ffcf5b0e00/850.m3u8 +罗密欧与朱丽叶,http://hls.cntv.myalicdn.com/asp/hls/850/0303000a/3/default/95193e30bd454e77bc59a140f4e32ad2/850.m3u8 +魂断蓝桥,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/7fc704c5b2e04e65bab92b3986883ab3/850.m3u8 +茜茜公主,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/ffa8a73877194632b0278898f297d07b/850.m3u8 +出水芙蓉,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/28f9967b04984830b3a1f6fb27561000/850.m3u8 +桂河大桥,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/b125a3edccb34637b336cb867e8a5d5d/850.m3u8 +Soda东南亚之旅,https://vdse.bdstatic.com//b6295e9776c2cd347716fc2447e27fac.mp4 + + +纪录片频道,#genre# +人与自然,http://newcntv.qcloudcdn.com/asp/hls/1200/0303000a/3/default/1425e1d505654cb48ba82b807b221193/1200.m3u8 +自然传奇,http://newcntv.qcloudcdn.com/asp/hls/1200/0303000a/3/default/81a1ad3a661748bfb8560c92d38204ca/1200.m3u8 +探索发现,http://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/25137bd7c4494128bf0cba271974928f/1200.m3u8 +地理中国,http://newcntv.qcloudcdn.com/asp/hls/1200/0303000a/3/default/c6baf6f74bb944aeacee1065ea72c798/1200.m3u8 +大太平洋,http://hls.cntv.kcdnvip.com/asp/hls/4000/0303000a/3/default/2d7f4eeaed2e4ad080bcf324eb21bc0d/4000.m3u8 +生命脉动,http://hls.cntv.myhwcdn.cn/asp/hls/850/0303000a/3/default/c481b5826ffc4e99a92e01704c862dbc/850.m3u8 +飞碟之谜01,https://hls.cntv.lxdns.com/asp/hls/2000/0303000a/3/default/f0a47e155d32450daa1d36a04fd7d262/2000.m3u8 +飞碟之谜02,https://newcntv.qcloudcdn.com/asp/hls/2000/0303000a/3/default/d2454bbb542d4613a9db478dab2addfd/2000.m3u8 +远方的家,http://hls.cntv.kcdnvip.com/asp/hls/4000/0303000a/3/default/162d7e29c3da4aab82ad47b6e2d9e7b4/4000.m3u8 +美丽中国说,http://hls.cntv.myhwcdn.cn/asp/hls/4000/0303000a/3/default/8cdd688b04e4495ba1635e218419d6f9/4000.m3u8 +美丽中国自然,http://hls.cntv.myhwcdn.cn/asp/hls/4000/0303000a/3/default/51d937a0201f4c78a5878b4b37089f3b/4000.m3u8 +航拍中国第一季,http://hls.cntv.myhwcdn.cn/asp/hls/4000/0303000a/3/default/8edf3fb6a69148ea9a7dc0b5a9d99fdb/4000.m3u8 +航拍中国第二季,http://newcntv.qcloudcdn.com/asp/hls/4000/0303000a/3/default/2bdfdad540b342f592f9817cb7f3b79a/4000.m3u8 +航拍中国第三季,http://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/18a8a559464448dbaf60d33913e09aea/1200.m3u8 +中国村庄,http://newcntv.qcloudcdn.com/asp/hls/4000/0303000a/3/default/93fc12dbf14241c18c23da104fbade23/4000.m3u8 +梵净山,http://hls.cntv.myhwcdn.cn/asp/hls/4000/0303000a/3/default/b9571df1181c4422a83901e827519fe6/4000.m3u8 +地球脉动第一季,http://hls.cntv.kcdnvip.com/asp/hls/850/0303000a/3/default/7a3423af02284c3db48b854ab646993f/850.m3u8 +乘着火车看中国,http://hls.cntv.myhwcdn.cn/asp/hls/4000/0303000a/3/default/2b0f397ed9d948eb9fac38d73cde241b/4000.m3u8 +动物世界,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/71d7dce230b74c1b9e35b41e837ffc5f/1200.m3u8 +一片住着熊的森林1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/2ac6789acc644b55a4df03445561c56b/1200.m3u8 +一片住着熊的森林2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/969d426187eb46e19fc6839a435fbf0f/1200.m3u8 +一片住着熊的森林3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/fd1e9f94afe948efafaa28a882661620/1200.m3u8 +与野生动物为邻,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d25931bed86a49d4afb8780771797c19/1200.m3u8 +丛林之王美洲豹,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/bbb1037a32ad44cf8bab822eda34bc86/1200.m3u8 +丛林勇士之战(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/2550722b92464a749fa7aceb52e22895/1200.m3u8 +丛林勇士之战(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/c02959d3f2b14d3abf05ec017179c964/1200.m3u8 +从幼狮到狮王(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/0eb0c51f46ed4171a9923dd6a9703c45/1200.m3u8 +从幼狮到狮王(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/a7510a06ef494458a0f23a8a6b6918d3/1200.m3u8 +传奇母狮,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/c550dc54139b4e619e7d4a1c1ab69e56/1200.m3u8 +兄弟情深(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/0700de47ebc74232bc9f5c5c178aa488/1200.m3u8 +兄弟情深(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/30a35b521af54f1a88d74f7215ece1d3/1200.m3u8 +兄弟捕猎联盟,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/0b85d990df5c4f7fae663dc595a084bd/1200.m3u8 +充满爱的象家族1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/4bd5e30e25244ef1a622142a1053d8c0/1200.m3u8 +充满爱的象家族2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/0acf5b4f7fc248f1bd0801b768375fd6/1200.m3u8 +兽语如歌,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/9d7bcf3e27d941cfac2e6c933ad9b543/1200.m3u8 +冬季传说雪鸮,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/e76b2116c4514daea844fbdd1b56ab5d/1200.m3u8 +冬日雪鸮,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/1a7b439474b6439c91dc5d5b2cb736d4/1200.m3u8 +冰天雪地北极熊(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/15dd2029621a498d9c4d3eb2982285e7/1200.m3u8 +冰天雪地北极熊(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/360e77812fc84a8198e85a60f087b049/1200.m3u8 +冰雪世界狼女王(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/640f926df6fb4f398d40c8b254248750/1200.m3u8 +冰雪世界狼女王(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d85457ff45154ff8bdf74e73422e99a4/1200.m3u8 +冰雪王国里的童话,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/3b291326cf2648cd8119f5facf9e3b92/1200.m3u8 +冷静与柔情,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/554c1b879dc646d4ab188dfd58a0f02f/1200.m3u8 +凯门鳄的奇妙旅程,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/aba970eff8be48beb339a2ad027592cf/1200.m3u8 +动物与计谋,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/403122f54ee5492fa9e5d2b8f0087ad2/1200.m3u8 +动物冠军俱乐部,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/65227347336749ffa373661cac985952/1200.m3u8 +动物冠军竞技场(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/cf107046774d4db5a1ac622e880488e2/1200.m3u8 +动物冠军竞技场(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/9f1dc957013c4765a96b86c1890e4ae2/1200.m3u8 +动物宝宝闯天涯(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/e1f91fe01a9b4b24834a0a6e4b309bb2/1200.m3u8 +动物宝宝闯天涯(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d5937591787941518b5a1390f7a1e792/1200.m3u8 +动物搏击赛,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/22ef116331af49a782d42488e396837e/1200.m3u8 +动物搏击运动会,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/0f74c44316a34ea482ecae43f5c12fa8/1200.m3u8 +动物父母有梦想(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/f069e600b3584765840f34e9d641919a/1200.m3u8 +动物父母有梦想(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/1c1df6f1bff5454a9570693475f920ef/1200.m3u8 +动物界捕食奇观,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/5215de3e2a7b41009ed1ded1f29fea40/1200.m3u8 +动物的海底宫殿,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/0929798fce744530b14a6add96afcdf3/1200.m3u8 +动物霓裳羽衣之妙,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/b4aea8cd185c4126a37aa6e92d179f82/1200.m3u8 +勇挑重担的矮獴(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/8ef930c154a446d0a831d2dd93698fd2/1200.m3u8 +勇挑重担的矮獴(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d9ffce5e83824939ab9bb66502778bd9/1200.m3u8 +勇敢的王者之心,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d37b12d09c4144f0a59560f18ff6508a/1200.m3u8 +勇敢的长颈鹿(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/8a9d50517baa443b82b3e4c9e0078351/1200.m3u8 +勇敢的长颈鹿(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/773b3e9df72f4834b85c46e0f5b038fb/1200.m3u8 +勇闯包围圈,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/3af15ad56d1640fab9a1a065402b3b76/1200.m3u8 +勇闯螃蟹岛,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/3bba8da0b6c54771aa02b579ba75f8e7/1200.m3u8 +勇闯都市丛林,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/221e94ad951d4001b106d3c5af785537/1200.m3u8 +勤奋的捕食者,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/4793c8276c184d03bc3ba5e9b6dc9610/1200.m3u8 +北极熊之光(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/9df8189c94b24b8b8bb6c69e448cc936/1200.m3u8 +北极熊之光(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ca1fabcc21d64b1f8cc933844830fcc5/1200.m3u8 +北极熊的冒险之旅(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/e1b4b7a8beb3459bbd44f505a3fcc99c/1200.m3u8 +北极熊的冒险之旅(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/9ab29267ff5b4b2b99fdb74d1b9fec55/1200.m3u8 +北极熊路在何方,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/38321222144945faa76d79c7785346a6/1200.m3u8 +南美野生世界1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/35eac4ae4e024654b845f5c7b2221d15/1200.m3u8 +南美野生世界2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/9c743ea1e41f4bf585fb1470c9575c0d/1200.m3u8 +南美野生世界3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/68caf99e50bc496fb478b0ed8f4b421a/1200.m3u8 +原野逐梦记,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/01fcf61e12c242bd81dc5aca38b6f183/1200.m3u8 +变形记,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/c88fd67847314d1ab20524c9fd94d555/1200.m3u8 +古老的活化石恒河鳄(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/f8c9f1b5ac454c9a9ec5fda21c62b926/1200.m3u8 +古老的活化石恒河鳄(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/966f8103448c4dcdabee095eeb340451/1200.m3u8 +可爱的海獭(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/340266a6b3ff421fa174208845f56fef/1200.m3u8 +可爱的海獭(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ef9b2898e92146d29a2e926ce1107eac/1200.m3u8 +呵护,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/3e2d88a89cd9464e89f3b4b6353db194/1200.m3u8 +团结的水豚家族,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/51e9c38303624369a0ba257163a5528f/1200.m3u8 +大力士捕鱼记,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/1bcefb1f860746ebbbfe7f969c3a84ea/1200.m3u8 +大地骄子,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/b08d6ad2f22047bd93af89955db5ce46/1200.m3u8 +大水獭回归的故事,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/0e114c18fa084fe58238307c66506675/1200.m3u8 +大水獭桑丘的故事(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ffea8bb4f0a04e53a82dab943e32bfb1/1200.m3u8 +大水獭桑丘的故事(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/9934a6c232264addaf109ac76f21e7da/1200.m3u8 +大猫们的世界,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/830375ed0f54449e8e369edc9635e329/1200.m3u8 +大猫传奇,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/6976a5d0ae0d4426bbd94bc1dd8f44a9/1200.m3u8 +大猫和邻居们(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/84359a09aab544b184a40865454e0b0a/1200.m3u8 +大猫和邻居们(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/2c4bc4b10e7d408a8de9c9e3012f64ca/1200.m3u8 +大猫归来,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/8c13b8463ee54e93a0a0ccc33dab33ef/1200.m3u8 +大猫榜中榜(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/e5c95f6d2f9447e2bbb0b2bba952e062/1200.m3u8 +大猫榜中榜(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/9f813ed35c264d4ea10e57516dafe5d6/1200.m3u8 +大猫猎手训练营,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/a08d9451f00a451682973c99b503dd6a/1200.m3u8 +大象与羊的快乐生活,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/b72e3a49fdd44f36915d6cc59aa0a113/1200.m3u8 +大象与羊的神奇友情(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/7689d02607d34fdb8ce22cc479e42e91/1200.m3u8 +大象与羊的神奇友情(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/8ab73d30adff4cfa8e5afda910387dfc/1200.m3u8 +大象的别样生活(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/f4e6615b73ce42aa805767845425078a/1200.m3u8 +大象的别样生活(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/f80446c8a43c4357af8680057ec1669f/1200.m3u8 +大象的秘密生活(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/81f43884b4064750af230205752dbb63/1200.m3u8 +大象的秘密生活(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/43e021f3a6dc4b6089c71afe80552fae/1200.m3u8 +天生野长生命延续(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/87be5f0e1fb14d139fe696081a787914/1200.m3u8 +天生野长生命延续(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/b95e26a16f664da498ef421f74ad3006/1200.m3u8 +天生野长生命课程(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/95839705cfdc471aa67a09b7cfd6f52d/1200.m3u8 +奇异世界的动物们2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ef3ee1bb8ff946a9adf07486709883eb/1200.m3u8 +奇异世界的动物们3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/efa51c5e3af04df89e68606d75333080/1200.m3u8 +奇特动物的奇特遭遇(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/2b20f8ba9ae14d96b9907f59bb758595/1200.m3u8 +奇特动物的奇特遭遇(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/0ebab68eda084509b18c27982ecfb660/1200.m3u8 +奇迹发生的时刻,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/1dbbdbb87b8f410cbc0f3c742201cd7d/1200.m3u8 +如履薄冰的北极熊(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/f31953326cca4b5e9c5f7e285a5cddb7/1200.m3u8 +如履薄冰的北极熊(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/b6576aa2cd4e43a9a5ddc4af16695a28/1200.m3u8 +家有萌宝(五),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/496e4c0e2de74aaf968651d447eeb12a/1200.m3u8 +家有萌宝1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/7c53f1554802430587ecc54b1cef1002/1200.m3u8 +家有萌宝2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/81f9af4e6a6f41daa48c6c0091e4d66b/1200.m3u8 +家有萌宝3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/fe463d857de5415daa72441ab0cdab7f/1200.m3u8 +家有萌宝4,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/15d2240bbfc34785bfc2ab8147244466/1200.m3u8 +家有萌狗,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/0fb39f83b1764305bd0216f15b8ab88a/1200.m3u8 +小动物大猎手(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/c46a26d74f5b4da98f5c9d69f8218de0/1200.m3u8 +小动物大猎手(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ef8ad1d36d9c4515a9e04443687a7f33/1200.m3u8 +小动物大英雄,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/27818c0197e94415946b825b2b163e22/1200.m3u8 +小动物的森林童话,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/321727074edc4cf69b5b205111569205/1200.m3u8 +小勇士闯天下,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/8737418de24a461f9785193bcbda0026/1200.m3u8 +小熊的故事1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d3c750e3481a4ca696898875f6e6dbf1/1200.m3u8 +小熊的故事2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/3499a172820f47da988e5aaeb187ec29/1200.m3u8 +小熊的故事3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/3564b5460bea444b8712fb1cb0a59c00/1200.m3u8 +小熊的梦幻森林1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/b0f2b241c39c42beb732a5e73b5a9782/1200.m3u8 +小熊的梦幻森林2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/b2e817cee1a7417ba34f062aa919ca02/1200.m3u8 +小熊的梦幻森林3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/8bbcff92f2ce423bb2d822e0fb67657f/1200.m3u8 +小角马历险记,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/b7594a5bc3d241e3a8b95eac39ebd7e9/1200.m3u8 +小象和绵羊朋友(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/c69ca1ce229648ce86e97c0b86e67c58/1200.m3u8 +小象和绵羊朋友(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/138e7ea321c94a86b4f939ccb00a75a9/1200.m3u8 +小鼠奇遇记,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/9417f7c1d9f2484c901d886245892130/1200.m3u8 +巨兽来了,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/1224d3b3e1ba410d8dc316f2f2ab1872/1200.m3u8 +巨藻林的守卫者,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/432e7e692dc841bfaefb5e662de89bdc/1200.m3u8 +彩蛇之舞,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/002334474c7c4b8b98bad237a7bdeb7b/1200.m3u8 +情满大草原1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/222ec6157bf34d8c9abd0e62ddae6ee1/1200.m3u8 +情满大草原2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/8200031edc9f434583d9b3f738ac4448/1200.m3u8 +情满大草原3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/0ab9b80f79884e22b6390b2deefdc571/1200.m3u8 +打造一只超级猫,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ba966901198844d09399a354e203e6cb/1200.m3u8 +抢滩勇士(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/0d4351715b27425d87a926b964b6cdaf/1200.m3u8 +捕猎刹那间1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/6b222a92e2b9484f86121a558915ddb5/1200.m3u8 +捕猎刹那间2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/eb2cf087eae64ff9a40258bbbc1a92ba/1200.m3u8 +捕猎刹那间3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/799ea1ddb3db403484fe2421d4831287/1200.m3u8 +捕食一瞬间(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/426cfdd1924a452b863c0cd52af6436b/1200.m3u8 +捕食一瞬间(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/b66704d4d4aa4ea7bab6e6ef673568b3/1200.m3u8 +捕食奇谋(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/543fa61893394cc48d2802207c8a51e8/1200.m3u8 +捕食奇谋(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/05ba8dcc7a224442a58f6d6f86885d25/1200.m3u8 +捕食者大观,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d19e46abe2754e2985715a147e653626/1200.m3u8 +捕食者身体构造,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/83901acd0fed408f904a9b554c8e16ef/1200.m3u8 +捕食者追猎现场(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/853b68324c2e4718ad08298aaed459b7/1200.m3u8 +捕食者追猎现场(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/6016b09920a7447eb798f3f891f52bad/1200.m3u8 +探秘冰上的北极熊(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/6a74d01391d849849c7391b2466f3752/1200.m3u8 +探秘冰上的北极熊(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/509e924ad47e422984af226b26236bf6/1200.m3u8 +探秘雨林利爪族(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/dc83b3fe7f874e33959bdbf034e6451c/1200.m3u8 +探秘雨林利爪族(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/5a8fd3e4e8ba4ca5b62f1b90ae9c3640/1200.m3u8 +新狮王诞生记,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/5e156f1734234e17ab0f6f87f2e7491b/1200.m3u8 +旱季冒险故事,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ac505ca5d2d5469eb21448c300a8c16c/1200.m3u8 +旱季极限生存战,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/1b750e952abb452c9f77d44f8d8bae17/1200.m3u8 +旱季生存攻略,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/3f34548881664dd6afb01ccdcb677a5d/1200.m3u8 +有一只美丽的大水獭,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/f1ddaab95ca9475da4cd97907cef8e96/1200.m3u8 +来到这个美丽的世界(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/003d910853de498299eb47d7d8a2eedf/1200.m3u8 +来到这个美丽的世界(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/9323ea96cf6a47afaf798fca6d9411e6/1200.m3u8 +林间潜伏,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/922b142fef9443218be5eaf44df0b397/1200.m3u8 +棋逢对手,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/3d515f3011c64797ae15bf36c639cb49/1200.m3u8 +棕熊把守的水上要塞(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/50590d053a2245428391323902e07d0e/1200.m3u8 +棕熊把守的水上要塞(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/bb2341e42865439eaed4502fcc736ea5/1200.m3u8 +棕熊捕鱼季(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/1ef91cb6079d46ccb9a62f046739d5c8/1200.m3u8 +棕熊的捕鱼生活(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/388d46918ea34570a3fed5f5ceb393ee/1200.m3u8 +棕熊的捕鱼生活(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/09def25492254217aba438e7403741e2/1200.m3u8 +森林是我家1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/c105c056c3f744baa49ce0b8b39c1f3b/1200.m3u8 +森林是我家2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/63bb582977074c57a127eaca9d954154/1200.m3u8 +森林是我家3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/14b683f0668f404a9bb8ea74d14c5c8e/1200.m3u8 +植物王国漫游记,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/508b9a0c8be74d89a431b24114c91faa/1200.m3u8 +植物王国漫游记,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/fa3ad43978014ff4b64b4bff8914116c/1200.m3u8 +母爱之路,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/115d481467e04333be047fcebf482b3e/1200.m3u8 +母爱的呵护,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/a6ec4d0475e1453e8ede023e346c2350/1200.m3u8 +水牛与狮子的争战,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d1e0dc98b1374b43b157bf82eebc6d09/1200.m3u8 +水牛向前冲(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/2f05eb49b3a049c88a848a1104dc856f/1200.m3u8 +水牛向前冲(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/bda4b441c07e40cb8a418381d0506c80/1200.m3u8 +水獭奇缘,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/da2d147b25404552b118111dd52d7a25/1200.m3u8 +水豚爱湿地,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/c7488fc3bed341ad827c054d3ec7e62d/1200.m3u8 +沙滩上的盛宴,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/31e38a0232734780842a9031072c2073/1200.m3u8 +河里的捕食大师(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/bf70f8033ec049f5be4698c3497d3868/1200.m3u8 +河里的捕食大师(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/040c050908a340238dacd1ac86694543/1200.m3u8 +河龙王出海,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/f352ba97a41146279f5d250cc8c670bb/1200.m3u8 +海底生存战,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/20225ac33ef7408e8c7040cb39d6a595/1200.m3u8 +海洋宫殿的守护者,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/86c73156b8ad405180ed252940b2155c/1200.m3u8 +海洋猎手,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/f98ebc30517647839c09fb17e0dbea04/1200.m3u8 +海洋里的神奇家族(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ef8e561920694e4a81cd1933314610cb/1200.m3u8 +海洋里的神奇家族(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/5775e1919dca48169eb22986804455b3/1200.m3u8 +海洋里的神奇家族(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/a68ae907dc7e4783af8d9547a1926435/1200.m3u8 +海的呼唤,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ee6a46541b624388a01ba2fc14c34079/1200.m3u8 +海豚的奇妙生活(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/30385b1caa214c9a8c6c53ef69ce7e18/1200.m3u8 +海豚的奇妙生活(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/b61b0646586142aca08c2e8d333c385b/1200.m3u8 +海鬣蜥的幸福生活,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/a66f6344f9cc4ed3b42b06e678124d0f/1200.m3u8 +海鬣蜥的故事,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d19635c3f57f4e538e078569ac796fd6/1200.m3u8 +深海潜伏的猎手,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/f1a00ae54f3b428bac1ed388ced1ce70/1200.m3u8 +湿地之争豹与鳄鱼,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/1fe1e5df7c9d4b38a0a855e092a7b6c1/1200.m3u8 +湿地小萌兽,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/00892961ec6546ae8c78e96d1dd0874a/1200.m3u8 +湿地有萌兽,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/e3c31d84ec7e4035a8501db9df1d140b/1200.m3u8 +潜水大师的岛上生活(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/cd88344f084b47c593388fdf6a8c443f/1200.m3u8 +潜水大师的岛上生活(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/76332b54d8074b0fada76d081570d621/1200.m3u8 +熊在旅途(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/b0b95c35bce84072b10ad0b82cf83951/1200.m3u8 +熊在旅途(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/9dc810bc8a3b426f88ac8c998f9e5332/1200.m3u8 +熊的王国,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ade1b31d23694fba82c9c4f07dba3267/1200.m3u8 +爱与狗相伴,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/530a12d274184293802f51c38603f75a/1200.m3u8 +爱你我的宝宝(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/08f97ee21d884d0486c37ae6fb7c5683/1200.m3u8 +爱你我的宝宝(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/f16dbba3ddf84af2a0ff1521448ee4da/1200.m3u8 +爱吃鱼的棕熊,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/79c7bb4495f74ca698f3111a6f7ba567/1200.m3u8 +爱的奉献1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/5b062ba2cd854ba993166d277af8a40d/1200.m3u8 +爱的奉献2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/80cf935aef484e15aa31b8fbd565be39/1200.m3u8 +爱的奉献3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/aee1f28cf3e94a5fa7468206d4f417ed/1200.m3u8 +狮口余生的小角马(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/7cfc0fe7981b4022b69c3e1cb7317b77/1200.m3u8 +狮子和鬣狗(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/6ca061c3b9184e7aa46cef1ead911099/1200.m3u8 +狮子和鬣狗(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/e5ea8f4b0cbd4d7aa779b9dfed5a9448/1200.m3u8 +狮子捕猎计划,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/6f2b58a05add4e2a9907ba370473332a/1200.m3u8 +狮子的荣耀回归之路1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/bec9f485672345339c49bc345edf9fd5/1200.m3u8 +狮子的荣耀回归之路2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/bdb438a81a20403db85b6e9d12707f2d/1200.m3u8 +狮子的荣耀回归之路3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/50ef8c8037da4735a9cb9288f45878b0/1200.m3u8 +狮子的荣耀回归之路4,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/2fea6699d56f4274b5ab5260b016fda2/1200.m3u8 +狮族迷踪1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/801151749824437aaa0afa87bfcf7abf/1200.m3u8 +狮族迷踪2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/b4ff6041c00246af815b679a7ee6c4a6/1200.m3u8 +狮族迷踪3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/5e01c3ff2a5844ab80643ce67ba29026/1200.m3u8 +狮群的家园生活,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/cad939a2eb714f4b9d37c4185674d50b/1200.m3u8 +狮群的荣耀,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/84b850056589475f80528cf28b9b840a/1200.m3u8 +狼女王的奋斗传奇,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/f2d629470e214acf9d08dc81f4773cbf/1200.m3u8 +猎手求生记,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/5bc79939a4804f199e606cc08b1bb416/1200.m3u8 +猎手生存攻略,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/703310100a944d78a5e6838f80920cd6/1200.m3u8 +猎豹妈妈奋斗记,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/6b10d45dafaa47f4a3c3444946c074c9/1200.m3u8 +猎豹妈妈育儿记(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/dba9097ef49e42acb2c6597e04551fbc/1200.m3u8 +猎豹妈妈育儿记(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/fca702ad83284ff0a3b883a735913060/1200.m3u8 +猎食计划1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/cd732e06e7934a3daef6483c6be1afca/1200.m3u8 +猎食计划2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/497afdb07e92409fb8cb5c0249dfe6d7/1200.m3u8 +猎食计划3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/947b6c076a0c4a3ca72a1274731feb66/1200.m3u8 +猛虎柔情,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/dd3be5a89c1542d3bb4db0953a1430c6/1200.m3u8 +猫科动物谁为王者(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/17c3860b26c14110a740dfa49785a1bd/1200.m3u8 +猫科动物谁为王者(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/1cbb873dc7474315b86788e9f657534a/1200.m3u8 +猴子的智慧,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ef01d6b79fe74daf9bd63ff0469713d2/1200.m3u8 +生存极限大挑战,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/9dc7b6dcacde4fad9467c4d2c61da3d1/1200.m3u8 +生存的望(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/fd00ce388b994d7195dbefc1beb5726b/1200.m3u8 +生存的望(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d9765b81ca83444a9ba7b6a335b2466a/1200.m3u8 +疯狂的爱,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/35b481b5e27a4fa2b2c03f42596b68ba/1200.m3u8 +白狮归来1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/199ab14f5ba44a208371a3eef0029a09/1200.m3u8 +白狮归来2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/e3b36e52d0bc4a0a851a1bd3fa181365/1200.m3u8 +白狮归来4,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ffda5e0584b64e0d9dc3cc43783900cf/1200.m3u8 +白狮的荒野故事(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/649a0df6bc394fde973b2e8ef12ef3d6/1200.m3u8 +白狮的荒野故事(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/1eee9eda1dec4c8da256c6b2ef70114a/1200.m3u8 +盛宴的旅程,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/fbcd61c318c34e08854c3911086a7406/1200.m3u8 +看得见的远方1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/f532415139fb4dc3a0e9de757d535d6a/1200.m3u8 +看得见的远方3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/255a802e924a44f381318db92a32431e/1200.m3u8 +神秘的眼睛王蛇,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/cb73d16a9e02484ab4708b0268b63bcf/1200.m3u8 +秘境之蛇,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/c4e45ac9dd2642b6ae9fb95b470224a9/1200.m3u8 +秘境里的动物王国,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/bb36368ba24f47ed88d4204fd3db5483/1200.m3u8 +秘境里的奇观,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/38ba9675721d4259b3dd327b7e212a39/1200.m3u8 +穿越森林的迷宫,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/52bf33932d1646529b95b044f187d4d3/1200.m3u8 +穿越狮子的领地,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ea08ccce272f4b7984eb665a97bab536/1200.m3u8 +童话般的雨林(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/a1672972c0b742239237bb1686ba0745/1200.m3u8 +童话般的雨林(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/8e99e3c9f38340a98fb79b36ab1c863f/1200.m3u8 +绽放的生命(五),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d2f3f0f3b4c242b4983ee62034f85608/1200.m3u8 +绽放的生命1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/87145268893a47cd8fc9cda530eee111/1200.m3u8 +绽放的生命2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/7b6ed77c03224d298a72a8311fcf10a7/1200.m3u8 +绽放的生命3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/aea0ef5ea21c40dea948d723d823a5fb/1200.m3u8 +绽放的生命4,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/fbb3d1d6ae37458e84f574881778ac7c/1200.m3u8 +美食的,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/9debd40527e34471bdfbe1212aa198d7/1200.m3u8 +耀眼的白狮家族1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/07c3395ee5da4f789937372657ab980a/1200.m3u8 +耀眼的白狮家族2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/3989c3f3416745438c4bc20abeae51ae/1200.m3u8 +耀眼的白狮家族3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/e0efcf1181234f2dabef87db65bcdec0/1200.m3u8 +聪明的建筑师,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d04a550f19ac42869d7b4d3f5f9246b2/1200.m3u8 +自然界奥运冠军,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/7b968e9b50984d598d96c6fc5af40b4c/1200.m3u8 +花豹柔情,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/96712ee30d144f21a0566f3c1b2fbc56/1200.m3u8 +草原三巨头,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/2bdc779138bb4235b20a5155e40fa7c8/1200.m3u8 +草原上的大猫王国,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/e98eed67d3164ec0a2f5a9215693f7a8/1200.m3u8 +草原之王上战场,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/bfb6917b29ea413c89e8ed8fa6e2a6ab/1200.m3u8 +草原狮子的戏剧舞台(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/93fde1242f50415faa6da2dd5da9105b/1200.m3u8 +草原狮子的戏剧舞台(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/c5b600bcb2c44c44b56e9afdb5243a07/1200.m3u8 +荒野里的呼唤,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/de55f16b130042b19472ef89e184d719/1200.m3u8 +萌狗诞生记,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/0f68b16f162c493c8d82a57135f16da0/1200.m3u8 +虎妈妈爱(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/6855ee238c9c4e9893ff342b7dbe5a2b/1200.m3u8 +虎妈妈爱(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/9b07324b869c457e80531b72e979ee1a/1200.m3u8 +蛇类大观园,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/414f84230ced4696af656a112385b72c/1200.m3u8 +蜥蜴安身火山岛(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/0c3c388b10ad4cf78f312c6d6620f1e0/1200.m3u8 +蜥蜴安身火山岛(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/5043f9b708fe443fb9207e26da903218/1200.m3u8 +螃蟹岛海战(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d0137f4e9adc44a7856c7288fe8ca3d2/1200.m3u8 +螃蟹岛海战(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d784a777f3dd42b3b73be06858b71197/1200.m3u8 +被母狮拯救的小角马(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ba95e1a983584925887c11306f83ccf8/1200.m3u8 +被母狮拯救的小角马(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/8e655ba0c751468b9d18f3020133571f/1200.m3u8 +角马幸运儿(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/40c883e3f4c441d08422ce49aec61644/1200.m3u8 +角马幸运儿(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/67b7d65e3b3e4b509e314e65937ef369/1200.m3u8 +豹妈当家(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/984cda8d35d544658fbd96b417bdea1f/1200.m3u8 +豹妈当家(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/33343249dabd4dcfaeb64da7ab7fe061/1200.m3u8 +走出包围圈,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/38fc4f8e379445aeab6098b9ece0aa2a/1200.m3u8 +走进狗的世界,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/25c049869a174f5fa5806e57a2c376bd/1200.m3u8 +超凡猎手,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/77d5ca903f0948ad8c5ec57e49b3cc95/1200.m3u8 +超凡猎手,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/8bd3d27314fd431a84d8443c2fdc8b02/1200.m3u8 +超级狮子家族,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/f689bc846e93479898d8dcbdffad9744/1200.m3u8 +超级狮子群的故事(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/1c0a25fcb5564e02a435ec33fbdc4888/1200.m3u8 +超级狮子群的故事(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/8986640e9a3f43be9ffe66f0feb41f72/1200.m3u8 +超级猫行动,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/8d952bbdd6cc4e6abf9df153bc18e927/1200.m3u8 +足球超级猎食者(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/4d0dc6b22b8e48efa4a984ec990a4faf/1200.m3u8 +足球超级猎食者(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d7aec4db75da469d915a5dd7a0fb3d70/1200.m3u8 +辣妈带娃记,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/8fd303fc08454c3497673fa40ced6284/1200.m3u8 +进化中的北极熊,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/caf316bd282e4bfdbbd36bac2514c428/1200.m3u8 +追踪兽王,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/93dfcb01bd634370bc211fc7484854ec/1200.m3u8 +追逐的游戏,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/34459ad5d340461daab2f453d485833d/1200.m3u8 +速度与生存(五),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/9953caf767b04ae782540c8ac53eaaa4/1200.m3u8 +速度与生存1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/1cc83ec8b9b44794b63e1a249b9fb2fb/1200.m3u8 +速度与生存2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/31abc302978f45df9c4e8aaa3972d599/1200.m3u8 +速度与生存3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/570d9ce8d39d4ede9a26ae6de4d28f54/1200.m3u8 +速度与生存4,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/f37b1966271f4527a581ed9275c34f7c/1200.m3u8 +速度大比拼(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/2746acf40172425180162fc3a316416b/1200.m3u8 +速度大比拼(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d2e5439b8a9c4b53970e5c3b0eee9abd/1200.m3u8 +遨游海底两万里,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/31d0363fb3714ce4b916790aa7da22db/1200.m3u8 +都市里的丛林(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/2e2e0e875d624196af0488f6b07bb2e0/1200.m3u8 +都市里的丛林(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/9f79dac568844de8813e682b280efb4f/1200.m3u8 +都市里的野生家园(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/03770b0594d44f289ce91022fe37a7bf/1200.m3u8 +都市里的野生家园(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/06ca0e5a61624f11987ba99dc9a8ed64/1200.m3u8 +野性生存秘籍1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/7c8a682e6c5749b19d375b0c562f4c87/1200.m3u8 +野性生存秘籍2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/b95862f403d5404f87114f6a651119e6/1200.m3u8 +野性的召唤1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ce41c579b0c84ada982b79073028d116/1200.m3u8 +野性的召唤2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/24514b1197ea46b9a443121f5e19f535/1200.m3u8 +野性的召唤3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/9a6b5b4568574867933091059ff57680/1200.m3u8 +野性的魅力1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/2f83cd6f217c48e8abb8064f430bc93a/1200.m3u8 +野性的魅力2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/091f7f7dfce34c0d83bcd93c0b58dc07/1200.m3u8 +野性美洲(五),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/58a370a91cbf49858c18e6d72007d12e/1200.m3u8 +野性美洲1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/d1a92d87e2c74de7a799141e5e89eb3b/1200.m3u8 +野性美洲2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/2e902191f2524bc198a656db71791080/1200.m3u8 +野性美洲3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/1156d95bcf554d0e9df1688e8a6fd55d/1200.m3u8 +野性美洲3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/4cb2ce54e7e047a99c772d3874f4c916/1200.m3u8 +野性美洲4,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/5dcd2b749aae4e7e973271f124e83fb1/1200.m3u8 +野狗家族传世之爱,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/dc4007615a124e29827b16bec3885db5/1200.m3u8 +野生世界竞技场(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/11ac06bbb4f0426fbc4c7b3bfd864b3f/1200.m3u8 +野生世界竞技场(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/bf683b66c36343599bcad10516c58274/1200.m3u8 +野生白狮(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/a9a5e806d97d41f5827532f1cb3f9afa/1200.m3u8 +野生白狮(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/1e405a3890d3497d80df5351ad30f169/1200.m3u8 +野生白狮(中),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/aa5594a7d44b42768d0b4f2fa3e3651d/1200.m3u8 +金豺夫妇的故事,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/5b71afacb8eb442d9d4a5844d3ceca15/1200.m3u8 +镜头里的真相1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/df70034b3a4243bd888d18b8b877787d/1200.m3u8 +险境求生,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/3f41478fa1f24606bc1bad4725df7b59/1200.m3u8 +险境求生的小河马(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/4b24374adc24487db8c9d5ac5d037079/1200.m3u8 +险境求生的小河马(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/5c22e195021d49b8bc5868147fdc3139/1200.m3u8 +隐秘王国里的奇迹1,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/e2094de08292490db17c29ec299b4bc2/1200.m3u8 +隐秘王国里的奇迹2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/1cee8d6ac393418e887420a6e1d54b6e/1200.m3u8 +隐秘王国里的奇迹3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/2fe654a3cadf4838bb34ea18441378e8/1200.m3u8 +隐秘王国里的奇迹4,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/953467196a854ed786f7e3521579f1f6/1200.m3u8 +隐秘的海鬣蜥王国,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/b7af80d20f06401989879c44eaf865e8/1200.m3u8 +雄风再起,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/b9176a8a35c94c37ade29708eed40190/1200.m3u8 +雨季狮踪,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/c1af227765174580bb3ad5c641f4dfd1/1200.m3u8 +雨林守护的秘密(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/18aecd7b1b064f3692f80ce6906895d5/1200.m3u8 +雨林守护的秘密(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/084be96dbd124ac499afc25eb1e4d63d/1200.m3u8 +雪鸮的生存之舞,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/722362cb57a74028804e0413141a1866/1200.m3u8 +雪鸮的风中芭蕾,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/4ee145f174a8464fb624c4ae62992b1c/1200.m3u8 +非凡虎女王(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/2e657776c024445b83a0554d71773c0b/1200.m3u8 +非凡虎女王(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/2c7ecbc0033049efa1946472214eeae3/1200.m3u8 +非同一般的友谊,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/fc5b68979baa47e6ab90db7e78b43364/1200.m3u8 +非洲水牛战狮群(上),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/945ab75be37f46c984dade1efb742b00/1200.m3u8 +非洲水牛战狮群(下),https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/76d3b3c55eaf44b198ceb0f456f41416/1200.m3u8 +非洲野放计划2,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/21ff76c2151743f983d8f67d3cc7231d/1200.m3u8 +非洲野放计划3,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/234631821d1343b086ed272be364d861/1200.m3u8 +非洲野放计划4,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/28f6148101924fadb0f1cab6017801fe/1200.m3u8 +非洲野狗家族,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/2e64ec647a314b74b27ebc7f6bb985f2/1200.m3u8 +领养一只宠物狗,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ec7ccf71d6544387afbfc956f4c29ceb/1200.m3u8 +高个子幸运儿,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/0ea3dbe589a34258b6109229223de234/1200.m3u8 +鬣蜥生存攻略,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/ae22dffaf28f496584fc581ab72fab9c/1200.m3u8 +鳄鱼出海,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/7bdf23a599b44a7c8308684cbb789da0/1200.m3u8 +鳄鱼王漂流记,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/8da4a365db75455cb0c15bd7681b57fc/1200.m3u8 +黑猩猩的丛林法则,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/05ff5278105445e1a9d5651372faf47e/1200.m3u8 +龙宫里的奇异动物,https://hls.cntv.kcdnvip.com/asp/hls/1200/0303000a/3/default/3528163c6b7d4a48b09b24027351ccf7/1200.m3u8 + + +直播中国,#genre# +直播中国,https://gcalic.v.myalicdn.com/gc/wgw05_1/index.m3u8?contentid=2820180516001 +直播中国精编直播,https://gcalic.v.myalicdn.com/gc/wgw05_1/index.m3u8 +八里沟风景区桃花湾瀑布,https://gcalic.v.myalicdn.com/gc/blg05_1/index.m3u8 +八里沟风景区天界山玻璃栈道,https://gcalic.v.myalicdn.com/gc/blg03_1/index.m3u8 +普陀山,https://gcalic.v.myalicdn.com/gc/pts01_1/index.m3u8 +丽江古城大水车,https://gcalic.v.myalicdn.com/gc/ljgcdsc_1/index.m3u8 +丽江古城万古楼遥望玉龙雪山,https://gcalic.v.myalicdn.com/gc/ljgcwglytylxs_1/index.m3u8 +狮子山鸟瞰丽江古城,https://gcalic.v.myalicdn.com/gc/ljgcszsnkgc_1/index.m3u8 +乌镇西市河,https://gcalic.v.myalicdn.com/gc/zjwzbblh_1/index.m3u8 +黄花城水长城01,https://gcalic.v.myalicdn.com/gc/wgw01_1/index.m3u8 +黄花城水长城02,https://gcalic.v.myalicdn.com/gc/wgw02_1/index.m3u8 +黄花城水长城03,https://gcalic.v.myalicdn.com/gc/wgw03_1/index.m3u8 +月牙泉,https://gcalic.v.myalicdn.com/gc/dhyyqsm_1/index.m3u8 +黄龙,https://gcalic.v.myalicdn.com/gc/hlzycc_1/index.m3u8 +泰山主峰,https://gcalic.v.myalicdn.com/gc/taishan01_1/index.m3u8 +泰山十八盘,https://gcalic.v.myalicdn.com/gc/taishan05_1/index.m3u8 +泰山南天门,https://gcalic.v.myalicdn.com/gc/hkts07_1/index.m3u8 +泰山白云亭悬崖,https://gcalic.v.myalicdn.com/gc/hkts02_1/index.m3u8 +泰山太平岭,https://gcalic.v.myalicdn.com/gc/hkts09_1/index.m3u8 +泰山碧霞祠,https://gcalic.v.myalicdn.com/gc/hkts03_1/index.m3u8 +黄山始信新道,https://gcalic.v.myalicdn.com/gc/hsyg_1/index.m3u8 +黄山,https://gcalic.v.myalicdn.com/gc/ahhs01_1/index.m3u8 +中央电视塔东,https://gcalic.v.myalicdn.com/gc/ztd_1/index.m3u8 +中央电视塔南,https://gcalic.v.myalicdn.com/gc/ztn_1/index.m3u8 +天涯石,https://gcalic.v.myalicdn.com/gc/tyhjtys_1/index.m3u8 +六盘山红军长征景区,https://gcalic.v.myalicdn.com/gc/lpsgmjng01_1/index.m3u8 +青岛崂山双福,https://gcalic.v.myalicdn.com/gc/qdls03_1/index.m3u8 +青岛崂山八水河,https://gcalic.v.myalicdn.com/gc/qdls02_1/index.m3u8 +张掖七彩丹霞,https://gcalic.v.myalicdn.com/gc/zyqcdx01_1/index.m3u8 +都江堰鱼嘴,https://gcalic.v.myalicdn.com/gc/djyqyl1_1/index.m3u8 +乐山大佛全景,https://gcalic.v.myalicdn.com/gc/lsdfgfl_1/index.m3u8 +湖南张家界水绕四门,https://gcalic.v.myalicdn.com/gc/zjjsrsm_1/index.m3u8 +湖南张家界将军列队,https://gcalic.v.myalicdn.com/gc/zjjjjdl_1/index.m3u8 +湖南张家界迷魂台,https://gcalic.v.myalicdn.com/gc/zjjmht_1/index.m3u8 +湖南张家界宝峰湖,https://gcalic.v.myalicdn.com/gc/zjjbfh_1/index.m3u8 +湖南张家界御笔峰,https://gcalic.v.myalicdn.com/gc/zjjybf_1/index.m3u8 +湖南张家界天门山西线玻璃栈道,https://gcalic.v.myalicdn.com/gc/tms05_1/index.m3u8 +四川峨眉山云海日出,https://gcalic.v.myalicdn.com/gc/emsarm_1/index.m3u8 +四川峨眉山远眺贡嘎雪山,https://gcalic.v.myalicdn.com/gc/emsyh_1/index.m3u8 +四川峨眉山普贤菩萨铜像,https://gcalic.v.myalicdn.com/gc/emspxps_1/index.m3u8 +四川峨眉山远眺万佛顶,https://gcalic.v.myalicdn.com/gc/emswfs_1/index.m3u8 +四川四姑娘山隆珠措,https://gcalic.v.myalicdn.com/gc/sgns02_1/index.m3u8 +浙江舟山东极岛,https://gcalic.v.myalicdn.com/gc/djd01_1/index.m3u8 +安徽池州九华山风景区九华山,https://gcalic.v.myalicdn.com/gc/jhs05_1/index.m3u8 +安徽池州九华山风景区花台,https://gcalic.v.myalicdn.com/gc/jhs01_1/index.m3u8 +安徽黟县西递牌坊,https://gcalic.v.myalicdn.com/gc/yxxdpf_1/index.m3u8 +安徽黟县芦村远眺,https://gcalic.v.myalicdn.com/gc/yxlcyt_1/index.m3u8 +新疆天山(定海神针),https://gcalic.v.myalicdn.com/gc/xjtcdhsz_1/index.m3u8 +新疆天山(马牙山),https://gcalic.v.myalicdn.com/gc/xjtcmys_1/index.m3u8 +新疆天山(灯杆山),https://gcalic.v.myalicdn.com/gc/xjtcdgs_1/index.m3u8 +厦门鼓浪屿,https://gcalic.v.myalicdn.com/gc/gly01_1/index.m3u8 +广西玉林大容山莲花山顶,https://gcalic.v.myalicdn.com/gc/drs01_1/index.m3u8 +广西桂林漓江景区,https://gcalic.v.myalicdn.com/gc/gllj01_1/index.m3u8 +南京玄武湖公园,https://gcalic.v.myalicdn.com/gc/xwh01_1/index.m3u8 +福建漳州醉美沙滩翡翠湾,https://gcalic.v.myalicdn.com/gc/fcw03_1/index.m3u8 +丽江古城大研花巷观景,https://gcalic.v.myalicdn.com/gc/ljgcdyhxgjt_1/index.m3u8 +雪乡梦幻家园,https://gcalic.v.myalicdn.com/gc/mdjxxmhjyxj_1/index.m3u8 +雪乡大石碑,https://gcalic.v.myalicdn.com/gc/mdjxxdsb_1/index.m3u8 +乌镇蓝印花布,https://gcalic.v.myalicdn.com/gc/zjwzlyhb_1/index.m3u8 +乌镇龙形田,https://gcalic.v.myalicdn.com/gc/zjwzlxt_1/index.m3u8 +乌镇全景,https://gcalic.v.myalicdn.com/gc/zjwzblt_1/index.m3u8 +凤凰古城南华山,https://gcalic.v.myalicdn.com/gc/fhgcdnhs_1/index.m3u8 +凤凰古城东关门,https://gcalic.v.myalicdn.com/gc/fhgcdgm_1/index.m3u8 +鸣沙山,https://gcalic.v.myalicdn.com/gc/dhyyqst_1/index.m3u8 +五彩池,https://gcalic.v.myalicdn.com/gc/hlwcc_1/index.m3u8 +泰山大观峰,https://gcalic.v.myalicdn.com/gc/taishan03_1/index.m3u8 +泰山玉皇顶,https://gcalic.v.myalicdn.com/gc/taishan06_1/index.m3u8 +黄山排云亭,https://gcalic.v.myalicdn.com/gc/hspyt_1/index.m3u8 +黄山飞来石,https://gcalic.v.myalicdn.com/gc/hsptgy_1/index.m3u8 +恒山悬空寺全景,https://gcalic.v.myalicdn.com/gc/hsxksqj_1/index.m3u8 +黄果树六角亭瀑布,https://gcalic.v.myalicdn.com/gc/hgsspzxdpb_1/index.m3u8 +江苏徐州云龙湖风景区云龙山观景台西,https://gcalic.v.myalicdn.com/gc/ylh04_1/index.m3u8 +江苏南京牛首山,https://gcalic.v.myalicdn.com/gc/nss01_1/index.m3u8 +云南丽江蓝月谷,https://gcalic.v.myalicdn.com/gc/ylxs12_1/index.m3u8 +云南丽江玉龙雪山草甸,https://gcalic.v.myalicdn.com/gc/hkylxs06_1/index.m3u8 +云南丽江冰川,https://gcalic.v.myalicdn.com/gc/hkylxs05_1/index.m3u8 +云南丽江印象实景,https://gcalic.v.myalicdn.com/gc/hkylxs01_1/index.m3u8 +云南大理崇圣寺三塔中景,https://gcalic.v.myalicdn.com/gc/dlst03_1/index.m3u8 +云南大理崇圣寺三塔远景,https://gcalic.v.myalicdn.com/gc/dlst01_1/index.m3u8 +陕西洋县国宝朱鹮03,https://gcalic.v.myalicdn.com/gc/zh03_1/index.m3u8 +贵州省兴义市万峰林,https://gcalic.v.myalicdn.com/gc/xywfl_1/index.m3u8 + + +歌星金曲,#genre# +歌MV,http://vd4.bdstatic.com/mda-ickhjq8gkcxz55i1/sc/mda-ickhjq8gkcxz55i1.mp4 +歌MV2,http://vd4.bdstatic.com/mda-ihkwerpgqm1v3ehy/sc/mda-ihkwerpgqm1v3ehy.mp4 +歌MV3,http://vd4.bdstatic.com/mda-jhid37v9u4vny09j/sc/mda-jhid37v9u4vny09j.mp4 +歌MV4,http://vd4.bdstatic.com/mda-icpieeuwfuwruijw/sc/mda-icpieeuwfuwruijw.mp4 +歌MV5,http://vd4.bdstatic.com/mda-jhtriuc2z5fddtre/sc/mda-jhtriuc2z5fddtre.mp4 +歌MV6,http://vd4.bdstatic.com/mda-jepbbqntd414qsem/sc/mda-jepbbqntd414qsem.mp4 +歌MV7,http://vd4.bdstatic.com/mda-ji3nh9t9qpewj26m/sc/mda-ji3nh9t9qpewj26m.mp4 +冷漠-古咖啡,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_3142984&response=res&format=mp4&type=convert_url +冷漠-时光海灣,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_9867444&response=res&format=mp4&type=convert_url +冷漠-真不是闹着玩,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_22836669&response=res&format=mp4&type=convert_url +冷漠-谁都不要说分手,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_12975393&response=res&format=mp4&type=convert_url +冷漠-再爱也没有用,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_5834217&response=res&format=mp4&type=convert_url +冷漠-不要再说你还爱我,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_911272&response=res&format=mp4&type=convert_url +冷漠-别把寂寞当缘分,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_6210858&response=res&format=mp4&type=convert_url +冷漠-你把爱情给了谁,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_1210771&response=res&format=mp4&type=convert_url +冷漠-我是否也在你心中,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_4378249&response=res&format=mp4&type=convert_url +冷漠-多情的人不该相遇,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_1041689&response=res&format=mp4&type=convert_url +凤凰传奇-華夏传说,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_40828850&response=res&format=mp4&type=convert_url +凤凰传奇-奢香夫人,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_51674527&response=res&format=mp4&type=convert_url +凤凰传奇-今生的缘,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_646024&response=res&format=mp4&type=convert_url +凤凰传奇-荷塘月色,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_1565837&response=res&format=mp4&type=convert_url +凤凰传奇-自由飞翔,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_18747906&response=res&format=mp4&type=convert_url +凤凰传奇-策马奔腾,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_24042013&response=res&format=mp4&type=convert_url +凤凰传奇-温柔姑娘,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_6401404&response=res&format=mp4&type=convert_url +凤凰传奇-自由自在,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_24042025&response=res&format=mp4&type=convert_url +凤凰传奇-奇迹世界,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_954805&response=res&format=mp4&type=convert_url +凤凰传奇-歌唱二小放牛郎,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_8120530&response=res&format=mp4&type=convert_url +凤凰传奇-中国味道,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_24042021&response=res&format=mp4&type=convert_url +凤凰传奇-光芒,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_24042019&response=res&format=mp4&type=convert_url +凤凰传奇-御龙归字谣,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_1164118&response=res&format=mp4&type=convert_url +邓丽君 歌曲精选九首 經典歌曲,https://vdse.bdstatic.com//432792ba00998e73655101c9e706e1e2.mp4 +金典老歌,https://vdse.bdstatic.com//36ea0ffcf8156a44b9d524d999eb088a.mp4 +刀郎經典歌曲7首:《西海情歌》《敖包相会》《情人》冲动的惩罚,https://vdse.bdstatic.com//628ca08719cef5987ea2ae3c6f0d2386.mp4 +刀郎經典歌曲精选,https://vdse.bdstatic.com//4fcca19a19aa4974230c5ee70ab5fa55.mp4 +刀郎經典老歌合集《披着羊皮的狼》《西海情歌》《冲动的惩罚》,https://vdse.bdstatic.com//bfbb0871ed01eb3328497faae6a8531b.mp4 +云朵、刀郎、孙露、张雨生等經典怀旧歌曲6首,https://vdse.bdstatic.com//fa0ed7ad8657cc4d13972c3d9aa5ddbf.mp4 +怀旧金曲:刀郎《黄玫瑰》,https://vdse.bdstatic.com//893331fdfab5d04e5c93e2adbbf1e949.mp4 +飞鸟和蝉-任然,https://vd4.bdstatic.com/mda-kmagpap54qyv855r/v1-cae/1080p/mda-kmagpap54qyv855r.mp4 +海鸥飞-龙梅子,https://vd2.bdstatic.com/mda-kgrx6ftzptj5x4i9/v1-cae/1080p/mda-kgrx6ftzptj5x4i9.mp4 +不再痴情-黄静美,https://vd2.bdstatic.com/mda-mguiyws4cia6d0rf/1080p/cae_h264/1627568961141809995/mda-mguiyws4cia6d0rf.mp4 +天公不作美-黄静美,https://vd2.bdstatic.com/mda-mcibj6pxkwe3x1ji/1080p/cae_h264/1616117049/mda-mcibj6pxkwe3x1ji.mp4 +浪子闲话-笑纳-赤伶,https://vd3.bdstatic.com/mda-mi0jir5caqx8xtmh/1080p/cae_h264/1630505223203305128/mda-mi0jir5caqx8xtmh.mp4 +用力活着-张茜,https://vd4.bdstatic.com/mda-mfmcz8hk0qjieck2/1080p/cae_h264/1624355388377695977/mda-mfmcz8hk0qjieck2.mp4 +点歌的人-海来阿木,https://vd3.bdstatic.com/mda-maqxxg1hrznsdf1a/v1-cae/1080p/mda-maqxxg1hrznsdf1a.mp4 +你的万水千山-海来阿木,https://vd4.bdstatic.com/mda-ki4i7gfqw6cw6hq0/v1-cae/1080p/mda-ki4i7gfqw6cw6hq0.mp4 +当我孤独的时候还可以抱着你郑源,https://vd4.bdstatic.com/mda-kgaerksrx80jgdu0/v1-cae/1080p/mda-kgaerksrx80jgdu0.mp4 +寂寞的人伤心的歌-龙梅子、杨海彪,https://vd4.bdstatic.com/mda-kb5gc9c1vmtz93g8/v1-cae/sc/mda-kb5gc9c1vmtz93g8.mp4 +两个人-蔡妍-BerryGood,https://vd2.bdstatic.com/mda-iffus60ju99vp5kr/sc/mda-iffus60ju99vp5kr.mp4 +两个人-蔡妍-BerryGood,https://vd4.bdstatic.com/mda-ki9ze4v8sw9sj7cb/sc/mda-ki9ze4v8sw9sj7cb.mp4 +情歌皇后林翠萍《相见不如不见》F,https://vdse.bdstatic.com//1f65ad884619a069c68572f1ac9e2b0e.mp4 +林翠萍《负心的你》F,https://vdse.bdstatic.com//16425f9f93e382e23bcde71f8ed85a4c.mp4 +林翠萍經典老歌《相会在梦里》F,https://vdse.bdstatic.com//00fb72cd0b27bec6d9c0cd915874b50e.mp4 +林翠萍經典情歌《相思豆》F,https://vdse.bdstatic.com//986498bb0ccd2114ba1274df22fae332.mp4 +精选韓宝仪經典歌曲10首F,https://vdse.bdstatic.com//42d5ac65a9070eeab2513bf6bc65ea4d.mp4 +龙飘飘《我没醉》F,https://vdse.bdstatic.com//3d48e45e47836cd75c202ec957260837.mp4 +龙飘飘《往事》F,https://vdse.bdstatic.com//a28e362e15fa8c361219944bfb59b596.mp4 +龙飘飘《歌声恋情》F,https://vdse.bdstatic.com//552f15ac34dc97bdb3cc7725cd0a0aa4.mp4 +美酒加咖啡 龙飘飘F,https://vdse.bdstatic.com//816c73543ede254586a625cacc67ea0f.mp4 +关正杰的十首粤语老歌F,https://vdse.bdstatic.com//d95bf4719f9e5b7bf1f2ef3679f1fdb2.mp4 +林翠萍《麦搁來这套》,https://vdse.bdstatic.com//5b388a47b1233105831e09b8cadc1edd.mp4 +龙飘飘經典老歌《后悔爱上你》,https://vdse.bdstatic.com//bde5b937e292c240a4322d9719deb98b.mp4 +sheep张艺兴,https://vdse.bdstatic.com/971347deaddd6fdb5ada6e87e4722ece.mp4?authorization=bce-auth-v1%2Ffb297a5cc0fb434c971b8fa103e8dd7b%2F2017-05-11T09%3A02%3A31Z%2F-1%2F +屋顶着火宋茜,https://vd3.bdstatic.com/mda-ife08h4xpq85sg65/logo//mda-ife08h4xpq85sg65.mp4?pd=19&vt=1 +陈柯宇生僻字,http://vd2.bdstatic.com/mda-jb28qp6tauzkzpy9//mda-jb28qp6tauzkzpy9.mp4 +摩登兄弟探清水河,http://vd2.bdstatic.com/mda-jg6dffnbt92877h0/sc/mda-jg6dffnbt92877h0.mp4 +筷子兄弟小苹果,http://vd1.bdstatic.com/mda-hc2rwgemn6yrnvw2/mda-hc2rwgemn6yrnvw2.mp4 +李玲玉女儿情,http://vd4.bdstatic.com/mda-jiqh0kcd7kgpwnmb/sc/mda-jiqh0kcd7kgpwnmb.mp4 +你的酒馆对我打了烊陈雪凝,https://vd3.bdstatic.com/mda-ka59e4w0qxxsxnt0//mda-ka59e4w0qxxsxnt0.mp4?pd=19&vt=1 +醉千年李袁杰,http://vd3.bdstatic.com/mda-ihai9qt3yny3sx53//mda-ihai9qt3yny3sx53.mp4?pd=19&vt=1 +就算没有如果张杰,https://vdse.bdstatic.com//b362a1c2ecbc60b18d3dc06cdc97f142.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2020-01-31T15%3A58%3A51Z%2F- +浮诛张杰,https://vdse.bdstatic.com/1c2dc5580507bc1b0ef507c63b3fc461.mp4?authorization=bce-auth-v1%2Ffb297a5cc0fb434c971b8fa103e8dd7b%2F2017-05-11T09%3A02%3A31Z%2F-1%2F +望赵丽颖张碧晨,https://vdse.bdstatic.com/25f5ae931f851bf09c48abaebe5d6f8d.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2017-05-11T09%3A02%3A31Z%2F-1%2F +杜德伟-情人,http://vdown.kuwo.cn:80/resource/t4/59/86/iXqIb2KOC3M.mp4 +男儿当自强 林子祥,http://vdown.kuwo.cn:80/resource/t4/35/8/byLO9W5m5Y8.mp4 +陈雷-随缘,http://vdown.kuwo.cn:80/resource//t1/34/c9596b26ffc64cb5ab2c3f82068d167a.mp4 +歡喜就好,http://vdown.kuwo.cn:80/resource//t4/33/65/I4Vpjif2dxY.mp4 +故乡,http://vdown.kuwo.cn:80/resource/t4/23/63/hQYKyFEiljU.mp4 +爱情鸟,http://vdown.kuwo.cn:80/resource//t4/69/75/bD9N0L_qjcM.mp4 +爱拼才会赢,http://vdown.kuwo.cn:80/resource//t4/20/1/y12_ecvVJgA.mp4 +浪子的心情,http://vdown.kuwo.cn:80/resource/t4/53/44/3Rve23J-sy8.mp4 +草蜢-失恋阵綫联盟,http://vodcdn.video.taobao.com/oss/ali-video/bbae2fc164d9517913ed5a9117f8455b/video.m3u8 +草蜢-忘情森巴舞,http://vodcdn.video.taobao.com/oss/ali-video/a30020a6cd9ce2a8b387e029f9c5365c/video.m3u8 +草蜢-半点心,http://vodcdn.video.taobao.com/oss/ali-video/68fc953ff930412784dada5eb79d0821/1461058499/video.m3u8.m3u8 +草蜢-宝贝对不起,http://bizcommon.alicdn.com/l2nDqpMmn6DGHnWzZQA/RQdMfitGKCINh4BPzc9%40%40sd.m3u8 +陈倩倩-婴儿,http://vodcdn.video.taobao.com/oss/ali-video/4fc8d043456c092c392483bd293d0ee3/video.m3u8 +王菲-容易受伤的女人(国语),http://vodcdn.video.taobao.com/oss/ali-video/84722d96b62883dafdcc154afbf0bb03/video.m3u8 +王菲-执迷不悔,http://vodcdn.video.taobao.com/oss/ali-video/15bf7da88b44048edaabe73d6b17c00b/video.m3u8 +陈慧娴-千千阙歌,http://vodcdn.video.taobao.com/oss/ali-video/8f45a35108ebe1b1951d2936007e3cd0/video.m3u8 +陈慧娴-归来吧,http://vodcdn.video.taobao.com/oss/ali-video/c89589fd5809cf6e2f1a4d7a52023733/video.m3u8 +黄凯芹-相爱很难,http://vodcdn.video.taobao.com/oss/ali-video/11b6273898b6a1b1da34e646264cd036/video.m3u8 +巫启贤-只因你伤心,http://vodcdn.video.taobao.com/oss/ali-video/c28acbe36530da595b04161855bba004/video.m3u8 +彭佳慧-回味,http://vodcdn.video.taobao.com/oss/ali-video/6801f707771eacdb5264f8bb20e4d599/video.m3u8 +叶倩文-潇洒走一回,http://vodcdn.video.taobao.com/oss/ali-video/371d75312720e701b5f3988d46cdf4ef/video.m3u8 +叶倩文-曾經心痛,http://vodcdn.video.taobao.com/oss/ali-video/0ea34400f2502a94ee14aea506e0042b/video.m3u8 +吕方-朋友别哭,http://bizcommon.alicdn.com/l2nDqpMmn6DGHnWzZQA/qgljCDKewD8vEgOMrrt%40%40sd.m3u8 +许茹芸-如果云知道,http://vodcdn.video.taobao.com/oss/ali-video/fd87aea7bc293a5930b8a64c752df476/video.m3u8 +王麟-伤不起,http://vodcdn.video.taobao.com/oss/ali-video/1e3633ff1c3a525e148968b45c18f780/video.m3u8 +李圣杰-痴心绝对,http://vodcdn.video.taobao.com/oss/ali-video/f2b27944f9960f3dbb2c6dd6c4679747/video.m3u8 +陈瑞-有谁知道我在等你,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_1583218&response=res&format=mp4&type=convert_url +陈瑞-鱼和水的故事,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_353501&response=res&format=mp4&type=convert_url +陈瑞-三生三世,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_6449820&response=res&format=mp4&type=convert_url +陈瑞-一生的等待,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_1583215&response=res&format=mp4&type=convert_url +陈瑞-一辈子的真爱,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_28470656&response=res&format=mp4&type=convert_url +陈瑞-红尘永相伴,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_506435&response=res&format=mp4&type=convert_url +陈瑞-男人酒女人泪,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_40090112&response=res&format=mp4&type=convert_url +陈瑞-爱的痕迹,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_1218815&response=res&format=mp4&type=convert_url +陈瑞-分手了别来打扰我,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_5835684&response=res&format=mp4&type=convert_url +陈瑞-曾經是我的最爱的女人,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_486357&response=res&format=mp4&type=convert_url +陈瑞-烛光里的妈妈,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_1024266&response=res&format=mp4&type=convert_url +陈瑞-爱得真伤的深,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_1218839&response=res&format=mp4&type=convert_url +陈瑞-父亲,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_4247454&response=res&format=mp4&type=convert_url +陈瑞-别思,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_3429064&response=res&format=mp4&type=convert_url +陈瑞-天长地久,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_1583220&response=res&format=mp4&type=convert_url +陈瑞-心中的牵挂,http://antiserver.kuwo.cn/anti.s?rid=MUSIC_1583211&response=res&format=mp4&type=convert_url +龙梅子-都说,https://vd3.bdstatic.com:443/mda-ma7cm59x1m4015ip/v2-hknm/1080p/mda-ma7cm59x1m4015ip.mp4 +谭维维《蓝莲花》,https://rescdn.yishihui.com/longvideo/transcode/video/vpc/20201112/5623330ySHJCzL4DxMMpOtgHo.mp4 +雨花石-云朵,http://newcntv.qcloudcdn.com/asp/hls/2000/0303000a/3/default/20a65dbb23e4448cbcb52a756ebdc74d/2000.m3u8 +一砖一瓦-杨哲,http://txmov2.a.yximgs.com/upic/2020/11/07/23/BMjAyMDExMDcyMzQxMzZfMTU0MDc1NjUwOF8zODg5OTUwODg5MF8yXzM=_b_B41249b6fddaf4b4ef4bb5aee7c4f431c.mp4 +雨中相思-龙千玉,http://txmov2.a.yximgs.com/upic/2020/11/25/16/BMjAyMDExMjUxNjAwNDRfMTU0MDc1NjUwOF8zOTc3MTI2OTA2MF8yXzM=_b_B0652e68c50f21d5cb6bdda5dbc7a3c13.mp4 +月光瞑-蔡秋凤,http://txmov2.a.yximgs.com/upic/2020/11/25/15/BMjAyMDExMjUxNTQxMjRfMTU0MDc1NjUwOF8zOTc3MDYxOTQzOF8yXzM=_b_B5ef50d6b7967ca637b709b0bbd215806.mp4 +梦中情人-林乔安,http://txmov2.a.yximgs.com/upic/2020/11/08/21/BMjAyMDExMDgyMTAwMTNfMTU0MDc1NjUwOF8zODk0OTg4ODcxN18yXzM=_b_B5faf49255e0be7fc042ea521c28a458e.mp4 +一句再会-陈思安,http://txmov2.a.yximgs.com/upic/2020/11/07/23/BMjAyMDExMDcyMzM3MTdfMTU0MDc1NjUwOF8zODg5OTQ0NTkxMl8yXzM=_b_B75778f52a4759d91ee9275fffb96812f.mp4 +王彩華爱情的骗子我问你,http://vd4.bdstatic.com/mda-jm4h7v1isxwc660u/sc/mda-jm4h7v1isxwc660u.mp4 +蔡丽津月圆情,http://vd3.bdstatic.com/mda-jm53zq7k0b0kbxch/sc/mda-jm53zq7k0b0kbxch.mp4 +陈小云爱人跟人走,http://vd4.bdstatic.com/mda-jgvqig36bu4rc0ej/sc/mda-jgvqig36bu4rc0ej.mp4 +江蕙梦中的情话,http://vd2.bdstatic.com/mda-ji4rwrwg7fijyqkh/mda-ji4rwrwg7fijyqkh.mp4 +小凤凤爱情一阵风,http://vd2.bdstatic.com/mda-jjm7vgq1iahz0zpg/mda-jjm7vgq1iahz0zpg.mp4 +张秀卿车站,http://vd2.bdstatic.com/mda-jjmnjgiabtvmy13u/sc/mda-jjmnjgiabtvmy13u.mp4 +龙飘飘 歌声恋情,https://vd3.bdstatic.com/mda-nbr8qai32badkdf1/sc/cae_h264_delogo/1645933170027877953/mda-nbr8qai32badkdf1.mp4 +陈百潭初恋[848*480],http://vd4.bdstatic.com/mda-jk22i7yt5vyjbgwt//mda-jk22i7yt5vyjbgwt.mp4 +陈淑苹黄昏之恋[848*480],http://vd4.bdstatic.com/mda-jk0m1rgje4eh01cw//mda-jk0m1rgje4eh01cw.mp4 +陈淑苹离家,http://vd2.bdstatic.com/mda-iftyuk6tjcxrm53p/sc/mda-iftyuk6tjcxrm53p.mp4 +陈淑苹我的伤心谁人知,http://vd3.bdstatic.com/mda-ijjfe3s5z1iyvzgq/sc/mda-ijjfe3s5z1iyvzgq.mp4 +姜玉阳-刻骨的温柔[688*464],http://cloud.video.taobao.com/play/u/1748679248/p/2/e/3/t/1/15883785.m3u8 +罗时丰爱那么痛,http://vd2.bdstatic.com/mda-jcrjbhmgprhs00c4/sc/mda-jcrjbhmgprhs00c4.mp4 +罗时丰爱情的路,http://vd4.bdstatic.com/mda-jcrjcp1wy5q2i00n/sc/mda-jcrjcp1wy5q2i00n.mp4 +罗时丰擦掉彼句我爱你[768*432],http://vd1.bdstatic.com/mda-hj3j9zhu12h99a79/vs-f5f50550f0b93f5020da43ab88266eda-watermark//mda-hj3j9zhu12h99a79.mp4 +罗时丰男人的汗[848*480],http://vd4.bdstatic.com/mda-jm491avwdp96qg02//mda-jm491avwdp96qg02.mp4 +罗时丰无情之梦,http://vd2.bdstatic.com/mda-je1jq1hvgmab08gd/sc/mda-je1jq1hvgmab08gd.mp4 +罗时丰心事,http://vd2.bdstatic.com/mda-jaadiz1rwrtrj7kw/sc/mda-jaadiz1rwrtrj7kw.mp4 +罗时丰一定要成功,http://vd1.bdstatic.com/mda-hgmk00ncqxvvix0v/mda-hgmk00ncqxvvix0v.mp4 +毛不易 Ⅰ 借,https://vd3.bdstatic.com/mda-ii2njckdbkmmcp81//mda-ii2njckdbkmmcp81.mp4?pd=20 +毛不易 Ⅰ 牧马城市,https://vdse.bdstatic.com//1d83dfc2411243e5b9f44462e1e55ab3.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2019-12-14T02%3A12%3A40Z%2F-1%2Fhost%2F4739737cd8b21cbdb307a5d008abe88a61afce23616c55f2a8fae768fc2b6764 +毛不易 Ⅰ 给你给我,https://vdse.bdstatic.com//4d056936c317b35f886ced83147ad7e8.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2020-01-31T14%3A42%3A28Z%2F-1%2Fhost%2F13c0f2dda852b6fdbcd7422de8ac3a48437304b4c38728deeedb6558c47a9eb9 +王七七 Ⅰ 我愿意平凡的陪在你身旁,https://vdse.bdstatic.com/570e05ef514db00b14c9c10d1aef7f1f.mp4?authorization=bce-auth-v1%2Ffb297a5cc0fb434c971b8fa103e8dd7b%2F2017-05-11T09%3A02%3A31Z%2F-1%2F%2Fd5332371b8e0882511e0b75041fcd24f0899fa4237f56edacb89b6734f95ca97 +于文文 Ⅰ 體面,https://vdse.bdstatic.com//f18bdf41f28b68a1b0177fa5e5cdf8fe.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2020-01-31T14%3A25%3A29Z%2F-1%2Fhost%2F1a9107b1210343ed30aa27779a042aab3d016777226b471ee5f38c8fc1e23cf1 +张艺兴 Ⅰ sheep,https://vdse.bdstatic.com/971347deaddd6fdb5ada6e87e4722ece.mp4?authorization=bce-auth-v1%2Ffb297a5cc0fb434c971b8fa103e8dd7b%2F2017-05-11T09%3A02%3A31Z%2F-1%2F%2F1d12ad4ec35446ed93981927577c34a900dd755d2da3a1a0fd41c06ab23f4863 +魏新雨 Ⅰ 恋人心,https://vdse.bdstatic.com//e179fea2ba171a7268188a055702229d.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2020-01-31T15%3A18%3A42Z%2F-1%2Fhost%2F84badc350a20f1dfe035e91408acfe7e4b1e69fe262f4faaa5ca3af837e1592b +许艺娜 Ⅰ 如梦令,https://vdse.bdstatic.com/20e606730cb53b91bd4a4d2b0323e563.mp4?authorization=bce-auth-v1%2Ffb297a5cc0fb434c971b8fa103e8dd7b%2F2017-05-11T09%3A02%3A31Z%2F-1%2F%2F105e954b546582862111230676e2cdc84b0144bf00447793daa377381b7ddb0f +半阳 Ⅰ 一曲相思,https://vdse.bdstatic.com//e547b08ce3afad200eec374f3c4ee450.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2020-01-31T13%3A00%3A56Z%2F-1%2Fhost%2Fc4e678fdb911f8524405fcf1563002f4f9c892a22e3f2033b917a39f2d01ea20 +李建 Ⅰ 一念一年,https://vdse.bdstatic.com/ea4ad861c3816ba29b415da2494706a1.mp4?authorization=bce-auth-v1%2Ffb297a5cc0fb434c971b8fa103e8dd7b%2F2017-05-11T09%3A02%3A31Z%2F-1%2F%2Fe5580be73eed99ae2d6da05453b3d79cdba5a663c049f6367ae6ae4bc4fbb1e6 +张杰 Ⅰ 浮诛,https://vdse.bdstatic.com/1c2dc5580507bc1b0ef507c63b3fc461.mp4?authorization=bce-auth-v1%2Ffb297a5cc0fb434c971b8fa103e8dd7b%2F2017-05-11T09%3A02%3A31Z%2F-1%2F%2F592cfc9d5b5bc41242144504ccf1f9f9df9d15b863f6f33c610e552faf629cd9 +张杰 Ⅰ 就算没有如果,https://vdse.bdstatic.com//b362a1c2ecbc60b18d3dc06cdc97f142.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2020-01-31T15%3A58%3A51Z%2F-1%2Fhost%2Ff5f960beaff319951e978ff3850b31434a5d64f13c03c9724e988c251426270d +胡夏 Ⅰ 只问你肯不肯,https://vdse.bdstatic.com/d4463cd83c0c47fba7ce65c71ad94bbb.mp4?authorization=bce-auth-v1%2Ffb297a5cc0fb434c971b8fa103e8dd7b%2F2017-05-11T09%3A02%3A31Z%2F-1%2F%2F09b9a33c3ded7584f68a3b875a10ba6a021d74f32e4144c2c0327f05c57abfdc +王琪 Ⅰ 站着等你三千年,https://vdse.bdstatic.com//967f216dea39a6f3ccb44884a219f8ff.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2019-12-14T02%3A12%3A33Z%2F-1%2Fhost%2F35aa2c099605e74a562ca0358f457186636ef317d486aa3ed6f60fc45c2c6c9a +要不要买菜 Ⅰ 下山,https://vdse.bdstatic.com/e2d35750d461a6d524080c7a3c4cb7a4.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2017-05-11T09%3A02%3A31Z%2F-1%2F%2F4fbaf22be415d855635ea3633a0f2fa9460bfb7cb3a13f2295a12b85245e0598 +花粥/马雨阳 Ⅰ 盗将行,https://vdse.bdstatic.com//8355cbc6c2fe19c5ad280869218430f5.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2020-01-31T13%3A03%3A13Z%2F-1%2Fhost%2F79c755e10a28040d25c417fac00f7f489b53a6d21959e047363889876ded1bce +张碧晨/赵丽颖 Ⅰ 望,https://vdse.bdstatic.com/25f5ae931f851bf09c48abaebe5d6f8d.mp4?authorization=bce-auth-v1%2F40f207e648424f47b2e3dfbb1014b1a5%2F2017-05-11T09%3A02%3A31Z%2F-1%2F%2Fbeb15438a125af0e53bc38c98b3f304da2e2c0f1f61103ce81a9df486dc138a3 + + +DJ音乐,#genre# +热火斯卡拉,https://vd4.bdstatic.com/mda-nk3qfbxhf5dqpywt/sc/cae_h264/1667582665910576925/mda-nk3qfbxhf5dqpywt.mp4 +怒击摇,https://vd2.bdstatic.com/mda-mkibx9zvknj8d2fu/sc/cae_h264_nowatermark/1637355659217322910/mda-mkibx9zvknj8d2fu.mp4 +新送情郎,https://vd4.bdstatic.com/mda-meq936zru7niwvd2/sc/cae_h264/1621924823247730000/mda-meq936zru7niwvd2.mp4 +震撼纯电音Drown,https://vd2.bdstatic.com/mda-mjshcpd847mhnjgj/sc/cae_h264/1635337200637124885/mda-mjshcpd847mhnjgj.mp4 +抖音神曲20首,https://vd3.bdstatic.com/mda-kegey3zg2hx7f0t6/sc/mda-kegey3zg2hx7f0t6.mp4 +送给未来的你,https://vd2.bdstatic.com/mda-ma0st3ncw6i2yerr/v1-cae/sc/mda-ma0st3ncw6i2yerr.mp4 +模特DJ,http://gcw.bdcdn.shoujiduoduo.com/201805/0247-477.mp4 +21年DJ爆红网络洗脑神曲,https://vdse.bdstatic.com//bf4bb1d82b2eb17681c49e745dc2da21.mp4 +劲爆DJ串烧,https://vdse.bdstatic.com//01b1f78bb5b009d36ce3f5051e7383c1.mp4 +今日热歌DJ《如果爱还在》《A8回心转意》《爱到最后就是痛》,https://vd2.bdstatic.com/mda-mhhf5mr00yyhpfjs/1080p/cae_h264/1629284581057661229/mda-mhhf5mr00yyhpfjs.mp4 +推荐9首DJ舞曲_首首甜美醉人,https://vd2.bdstatic.com/mda-mhig1c3sw223mx8p/1080p/cae_h264/1629380139191731149/mda-mhig1c3sw223mx8p.mp4 +动感DJ《苦了累了听听歌》,https://vd4.bdstatic.com/mda-mhqekuf2r91v08dt/1080p/cae_h264/1629888246186602728/mda-mhqekuf2r91v08dt.mp4 +车载必备DJ《殇雪》《潮湿的心》《酒醉的蝴蝶》《多年以后》,https://vd3.bdstatic.com/mda-mhve4gb9hi8cstzk/1080p/cae_h264/1630319514896018158/mda-mhve4gb9hi8cstzk.mp4 +DJ《心在跳情在烧》,https://vd4.bdstatic.com/mda-mhwf07t27w3gi1y7/1080p/cae_h264/1630406994590156367/mda-mhwf07t27w3gi1y7.mp4 +孙艺琪《寂寞的人别听伤感情歌》,https://vd2.bdstatic.com/mda-mdscsws7443npwa8/1080p/cae_h264/1619516504/mda-mdscsws7443npwa8.mp4 +郭镐鸣《野摩托》,https://vd3.bdstatic.com/mda-mekfm7wu6f4rtt99/1080p/cae_h264/1621595318412084671/mda-mekfm7wu6f4rtt99.mp4 +赵蕾蕾《寂寞的城伤心的人》,https://vd2.bdstatic.com/mda-mesdm11tdp69a9ye/1080p/cae_h264/1622115758783335310/mda-mesdm11tdp69a9ye.mp4 +叶筱萱《爱到最后是孤独》,https://vd4.bdstatic.com/mda-mh9fjm2j86uyymfa/1080p/cae_h264/1628593607912074882/mda-mh9fjm2j86uyymfa.mp4 +海来阿木《浪子心》DJ沈念版,https://vd3.bdstatic.com/mda-mgr9s5pv0jeqbcm8/1080p/cae_h264/1627298307874491239/mda-mgr9s5pv0jeqbcm8.mp4 +《人间惊鸿客》,https://vd3.bdstatic.com/mda-mh2bbyjcqjxjhzkd/1080p/cae_h264/1627978577559447916/mda-mh2bbyjcqjxjhzkd.mp4 +DJ版《三月里的小雨》,https://vd2.bdstatic.com/mda-mgwegh0bzv4cy6cb/1080p/cae_h264/1627727251470197083/mda-mgwegh0bzv4cy6cb.mp4 +DJ版《望爱却步》,https://vd4.bdstatic.com/mda-mh3ei4sg2jypty79/1080p/cae_h264/1628072927342489970/mda-mh3ei4sg2jypty79.mp4 +《唱着情歌流着泪》,https://vd3.bdstatic.com/mda-mhwaejanf0ie6b8j/1080p/cae_h264/1630409563129833732/mda-mhwaejanf0ie6b8j.mp4 +DJ版《一个人挺好》,https://vd3.bdstatic.com/mda-mh6gqq4b59z26cjx/1080p/cae_h264/1628504623473300938/mda-mh6gqq4b59z26cjx.mp4 +《爱你到最后一刻》,https://vd3.bdstatic.com/mda-mhr9c7q9xzgy1812/1080p/cae_h264/1630062648077583523/mda-mhr9c7q9xzgy1812.mp4 +伤感DJ《等》,https://vd2.bdstatic.com/mda-mhq92a7nafrh8dma/1080p/cae_h264/1629977686796490849/mda-mhq92a7nafrh8dma.mp4 +DJ《我们不再是从前》,https://vd2.bdstatic.com/mda-mhne550wq5m66zvj/1080p/cae_h264/1629803514331462220/mda-mhne550wq5m66zvj.mp4 +DJ舞曲《让我做你的眼睛》,https://vd2.bdstatic.com/mda-mhaargrart2qrkdz/1080p/cae_h264/1629630942996744682/mda-mhaargrart2qrkdz.mp4 +DJ版《时间会知道你好不好》,https://vd3.bdstatic.com/mda-mhairve7gvye1192/1080p/cae_h264/1629457148988604256/mda-mhairve7gvye1192.mp4 +DJ版《爱不得忘不舍》,https://vd3.bdstatic.com/mda-mh8j8egnj8idbvd8/1080p/cae_h264/1629367979662473678/mda-mh8j8egnj8idbvd8.mp4 +DJ版《蜜雪冰城》,https://vd3.bdstatic.com/mda-mhbae2pwwxhyxjcz/1080p/cae_h264/1628767594518574030/mda-mhbae2pwwxhyxjcz.mp4 +《无味》DJ版,https://vd3.bdstatic.com/mda-mgqiagirsmmpuarm/1080p/cae_h264/1627218846577884242/mda-mgqiagirsmmpuarm.mp4 +DJ版《原谅你的谎》,https://vd4.bdstatic.com/mda-mhacxx5vhr2we882/1080p/cae_h264/1628673933350116053/mda-mhacxx5vhr2we882.mp4 +DJ《等爱》,https://vd2.bdstatic.com/mda-mfhh1e0hwq212rrt/sc/h264/1623988905898256147/mda-mfhh1e0hwq212rrt.mp4 +DJ《醉过多少回》,https://vd4.bdstatic.com/mda-megp46e98a4f2b9g/sc/h264/1621239560364992817/mda-megp46e98a4f2b9g.mp4 +DJ情歌《爱情迷了路》,https://vd4.bdstatic.com/mda-mdbrb7fns70avrmt/1080p/cae_h264/1618222287/mda-mdbrb7fns70avrmt.mp4 +DJ最美不过你的微笑,https://vd4.bdstatic.com/mda-mhs2qjdmkjz2rb7g/sc/cae_h264/1630029534870787600/mda-mhs2qjdmkjz2rb7g.mp4 +DJ流浪兄弟,https://vd2.bdstatic.com/mda-mhrdtax1km0idkc5/1080p/cae_h264/1629972852606533219/mda-mhrdtax1km0idkc5.mp4 +车载DJ《多年以后》,https://vd3.bdstatic.com/mda-mhqekuegbh6112js/1080p/cae_h264/1629891559415737083/mda-mhqekuegbh6112js.mp4 +红尘只是个过客,https://vd2.bdstatic.com/mda-mhq68s6g444n437t/hd/cae_h264/1629865742325435508/mda-mhq68s6g444n437t.mp4 +经典老歌DJ舞曲七首,https://vd2.bdstatic.com/mda-mhwbtsnrmm6v6x5r/sc/cae_h264/1630403250895754314/mda-mhwbtsnrmm6v6x5r.mp4 +精选五首DJ男声串烧,https://vd2.bdstatic.com/mda-maqfk730tsig88wr/v2-hknm/1080p/mda-maqfk730tsig88wr.mp4 +韩可可《错位时空》DJ版,https://vd3.bdstatic.com/mda-mgciytzb45z6z8yj/1080p/cae_h264/1626183756603775947/mda-mgciytzb45z6z8yj.mp4 +忘记你需要多久(DJ小鱼儿版),https://vd2.bdstatic.com/mda-mc1sm1r5s9azchjv/v1-cae/1080p/mda-mc1sm1r5s9azchjv.mp4 +车载DJ《今夜为你醉...》,https://vdse.bdstatic.com//b68123a666cce39e7413da912e3675a3.mp4 +DJ情歌6首,https://vdse.bdstatic.com//c9e449d2db0a3fa5f6a8afafbc43fbdc.mp4 +抖音热歌《大风吹+夜夜夜漫长》,https://vdse.bdstatic.com//13da18e12728e9d7849f6589a3070b4c.mp4 +2021年最好听的DJ串烧,https://vdse.bdstatic.com//cd396057d1fbcb12f0600d38a16effbc.mp4 +2021年最火伤感音乐,https://vdse.bdstatic.com//6d39df48360bdb12f73800397c4a6c02.mp4 +2021年网络火爆伤感情歌6首,https://vdse.bdstatic.com//80e0473f97055cec1c9c76c1c7e5498a.mp4 +2021热门伤感DJ,https://vdse.bdstatic.com//06b4e9b185b843e694e4d20e9b0a0aac.mp4 +几首比较火的DJ情歌,https://vdse.bdstatic.com//4d7e8fe409b2ba9e08b179de8e146fa3.mp4 +《爱难求情难断…》,https://vdse.bdstatic.com//0c8ed110c5522e9bd31752ecb999b1ab.mp4 +花都开了你来不来DJ,https://vd3.bdstatic.com/mda-mdee523swbezmsin/480p/h264/1618480997/mda-mdee523swbezmsin.mp4 +5首劲爆dj,https://vd2.bdstatic.com/mda-mm69dxgtcqg28j9j/sc/cae_h264/1638860024910192032/mda-mm69dxgtcqg28j9j.mp4 +动感超人dj,https://vd3.bdstatic.com/mda-mm49pxqfvevcqbx4/sc/cae_h264/1638687905397245214/mda-mm49pxqfvevcqbx4.mp4 +野花香dj,https://vd3.bdstatic.com/mda-mm68k5z0h1qjm8n0/sc/cae_h264/1638980550463660240/mda-mm68k5z0h1qjm8n0.mp4 +精选dj,https://vd3.bdstatic.com/mda-mm68drt808w1nins/720p/h264/1638861890075163680/mda-mm68drt808w1nins.mp4 +伤感情歌DJ,https://vd3.bdstatic.com/mda-mkv7idcnxrgc3cnd/sc/cae_h264/1638257251905732477/mda-mkv7idcnxrgc3cnd.mp4 +DJ情歌,https://vd2.bdstatic.com/mda-mm67ychk60q5n0d1/sc/cae_h264/1638893384360470440/mda-mm67ychk60q5n0d1.mp4 +新情歌DJ,https://vd3.bdstatic.com/mda-mkm49f32vcaf16y0/sc/cae_h264/1637551531193286304/mda-mkm49f32vcaf16y0.mp4 +爱情情歌dj网,https://vd2.bdstatic.com/mda-mkq4iax6ed1yimay/sc/cae_h264/1637837116068761026/mda-mkq4iax6ed1yimay.mp4 +绝美情歌dj,https://vd2.bdstatic.com/mda-mkp952u577gbq8uc/sc/cae_h264/1637737197319948432/mda-mkp952u577gbq8uc.mp4 +酒吧舞女,https://vd2.bdstatic.com/mda-mkpe42g9za18xetn/sc/cae_h264/1637798968815645031/mda-mkpe42g9za18xetn.mp4 +劲爆舞曲DJ,https://vd2.bdstatic.com/mda-mkjdym3r2h7y5a58/sc/cae_h264/1637440648941328664/mda-mkjdym3r2h7y5a58.mp4 +慢摇dj舞曲,https://vd2.bdstatic.com/mda-mkpi5r0xe92ja446/sc/cae_h264/1637775035132431598/mda-mkpi5r0xe92ja446.mp4 +男神dj舞曲,https://vd4.bdstatic.com/mda-mkpbcp1thzqg8vju/sc/cae_h264/1637772142027994508/mda-mkpbcp1thzqg8vju.mp4 +韩国女团dj,https://vd3.bdstatic.com/mda-mknba5i60je0d2dn/sc/cae_h264/1637654844357830568/mda-mknba5i60je0d2dn.mp4 +七星酒吧舞曲,https://vd2.bdstatic.com/mda-mkq4p7459ade8936/sc/cae_h264/1637813773613914093/mda-mkq4p7459ade8936.mp4 +dj舞曲女人版,https://vd3.bdstatic.com/mda-mkp88kxv6r8y73k9/sc/cae_h264/1637733263867775329/mda-mkp88kxv6r8y73k9.mp4 +眉飞色舞dj舞曲,https://vd2.bdstatic.com/mda-mkqi8zsh8r874xii/sc/cae_h264/1637854401020299343/mda-mkqi8zsh8r874xii.mp4 +情歌DJ合集,https://vd4.bdstatic.com/mda-mkp3tpu9ghk2ufev/sc/cae_h264/1637733480141753790/mda-mkp3tpu9ghk2ufev.mp4 +四海舞曲dj,https://vd2.bdstatic.com/mda-mkp6w1tjw8mz9kpx/sc/cae_h264/1637731815454834601/mda-mkp6w1tjw8mz9kpx.mp4 +新世纪舞曲,https://vd4.bdstatic.com/mda-mkq704rtr59i9jtj/sc/cae_h264/1637823373696903055/mda-mkq704rtr59i9jtj.mp4 +dj舞曲交流,https://vd2.bdstatic.com/mda-majhhns1q3ggkdi6/v1-cae/sc/mda-majhhns1q3ggkdi6.mp4 +干就完了,https://vd3.bdstatic.com/mda-mkpd6xzxe91etw8c/sc/cae_h264/1637766099902911413/mda-mkpd6xzxe91etw8c.mp4 +金典老歌合集dj,https://vd3.bdstatic.com/mda-mkq6zqsvfa164i4i/sc/cae_h264/1637829051855604521/mda-mkq6zqsvfa164i4i.mp4 +学生dj舞曲,https://vd2.bdstatic.com/mda-mkncvdu8w51mdbqw/sc/cae_h264/1637659554429325643/mda-mkncvdu8w51mdbqw.mp4 +日韩舞曲DJ,https://vd4.bdstatic.com/mda-mknatf58h2evy18i/sc/cae_h264/1637653930525484478/mda-mknatf58h2evy18i.mp4 +国际舞曲,https://vd4.bdstatic.com/mda-mkpde77et4yvqx7e/sc/cae_h264/1637766610977026004/mda-mkpde77et4yvqx7e.mp4 +dj舞曲合集,https://vd2.bdstatic.com/mda-mkmeak5hsf7hmguz/sc/cae_h264/1637579072201459045/mda-mkmeak5hsf7hmguz.mp4 +dj舞曲金典,https://vd2.bdstatic.com/mda-mkk0g8x89nnx62tm/sc/cae_h264/1637456174213928981/mda-mkk0g8x89nnx62tm.mp4 +车载DJ舞曲《大风吹》《浪子闲话》《玛尼情歌》《沙漠骆驼》,https://vdse.bdstatic.com//7002925e04c4c451cfa8aafc9b4190c7.mp4 +七首DJ情歌《拈花一笑》《对面的小姐姐》《想你了小哥哥》等,https://vdse.bdstatic.com//ed10354ac1acc37c9922074fd88d3697.mp4 +《拈花一笑》《对面的小姐姐》《想你了小哥哥》《一朵情花开》,https://vdse.bdstatic.com//7cfaf27a4db89583e069a40fbc2ed84b.mp4 +网络金曲《拈花一笑》《陪你千山万水》《对面小姐姐》,https://vdse.bdstatic.com//c2deba4d320384736569e542ac531aff.mp4 +情歌DJ《拈花一笑》《对面的小姐姐》《酒醉的蝴蝶》,https://vdse.bdstatic.com//4eece717c6cc2fb9086a59a13ce30623.mp4 +情歌皇后林翠萍《相见不如不见》,https://vdse.bdstatic.com//1f65ad884619a069c68572f1ac9e2b0e.mp4 +林翠萍《负心的你》,https://vdse.bdstatic.com//16425f9f93e382e23bcde71f8ed85a4c.mp4 +林翠萍经典老歌《相会在梦里》,https://vdse.bdstatic.com//00fb72cd0b27bec6d9c0cd915874b50e.mp4 +林翠萍经典情歌《相思豆》,https://vdse.bdstatic.com//986498bb0ccd2114ba1274df22fae332.mp4 +精选韩宝仪经典歌曲10首,https://vdse.bdstatic.com//42d5ac65a9070eeab2513bf6bc65ea4d.mp4 +龙飘飘《我没醉》,https://vdse.bdstatic.com//3d48e45e47836cd75c202ec957260837.mp4 +龙飘飘《往事》,https://vdse.bdstatic.com//a28e362e15fa8c361219944bfb59b596.mp4 +龙飘飘《歌声恋情》,https://vdse.bdstatic.com//552f15ac34dc97bdb3cc7725cd0a0aa4.mp4 +美酒加咖啡龙飘飘,https://vdse.bdstatic.com//816c73543ede254586a625cacc67ea0f.mp4 +刀郎经典歌曲精选,https://vdse.bdstatic.com//4fcca19a19aa4974230c5ee70ab5fa55.mp4 +5首伤感情歌DJ,https://vdse.bdstatic.com//a34f76474b9bdfca8c487761861fb603.mp4 +几首绝美情歌DJ精选,https://vdse.bdstatic.com//c5c64b60c9fdfbdfa3e959bb1d56c4b0.mp4 +《天路》《驼铃》《鸿雁》《九儿》《绒花》《小芳》,https://vdse.bdstatic.com//e4b7325ebf3010673a51a24f948a8a97.mp4 +《驼铃》《卓玛》《天边》《鸿雁》《天路》草原歌曲,https://vdse.bdstatic.com//f8f4740a4ca7ff31c3a2d8386fc14598.mp4 +毛宁《涛声依旧》《晚秋》《心雨》《春风吻上我的脸》《大中国》,https://vdse.bdstatic.com//21736d388636d7648510b2a36fc7cbfd.mp4 +山歌《阿里山的姑娘》《康定情歌》《山路十八弯》《敖包相会》,https://vdse.bdstatic.com//ae82f5b93166f47d85ff12124a021323.mp4 +《涛声依旧》《雾里看花》《窗外》《心雨》《听心》《晚秋》《母亲》,https://vdse.bdstatic.com//db8ba0fda2aad9cb15aa32887a160f06.mp4 +《窗外》《同桌的你》《心太软》《心雨》《小芳》,https://vdse.bdstatic.com//97183ae857df5213fcfaf0fabc18efc3.mp4 +张也《望星空/为了谁/人间第一情/红梅赞/高天上流云》,https://vdse.bdstatic.com//038c6250208e42b9427a885e0370e1a2.mp4 +降央卓玛:这几首歌曲太动听,https://vdse.bdstatic.com//0ce1279c88ff9ab48f48d4e86860cd46.mp4 +【经典老歌】DJ《精选8首》,https://vdse.bdstatic.com//200ab148a9e867ad29f5fda4ac175305.mp4 +经典老歌DJ版精选六首,https://vdse.bdstatic.com//f203048340fe15016fbec9a72905680d.mp4 +【老歌DJ版】《精选8首》,https://vdse.bdstatic.com//525174705415c8773bd465ce4b88b18d.mp4 +2021一夜火爆几首DJ舞曲,https://vdse.bdstatic.com//1fc9fd16e02ca272bb81666b85bf4135.mp4 +2021《精选5首酒吧DJ舞曲》,https://vdse.bdstatic.com//0e59c29ddbc68ed60dce8a6f4631c1f1.mp4 +2021火爆女生版伤感DJ情歌,https://vdse.bdstatic.com//8fe197e92568201d4899dfd3d94585a7.mp4 +让人陶醉的几首DJ舞曲,https://vdse.bdstatic.com//0f464b2beaf5887f90ac36b68fcd342f.mp4 +粤语和华语经典歌曲【完整版】,https://vdse.bdstatic.com//2922763f303705ef65c46689578439ea.mp4 +最新dj,https://vd2.bdstatic.com/mda-mm4dszarfc74t9mx/sc/cae_h264/1638819159347843097/mda-mm4dszarfc74t9mx.mp4 +一点泪水dj,https://vd2.bdstatic.com/mda-mm52zzkus5fqm4xh/sc/cae_h264/1638783595083455661/mda-mm52zzkus5fqm4xh.mp4 +dj舞曲英雄泪,https://vd3.bdstatic.com/mda-mkt45tnypacz3smk/sc/cae_h264/1638069225501294830/mda-mkt45tnypacz3smk.mp4 +爱江山更爱美人金典,https://vd4.bdstatic.com/mda-mm2a18n5jdh6d8bs/sc/cae_h264/1638516147610932793/mda-mm2a18n5jdh6d8bs.mp4 +舞曲视频,https://vd2.bdstatic.com/mda-mm25g3080p08di8w/sc/cae_h264/1638529553032232968/mda-mm25g3080p08di8w.mp4 +今夜回望dj,https://vd2.bdstatic.com/mda-mkv7cbzq5xdtf9ms/sc/cae_h264/1638478442002383579/mda-mkv7cbzq5xdtf9ms.mp4 +小鱼授权,https://vd4.bdstatic.com/mda-mkn4iq79ihtufbc1/sc/cae_h264/1637639849265611965/mda-mkn4iq79ihtufbc1.mp4 +舞曲视频1,https://vd4.bdstatic.com/mda-mkf4g5p5hpevqbx6/sc/cae_h264/1637033781127837401/mda-mkf4g5p5hpevqbx6.mp4 +舞曲视频3,https://vd3.bdstatic.com/mda-mkmee6e6z4rq6zy7/sc/cae_h264/1637580756649466839/mda-mkmee6e6z4rq6zy7.mp4 +舞曲视频4,https://vd2.bdstatic.com/mda-mkn56h2g8ux3dtxq/sc/cae_h264/1637642599802363137/mda-mkn56h2g8ux3dtxq.mp4 +车震一小时,http://gcw.bdcdn.shoujiduoduo.com/201805/0748-641.mp4 +车载DJ视频6,https://vdse.bdstatic.com//7e9d2da860d4ac39c0ea86502360d6fe.mp4 +好歌分享《精选6首伤感DJ舞曲》HD,https://vdse.bdstatic.com//0c87c8977d0a33498fe7362d3c60c22c.mp4 +2021爆红《6首女生版伤感DJ》HD,https://vdse.bdstatic.com//2e77709380ad7e6163e80c4d5c179689.mp4 +美人热舞洗脑DJ舞曲HD,https://vdse.bdstatic.com//3700f6b78ceaf0f4a5313f4d68c95b72.mp4 +2021五首女声伤感DJ情歌精品HD,https://vdse.bdstatic.com//c92e81328ef6d13ba7d44e6eb80f9f1e.mp4 +情歌DJ《怎么可以如此冷血》《为爱受尽相思罪》HD,https://vdse.bdstatic.com//61e318ea76e984f2bedb66f1ed1583be.mp4 +DJ劲爆舞曲《在我心里有个你》《东南西北风》《一万个对不起》等HD,https://vdse.bdstatic.com//8343b02f5e7465d4c5b07e54403438b8.mp4 +DJ情歌串烧《痴情恋歌》《红颜知己》《事与愿违》《缘分相遇》HD,https://vdse.bdstatic.com//904548e7bec804905906557ed2752017.mp4 +动听DJ情歌《红颜知己》《今夜为你醉》《别忘了我在等你》等HD,https://vdse.bdstatic.com//92d49c2aebc0bbbe08149b8e08e4a443.mp4 +DJ伤感好听《红颜知己》《事与愿违》《缘分相遇》《知情念歌》HD,https://vdse.bdstatic.com//1a7b05ab4eab2d68a679e442f4d80fab.mp4 +DJ情歌《昨夜的我又梦到了你》《心上的人儿你在哪》等HD,https://vdse.bdstatic.com//09b76fc9762763350288fb96047ec820.mp4 +《给我一把爱情火》《无情风雨无情的你》《昨夜的我又梦到了你》HD,https://vdse.bdstatic.com//63a770491e7bae0ebe661452c27eaf33.mp4 +林翠萍《麦搁來这套》HD,https://vdse.bdstatic.com//5b388a47b1233105831e09b8cadc1edd.mp4 +刀郎经典歌曲《敖包相会》《西海情歌》等专辑金典老歌HD,https://vdse.bdstatic.com//36ea0ffcf8156a44b9d524d999eb088a.mp4 +刀郎经典歌曲7首:《西海情歌》《敖包相会》《情人》冲动的惩罚HD,https://vdse.bdstatic.com//628ca08719cef5987ea2ae3c6f0d2386.mp4 +刀郎经典老歌合集《披着羊皮的狼》《西海情歌》《冲动的惩罚》HD,https://vdse.bdstatic.com//bfbb0871ed01eb3328497faae6a8531b.mp4 +云朵、刀郎、孙露、张雨生等经典怀旧歌曲6首HD,https://vdse.bdstatic.com//fa0ed7ad8657cc4d13972c3d9aa5ddbf.mp4 +《来生再去拥抱你》《梨花飞情人泪》《落雨的秋》《梦醉荷塘》HD,https://vdse.bdstatic.com//d5e3237c7ef186217ea1c9b24d58e2ae.mp4 +宇宁《千里江山(大型纪录片《紫禁城》主题歌HD,https://vdse.bdstatic.com//688046e42c39cf6585106f945e2798e7.mov +2021最佳伤感情歌HD,https://vdse.bdstatic.com//59c5abc138bf1da5585bb765c530137e.mp4 +2021伤感洗脑神曲HD,https://vdse.bdstatic.com//8ad29ca92a901b9992431cf0c5266101.mp4 +经典粤语歌曲《上海滩》《铁血丹心》《神情神话》《沧海一声笑》HD,https://vdse.bdstatic.com//f9cda7e70273c267b61a3d0c969d2033.mp4 +苍天不负有情人,https://vd3.bdstatic.com/mda-jm5iqyuj8bapffdb/hd/mda-jm5iqyuj8bapffdb.mp4 +4k超清车载劲爆,https://vd2.bdstatic.com/mda-ncg1mhvhiy7fkgzs/sc/cae_h264_delogo/1647481028509277070/mda-ncg1mhvhiy7fkgzs.mp4 +经典dj《站台》,https://vd2.bdstatic.com/mda-mju7bud6vwuub0nq/hd/cae_h264_nowatermark/1635484907845663119/mda-mju7bud6vwuub0nq.mp4 +东南西北风DJ,https://vd2.bdstatic.com/mda-ncnfhdbt5mucyi3w/cae_h264_delogo/1648033513910900148/mda-ncnfhdbt5mucyi3w.mp4 +2022伤感DJ串烧dj,https://vd2.bdstatic.com/mda-ncm68fx91zybkka3/cae_h264_delogo/1647925011440022023/mda-ncm68fx91zybkka3.mp4 +还没有爱够DJ,https://vd3.bdstatic.com/mda-ncjgwmv1u85an74x/cae_h264_delogo/1647781725809492842/mda-ncjgwmv1u85an74x.mp4 +梦的翅膀受了伤DJ,https://vd3.bdstatic.com/mda-nc9a5ezg6q94csiv/360p/h264_delogo/1646896337041155631/mda-nc9a5ezg6q94csiv.mp4 +花儿笑了DJ,https://vd4.bdstatic.com/mda-ncj7vawq5rnk5v59/hd/cae_h264_delogo/1647759626623363912/mda-ncj7vawq5rnk5v59.mp4 +打工辛酸泪DJ2首,https://vd4.bdstatic.com/mda-na5fafrtbvvf5wib/hd/cae_h264_delogo/1641996387070390433/mda-na5fafrtbvvf5wib.mp4 +都是兄弟DJ,https://vd2.bdstatic.com/mda-nad5ctdnq3w1zssn/hd/cae_h264_delogo/1642142912024126404/mda-nad5ctdnq3w1zssn.mp4 +只能拼自己DJ人不可貌相,https://vd4.bdstatic.com/mda-mmw9fee0n7gtsu2k/480p/h264/1640932948187120706/mda-mmw9fee0n7gtsu2k.mp4 +dj新歌句句在理,https://vd4.bdstatic.com/mda-ncmb65kfdfysdq4g/sc/cae_h264_delogo/1647946141035592767/mda-ncmb65kfdfysdq4g.mp4 +新歌上线7首,https://vd2.bdstatic.com/mda-nc4fkdejg6k892tp/720p/h264_delogo/1646478313883739193/mda-nc4fkdejg6k892tp.mp4 +北方姑娘,https://vd3.bdstatic.com/mda-ncc6hbwdde59r16h/sc/cae_h264_delogo/1647146424330053026/mda-ncc6hbwdde59r16h.mp4 +一生输给了爱情,https://vd2.bdstatic.com/mda-mkn4yr0d9ypy9wns/sc/cae_h264_delogo/1643224005214992888/mda-mkn4yr0d9ypy9wns.mp4 +酒吧慢摇DJ舞曲,https://vd4.bdstatic.com/mda-ncm0qvdrfhujssxg/sc/cae_h264_delogo/1647910096911072273/mda-ncm0qvdrfhujssxg.mp4 +这首新歌_一听就上瘾,https://vd4.bdstatic.com/mda-nckaxf6j35t5e3j4/sc/cae_h264_delogo/1647849433211786752/mda-nckaxf6j35t5e3j4.mp4 +新歌上线_啥歌这么好听,https://vd4.bdstatic.com/mda-nce4pddwfdazhgrt/sc/cae_h264_delogo/1647315872347291980/mda-nce4pddwfdazhgrt.mp4 +《女人的心声》,https://vd3.bdstatic.com/mda-ncmgnz6479fenq1w/hd/cae_h264_delogo/1647950253700208169/mda-ncmgnz6479fenq1w.mp4 +负心的你,https://vd4.bdstatic.com:443/mda-mcbs0hpjpkpwethe/1080p/h264_cae/1620492489548087433/mda-mcbs0hpjpkpwethe.mp4 +初恋的人,https://vd2.bdstatic.com:443/mda-mhwdgysnspnb1nnr/1080p/cae_h264/1630404398162757730/mda-mhwdgysnspnb1nnr.mp4 +初恋情人,https://vd3.bdstatic.com:443/mda-me57bm308iu6stcz/1080p/cae_h264/1620279663855106642/mda-me57bm308iu6stcz.mp4 +爱情一阵风,https://vd4.bdstatic.com:443/mda-mdkd7yybv4y505qa/1080p/h264_cae/1620480120114753589/mda-mdkd7yybv4y505qa.mp4 +林翠萍-情网,https://vd4.bdstatic.com:443/mda-mipn4ccctdasgr2r/fhd/cae_h264_nowatermark/1632498915227563300/mda-mipn4ccctdasgr2r.mp4 +爱情的骗子我问你,https://vd4.bdstatic.com:443/mda-me7emge7ku6b7g9h/1080p/cae_h264/1620470361962860122/mda-me7emge7ku6b7g9h.mp4 +我用自己的方式爱你,http://vdown.kuwo.cn:80/resource/t1/46/26af4a23c9e04725bd1dc491b662f386.mp4 +无奈的思绪,https://vd4.bdstatic.com:443/mda-kkbxxmr5nn2swgu6/sc/cae_h264_nowatermark/1605192499/mda-kkbxxmr5nn2swgu6.mp4 +点燃一根烟,https://vd2.bdstatic.com:443/mda-mdapwdafpsiy63zu/1080p/h264_cae/1620614712517070219/mda-mdapwdafpsiy63zu.mp4 +今生最美的遇见,https://vd4.bdstatic.com/mda-ncjf6j5xqwx35wxc/sc/cae_h264_delogo/1647774687601159968/mda-ncjf6j5xqwx35wxc.mp4 +多彩的哈达,https://vd2.bdstatic.com/mda-nccdp2tcnwx6cpmn/sc/cae_h264_delogo/1647164915434344506/mda-nccdp2tcnwx6cpmn.mp4 +陕北民间,https://vd4.bdstatic.com/mda-ncfk4vpkpbuhnu0s/720p_frame30/h264_cae_delogo/1647440102957240321/mda-ncfk4vpkpbuhnu0s.mp4 +情歌DJ舞曲,https://vd2.bdstatic.com/mda-nag6y4ryfy5a0hjb/720p/h264_delogo/1642396108696963578/mda-nag6y4ryfy5a0hjb.mp4 +9首醉人的情歌,https://vd2.bdstatic.com/mda-nca3btr4bdxce5wj/sc/cae_h264_delogo/1647136483442128566/mda-nca3btr4bdxce5wj.mp4 +韩宝仪《情人桥》,https://vd4.bdstatic.com/mda-jehka6exkt6va8id/sc/mda-jehka6exkt6va8id.mp4 +韩宝仪无聊的游戏,https://vd2.bdstatic.com/mda-nb8j3b6sz77bdvk8/sc/cae_h264_delogo/1644413904258506067/mda-nb8j3b6sz77bdvk8.mp4 +高清舞曲,https://txmov2.a.kwimgs.com/upic/2022/03/25/20/BMjAyMjAzMjUyMDUyNTZfMjM0NDc1MTE5N183MDQ0NzkzMTQxOV8wXzM=_b_B383b34c7a7c97f97b5350f622d8da0a6.mp4?tag=1-1648554367-std-1-puqq96jiry-1167f7fd60758f88&clientCacheKey=3x3qtumzyu5rh6w_b.mp4&tt=b&di=79c43beb&bp=12681 +痴心是我犯的错,https://vd2.bdstatic.com/mda-ncpa1ziw0urtvsuy/720p/h264_delogo/1648105627756677310/mda-ncpa1ziw0urtvsuy.mp4 +新歌,https://vd4.bdstatic.com/mda-ncg9dxe96d9039u2/sc/cae_h264_delogo/1647648778266965968/mda-ncg9dxe96d9039u2.mp4 +《好听情歌8首》,https://vd4.bdstatic.com/mda-nca4dy51snpz9cnz/sc/cae_h264_delogo/1647144982589585207/mda-nca4dy51snpz9cnz.mp4 +DJ新歌上线,https://vd3.bdstatic.com/mda-nckdkm6sj1p9q7c9/sc/cae_h264_delogo/1647859589943780399/mda-nckdkm6sj1p9q7c9.mp4 +DJ酱爆鱿鱼舞曲版》,https://vd4.bdstatic.com/mda-ncidj3kqg98a7ent/360p/h264_delogo/1647683015061569002/mda-ncidj3kqg98a7ent.mp4 +DJ给我一把爱情火,https://vd2.bdstatic.com/mda-ncg42rnzxats8h83/cae_h264_delogo/1647486932330653636/mda-ncg42rnzxats8h83.mp4 +DJ女人花,https://vd4.bdstatic.com/mda-ncdfurx49ht1fh9w/720p/h264_delogo/1647256721820297861/mda-ncdfurx49ht1fh9w.mp4 +新歌上线,https://vd4.bdstatic.com/mda-nc005jwr87jrdssh/sc/cae_h264_delogo/1646179767551234681/mda-nc005jwr87jrdssh.mp4 +dj,https://txmov2.a.kwimgs.com/upic/2022/03/21/19/BMjAyMjAzMjExOTA2MjRfMjYyNzI4Mjc4MV83MDE2MTEwMjY1Ml8yXzM=_b_B977559109a6b2bec30b01e11d458d398.mp4 +刀郎的西海情歌,https://vd2.bdstatic.com/mda-nctex3rji1v42a0w/sc/cae_h264_delogo/1648464135631429287/mda-nctex3rji1v42a0w.mp4 +伤感DJ串烧为爱流泪,https://vd3.bdstatic.com/mda-nci8jqpzeyqkhdxe/720p/h264_delogo/1647670097763149460/mda-nci8jqpzeyqkhdxe.mp4 +林翠萍的《我太傻》,https://vd2.bdstatic.com/mda-mb5qq1ic4yvekk6r/v2-hknm/sc/mda-mb5qq1ic4yvekk6r.mp4 +伤心的眼泪,https://vd3.bdstatic.com/mda-ncn2c816zrf6u0im/sc/cae_h264_delogo/1648002300550722369/mda-ncn2c816zrf6u0im.mp4 +《英雄泪》,https://vd3.bdstatic.com/mda-ncnp6tm56ngrxbis/360p/h264_delogo/1648055585617071282/mda-ncnp6tm56ngrxbis.mp4 +2022几首DJ串烧,https://vd3.bdstatic.com/mda-nck3tqzgjvj076vc/sc/cae_h264_delogo/1647833645083560959/mda-nck3tqzgjvj076vc.mp4 + diff --git a/drpy_t3/lives/华数2.m3u b/drpy_t3/lives/华数2.m3u new file mode 100644 index 0000000..5d3aeb1 --- /dev/null +++ b/drpy_t3/lives/华数2.m3u @@ -0,0 +1,156 @@ +#EXTM3U +#EXT-X-APP APTV +#EXT-X-APTV-TYPE blank + +#EXTINF:-1 group-title="未分类",CCTV1综合 +http://125.210.150.58:9090/live/hzgq-cctv1gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV2财经 +http://125.210.150.58:9090/live/hzgq-cctv2gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV3综艺 +http://125.210.150.58:9090/live/hzgq-cctv3gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV4中文国际 +http://125.210.150.58:9090/live/hzgq-cctv4gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV5体育 +http://125.210.150.58:9090/live/hzgq-cctv5gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV5+体育赛事 +http://125.210.150.58:9090/live/hzgq-cctvzhgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV6电影 +http://125.210.150.58:9090/live/hzgq-cctv6gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV7国防军事 +http://125.210.150.58:9090/live/hzgq-cctv7gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV8电视剧 +http://125.210.150.58:9090/live/hzgq-cctv8gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV9纪录 +http://125.210.150.58:9090/live/hzgq-cctvjlgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV10科教 +http://125.210.150.58:9090/live/hzgq-cctv10gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV11戏曲 +http://125.210.150.58:9090/live/hszx-cctv11-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV12社会与法 +http://125.210.150.58:9090/live/hzgq-cctv12gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV13新闻 +http://125.210.150.58:9090/live/hzgq-cctvnewsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV14少儿 +http://125.210.150.58:9090/live/hzgq-cctvsegq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV15音乐 +http://125.210.150.58:9090/live/hzgq-cctvmusicgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV16奥林匹克 +http://125.210.150.58:9090/live/hzgq-cctv16gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV17农业农村 +http://125.210.150.58:9090/live/hzgq-cctv17gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CGTN +http://125.210.150.58:9090/live/hszx-cctvgj-h264.m3u8 +#EXTINF:-1 group-title="未分类",重温经典 +http://125.210.150.58:9090/live/hzgq-cwjdgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CETV4中教4台 +http://125.210.150.58:9090/live/hszx-CETV-4-h264.m3u8 +#EXTINF:-1 group-title="未分类",北京卫视 +http://125.210.150.58:9090/live/hzgq-bjgqws-h264.m3u8 +#EXTINF:-1 group-title="未分类",东方卫视 +http://125.210.150.58:9090/live/hzgq-dftvgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",天津卫视 +http://125.210.150.58:9090/live/hzgq-tjwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",重庆卫视 +http://125.210.150.58:9090/live/hzgq-cqwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",黑龙江卫视 +http://125.210.150.58:9090/live/hzgq-hljwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",吉林卫视 +http://125.210.150.58:9090/live/hzgq-jlwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",辽宁卫视 +http://125.210.150.58:9090/live/hzgq-lnwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",内蒙古卫视 +http://125.210.150.58:9090/live/hszx-nmgtv-h264.m3u8 +#EXTINF:-1 group-title="未分类",宁夏卫视 +http://125.210.150.58:9090/live/hszx-nxtv-h264.m3u8 +#EXTINF:-1 group-title="未分类",甘肃卫视 +http://125.210.150.58:9090/live/hszx-gstv-h264.m3u8 +#EXTINF:-1 group-title="未分类",青海卫视 +http://125.210.150.58:9090/live/hszx-qhtv-h264.m3u8 +#EXTINF:-1 group-title="未分类",陕西卫视 +http://125.210.150.58:9090/live/hszx-sxtv-h264.m3u8 +#EXTINF:-1 group-title="未分类",河北卫视 +http://125.210.150.58:9090/live/hszx-hebeitv-h264.m3u8 +#EXTINF:-1 group-title="未分类",山西卫视 +http://125.210.150.58:9090/live/hszx-shanxitv-h264.m3u8 +#EXTINF:-1 group-title="未分类",山东卫视 +http://125.210.150.58:9090/live/hzgq-sdwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",安徽卫视 +http://125.210.150.58:9090/live/hzgq-ahwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",河南卫视 +http://125.210.150.58:9090/live/hszx-henantv-h264.m3u8 +#EXTINF:-1 group-title="未分类",湖北卫视 +http://125.210.150.58:9090/live/hzgq-hbwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",湖南卫视 +http://125.210.150.58:9090/live/hzgq-hnwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",江西卫视 +http://125.210.150.58:9090/live/hzgq-jxwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",江苏卫视 +http://125.210.150.58:9090/live/hzgq-jswsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",浙江卫视 +http://125.210.150.58:9090/live/hzgq-zjwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",东南卫视 +http://125.210.150.58:9090/live/hzgq-fjwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",广东卫视 +http://125.210.150.58:9090/live/hzgq-gdwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",深圳卫视 +http://125.210.150.58:9090/live/hzgq-szwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",广西卫视 +http://125.210.150.58:9090/live/hszx-gxtv-h264.m3u8 +#EXTINF:-1 group-title="未分类",云南卫视 +http://125.210.150.58:9090/live/hszx-yntv-h264.m3u8 +#EXTINF:-1 group-title="未分类",贵州卫视 +http://125.210.150.58:9090/live/hzgq-gzwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",四川卫视 +http://125.210.150.58:9090/live/hzgq-scwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",新疆卫视 +http://125.210.150.58:9090/live/hszx-xjtv-h264.m3u8 +#EXTINF:-1 group-title="未分类",兵团卫视 +http://125.210.150.58:9090/live/hszx-bttv-h264.m3u8 +#EXTINF:-1 group-title="未分类",西藏卫视 +http://125.210.150.58:9090/live/hszx-xztv-h264.m3u8 +#EXTINF:-1 group-title="未分类",海南卫视 +http://125.210.150.58:9090/live/hszx-lytv-h264.m3u8 +#EXTINF:-1 group-title="未分类",三沙卫视 +http://125.210.150.58:9090/live/hzgq-ssws-h264.m3u8 +#EXTINF:-1 group-title="未分类",北京纪实科教 +http://125.210.150.58:9090/live/hszx-bjjs-h264.m3u8 +#EXTINF:-1 group-title="未分类",四海钓鱼 +http://125.210.150.58:9090/live/hszx-shdy-h264.m3u8 +#EXTINF:-1 group-title="未分类",金鹰纪实 +http://125.210.150.58:9090/live/hszx-jyjs-h264.m3u8 +#EXTINF:-1 group-title="未分类",浙江钱江 +http://125.210.150.58:9090/live/hzgq-qjpdgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",浙江经济生活 +http://125.210.150.58:9090/live/hzgq-zjjsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",浙江教育科技 +http://125.210.150.58:9090/live/hzgq-zjjygq-h264.m3u8 +#EXTINF:-1 group-title="未分类",浙江民生休闲 +http://125.210.150.58:9090/live/hzgq-msxxgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",浙江新闻 +http://125.210.150.58:9090/live/hzgq-zjxwgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",浙江少儿 +http://125.210.150.58:9090/live/hzgq-zjsegq-h264.m3u8 +#EXTINF:-1 group-title="未分类",浙江好易购 +http://125.210.150.58:9090/live/hzgq-hyggq-h264.m3u8 +#EXTINF:-1 group-title="未分类",杭州综合 +http://125.210.150.58:9090/live/hzgq-hzzhgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",杭州明珠 +http://125.210.150.58:9090/live/hzgq-xhmzgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",杭州生活 +http://125.210.150.58:9090/live/hzgq-hzshgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",杭州影视 +http://125.210.150.58:9090/live/hzgq-hzysgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",杭州青少 +http://125.210.150.58:9090/live/hzgq-hzsegq-h264.m3u8 +#EXTINF:-1 group-title="未分类",杭州导视 +http://125.210.150.58:9090/live/hzgq-hzdsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",临平新闻 +http://125.210.150.58:9090/live/hszx-klcd-h264.m3u8 +#EXTINF:-1 group-title="未分类",华数频道 +http://125.210.150.58:9090/live/hzgq-hsfwgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",天元围棋 +http://125.210.150.58:9090/live/hszx-tywq-h264.m3u8 +#EXTINF:-1 group-title="未分类",凤 凰中文 +http://125.210.150.58:9090/live/hszx-fhzw-h264.m3u8 +#EXTINF:-1 group-title="未分类",凤 凰资讯 +http://125.210.150.58:9090/live/hszx-fhzx-h264.m3u8 diff --git a/drpy_t3/lives/开心频道.txt b/drpy_t3/lives/开心频道.txt new file mode 100644 index 0000000..8b491fa --- /dev/null +++ b/drpy_t3/lives/开心频道.txt @@ -0,0 +1,3394 @@ +//以下全部出自网络和大佬资源,如有冒犯请联系删除。[所有内容仅供学习使用,请勿用于违法用途] +// +永久免费💝公告,#genre# +💝关注💝请勿购买,http://live.dxms.top:80/dwy/mgak.php#https://ldncctvwbndhwy.cntv.myhwcdn.cn/ldncctvwbnd/ldcctv1_2/index.m3u8#http://1.62.64.76/0b926d37065dc656266be75dd9d25565.v.smtcdns.net/tlive-test-cdn.ysp.cctv.cn/ysp/2022576803.m3u8#https://a.xttv.top/xttv/27f43e697655f4d44c62d7f4d32fcctv.m3u8?aliyun_uuid=b3b8e538-3470-4fa0-b6ed-2b138e5f5fef&auth_key=2145888000-0-0-fda7ddb73d3cb5ac5bddf4eeba9b665e#http://110.249.196.71/0b926d37065dc656266be75dd9d25565.v.smtcdns.net/zycfcdn.gdwlcloud.com/PLTV/88888888/224/3221225490/index.m3u8 +💝公众号💝谨防受骗,http://liveop.cctv.cn:80/hls/CCTV28bee868714f04ea2af79947bb9b46fc3H/playlist.m3u8#https://cd-live-stream.news.cctvplus.com/live/smil:CHANNEL1.smil/playlist.m3u8 +💝开心软件💝如果付款,http://hls.szsummer.cn/live/446035/playlist.m3u8?k=32f9ec7c13e4b390289143a8e1b2a898&t=1840341130 +👉👉把家里路由器,https://tc-tc2-interact.douyucdn2.cn/dyliveflv1a/122402rK7MO9bXSq_900.m3u8 +👉👉支持所有线路,http://mobilelive-ds.ysp.cctv.cn/ysp/2013693901.m3u8 +👉👉更换享受超清,https://tc-tc2-interact.douyucdn2.cn/dyliveflv1/85894rmovieChow_900p.m3u8 +💝中国港澳👉天天,#genre# +凤凰卫视中文台,http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701pcc72.flv +凤凰卫视资讯台,http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701pin72.flv +凤凰卫视资讯台,http://61.221.215.25:8800/hls/47/index.m3u8 +凤凰卫视资讯台,http://playtv-live.ifeng.com:80/live/06OLEEWQKN4.m3u8 +凤凰卫视中文台,http://playtv-live.ifeng.com:80/live/06OLEGEGM4G.m3u8 +凤凰卫视资讯台,http://61.221.215.25:8800/hls/47/index.m3u8 +TVB无线新闻台,http://live.cooltv.top/tv/tvb.php?id=0&hq +凤凰卫视资讯台,http://playtv-live.ifeng.com/live/06OLEEWQKN4.m3u8 +凤凰卫视中文台,http://playtv-live.ifeng.com/live/06OLEGEGM4G.m3u8 +凤凰卫视资讯台,http://playtv-live.ifeng.com/live/06OLEEWQKN4.m3u8 +TVB 翡翠台,http://60.30.198.43:5080/香蕉哥/tvb翡翠/hls.m3u8 +重温经典,http://ali.hlspull.yximgs.com/live/awei_cwjd.flv +星光视界,http://ali.hlspull.yximgs.com/live/zxcvbnm9852.flv +翡翠台,http://php.jdshipin.com:8880/smt.php?id=jade_twn +J2,http://php.jdshipin.com:8880/smt.php?id=j2_twn +明珠台,http://php.jdshipin.com:8880/smt.php?id=pearl_twn +无线新闻台,http://php.jdshipin.com:8880/smt.php?id=inews_twn +VIUTV,http://php.jdshipin.com:8880/smt.php?id=viu1_twn +TVB星河,http://php.jdshipin.com:8880/smt.php?id=Xinhe +RTHK32,http://php.jdshipin.com:8880/smt.php?id=rhk32_twn +RTHK31,http://php.jdshipin.com:8880/smt.php?id=rhk31_twn +凤凰卫视,http://php.jdshipin.com:8880/smt.php?id=phoenixtv_hd +NOW星影,http://111.160.76.101:80/香蕉哥/now星影.live.flv +NOW爆谷,http://111.160.76.101:80/香蕉哥/now爆谷.live.flv +TVB翡翠,http://111.160.76.101:80/香蕉哥/tvb翡翠.live.flv +TVB-Plus,http://ncdsrti.7766.org:7550/hls/chunklistxufkwjw.m3u8 +TVB-Plus,http://ha.jmied.com/aa/aa.m3u8?auth_key=1661958232-0-0-114df08fce17ecb21f6bf42de85e7600 +TVB-Plus,http://138.113.24.59/libof.kesx.top/live/5658kwkojtz.m3u8 +凤凰中文,http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701pcc72.m3u8 +凤凰资讯,http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701pin72.m3u8 +凤凰香港,http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701phk72.m3u8 + +鳳凰资讯,http://61.221.215.25:8800/hls/47/index.m3u8 +明珠台,http://1b6467f415.iok.la:9931/tsfile/live/1009_1.m3u8 +TVB星河台,https://edge6a.v2h-cdn.com/xinghe/xinghe.stream/chunklist.m3u8 +无线新闻台,https://edge6a.v2h-cdn.com/enew/enew.stream/chunklist.m3u8 +无线娱乐新闻台,https://edge6a.v2h-cdn.com/enew/enew.stream/chunklist.m3u8 +TVB功夫台,http://v2h.jdshipin.com/asia_action/asia_action.stream/chunklist.m3u8 +TVB星河台,http://v2h.jdshipin.com/xinghe/xinghe.stream/chunklist.m3u8 +TVB娱乐新闻台,http://v2h.jdshipin.com/enew/enew.stream/chunklist.m3u8 +💝央视频道👉开心,#genre# +CCTV1,http://cdn.jdshipin.com:8880/ysp.php?id=cctv1 +CCTV2,http://cdn.jdshipin.com:8880/ysp.php?id=cctv2 +CCTV3,http://cdn.jdshipin.com:8880/ysp.php?id=cctv3 +CCTV4,http://cdn.jdshipin.com:8880/ysp.php?id=cctv4 +CCTV5,http://cdn.jdshipin.com:8880/ysp.php?id=cctv5 +CCTV5+,http://cdn.jdshipin.com:8880/ysp.php?id=cctv5p +CCTV6,http://cdn.jdshipin.com:8880/ysp.php?id=cctv6 +CCTV7,http://cdn.jdshipin.com:8880/ysp.php?id=cctv7 +CCTV8,http://cdn.jdshipin.com:8880/ysp.php?id=cctv8 +CCTV9,http://cdn.jdshipin.com:8880/ysp.php?id=cctv9 +CCTV10,http://cdn.jdshipin.com:8880/ysp.php?id=cctv10 +CCTV11,http://cdn.jdshipin.com:8880/ysp.php?id=cctv11 +CCTV12,http://cdn.jdshipin.com:8880/ysp.php?id=cctv12 +CCTV13,http://cdn.jdshipin.com:8880/ysp.php?id=cctv13 +CCTV14,http://cdn.jdshipin.com:8880/ysp.php?id=cctv14 +CCTV15,http://cdn.jdshipin.com:8880/ysp.php?id=cctv15 +CCTV16,http://cdn.jdshipin.com:8880/ysp.php?id=cctv16 +CCTV17,http://cdn.jdshipin.com:8880/ysp.php?id=cctv17 +CCTV8k,http://cdn.jdshipin.com:8880/ysp.php?id=cctv8k +CCTV4k,http://cdn.jdshipin.com:8880/ysp.php?id=cctv4k +CCTV16 4k,http://cdn.jdshipin.com:8880/ysp.php?id=cctv164k + +CCTV1,http://ygbh.live/migu.php?id=cctv1 +CCTV2,http://ygbh.live/migu.php?id=cctv2 +CCTV3,http://ygbh.live/migu.php?id=cctv3 +CCTV4,http://ygbh.live/migu.php?id=cctv4 +CCTV4,http://ygbh.live/migu.php?id=cctv4a +CCTV4,http://ygbh.live/migu.php?id=cctv4o +CCTV5,http://ygbh.live/migu.php?id=cctv5 +CCTV5+,http://ygbh.live/migu.php?id=cctv5p +CCTV6,http://ygbh.live/migu.php?id=cctv6 +CCTV7,http://ygbh.live/migu.php?id=cctv7 +CCTV8,http://ygbh.live/migu.php?id=cctv8 +CCTV9,http://ygbh.live/migu.php?id=cctv9 +CCTV10,http://ygbh.live/migu.php?id=cctv10 +CCTV11,http://ygbh.live/migu.php?id=cctv11 +CCTV12,http://ygbh.live/migu.php?id=cctv12 +CCTV13,http://ygbh.live/migu.php?id=cctv13 +CCTV14,http://ygbh.live/migu.php?id=cctv14 +CCTV15,http://ygbh.live/migu.php?id=cctv15 +CCTV17,http://ygbh.live/migu.php?id=cctv17 +CCTV1,http://60.6.255.8:2180/live/cctv1/index.m3u8 +CCTV2,http://60.6.255.8:2180/live/cctv2/index.m3u8 +CCTV3,http://60.6.255.8:2180/live/cctv3/index.m3u8 +CCTV4,http://60.6.255.8:2180/live/cctv4/index.m3u8 +CCTV5,http://60.6.255.8:2180/live/cctv5/index.m3u8 +CCTV5+,http://60.6.255.8:2180/live/cctv5q/index.m3u8 +CCTV6,http://60.6.255.8:2180/live/cctv6/index.m3u8 +CCTV7,http://60.6.255.8:2180/live/cctv7/index.m3u8 +CCTV8,http://60.6.255.8:2180/live/cctv8/index.m3u8 +CCTV9,http://60.6.255.8:2180/live/cctv9/index.m3u8 +CCTV10,http://60.6.255.8:2180/live/cctv10/index.m3u8 +CCTV11,http://60.6.255.8:2180/live/cctv11/index.m3u8 +CCTV12,http://60.6.255.8:2180/live/cctv12/index.m3u8 +CCTV13,http://60.6.255.8:2180/live/cctv13/index.m3u8 +CCTV14,http://60.6.255.8:2180/live/cctv14/index.m3u8 +CCTV15,http://60.6.255.8:2180/live/cctv15/index.m3u8 +CCTV17,http://60.6.255.8:2180/live/cctv17/index.m3u8 +CCTV-4K,http://27.222.3.214/liveali-tp4k.cctv.cn/live/4K10M.stream/playlist.m3u8 +CCTV-4K,https://tv.cry33.com/ys4k.php?id=4k +CCTV-8K,https://tv.cry33.com/ys4k.php?id=8k +CCTV1,http://dp.sxtv.top:88/md/migu.php?id=cctv1 +CCTV2,http://dp.sxtv.top:88/md/migu.php?id=cctv2 +CCTV3,http://dp.sxtv.top:88/md/migu.php?id=cctv3 +CCTV4,http://dp.sxtv.top:88/md/migu.php?id=cctv4 +CCTV4,http://dp.sxtv.top:88/md/migu.php?id=cctv4a + CCTV4,http://dp.sxtv.top:88/md/migu.php?id=cctv4o +CCTV5,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel5/1300.m3u8 +CCTV5+,http://116.162.6.191/4309-txt.otvstream.otvcloud.com/otv/skcc/live/channel13/1300.m3u8 +CCTV6,http://dp.sxtv.top:88/md/migu.php?id=cctv6 +CCTV7,http://dp.sxtv.top:88/md/migu.php?id=cctv7 +CCTV8,http://dp.sxtv.top:88/md/migu.php?id=cctv8 +CCTV9,http://dp.sxtv.top:88/md/migu.php?id=cctv9 +CCTV10,http://dp.sxtv.top:88/md/migu.php?id=cctv10 +CCTV11,http://dp.sxtv.top:88/md/migu.php?id=cctv11 +CCTV12,http://dp.sxtv.top:88/md/migu.php?id=cctv12 +CCTV13,http://dp.sxtv.top:88/md/migu.php?id=cctv13 +CCTV14,http://dp.sxtv.top:88/md/migu.php?id=cctv14 +CCTV15,http://dp.sxtv.top:88/md/migu.php?id=cctv15 +CCTV17,http://dp.sxtv.top:88/md/migu.php?id=cctv17 + +CCTV1,http://112.235.200.126:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV2,http://112.235.200.126:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV3,http://59.62.8.250:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV4,http://112.235.200.126:9901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV5,http://113.57.103.216:9000/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV5+,http://112.235.200.126:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV6,http://59.62.8.250:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV7,http://59.62.8.250:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV8,http://59.62.8.250:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV9,http://59.62.8.250:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV10,http://59.62.8.250:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV11,hhttp://59.62.8.250:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV12,http://59.62.8.250:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV13,http://59.62.8.250:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV14,http://59.62.8.250:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV15,http://59.62.8.250:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV17,http://112.235.200.247:9901/tsfile/live/0019_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV1,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226016/index.m3u8?$海南移动V4 +CCTV3,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226021/index.m3u8?$海南移动V4 +CCTV4,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226007/index.m3u8?$海南移动V4 +CCTV5,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226019/index.m3u8?$海南移动V4 +CCTV5+,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225603/index.m3u8?$海南移动V4 + +CCTV6,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226010/index.m3u8?$海南移动V4 +CCTV7,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225733/index.m3u8?$海南移动V4 +CCTV8,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226008/index.m3u8?$海南移动V4 +CCTV9,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225734/index.m3u8?$海南移动V4 +CCTV10,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225730/index.m3u8?$海南移动V4 +CCTV12,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225731/index.m3u8?$海南移动V4 +CCTV13,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226011/index.m3u8?$海南移动V4 +CCTV14,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225732/index.m3u8?$海南移动V4 +CCTV15,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225601/index.m3u8?$海南移动V4 +CCTV16,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226100/index.m3u8?$海南移动V4 +CCTV17,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/index.m3u8?$海南移动V4 + +CCTV3,http://59.62.8.250:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV5+,http://112.235.200.247:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV16,http://117.27.190.42:9998/tsfile/live/23249_1.m3u8?key=txiptv&playlive=1&authid=0 +CCTV4http://113.74.172.186:4000/udp/239.253.43.121:5146?$广东电信主力线 + +CCTV1,http://120.211.119.222:8899/hls/1/index.m3u8 +CCTV2,http://120.211.119.222:8899/hls/2/index.m3u8 +CCTV3,http://120.211.119.222:8899/hls/3/index.m3u8 +CCTV4,http://120.211.119.222:8899/hls/4/index.m3u8 +CCTV5,http://120.211.119.222:8899/hls/5/index.m3u8 +CCTV5+,http://120.211.119.222:8899/hls/17/index.m3u8 +CCTV6,http://120.211.119.222:8899/hls/6/index.m3u8 +CCTV7,http://120.211.119.222:8899/hls/7/index.m3u8 +CCTV8,http://120.211.119.222:8899/hls/8/index.m3u8 +CCTV9,http://120.211.119.222:8899/hls/9/index.m3u8 +CCTV10,http://120.211.119.222:8899/hls/10/index.m3u8 +CCTV11,http://120.211.119.222:8899/hls/11/index.m3u8 +CCTV12,http://120.211.119.222:8899/hls/12/index.m3u8 +CCTV13,http://120.211.119.222:8899/hls/13/index.m3u8 +CCTV14,http://120.211.119.222:8899/hls/14/index.m3u8 +CCTV15,http://120.211.119.222:8899/hls/15/index.m3u8 +CCTV-4K,http://27.222.3.214/liveali-tp4k.cctv.cn/live/4K10M.stream/playlist.m3u8 +CCTV-4K,https://tv.cry33.com/ys4k.php?id=4k +CCTV-8K,https://tv.cry33.com/ys4k.php?id=8k +💝央视频道👉IPV6,#genre# +CCTV1,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226559/index.m3u8 +CCTV1,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000131/index.m3u8?IAS +CCTV1,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010144/1.m3u8 +CCTV2,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226540/index.m3u8 +CCTV2,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000372/index.m3u8?IAS +CCTV2,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010211/1.m3u8 + +CCTV3,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226021/index.m3u8 +CCTV3,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010212/1.m3u8 +CCTV4,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226428/index.m3u8 +CCTV4,http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000485/index.m3u8?IAS +CCTV4,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010017/1.m3u8 +CCTV5,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010139/1.m3u8 + +CCTV5+,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000132/index.m3u8?IAS +CCTV5+,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010202/1.m3u8 +CCTV6,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010214/1.m3u8 +CCTV7,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225733/index.m3u8 +CCTV7,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000380/index.m3u8?IAS +CCTV7,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010215/1.m3u8 +CCTV8,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010216/1.m3u8 +CCTV9,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225734/index.m3u8 +CCTV9,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000373/index.m3u8?IAS +CCTV9,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010052/1.m3u8 +CCTV10,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000375/index.m3u8?IAS +CCTV10,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010203/1.m3u8 +CCTV11,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226565/index.m3u8 +CCTV11,http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000497/index.m3u8?IAS +CCTV11,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010092/1.m3u8 + +CCTV12,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000377/index.m3u8?IAS +CCTV12,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010205/1.m3u8 +CCTV13,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226537/index.m3u8 +CCTV13,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000516/index.m3u8?IAS +CCTV13,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010093/1.m3u8 +CCTV14,http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000378/index.m3u8?IAS +CCTV14,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010207/1.m3u8 +CCTV15,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226476/index.m3u8 +CCTV15,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000501/index.m3u8?IAS +CCTV15,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010094/1.m3u8 + +CCTV16,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226100/index.m3u8 +CCTV16,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010142/1.m3u8 +CCTV17,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/index.m3u8 +CCTV17,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000494/index.m3u8?IAS +CCTV17,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010210/1.m3u8 +CCTV4K,http://27.222.3.214/liveali-tp4k.cctv.cn/live/4K10M.stream/playlist.m3u8 +CCTV8K,https://tv.cry33.com/ys4k.php?id=8k + +CCTV1,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN111128BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUU6FFmRK8Hl0ytyd5e5kWGEwoDIwMxbrlyyVy9x6ZDKnldIYKOjBOUjRyoym5n7Kg0yIYstFTUfqtC14fzxhy5Y +CCTV2,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000036BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfGVSARKsxkWGZw7vFUuOj2QZHeRzosIxVbl7i2QHFATHA3k5wDWG1qHkZQAleNv%2FbI +CCTV3,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727c125355/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMUNNEYLCPUtKY62j1Wp5u04wipypKUQ1TTuR2lXvBl5YpHqBJmlA19x22TD9bUOjk +CCTV4,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000037BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfH0ZQXwaiVktPr6ILPKXqwOUC2ZXft7ZULN6h9qLQPFOTSlVTfophiKaMb8h1kPV74 +CCTV5,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727e617ca0/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMSXw4ajlL%2FoUYC2RZQQDco6uQSifXBocz5ID6RePfIKQ4rFWiHjq%2FeZoDmrzW%2FKlw +CCTV5+,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63872908d48f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSBx06ZL9Bo6JOM%2BSTjxZRK254G1jtietGzDaHvFNRtjXOvFnbf%2BTao33JqYlfMYYn2z3agOn9gvNMT9KmBaR9o +CCTV6,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728804b1f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdazJhFQmuq4XUiks9ZrIlJN%2BknLs8H%2BSxcDXy%2BTesEc8Q0KCN89MjYoj85Sol1kbKI4 +CCTV7,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000038BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHYKFve4MwNzRa0jPXeHjqnBjPmzSdKDNWNHhnZSaMGCXKmdx8d%2BnYdhVK5ge22ot4 +CCTV8,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728970aa82/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdaymid9ta2tVUW0%2FdVrFqszC1EVEkAbpip1IYxn%2Ba2aA%2BVAihIiw9D8ejUsDbfU0K68 +CCTV9,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000039BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHArfvJF2pWpm4RxcBNhZ7j9vEUeCQte%2BbQaOGNIUEEK%2B3RBE1BC9EUsM18gnb%2FyAA +CCTV10,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949784BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5OuXozn3alq9%2BUx7ZLG1w9aOfkLjZvYj56D3xkOAtSOIoLsdw8c1%2BCwLDg1aS4esN4 +CCTV11,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000053BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Qj2xHA4vdPGsjBbxSL3p%2FmAObVTfznR%2Fpc%2B76QYmLRMuL3Lj9iabhv8arW7kJe6%2F4 +CCTV12,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000040BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUd3JM2PCgDefrKOVZLNt0QMAmpLefguRLiOPXiDRWhxHg8yim2giTBA8RILsb%2B8Y5pkFUyZBE%2FkNJAbwncEegkU +CCTV13,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000054BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0SuXozn3alq9%2BUx7ZLG1w9awc14iEUxQ5VsTsr5pEBsmF56tXUfsukRUpygmTCKvAI +CCTV14,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949788BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5PYKFve4MwNzRa0jPXeHjqnp7khdLaCMP6L4QpTf84Oz6DvCG1%2BJ81QvStkxO%2FoGm8 +CCTV15,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000055BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Tdo%2FUL80msfbhDYvoWpNl31Dy7jHvMl%2FzVUrNxhL1ek1YEGVDZ7lCg0LtKJY4Ku%2B8 +CCTV16,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226100/index.m3u8 +CCTV17,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728afa13b4/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdaz%2FyAI9to%2FMBBt%2FivcdSfljJ1%2FqqamWUjAiBAxNssfyBlZUDSXAIMtStS86hRHFuJM +CCTV4K,http://27.222.3.214/liveali-tp4k.cctv.cn/live/4K10M.stream/playlist.m3u8 + +CCTV1,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225816/index.m3u8 +CCTV2,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225599/index.m3u8 +CCTV3,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225799/index.m3u8 +CCTV4,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225797/index.m3u8 +CCTV5,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225818/index.m3u8 +CCTV5+,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225507/index.m3u8 +CCTV6,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225814/index.m3u8 +CCTV7,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225671/index.m3u8 +CCTV8,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225795/index.m3u8 +CCTV9,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225676/index.m3u8 +CCTV10,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225677/index.m3u8 +CCTV11,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225517/index.m3u8 +CCTV12,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225669/index.m3u8 +CCTV13,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225812/index.m3u8 +CCTV14,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225674/index.m3u8 +CCTV15,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225513/index.m3u8 +CCTV16,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225893/index.m3u8 +CCTV17,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225708/index.m3u8 + +CCTV1,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN111128BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUU6FFmRK8Hl0ytyd5e5kWGEwoDIwMxbrlyyVy9x6ZDKnldIYKOjBOUjRyoym5n7Kg0yIYstFTUfqtC14fzxhy5Y +CCTV2,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000036BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfGVSARKsxkWGZw7vFUuOj2QZHeRzosIxVbl7i2QHFATHA3k5wDWG1qHkZQAleNv%2FbI +CCTV3,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727c125355/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMUNNEYLCPUtKY62j1Wp5u04wipypKUQ1TTuR2lXvBl5YpHqBJmlA19x22TD9bUOjk +CCTV4,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000037BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfH0ZQXwaiVktPr6ILPKXqwOUC2ZXft7ZULN6h9qLQPFOTSlVTfophiKaMb8h1kPV74 +CCTV5,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727e617ca0/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMSXw4ajlL%2FoUYC2RZQQDco6uQSifXBocz5ID6RePfIKQ4rFWiHjq%2FeZoDmrzW%2FKlwCCTV-5+,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63872908d48f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSBx06ZL9Bo6JOM%2BSTjxZRK254G1jtietGzDaHvFNRtjXOvFnbf%2BTao33JqYlfMYYn2z3agOn9gvNMT9KmBaR9o +CCTV6,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728804b1f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdazJhFQmuq4XUiks9ZrIlJN%2BknLs8H%2BSxcDXy%2BTesEc8Q0KCN89MjYoj85Sol1kbKI4 +CCTV7,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000038BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHYKFve4MwNzRa0jPXeHjqnBjPmzSdKDNWNHhnZSaMGCXKmdx8d%2BnYdhVK5ge22ot4 +CCTV8,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728970aa82/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdaymid9ta2tVUW0%2FdVrFqszC1EVEkAbpip1IYxn%2Ba2aA%2BVAihIiw9D8ejUsDbfU0K68 +CCTV9,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000039BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHArfvJF2pWpm4RxcBNhZ7j9vEUeCQte%2BbQaOGNIUEEK%2B3RBE1BC9EUsM18gnb%2FyAA +CCTV10,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949784BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5OuXozn3alq9%2BUx7ZLG1w9aOfkLjZvYj56D3xkOAtSOIoLsdw8c1%2BCwLDg1aS4esN4 +CCTV11,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000053BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Qj2xHA4vdPGsjBbxSL3p%2FmAObVTfznR%2Fpc%2B76QYmLRMuL3Lj9iabhv8arW7kJe6%2F4 +CCTV12,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000040BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUd3JM2PCgDefrKOVZLNt0QMAmpLefguRLiOPXiDRWhxHg8yim2giTBA8RILsb%2B8Y5pkFUyZBE%2FkNJAbwncEegkU +CCTV13,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000054BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0SuXozn3alq9%2BUx7ZLG1w9awc14iEUxQ5VsTsr5pEBsmF56tXUfsukRUpygmTCKvAI +CCTV14,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949788BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5PYKFve4MwNzRa0jPXeHjqnp7khdLaCMP6L4QpTf84Oz6DvCG1%2BJ81QvStkxO%2FoGm8 +CCTV15,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000055BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Tdo%2FUL80msfbhDYvoWpNl31Dy7jHvMl%2FzVUrNxhL1ek1YEGVDZ7lCg0LtKJY4Ku%2B8 + +CCTV1,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226559/index.m3u8 +CCTV2,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226540/index.m3u8 +CCTV3,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225799/index.m3u8 +CCTV4,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226428/index.m3u8 +CCTV5,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226019/index.m3u8 +CCTV5+,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225507/index.m3u8 +CCTV6,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226010/index.m3u8 +CCTV7,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225733/index.m3u8 +CCTV8,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226008/index.m3u8 +CCTV9,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225734/index.m3u8 +CCTV10,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225677/index.m3u8 +CCTV11,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226565/index.m3u8 +CCTV12,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225731/index.m3u8 +CCTV13,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226537/index.m3u8 +CCTV14,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225732/index.m3u8 +CCTV15,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226476/index.m3u8 +CCTV16,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225893/index.m3u8 +CCTV17,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/index.m3u8 + +CCTV1,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226016/index.m3u8 +CCTV2,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225588/index.m3u8 +CCTV3,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226021/index.m3u8 +CCTV4,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226007/index.m3u8 +CCTV5,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226019/index.m3u8 +CCTV5+,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225603/index.m3u8 +CCTV6,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226010/index.m3u8 +CCTV7,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225733/index.m3u8 +CCTV8,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226008/index.m3u8 +CCTV9,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225734/index.m3u8 +CCTV10,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225730/index.m3u8 +CCTV11,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225597/index.m3u8 +CCTV12,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225731/index.m3u8 +CCTV13,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226011/index.m3u8 +CCTV14,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225732/index.m3u8 +CCTV15,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225601/index.m3u8 +CCTV16,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226100/index.m3u8 +CCTV17,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225765/index.m3u8 + +CCTV1,https://epg.pw/stream/8f2fe0a36753daf5033df67666c94fbcb82d57e5f326733baa3fa5526c3c0bcd.m3u8 +CCTV1,https://epg.pw/stream/0708164a2201ab82eb0c3f2d3ede428571b1b4bb1b8d3cfb3a9ed1201dd2fe68.m3u8 +CCTV1,https://epg.pw/stream/429ae5e0377c05e43ec9fa7aae9d77ccafe257fdca1816d8044bfd285f231613.m3u8 +CCTV1,https://epg.pw/stream/9c278a43d5bf7e515412f079507a71cfb8a263ff4938b30757880c9c7cd972b7.m3u8 +CCTV1,https://epg.pw/stream/607c5648b5a826285f1e94ceab76066c767e2ba5e1623b753a6ab2f4e380199d.m3u8 +CCTV1,https://epg.pw/stream/b8dcdc7ba56cbf09277896dfa81c05756e3da4cc48c5b0ad6ea090ab987fb77a.m3u8 +CCTV1,https://epg.pw/stream/9b729e6c878984d044d0552a24528d74fe7ef50bf62542ff952688d80f70e770.m3u8 +CCTV1,https://epg.pw/stream/7571be7517df6df6bcc71c21ab322ff1359bf258421cfa8c310b5879ac535dc4.m3u8 +CCTV2,https://epg.pw/stream/9ae57cd4c14b62284d1867572b5c6d0eb610112cb78cb6bbc286e29f765cc7a5.m3u8 +CCTV2,https://epg.pw/stream/20786507e757fe067df9e9efbc2351b1124d211a591d4238ed5ba5520a252067.m3u8 +CCTV2,https://epg.pw/stream/f86540c126a751cc707e3805911549bd077fb5a7f0f53a824212d75addea3747.m3u8 +CCTV2,https://epg.pw/stream/e9ce2600ddd9798bc799287e8e331bbb84716754f777900fa8c20b9d7b376965.m3u8 +CCTV2,https://epg.pw/stream/0ff1a5df634b89d961ceb79e32ec6f09791aeca7014e15f5f8c6b8a92f5af3f1.m3u8 +CCTV2,https://epg.pw/stream/b1588dff37e0c4db282c42aef4ee6913d38baec2e947a471c86cd0c094f65ae3.m3u8 +CCTV3,https://epg.pw/stream/c7020b88aea35cfa13268ae17e657ef8e234ba0f8d3c87045520f9f12bb9355f.m3u8 +CCTV3,https://epg.pw/stream/792979f74e697c8690b1c342bd7328698fa5876d61949ac70adf91f52d5931e6.m3u8 +CCTV3,https://epg.pw/stream/bedd90f2589f214ccca54c6183c14974714e2a66a0492dc8f71126cdd5a2105f.m3u8 +CCTV3,https://epg.pw/stream/0e834c6cd6302e55436f760d91369a1e6fae39c2d713f28d9ae5c6134672c0cc.m3u8 +CCTV3,https://epg.pw/stream/f6401d4bed8cdb1050ddd7f4d8d0d85ffef76d785c9bfe0223987f5ff798e31b.m3u8 +CCTV3,https://epg.pw/stream/a799c53ed5dd62ad6ee57dcb8175e87c55adba9fa69dc3109df39ed59cae4ec3.m3u8 +CCTV3,https://epg.pw/stream/ce95ca1c8a1b4dabd5e70ceb7456b3cf03c762ca8f75676c3e75178dd3bbe6fa.m3u8 +CCTV3,https://epg.pw/stream/7361b754ebaf0853cb863bc4a3af9233d23c74c0e46a0aa7190d44f0389e0822.m3u8 +CCTV4,https://epg.pw/stream/4a3bc1c3647278aa55a85d191425ed035c72d091144e9c639b6938745c6224f3.m3u8 +CCTV4,https://epg.pw/stream/8c32143b329bd470ea3521c3eaaa65c1f28e7c6ec240a87a34f0ba25164a70fe.m3u8 +CCTV4,https://epg.pw/stream/ca5346f18ce923cf5e25455d32f17fe7f11edd5cc6d2d650a087760a83f8c4ce.m3u8 +CCTV4,https://epg.pw/stream/e64ded084c3147592f7f8a72ff9c597ff8277c6c45d9854d8b8a0a01bc053c21.m3u8 +CCTV4,https://epg.pw/stream/1927200d910f3087e569a0050d84b50158d3c1e2d928ad116119bb9eafe8ac9f.m3u8 +CCTV4,https://epg.pw/stream/5ea26961bbc8690cbd372a194e8801249644123feab6354e1f2cdd2b8a0026ca.m3u8 +CCTV4,https://epg.pw/stream/c12729822e0fe7b91e322f89dd761e03bd1ee6339eb3b1543f1adb5584f16785.m3u8 +CCTV4,https://epg.pw/stream/ef9b087371bda4714a5baf1f17f93e9dc7cfd2890eab472f3058709c17b3315f.m3u8 +CCTV5,https://epg.pw/stream/c0af6816012bc8db68b757c800885dc46c85c43d2d2462eee0697511ad23b954.m3u8 +CCTV5,https://epg.pw/stream/2232629887e4b376cff8616f028ebe5b09816c10de9bd7a6e9dcabe7ca8b83e4.m3u8 +CCTV5,https://epg.pw/stream/611712b3f1e1821cc2045941ecf5754be975188b03f360a6988cb258871f444f.m3u8 +CCTV5,https://epg.pw/stream/3fff25613ac0ffd3d4adb549719315b585868cbe225e9aecfe6917eee97ab492.m3u8 +CCTV5,https://epg.pw/stream/ed02b8de7e8694705eda998a5905fbae21da95504360f6328c731da79a3a9162.m3u8 +CCTV5,https://epg.pw/stream/c0158e20690209bcd35d35066bc9477d02d6a201a2dfd28cd7dc2261393e8724.m3u8 +CCTV5,https://epg.pw/stream/1fb410350d0e3242e8daa58e881a026638b4312e90abbb03d5ea0c06b19bbb0b.m3u8 +CCTV5,https://epg.pw/stream/bccb02eb83b5bcd2d2b5808a1dfcd4a7e8c48c763f312015db7a591d8be22284.m3u8 +CCTV5,https://epg.pw/stream/aa65062c7f1eba54aed20c9ff328bb190ea3a2a1a3eae723333a359e661ba213.m3u8 +CCTV5,https://epg.pw/stream/61df3be1490c927a746d671e52c9f9cb197fba5a08184c147a68eb80f84c4824.m3u8 +CCTV5,https://epg.pw/stream/b786ec1800a5643b2d5d40858739023ccedfe27bc149fa6eee46de30f0897b5f.m3u8 +CCTV5+,https://epg.pw/stream/d2529b5f7645b56e457452755e6f4e7baf9816b7d2b9ce093720b8b1f92f031e.m3u8 +CCTV5+,https://epg.pw/stream/4ac8702f7f5a5b0d972e76862b0bb9b1f43f695fe78adcafcc0f9ecab99e3589.m3u8 +CCTV5+,https://epg.pw/stream/602038ea2476412b588d91c07f08f0d9ce0c843c0f6fdee9ae3bbc27167333b7.m3u8 +CCTV5+,https://epg.pw/stream/3a46ab2e35791a2ab555f708c1f791b15eb6f249405d9ce255ef11e78eb16f5b.m3u8 +CCTV5+,https://epg.pw/stream/466dcbd604ce53def8ef3aabbec10da725cd055278ceff16bb21f4aaa6f7eecd.m3u8 +CCTV5+,https://epg.pw/stream/7981c913470473b3a58f00fbe26773cb6e00101b6c19f0a428d781ea3232ebe1.m3u8 +CCTV5+,https://epg.pw/stream/c93ef4490202709af03614963e04521ff92cb925e19a0d5c8ec54d094129e4b2.m3u8 +CCTV6,https://epg.pw/stream/753fe6b20478c17a39f0c17d3c8d98a74cd5890a6e40f4ce011380f2dd185285.m3u8 +CCTV6,https://epg.pw/stream/51d6d337c4cbc6022c79db6d28f1606a876b750df63ed3505cb35ca43f038e4d.m3u8 +CCTV6,https://epg.pw/stream/e977495fcabf49836728f217748a682a844888fcb1aabd3d36310347efcaad0d.m3u8 +CCTV6,https://epg.pw/stream/416e89d4f45b86cbcf83e37427ba65d22c8d53b8d946f0e2531064f2e5c14168.m3u8 +CCTV6,https://epg.pw/stream/bf04aadae6b900db1b404cc8a35789a737c58049146a4d49a9825090217ae00d.m3u8 +CCTV6,https://epg.pw/stream/17a2cd6baf28eea74e93e9c0b1cafec7c77e144ab58c001890a95b7a942db8b4.m3u8 +CCTV6,https://epg.pw/stream/466a41732878afdef2dc81d4a751735252b9aa1a51ae0583ea3c770fa711f4bf.m3u8 +CCTV6,https://epg.pw/stream/4158ac23695adf65a6a8710b4a27dc39dbdaa5596a7d263d6de024ad99b3ade9.m3u8 +CCTV7,https://epg.pw/stream/085cc8320b47039f91c89f261b3bde134c04438bf58155988cdd2120c8ae5c1c.m3u8 +CCTV7,https://epg.pw/stream/ac01cb50d02dc19b524e493e1d65202f058f6d2061d1d137e70d84fc4b1ff86f.m3u8 +CCTV7,https://epg.pw/stream/2bf5b8dd1d1393ce13bf7be2b0801a5085e372d8bbab667910f0ba1ed7bf3a72.m3u8 +CCTV7,https://epg.pw/stream/4a0ac0d84597cfee83015f10200c708839dd537debc156dd2281684ae77cac4f.m3u8 +CCTV7,https://epg.pw/stream/2cf50ef1adbadb0dc2a849b66216f30261588c6394c5fb550a6fc2e09dbad9f7.m3u8 +CCTV7,https://epg.pw/stream/58418731053cf971a1cffe272332ab5095ba04c4b9849d30c9a26a23075ae2ae.m3u8 +CCTV7,https://epg.pw/stream/b455a784117753f80bc07ced769e86993b97dca8be5a6c9df9f323016b04973e.m3u8 +CCTV7,https://epg.pw/stream/9a487275fc5fddc5c7aa61789125fb6f94050a14b58d7acb8a5883ed22fb676e.m3u8 +CCTV7,https://epg.pw/stream/cf658e2341e442efaa33dc0a843a2cb452fd3ec9b319804adc0e8dc7016be757.m3u8 +CCTV8,https://epg.pw/stream/0a1873ab23ed1a7848161a2afe9f0afc6abf13a7fa7e8a7bf96ac4afa5919ca4.m3u8 +CCTV8,https://epg.pw/stream/5fb04be157fc0186ca9c90aac4b2d2bf4294bf0a022dbb7631ba8e849c8fe78e.m3u8 +CCTV8,https://epg.pw/stream/baa0d0242fdd3f96a5009fbf567de6784c786c69a2049fb78ef11f8328434414.m3u8 +CCTV8,https://epg.pw/stream/ccb93081983a1c7c04ff1adac79707d0d79c08d0e69d216ac9ba1d21144844cd.m3u8 +CCTV8,https://epg.pw/stream/bb5f455f31fd2dd822f789a6b44390de6aaec403cd8e75836aed3ffcd8a76c8b.m3u8 +CCTV8,https://epg.pw/stream/e300f521f2c225d3c6b60be82be956a3acf4b4a07f3fcd6d677c1df9065dd8d9.m3u8 +CCTV8,https://epg.pw/stream/cb997f441801a5bca8c092be9816cd3915e26d24e20df6a2e511d3c750eea86e.m3u8 +CCTV8,https://epg.pw/stream/113f0eb04d33840b7642af563255df49292c8d9c7755bf498df78cb7a315f322.m3u8 +CCTV8,https://epg.pw/stream/7bf7c554e6315edb6e079d382ff59f19f624554c5abb76100eb10cbe6a0a875c.m3u +CCTV9,https://epg.pw/stream/3c6125aad8eab2287c7cb76da027f3e9673949eec3709dc9f3fd0e3ae9ab4548.m3u8 +CCTV9,https://epg.pw/stream/703c0af497d666a2d6b6c245e1487acf4a5e1eca1e25c82595bad5cde7bb3600.m3u8 +CCTV9,https://epg.pw/stream/6e15c93f3f9b1acaf6783b0b1a81b84b81181db27b7541281cbeff4d45aa96f5.m3u8 +CCTV9,https://epg.pw/stream/ea81fc0f2fac864a17a10c1a7f4d1a32258b45f78172eb9177e7b60db8c9e9b2.m3u8 +CCTV9,https://epg.pw/stream/b47a3cc12c2fb1146037bcd9efbf20a23f18dc1815060ccba28410c95abe38d9.m3u8 +CCTV9,https://epg.pw/stream/7be75e9d2cac79195be1bcf6a832fecad019d33d83a8f002ab1f7aa70e4abfd9.m3u8 +CCTV9,https://epg.pw/stream/970c5e93763e396991b000efbe3e2514ecdf09d5d43970fb1befcc46fdda5a88.m3u8 +CCTV9,https://epg.pw/stream/d090313556ba422cd51142acc27df53a5a2ac78f654abd3630a93ee2fa22cb51.m3u8 +CCTV9,https://epg.pw/stream/8ed9d7c3d80e951d144c16e49df97faccee81760765d6c44cbde00668cc98bf6.m3u8 +CCTV9,https://epg.pw/stream/dffb0bf94d817668a2a1e69554f375454d60d8c5a13cca40472edf682b38ecbd.m3u8 +CCTV9,https://epg.pw/stream/9795b80e68496fc07137b3cb2e530bcac9a353550d64dfa84a65ef2b845b54b7.m3u8 +CCTV10,https://epg.pw/stream/65a98eb1bc5fc38505f2c025c2f0c88f31429e43104486845616deb65bf9c895.m3u8 +CCTV10,https://epg.pw/stream/401de7367171f8520986809ac44477892e5b1a44b6b1be3a26f7abd3ee06543f.m3u8 +CCTV10,https://epg.pw/stream/cc782ceeaaa1103be2593c8ad493ee337d4abd4f903f28d9fa21016020914069.m3u8 +CCTV10,https://epg.pw/stream/9de0bef9e9dd470c9290b2b3acec6ebe2a675cb48b8ed646498673e98af00659.m3u8 +CCTV10,https://epg.pw/stream/c204aa368ad71a02d82a4c38ec4aed8274d5e6fb605cf89b92b744b701031641.m3u8 +CCTV10,https://epg.pw/stream/fc095c2e45f516623d6bf521076f6599f916db498d61c38dca8d9a7c7a626f62.m3u8 +CCTV10,https://epg.pw/stream/29806059eb936e2abfc8b61bd53f1b6fe901050316c0a6c9e9b03df8f6e48eda.m3u8 +CCTV10,https://epg.pw/stream/e870050e79faf90d424c5b864c075bb54d74c5ad53e47ff5e5b256967332a861.m3u8 +CCTV10,https://epg.pw/stream/702a248005dd0225d8ed1dfb970e3a9bf4c3c41c0369865e4844b6130b4ff0d0.m3u8 +CCTV11,https://epg.pw/stream/6ba4b8f02bff74ce5171e23abaeba2663203fa82ab49744698d429566f706afe.m3u8 +CCTV11,https://epg.pw/stream/6f61eba32746c798d391420aca7d2930c935f7b1685d0658779afebd1a7bd7e8.m3u8 +CCTV11,https://epg.pw/stream/d4738f1169eee02cdecc574ad792d73d59b14625041534857a4b2b5307d805ca.m3u8 +CCTV11,https://epg.pw/stream/1980a78116511f29dafdfa41489fce7e543496c6b77c79ae56edeb3406470caa.m3u8 +CCTV11,https://epg.pw/stream/e8cb58c512c39793bc5ee70927943686afee340bb88e6eb248c59cb66f486ab5.m3u8 +CCTV11,https://epg.pw/stream/b02e1cf7cf2d09293117e05e8f4d01d41f446e0421d1322ea2d837833b0cfab3.m3u8 +CCTV11,https://epg.pw/stream/bc7a1eb4400808493910d62acee1241f087ccb3119f4062ccba3a51c2cd5c7ca.m3u8 +CCTV11,https://epg.pw/stream/605faef0eb1fa45fe01a821b6f36921947c09db096d950b9579686eaba936eea.m3u8 +CCTV11,https://epg.pw/stream/6bd8aef957f073e623819531540eb8a82b74577139a1cefc74ade6b198de5120.m3u8 +CCTV12,https://epg.pw/stream/61ec8e0d4e9bc58f9bcf51be1930765b2a6a982ecd21f383dc33cb85d1422a72.m3u8 +CCTV12,https://epg.pw/stream/51337667e5647403507b5d7923c277b8154168e635f0401f2a4221c4d2ef9861.m3u8 +CCTV12,https://epg.pw/stream/73e76f84f85f78d63807bfb8e51dff03850f7d1cafd1c6521d6eb45272bc4ead.m3u8 +CCTV12,https://epg.pw/stream/6f4520a649957c1068efd36c848b994de2752266a929a4f9a50dba84b9baf9b7.m3u8 +CCTV12,https://epg.pw/stream/b73ee2b727afd85eba854a5fed7ea89a3d35e04d7bc047e3189539033a645bfa.m3u8 +CCTV12,https://epg.pw/stream/c99788db623352c3037b4420e8be2def471002262ad20a2699a96248a6f3835b.m3u8 +CCTV12,https://epg.pw/stream/b6322d2366419f8dc6b9c22f706707832b478b77a483eee013670df2ab6d396e.m3u8 +CCTV12,https://epg.pw/stream/582d8a9690ce72b7c6c321c1963f47ac34af5a23135782a4d39e2aa5676f8b02.m3u8 +CCTV12,https://epg.pw/stream/aedb71e61961cd2a5a5b9a8a83b8ae489c9408e6b420593aecb92cc36de628fe.m3u8 +CCTV12,https://epg.pw/stream/901a39546fb308f54fff8b3949e72914fce24269b843adb55d79a7992c48687a.m3u8 +CCTV13,https://epg.pw/stream/f629fae6f89c08c116b32cf491f47d33f94b5b5df4f65602efa060a66a8f27bf.m3u8 +CCTV13,https://epg.pw/stream/ba03b7023fb49debb5270bb48536097fc8377d6c29dd6ec42d7f1fac7e63723c.m3u8 +CCTV13,https://epg.pw/stream/46bbc0749a36629831e13e3584e254bdc359e2bc0e42f4b7e7706529599ca7f5.m3u8 +CCTV13,https://epg.pw/stream/864260dae46a78acb1e8ed369525d1c3b8bc16aa69c8789aea0bccf831b6ac40.m3u8 +CCTV13,https://epg.pw/stream/35b1968ac8f696e98cdd72b2e403b67f7bae0ae393ee693f278a245625e4ce9f.m3u8 +CCTV13,https://epg.pw/stream/d8d86dede808358d248bad6c290eba43f63be54e467ea3865a0140b3fb9e5f25.m3u8 +CCTV13,https://epg.pw/stream/8d8f5970c3388f0b49026ce8ed37a9ab37e33a9d29b7dd4152a05c1332ccc78b.m3u8 +CCTV14,https://epg.pw/stream/c375661a94c310dd112505c98740c9917785676f84443adf5246edaa1d5de485.m3u8 +CCTV14,https://epg.pw/stream/3cb65b76db2d276d37838b0933586c787af9cd11aeac524d3b7a4bb67bcd2d8d.m3u8 +CCTV14,https://epg.pw/stream/aa2dd2bceb8f1a2b34aacb4349b88e09153349fb5699ae85c7ed94daaaa357c4.m3u8 +CCTV14,https://epg.pw/stream/6dbe9409e344cd6ab113ba8cb1d0f675f7c9e00b968f8e80a5b2f344c22bb030.m3u8 +CCTV14,https://epg.pw/stream/5d7dfa5ebfe90c78b537cdc5dd77be50a3ed19ffe163aa50de5f4d79dd2ab3db.m3u8 +CCTV14,https://epg.pw/stream/b64b2a518a4639f46d8b82c7f2afa1bfa91e95eb64659a4f75d421357f20a18b.m3u8 +CCTV14,https://epg.pw/stream/9c73daa5c22a14745357255f55b73b65ab6bab976d1309bfe949de363622e36a.m3u8 +CCTV14,https://epg.pw/stream/539956ff2a33c1db4e987b4eaf557518677475c601fa92c0573c6bd0c5cefd09.m3u8 +CCTV14,https://epg.pw/stream/c755c8b59abcef5aaecb004b0e51c1570726b42aabef06d7a8d81fb3a8a2f6ee.m3u8 +CCTV14,https://epg.pw/stream/81b7797c31f3ca9a91e207b707f88027d93cf50d35999fc2e33c24e9bf30d709.m3u8 +CCTV15,https://epg.pw/stream/b2b98617f94df23cf609a6968e6f1b88fa99e9a76c19688a3efeb4dfbd4234d9.m3u8 +CCTV15,https://epg.pw/stream/f0832cfdd1d45cfe7bb3b215568b69269405307d5a06171ee087ac3c154ba14c.m3u8 +CCTV15,https://epg.pw/stream/6136e564e2ccb164dd67db8efec99abbd1359f18b5f241b11c2d354821fbd000.m3u8 +CCTV15,https://epg.pw/stream/d239fb84263e881c367c092224d5a5bbc9bc8f6096875c7506df050d8106d32c.m3u8 +CCTV15,https://epg.pw/stream/ecd4b5aa3960959c33cfdf65566e3bc1130992aefe7227dbfae0ca8f9afe055a.m3u8 +CCTV15,https://epg.pw/stream/f5c27d1a459fea9505fe0eaff71c5f8b814a01876be632f11f1251180cd55f9b.m3u8 +CCTV15,https://epg.pw/stream/5f1429825ae0c5f9b95444074454a0766d6278fedbe4ce22479f03e83f540e10.m3u8 +CCTV15,https://epg.pw/stream/cb3c72e7254e40411c7136bafb32bd8e1b6f4739c265c52851cff323a6a22b77.m3u8 +CCTV15,https://epg.pw/stream/b17180549193f12c2104b05f75c124ca1702e96917aba74a23c8ac88fd7ea0df.m3u8 +CCTV16,https://epg.pw/stream/dc455aa85ec9ad8bfc603bb74d352f026ad3f2b30bcacc0a5c1d6cb5e4dd9763.m3u8 +CCTV16,https://epg.pw/stream/88432130a32875dc03aab0604ff31c6291c75f22b58243882c6a2b0059b9289f.m3u8 +CCTV16,https://epg.pw/stream/50b58af32d45bb6f2f6acfb0cf3def87a6313f0d634098de631492c395200c89.m3u8 +CCTV16,https://epg.pw/stream/88a94883a639d103b2c83ed37971bb392f6e718e4c79978ddc93cd5f4a0deaed.m3u8 +CCTV16,https://epg.pw/stream/4d5449c8fe787897c9d3d28c3eb9fc309c7a012ca19f3cc97a579dad2c51d8f9.m3u8 +CCTV16,https://epg.pw/stream/9eeb49b6d1048ea7c05421a7409300f43ed5695e937a78feb1cc9eb1cb4de5b4.m3u8 +CCTV16,https://epg.pw/stream/3d549f839d8441032ab1a90e8897e7384687d7b39cced4f60ea3e14e436868e9.m3u8 +CCTV16,https://epg.pw/stream/ef0fd5d8e6b94b53627f9bb92127c5505ea28fb9b0a824956c635db17942c10d.m3u8 +CCTV16,https://epg.pw/stream/2e4b122dcdbbeecd30ed99b9f8d9885a742a86b40fd29cc352a4cdc1a0b430b4.m3u8 +CCTV17,https://epg.pw/stream/dddefc79612b67b3cf82b2c6e138c410f87628a60ce50a269f6e8dec056c23a8.m3u8 +CCTV17,https://epg.pw/stream/e708db23c72b7ff54d1311af9347bd7a3d20831bc1554f0aa3adfd27beb3510f.m3u8 +CCTV17,https://epg.pw/stream/4160a9b21b0715860c7326056838e13d6811ca51159391f2739ed43be05a53f2.m3u8 +CCTV17,https://epg.pw/stream/893840fd7b46528717f4f90cb37bde95455239ad7879a5860838530bca5f793e.m3u8 +CCTV17,https://epg.pw/stream/aeea73d4260cfc500cbdc518186e56f90037a5113f99e5fb541ba310bb2e7caf.m3u8 +CCTV17,https://epg.pw/stream/678eec3ec8151c27eb362dbdc70bce12b75ce22b1ac992114846490317acb2fc.m3u8 +CCTV17,https://epg.pw/stream/2dcb0915f9efa1a9d6895edafb8e144553f45f7115399abb19adac5c062ea1c3.m3u8 +CCTV17,https://epg.pw/stream/b6866815f985fb51d1a8c195ef73afbd858d740c62358e35b9f665896b40dd91.m3u8 +💝全球频道👉全网,#genre# +环球电视,http://zb.xzxwhcb.com:9999/hls/world.m3u8 +中國環球,http://live.cgtn.com/500/prog_index.m3u8 +CNA新闻,https://d2e1asnsl7br7b.cloudfront.net/7782e205e72f43aeb4a48ec97f66ebbe/index_5.m3u8 +HBtv老挝,http://hikvision.city:880/HBTV.m3u8 +半岛新闻,http://live-hls-web-aja.getaj.net/AJA/02.m3u8 +半岛新闻,http://live-hls-web-aje.getaj.net/AJE/01.m3u8 +俄罗斯频,https://rt-glb.rttv.com/dvr/rtnews/playlist_4500Kb.m3u8 +韩国国防,http://mediaworks.dema.mil.kr:1935/live_edge/cudo.sdp/playlist.m3u8 +韩国新闻,http://amdlive.ctnd.com.edgesuite.net:80/arirang_1ch/smil:arirang_1ch.smil/chunklist_b2256000_sleng.m3u8 +日语新闻,https://n24-cdn-live.ntv.co.jp/ch01/index_high.m3u8 +环球频道,http://live.cgtn.com/500/prog_index.m3u8 +动物频道,https://d18dyiwu97wm6q.cloudfront.net/playlist2160p.m3u8 +💝湾湾频道👉全网,#genre# +民视,rtmp://f13h.mine.nu/sat/tv051 +台视,rtmp://f13h.mine.nu/sat/tv071 +中视,rtmp://f13h.mine.nu/sat/tv091 +华视,rtmp://f13h.mine.nu/sat/tv111 +公视,http://194.87.101.118/live.m3u8?c=8 +非凡新闻,rtmp://f13h.mine.nu/sat/tv581 +东森超视,rtmp://f13h.mine.nu/sat/tv331 +纬来体育,rtmp://f13h.mine.nu/sat/tv721 +纬来育乐,rtmp://f13h.mine.nu/sat/tv701 +纬来日本,rtmp://f13h.mine.nu/sat/tv771 +MoMo综合,rtmp://f13h.mine.nu/sat/tv761 +DAZN体育-1,rtmp://f13h.mine.nu/sat/tv731 +DAZN体育-2,rtmp://f13h.mine.nu/sat/tv741 +💝咪咕视频👉全网,#genre# +东方卫视,http://dp.sxtv.top:88/md/migu.php?id=dfws +重庆卫视,http://dp.sxtv.top:88/md/migu.php?id=cqws +吉林卫视,http://dp.sxtv.top:88/md/migu.php?id=jlws +辽宁卫视,http://dp.sxtv.top:88/md/migu.php?id=lnws +内蒙古卫视,http://dp.sxtv.top:88/md/migu.php?id=nmws +宁夏卫视,http://dp.sxtv.top:88/md/migu.php?id=nxws +甘肃卫视,http://dp.sxtv.top:88/md/migu.php?id=gsws +青海卫视,http://dp.sxtv.top:88/md/migu.php?id=qhws +陕西卫视,http://dp.sxtv.top:88/md/migu.php?id=sxws +山东卫视,http://dp.sxtv.top:88/md/migu.php?id=sdws +河南卫视,http://dp.sxtv.top:88/md/migu.php?id=hnws +湖北卫视,http://dp.sxtv.top:88/md/migu.php?id=hubws +湖南卫视,http://dp.sxtv.top:88/md/migu.php?id=hunws +江西卫视,http://dp.sxtv.top:88/md/migu.php?id=jxws +江苏卫视,http://dp.sxtv.top:88/md/migu.php?id=jsws +东南卫视,http://dp.sxtv.top:88/md/migu.php?id=dnws +海峡卫视,http://dp.sxtv.top:88/md/migu.php?id=hxws +广东卫视,http://dp.sxtv.top:88/md/migu.php?id=gdws +大湾区卫视,http://dp.sxtv.top:88/md/migu.php?id=dwqws +广西卫视,http://dp.sxtv.top:88/md/migu.php?id=gxws +云南卫视,http://dp.sxtv.top:88/md/migu.php?id=ynws +贵州卫视,http://dp.sxtv.top:88/md/migu.php?id=gzws +新疆卫视,http://dp.sxtv.top:88/md/migu.php?id=xjws +西藏卫视,http://dp.sxtv.top:88/md/migu.php?id=xzws +海南卫视,http://dp.sxtv.top:88/md/migu.php?id=hinws +四海钓鱼,http://dp.sxtv.top:88/md/migu.php?id=shdy +CHC动作电影,http://dp.sxtv.top:88/md/migu.php?id=chcdzdy +CHC家庭影院,http://dp.sxtv.top:88/md/migu.php?id=chcjtdy +东方影视,hhttp://dp.sxtv.top:88/md/migu.php?id=dfys +上海新闻综合,http://dp.sxtv.top:88/md/migu.php?id=shxwzh +上海第一财经,http://dp.sxtv.top:88/md/migu.php?id=dycj +上视纪实人文,http://dp.sxtv.top:88/md/migu.php?id=shjsrw +上海外语,http://dp.sxtv.top:88/md/migu.php?id=shics +法治天地,http://dp.sxtv.top:88/md/migu.php?id=fztd +劲爆体育,http://dp.sxtv.top:88/md/migu.php?id=jbty +魅力足球,http://dp.sxtv.top:88/md/migu.php?id=mlzq +乐游,http://dp.sxtv.top:88/md/migu.php?id=ly +欢笑剧场,http://dp.sxtv.top:88/md/migu.php?id=hxjc +七彩戏剧,http://dp.sxtv.top:88/md/migu.php?id=qcxj +游戏风云,http://dp.sxtv.top:88/md/migu.php?id=yxfy +临洮电视台,http://dp.sxtv.top:88/md/migu.php?id=lttv +江苏城市,http://dp.sxtv.top:88/md/migu.php?id=jscs +江苏综艺,http://dp.sxtv.top:88/md/migu.php?id=jszy +江苏影视,http://dp.sxtv.top:88/md/migu.php?id=jsys +江苏公共新闻,http://dp.sxtv.top:88/md/migu.php?id=jsggxw +江苏国际,http://dp.sxtv.top:88/md/migu.php?id=jsgj +江苏教育,http://dp.sxtv.top:88/md/migu.php?id=jsjy +江苏体育休闲,http://dp.sxtv.top:88/md/migu.php?id=jstyxx +优漫卡通,http://dp.sxtv.top:88/md/migu.php?id=ymkt +南京新闻综合,http://dp.sxtv.top:88/md/migu.php?id=njxwzh +南京教科,http://dp.sxtv.top:88/md/migu.php?id=njkj +南京十八,http://dp.sxtv.top:88/md/migu.php?id=njsb +淮安新闻综合,http://dp.sxtv.top:88/md/migu.php?id=haxwzh +连云港新闻综合,http://dp.sxtv.top:88/md/migu.php?id=lygxwzh +苏州新闻综合,http://dp.sxtv.top:88/md/migu.php?id=szxwzh +泰州新闻综合,http://dp.sxtv.top:88/md/migu.php?id=tzxwzh +宿迁新闻综合,http://dp.sxtv.top:88/md/migu.php?id=sqxwzh +徐州新闻综合,http://dp.sxtv.top:88/md/migu.php?id=xzxwzh +广东影视,http://dp.sxtv.top:88/md/migu.php?id=gdys +嘉佳卡通,http://dp.sxtv.top:88/md/migu.php?id=jjkt +24小时亚洲杯频道,http://dp.sxtv.top:88/md/migu.php?id=24hyzb +CBA经典,http://dp.sxtv.top:88/md/migu.php?id=cbajd +掼蛋精英赛,http://dp.sxtv.top:88/md/migu.php?id=gdjys +高清大片,http://dp.sxtv.top:88/md/migu.php?id=gqdp +和平精英赛事,http://dp.sxtv.top:88/md/migu.php?id=hpjxss +红色轮播台,http://dp.sxtv.top:88/md/migu.php?id=hslbt +经典动画大集合,http://dp.sxtv.top:88/md/migu.php?id=jddhdjh +军事迷必看大片,http://dp.sxtv.top:88/md/migu.php?id=jsdp +历届春晚回顾,http://dp.sxtv.top:88/md/migu.php?id=ljcwhg +咪咕24小时体育台,http://dp.sxtv.top:88/md/migu.php?id=mg24hty +玫瑰轮播台,http://dp.sxtv.top:88/md/migu.php?id=mglbt +NBA经典,http://dp.sxtv.top:88/md/migu.php?id=nbajd +欧洲足球风云,http://dp.sxtv.top:88/md/migu.php?id=ozzqfy +全民乒乓,http://dp.sxtv.top:88/md/migu.php?id=qmpp +热剧联播,http://dp.sxtv.top:88/md/migu.php?id=rjlb +赛事最经典,http://dp.sxtv.top:88/md/migu.php?id=sszjd +体坛名栏汇,http://dp.sxtv.top:88/md/migu.php?id=ttmlh +UFC格斗精选,http://dp.sxtv.top:88/md/migu.php?id=ufcgdjx +五大联赛经典,http://dp.sxtv.top:88/md/migu.php?id=wdlsjd +乡村振兴,http://dp.sxtv.top:88/md/migu.php?id=xczx +幸福中国年,http://dp.sxtv.top:88/md/migu.php?id=xfzgn +新片放映厅,http://dp.sxtv.top:88/md/migu.php?id=xpfyt +英雄联盟赛事,http://dp.sxtv.top:88/md/migu.php?id=yxlmss +周杰伦现场,http://dp.sxtv.top:88/md/migu.php?id=zjlxc +最强综艺趴,http://dp.sxtv.top:88/md/migu.php?id=zqzyp + +💝山东烟台👉电信,#genre# +CCTV_1,http://58.57.21.166:9901/tsfile/live/0001_1.m3u8 +CCTV_2,http://58.57.21.166:9901/tsfile/live/0002_1.m3u8 +CCTV_3,http://58.57.21.166:9901/tsfile/live/0003_1.m3u8 +CCTV_4,http://58.57.21.166:9901/tsfile/live/0004_1.m3u8 +CCTV_5,http://58.57.21.166:9901/tsfile/live/0005_1.m3u8 +CCTV_5+,http://58.57.21.166:9901/tsfile/live/0016_1.m3u8 +CCTV_6,http://58.57.21.166:9901/tsfile/live/0006_1.m3u8 +CCTV_7,http://58.57.21.166:9901/tsfile/live/0007_1.m3u8 +CCTV_8,http://58.57.21.166:9901/tsfile/live/0008_1.m3u8 +CCTV_9,http://58.57.21.166:9901/tsfile/live/0009_1.m3u8 +CCTV_10,http://58.57.21.166:9901/tsfile/live/0010_1.m3u8 +CCTV_11,http://58.57.21.166:9901/tsfile/live/0011_1.m3u8 +CCTV_12,http://58.57.21.166:9901/tsfile/live/0012_1.m3u8 +CCTV_13,http://58.57.21.166:9901/tsfile/live/0013_1.m3u8 +CCTV_14,http://58.57.21.166:9901/tsfile/live/0014_1.m3u8 +CCTV_15,http://58.57.21.166:9901/tsfile/live/0015_1.m3u8 +CCTV_17,http://58.57.21.166:9901/tsfile/live/0019_1.m3u8 +山东影视,http://58.57.21.166:9901/tsfile/live/1004_1.m3u8 +山东卫视,http://58.57.21.166:9901/tsfile/live/0131_1.m3u8 +北京卫视,http://58.57.21.166:9901/tsfile/live/0122_1.m3u8 +东方卫视,http://58.57.21.166:9901/tsfile/live/0107_1.m3u8 +江苏卫视,http://58.57.21.166:9901/tsfile/live/0127_1.m3u8 +浙江卫视,http://58.57.21.166:9901/tsfile/live/0124_1.m3u8 +湖南卫视,http://58.57.21.166:9901/tsfile/live/0128_1.m3u8 +深圳卫视,http://58.57.21.166:9901/tsfile/live/0126_1.m3u8 +广东卫视,http://58.57.21.166:9901/tsfile/live/0125_1.m3u8 +重庆卫视,http://58.57.21.166:9901/tsfile/live/0142_1.m3u8 +陕西卫视,http://58.57.21.166:9901/tsfile/live/0136_1.m3u8 +四川卫视,http://58.57.21.166:9901/tsfile/live/0123_1.m3u8 +河南卫视,http://58.57.21.166:9901/tsfile/live/0139_1.m3u8 +云南卫视,http://58.57.21.166:9901/tsfile/live/0119_1.m3u8 +吉林卫视,http://58.57.21.166:9901/tsfile/live/0116_1.m3u8 +新疆卫视,http://58.57.21.166:9901/tsfile/live/0110_1.m3u8 +内蒙古视,http://58.57.21.166:9901/tsfile/live/0109_1.m3u8 +安徽卫视,http://58.57.21.166:9901/tsfile/live/0130_1.m3u8 +湖北卫视,http://58.57.21.166:9901/tsfile/live/0132_1.m3u8 +辽宁卫视,http://58.57.21.166:9901/tsfile/live/0121_1.m3u8 +天津卫视,http://58.57.21.166:9901/tsfile/live/0135_1.m3u8 +河北卫视,http://58.57.21.166:9901/tsfile/live/0117_1.m3u8 +东南卫视,http://58.57.21.166:9901/tsfile/live/0137_1.m3u8 +广西卫视,http://58.57.21.166:9901/tsfile/live/0113_1.m3u8 +山西卫视,http://58.57.21.166:9901/tsfile/live/0118_1.m3u8 +黑龙江视,http://58.57.21.166:9901/tsfile/live/0143_1.m3u8 +江西卫视,http://58.57.21.166:9901/tsfile/live/0138_1.m3u8 +贵州卫视,http://58.57.21.166:9901/tsfile/live/0120_1.m3u8 +青海卫视,http://58.57.21.166:9901/tsfile/live/0140_1.m3u8 +宁夏卫视,http://58.57.21.166:9901/tsfile/live/0112_1.m3u8 +甘肃卫视,http://58.57.21.166:9901/tsfile/live/0141_1.m3u8 +海南卫视,http://58.57.21.166:9901/tsfile/live/1000_1.m3u8 +西藏卫视,http://58.57.21.166:9901/tsfile/live/0111_1.m3u8 + +💝湖北频道👉全网,#genre# +荆州公共,http://jingzhou-live21.cjyun.org/10085/s10085-jingzhou-tv02.m3u8?auth_key=1735660799-0-0-1963c999651ea135890d90bcc5ae172d +荆州陇上,http://jingzhou-live21.cjyun.org/10085/s10085-jingzhou-tv03.m3u8?auth_key=1735660799-0-0-73625822ff2c77aefa1589e94281edad +荆州综合,http://jingzhou-live21.cjyun.org:80/10085/s10085-jingzhou-tv01.m3u8?auth_key=1735660799-0-0-e0477d4b5bc584e7518a1bde13892cbe +十堰新闻,http://p8.vzan.com/slowlive/034028687228317362/live.m3u8 +十堰经济,https://p8.vzan.com/slowlive/701367497774448672/live.m3u8 +江夏新闻,http://59.175.226.142:280/gb28181/xwzh.m3u8?zhubd +武汉新闻,http://stream.appwuhan.com/1tzb/sd/live.m3u8 +武汉生活,http://stream.appwuhan.com/3tzb/sd/live.m3u8 +武汉经济,http://stream.appwuhan.com/4tzb/sd/live.m3u8 +武汉教育,http://stream.appwuhan.com/jyzb/sd/live.m3u8 +十堰新闻,http://p8.vzan.com/slowlive/034028687228317362/live.m3u8 +十堰新闻,https://p8.vzan.com/slowlive/034028687228317362/live.m3u8?zbid=351104&tpid=868100086 +十堰经济,https://p8.vzan.com/slowlive/701367497774448672/live.m3u8?zbid=351104&tpid=1550600621 +江夏新闻,http://59.175.226.142:280/gb28181/xwzh.m3u8 +池州综合,http://wjsp.chiznews.com:8037/live/xwzh.m3u8 +池州生活,http://wjsp.chiznews.com:8037/live/wjsh.m3u8 +扬州综合,https://cm-wshls.homecdn.com/live/8bb.m3u8 +扬州城市,https://cm-wshls.homecdn.com/live/8bd.m3u8 +扬州生活,https://cm-wshls.homecdn.com/live/8bf.m3u8 +扬州邗江,https://cm-wshls.homecdn.com/live/8c3.m3u8 +💝卫视频道👉全网,#genre# +北京卫视,http://cdn.jdshipin.com:8880/ysp.php?id=bjws +湖南卫视,http://cdn.jdshipin.com:8880/ysp.php?id=fnws +东方卫视,http://cdn.jdshipin.com:8880/ysp.php?id=dfws +浙江卫视,http://cdn.jdshipin.com:8880/ysp.php?id=zjws +江苏卫视,http://cdn.jdshipin.com:8880/ysp.php?id=jsws +深圳卫视,http://cdn.jdshipin.com:8880/ysp.php?id=szws +黑龙江卫视,http://cdn.jdshipin.com:8880/ysp.php?id=hljws +辽宁卫视,http://cdn.jdshipin.com:8880/ysp.php?id=lnws +安微卫视,http://cdn.jdshipin.com:8880/ysp.php?id=ahws +重庆卫视,http://cdn.jdshipin.com:8880/ysp.php?id=cqws +东南卫视,http://cdn.jdshipin.com:8880/ysp.php?id=dnws +广西卫视,http://cdn.jdshipin.com:8880/ysp.php?id=gxws +貴州卫视,http://cdn.jdshipin.com:8880/ysp.php?id=gzws +河北卫视,http://cdn.jdshipin.com:8880/ysp.php?id=hbws +河南卫视,http://cdn.jdshipin.com:8880/ysp.php?id=hnws +湖北卫视,http://cdn.jdshipin.com:8880/ysp.php?id=fbws +江西卫视,http://cdn.jdshipin.com:8880/ysp.php?id=jxws +山東卫视,http://cdn.jdshipin.com:8880/ysp.php?id=sdws +四川卫视,http://cdn.jdshipin.com:8880/ysp.php?id=scws +天津卫视,http://cdn.jdshipin.com:8880/ysp.php?id=tjws +新疆卫视,http://cdn.jdshipin.com:8880/ysp.php?id=xjws +海南卫视,http://cdn.jdshipin.com:8880/ysp.php?id=hinws + +湖南卫视,http://ygbh.live/migu.php?id=hunws +江苏卫视,http://ygbh.live/migu.php?id=jsws +东方卫视,http://ygbh.live/migu.php?id=dfws +重庆卫视,http://ygbh.live/migu.php?id=cqws +吉林卫视,http://ygbh.live/migu.php?id=jlws +辽宁卫视,http://ygbh.live/migu.php?id=lnws +内蒙古卫视,http://ygbh.live/migu.php?id=nmws +宁夏卫视,http://ygbh.live/migu.php?id=nxws +甘肃卫视,http://ygbh.live/migu.php?id=gsws +青海卫视,http://ygbh.live/migu.php?id=qhws +陕西卫视,http://ygbh.live/migu.php?id=sxws +山东卫视,http://ygbh.live/migu.php?id=sdws +河南卫视,http://ygbh.live/migu.php?id=hnws +湖北卫视,http://ygbh.live/migu.php?id=hubws +江西卫视,http://ygbh.live/migu.php?id=jxws +东南卫视,http://ygbh.live/migu.php?id=dnws +海峡卫视,http://ygbh.live/migu.php?id=hxws +广东卫视,http://ygbh.live/migu.php?id=gdws +大湾区卫视,http://ygbh.live/migu.php?id=dwqws +广西卫视,http://ygbh.live/migu.php?id=gxws +云南卫视,http://ygbh.live/migu.php?id=ynws +贵州卫视,http://ygbh.live/migu.php?id=gzws +新疆卫视,http://ygbh.live/migu.php?id=xjws +西藏卫视,http://ygbh.live/migu.php?id=xzws +海南卫视,http://ygbh.live/migu.php?id=hinws +东方卫视,http://dp.sxtv.top:88/md/migu.php?id=dfws +重庆卫视,http://dp.sxtv.top:88/md/migu.php?id=cqws +吉林卫视,http://dp.sxtv.top:88/md/migu.php?id=jlws +辽宁卫视,http://dp.sxtv.top:88/md/migu.php?id=lnws +内蒙古卫视,http://dp.sxtv.top:88/md/migu.php?id=nmws +宁夏卫视,http://dp.sxtv.top:88/md/migu.php?id=nxws +甘肃卫视,http://dp.sxtv.top:88/md/migu.php?id=gsws +青海卫视,http://dp.sxtv.top:88/md/migu.php?id=qhws +陕西卫视,http://dp.sxtv.top:88/md/migu.php?id=sxws +山东卫视,http://dp.sxtv.top:88/md/migu.php?id=sdws +河南卫视,http://dp.sxtv.top:88/md/migu.php?id=hnws +湖北卫视,http://dp.sxtv.top:88/md/migu.php?id=hubws +湖南卫视,http://dp.sxtv.top:88/md/migu.php?id=hunws +江西卫视,http://dp.sxtv.top:88/md/migu.php?id=jxws +江苏卫视,http://dp.sxtv.top:88/md/migu.php?id=jsws +东南卫视,http://dp.sxtv.top:88/md/migu.php?id=dnws +海峡卫视,http://dp.sxtv.top:88/md/migu.php?id=hxws +广东卫视,http://dp.sxtv.top:88/md/migu.php?id=gdws +大湾区卫视,http://dp.sxtv.top:88/md/migu.php?id=dwqws +广西卫视,http://dp.sxtv.top:88/md/migu.php?id=gxws +云南卫视,http://dp.sxtv.top:88/md/migu.php?id=ynws +贵州卫视,http://dp.sxtv.top:88/md/migu.php?id=gzws +新疆卫视,http://dp.sxtv.top:88/md/migu.php?id=xjws +西藏卫视,http://dp.sxtv.top:88/md/migu.php?id=xzws +海南卫视,http://dp.sxtv.top:88/md/migu.php?id=hinws + +湖南卫视,http://120.211.119.222:8899/hls/19/index.m3u8 +浙江卫视,http://120.211.119.222:8899/hls/26/index.m3u8 +江苏卫视,http://120.211.119.222:8899/hls/20/index.m3u8 +东方卫视,http://120.211.119.222:8899/hls/32/index.m3u8 +广东卫视,http://120.211.119.222:8899/hls/25/index.m3u8 +广西卫视,http://120.211.119.222:8899/hls/35/index.m3u8 +深圳卫视,http://120.211.119.222:8899/hls/23/index.m3u8 +河南卫视,http://120.211.119.222:8899/hls/48/index.m3u8 +河北卫视,http://120.211.119.222:8899/hls/18/index.m3u8 +北京卫视,http://120.211.119.222:8899/hls/21/index.m3u8 +天津卫视,http://120.211.119.222:8899/hls/22/index.m3u8 +辽宁卫视,http://120.211.119.222:8899/hls/28/index.m3u8 +吉林卫视,http://120.211.119.222:8899/hls/36/index.m3u8 +安徽卫视,http://120.211.119.222:8899/hls/29/index.m3u8 +山东卫视,http://120.211.119.222:8899/hls/24/index.m3u8 +四川卫视,http://120.211.119.222:8899/hls/31/index.m3u8 +重庆卫视,http://120.211.119.222:8899/hls/33/index.m3u8 +湖北卫视,http://120.211.119.222:8899/hls/30/index.m3u8 +山西卫视,http://120.211.119.222:8899/hls/38/index.m3u8 +陕西卫视,http://120.211.119.222:8899/hls/37/index.m3u8 +云南卫视,http://120.211.119.222:8899/hls/47/index.m3u8 +贵州卫视,http://120.211.119.222:8899/hls/49/index.m3u8 +东南卫视,http://120.211.119.222:8899/hls/34/index.m3u8 +旅游卫视,http://120.211.119.222:8899/hls/45/index.m3u8 +青海卫视,http://120.211.119.222:8899/hls/40/index.m3u8 +宁夏卫视,http://120.211.119.222:8899/hls/41/index.m3u8 +新疆卫视,http://120.211.119.222:8899/hls/43/index.m3u8 +西藏卫视,http://120.211.119.222:8899/hls/42/index.m3u8 +黑龙江卫视,http://120.211.119.222:8899/hls/27/index.m3u8 +内蒙古卫视,http://120.211.119.222:8899/hls/39/index.m3u8 +广东卫视,http://112.235.200.126:9901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0 +北京卫视,http://112.235.200.126:9901/tsfile/live/1009_1.m3u8?key=txiptv&playlive=1&authid=0 +东南卫视,http://112.235.200.126:9901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=1&authid=0 +东方卫视,http://112.235.200.126:9901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0 +天津卫视,http://112.235.200.126:9901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0 +安徽卫视,http://112.235.200.126:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0 +山东卫视,http://112.235.200.126:9901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0 +江苏卫视,http://112.235.200.126:9901/tsfile/live/0127_1.m3u8?key=txiptv&playlive=1&authid=0 +江西卫视,http://112.235.200.126:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0 +浙江卫视,http://112.235.200.126:9901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0 +湖北卫视,http://112.235.200.126:9901/tsfile/live/0132_1.m3u8?key=txiptv&playlive=1&authid=0 +湖南卫视,http://112.235.200.126:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0 +黑龙江卫视,http://112.235.200.126:9901/tsfile/live/0143_1.m3u8?key=txiptv&playlive=1&authid=0 +甘肃卫视,http://117.27.190.42:9998/tsfile/live/23277_1.m3u8?key=txiptv&playlive=1&authid=0 +陕西卫视,http://61.136.67.238:50085/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0 +青海卫视,http://58.23.26.184:9901/tsfile/live/0140_1.m3u8?key=txiptv&playlive=1&authid=0 +海南卫视,http://117.27.190.42:9998/tsfile/live/23273_1.m3u8?key=txiptv&playlive=1&authid=0 + +广东卫视,http://59.62.8.250:9901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0 +深圳卫视,http://59.62.8.250:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0 +东方卫视,http://59.62.8.250:9901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0 +东南卫视,http://59.62.8.250:9901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=1&authid=0 +云南卫视,http://59.62.8.250:9901/tsfile/live/0119_1.m3u8?key=txiptv&playlive=1&authid=0 +北京卫视,http://59.62.8.250:9901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0 +吉林卫视,http://59.62.8.250:9901/tsfile/live/0116_1.m3u8?key=txiptv&playlive=1&authid=0 +四川卫视,http://59.62.8.250:9901/tsfile/live/0123_1.m3u8?key=txiptv&playlive=1&authid=0 +安徽卫视,http://59.62.8.250:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0 +山东卫视,http://59.62.8.250:9901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0 +山西卫视,http://59.62.8.250:9901/tsfile/live/0118_1.m3u8?key=txiptv&playlive=1&authid=0 +广西卫视,http://59.62.8.250:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0 +新疆卫视,http://59.62.8.250:9901/tsfile/live/0110_1.m3u8?key=txiptv&playlive=1&authid=0 +江西卫视,http://59.62.8.250:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0 +河北卫视,http://59.62.8.250:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0 +河南卫视,http://59.62.8.250:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0 +湖北卫视,http://59.62.8.250:9901/tsfile/live/0132_1.m3u8?key=txiptv&playlive=1&authid=0 +湖南卫视,http://59.62.8.250:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0 +甘肃卫视,http://59.62.8.250:9901/tsfile/live/0141_1.m3u8?key=txiptv&playlive=1&authid=0 +辽宁卫视,http://59.62.8.250:9901/tsfile/live/0121_1.m3u8?key=txiptv&playlive=1&authid=0 +重庆卫视,http://59.62.8.250:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0 +陕西卫视,http://59.62.8.250:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0 +黑龙江卫视,http://59.62.8.250:9901/tsfile/live/0143_1.m3u8?key=txiptv&playlive=1&authid=0 + +三沙卫视,http:/118.254.156.162:8888/udp/239.76.246.74:1234?$湖南电信主力线 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8?_upt=8b2f07cc1707359845$延边广电 +新疆卫视,http://qingcheng.pro:7890/udp/238.125.3.174:5140?$乌鲁木齐电信电信组播 +内蒙古卫视,https://livestream-bt.nmtv.cn/nmtv/2314general.m3u8?txSecret=dc348a27bd36fe1bd63562af5e7269ea&txTime=771EF880 +延边卫视,http://live.ybtvyun.com/video/s10006-44f040627ca1/index.m3u8?$延边广电 +💝卫视频道👉IPV6,#genre# + +深圳卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8 +深圳卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010068/1.m3u8 +重庆卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8 +重庆卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010053/1.m3u8 +广东卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8 +广东卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010055/1.m3u8 +北京卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8 +北京卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010143/1.m3u8 +湖南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8 +湖南卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010058/1.m3u8 +东方卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8 +东方卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010054/1.m3u8 +四川卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8 +四川卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8 +四川卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010115/1.m3u8 +天津卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8 +天津卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010069/1.m3u8 +安徽卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8 +安徽卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010041/1.m3u8 +山东卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8 +山东卫视http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010066/1.m3u8 +广西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226549/index.m3u8 +广西卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010099/1.m3u8 +江苏卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8 +江苏卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010059/1.m3u8 +江西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8 +江西卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010060/1.m3u8 +河北卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8 +河北卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010101/1.m3u8 +河南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8 +浙江卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8 +浙江卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010070/1.m3u8 +海南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8 +湖北卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8 +湖北卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010057/1.m3u8 +山西卫视,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/00000001000000060000000000000318/index.m3u8?IAS +东南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8 +东南卫视,http://[2409:8087:1a01:df::4077]:80/PLTV/88888888/224/3221225950/index.m3u8 +东南卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010096/1.m3u8 +贵州卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8 +贵州卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010100/1.m3u8 +辽宁卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.m3u8 +辽宁卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010061/1.m3u8 +黑龙江卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8 +黑龙江卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010056/1.m3u8 +内蒙古卫视,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000319/index.m3u8?IAS +宁夏卫视,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000309/index.m3u8?IAS +陕西卫视,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000313/index.m3u8?IAS +甘肃卫视,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8 +甘肃卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010098/1.m3u8 +甘肃卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8 +云南卫视,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000305/index.m3u8?IAS +云南卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010119/1.m3u8 +三沙卫视,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?IAS +青海卫视,http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225628/index.m3u8 +青海卫视,http://[2409:8087:7000:20:1000::22]:6060/000000001000/1000000002000013359/index.m3u8 +青海卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010111/1.m3u8 +新疆卫视,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225635/index.m3u8 +新疆卫视,http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000316/index.m3u8?IAS +西藏卫视,http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000317/index.m3u8?IAS +兵团卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226439/index.m3u8 +延边卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8 +大湾区卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226442/index.m3u8 +安多卫视,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8 +安多卫视,http://[2409:8087:7004:20:1000::22]:6610/yinhe/2/ch00000090990000001311/index.m3u8?virtualDomain=yinhe.live_hls.zte.com +厦门卫视,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000193/index.m3u8?IAS +康巴卫视,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8 +CETV-1,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8 +CETV-2,http://[2409:8087:1a0b:df::4013]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8 +CETV-3,http://[2409:8087:7004:20:1000::22]:6610/yinhe/2/ch00000090990000001309/index.m3u8?virtualDomain=yinhe.live_hls.zte.com +CETV-4,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8 +CGTN英语,http://live.cgtn.com/1000/prog_index.m3u8 +CGTN记录,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000528/index.m3u8?IAS +CGTN记录,https://news.cgtn.com/resource/live/document/cgtn-doc.m3u8 +爱上4K,http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000459/index.m3u8?IAS +纪实人文,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225738/index.m3u8 +纪实科教,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225729/index.m3u8 +纪实科教http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010042/1.m3u8 +卡酷少儿,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225654/index.m3u8 +卡酷少儿,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010081/1.m3u8 +金鹰卡通,http://[2409:8087:1a0b:df::4008]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225653/index.m3u8 +金鹰卡通,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000057BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0T0ZQXwaiVktPr6ILPKXqwOw2VoxnxHvBSRSzCCC3szSwIgrD0rUpRXeaqChwLXCf0 +金鹰卡通,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010107/1.m3u8 +哒啵赛事,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225675/index.m3u8 +哒啵赛事,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010125/1.m3u8 +优漫卡通,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8 +优漫卡通,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010118/1.m3u8 +哈哈炫动,http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8 +哈哈炫动,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010117/1.m3u8 +黑莓动画,http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8 +黑莓动画,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010002/1.m3u8 +黑莓电影,http://[2409:8087:1a0b:df::4014]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225743/index.m3u8 +黑莓电影,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010073/1.m3u8 +超级体育,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8 +超级体育,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010063/1.m3u8 +超级电影,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8 +超级电影,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010064/1.m3u8 +超级视剧,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225716/index.m3u8 +东北热剧,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225741/index.m3u8 +东北热剧,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010021/1.m3u8 +海外剧场,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225671/index.m3u8 +中国功夫,http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225681/index.m3u8 +中国功夫,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010087/1.m3u8 +军旅剧场,http://[2409:8087:1a0b:df::4018]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225676/index.m3u8 +军旅剧场,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010079/1.m3u8 +惊悚悬疑,http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8 +惊悚悬疑,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010077/1.m3u8 +潮妈辣婆,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225685/index.m3u8 +潮妈辣婆,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010005/1.m3u8 +精品体育,http://[2409:8087:1a0b:df::4004]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8 +精品体育,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010078/1.m3u8 +精品纪录,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225672/index.m3u8 +精品纪录,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010076/1.m3u8 +家庭剧场,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225677/index.m3u8 +家庭剧场,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010074/1.m3u8 +精品大剧,http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225670/index.m3u8 +精品大剧,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010072/1.m3u8 +军事评论,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225668/index.m3u8 +军事评论,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010080/1.m3u8 +明星大片,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225664/index.m3u8 +欢乐剧场,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225742/index.m3u8 +欢乐剧场,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010025/1.m3u8 +精品萌宠,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226505/index.m3u8 +精品萌宠,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010146/1.m3u8 +超级综艺,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225714/index.m3u8 +超级综艺,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010062/1.m3u8 +金牌综艺,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8 +金牌综艺,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010086/1.m3u8 + +CHC影迷电影,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380764b172c9/index.m3u8?m3u8_level=2 +CHC动作电影,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380763222d00/index.m3u8?m3u8_level=2 +CHC家庭影院,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807601b19dd/index.m3u8?m3u8_level=2 +北京卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8 +湖南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8 +东方卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8 +四川卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8 +天津卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8 +安徽卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8 +山东卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8 +深圳卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8 +广东卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8 +广西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226549/index.m3u8 +江苏卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8 +江西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8 +河北卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8 +河南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8 +浙江卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8 +海南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8 +湖北卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8 +山西卫视,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/00000001000000060000000000000318/index.m3u8?IAS +东南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8 +贵州卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8 +辽宁卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.m3u8 +重庆卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8 +黑龙江卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8 +内蒙古卫视,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000319/index.m3u8?IAS +宁夏卫视,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000309/index.m3u8?IAS +陕西卫视,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000313/index.m3u8?IAS +吉林卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8 +甘肃卫视,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8 +云南卫视,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000305/index.m3u8?IAS +三沙卫视,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?IAS +青海卫视,http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225628/index.m3u8 +新疆卫视,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225635/index.m3u8 +西藏卫视,http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000317/index.m3u8?IAS +兵团卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226439/index.m3u8 +延边卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8 +大湾区卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226442/index.m3u8 +安多卫视,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8 +厦门卫视,http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000193/index.m3u8?IAS +康巴卫视,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8 +CETV1,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8 +CETV2,http://[2409:8087:1a0b:df::4013]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8 +CETV4,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8 +爱上4K,http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000459/index.m3u8?IAS +纪实人文,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225738/index.m3u8 +纪实科教,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225729/index.m3u8 +劲爆体育,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000008&IAS,httpSessionId=OTT19019320240419154124000281 +乐游频道,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000092/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000092&IAS,httpSessionId=OTT19019320240419154124000281 +卡酷少儿,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225654/index.m3u8 +金鹰卡通,http://[2409:8087:1a0b:df::4008]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225653/index.m3u8 +金鹰纪实,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN4766929BESTVSMGSMG/index.m3u8?m3u8_level=2 +茶友频道,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638729d8aca53/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSBx06ZL9Bo6JOM%2BSTjxZRIdUCZxTtaM%2Bza0L7mJjkPMmnEhAf%2Bi68sKjzRCbPoTU0E%2B6Pia2CkRtxgPs8Tmw7I +快乐垂钓,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638729b6002c4/index.m3u8?m3u8_level=2 +哒啵赛事,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225675/index.m3u8 +哒啵电竞,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000003000000066/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000003000000066&IAS,httpSessionId=OTT19019320240419154124000281 +优漫卡通,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8 +哈哈炫动,http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8 +黑莓动画,http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8 +黑莓电影,http://[2409:8087:1a0b:df::4014]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225743/index.m3u8 +梨园频道,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380788ba7bed/index.m3u8?AuthInfo=toEYVdLfxymUP2l9NZpQI5%2BK6T7j%2FlRm%2BvbM9VO7bA0q1S1k1f36SqqriM0FZoFSAJRfCt8SS7X6sTRmXb81a8O4H%2FdroDKjLoDeaMQdyJQ +求索记录,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000010/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000010&IAS,httpSessionId=OTT19019320240419154124000281 +求索动物,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000009/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000009&IAS,httpSessionId=OTT19019320240419154124000281 +求索科学,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000011/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000011&IAS,httpSessionId=OTT19019320240419154124000281 +求索生活,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000008&IAS,httpSessionId=OTT19019320240419154124000281 +超级体育,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8 +超级电影,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8 +超级视剧,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225716/index.m3u8 +东北热剧,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225741/index.m3u8 +海外剧场,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225671/index.m3u8 +中国功夫,http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225681/index.m3u8 +军旅剧场,http://[2409:8087:1a0b:df::4018]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225676/index.m3u8 +惊悚悬疑,http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8 +潮妈辣婆,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225685/index.m3u8 +精品体育,http://[2409:8087:1a0b:df::4004]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8 +精品纪录,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225672/index.m3u8 +家庭剧场,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225677/index.m3u8 +精品大剧,http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225670/index.m3u8 +军事评论,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225668/index.m3u8 +明星大片,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225664/index.m3u8 +欢乐剧场,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225742/index.m3u8 +精品萌宠,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226505/index.m3u8 +超级综艺,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225714/index.m3u8 +金牌综艺,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8 +上海新闻,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000005/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000005&IAS,httpSessionId=OTT19019320240419154124000281 +上海都市,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000012/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000012&IAS,httpSessionId=OTT19019320240419154124000281 +上海外语,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000001/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000001&IAS,httpSessionId=OTT19019320240419154124000281 +七彩戏剧,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000010/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000010&IAS,httpSessionId=OTT19019320240419154124000281 +五星体育,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000007/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000007&IAS,httpSessionId=OTT19019320240419154124000281 +东方影视,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000013/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000013&IAS,httpSessionId=OTT19019320240419154124000281 +东方财经,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000090/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000090&IAS,httpSessionId=OTT19019320240419154124000281 +法治天地,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000014/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000014&IAS,httpSessionId=OTT19019320240419154124000281 +第一财经,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000004/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000004&IAS,httpSessionId=OTT19019320240419154124000281 +浙江新闻,https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8 +浙江国际,https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8 +浙江少儿,https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8 +浙江教科,https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8 +之江纪录,https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8 +浙江民生,https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8 +浙江经济,https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8 +浙江钱江,https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8 +内蒙新闻,https://livestream-bt.nmtv.cn/nmtv/2316general.m3u8?txSecret=173f71025a2de64458989cfb281a0a37&txTime=771E8800 +内蒙经济,https://livestream-bt.nmtv.cn/nmtv/2317general.m3u8?txSecret=8e4b7cf6a2c8a75f74aef1a8a07cef43&txTime=771E8800 +内蒙少儿,https://livestream-bt.nmtv.cn/nmtv/2318general.m3u8?txSecret=ff5a1fd70ea228ee35b0d29895f37c56&txTime=771E8800 +内蒙文体,https://livestream-bt.nmtv.cn/nmtv/2319general.m3u8?txSecret=82ed51a2a4cbf85b62fec8ef2bfe4529&txTime=771E8800 +内蒙农牧,https://livestream-bt.nmtv.cn/nmtv/2320general.m3u8?txSecret=b5e44fcd9473993661f17746112ad1b7&txTime=771E8800 +蒙语卫视,https://livestream-bt.nmtv.cn/nmtv/2315general.m3u8?txSecret=e2b255285dd119a92c8aa5cdf00f8b84&txTime=771EF880 +蒙语文化,https://livestream-bt.nmtv.cn/nmtv/2321general.m3u8?txSecret=2250268a1d326dbbc4cbf0ba32649ca5&txTime=771E8800 +CGTN英语,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806f4f64099/index.m3u8?m3u8_level=2 +CGTN记录,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63a15d0ee63f3/index.m3u8?m3u8_level=2 +CGTN俄语,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638071d299009/index.m3u8?m3u8_level=2 +CGTN法语,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806fb631afe/index.m3u8?m3u8_level=2 +CGTN西语,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806f81c8eb5/index.m3u8?m3u8_level=2 +CGTN阿语,http://livear.cgtn.com/1000a/prog_index.m3u8 +北京卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225931/index.m3u8 +东方卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225942/index.m3u8 +东南卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225950/index.m3u8 +广东卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225966/index.m3u8 +贵州卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225974/index.m3u8 +海南卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225978/index.m3u8 +河北卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225961/index.m3u8 +河南卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225988/index.m3u8 +黑龙江卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225985/index.m3u8 +湖北卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225975/index.m3u8 +湖南卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221226000/index.m3u8 +吉林卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225981/index.m3u8 +江苏卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225938/index.m3u8 +江西卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225935/index.m3u8 +山东卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225952/index.m3u8 +山西卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221226009/index.m3u8 +陕西卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225989/index.m3u8 +深圳卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225943/index.m3u8 +四川卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225970/index.m3u8 +天津卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225972/index.m3u8 +西安新闻,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225993/index.m3u8 +浙江卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225959/index.m3u8 +重庆卫视,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225963/index.m3u8 +黑龙江都市,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225969/index.m3u8 +黑龙江农业,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225994/index.m3u8 +黑龙江少儿,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225979/index.m3u8 +黑龙江文体,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225965/index.m3u8 +黑龙江新闻,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225967/index.m3u8 +黑龙江影院,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225973/index.m3u8 +咪咕足球,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225895/index.m3u8 +咪咕体育,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225895/index.m3u8 +西安新闻综合,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225993/index.m3u8 +海南文旅,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000322/index.m3u8?IAS + +北京卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8 +东方卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8 +浙江卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8 +江苏卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8 +湖南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8 +深圳卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8 +天津卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8 +广东卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8 +黑龙江卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8 +安徽卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8 +辽宁卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225619/index.m3u8 +四川卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8 +重庆卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8 +贵州卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8 +江西卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8 +东南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8 +湖北卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8 +河南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8 +山东卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8 +海南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8 +吉林卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8 +陕西卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225625/index.m3u8 +内蒙古卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8 +西藏卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225638/index.m3u8 +河北卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8?_upt=1da074361609506578 +宁夏卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225632/index.m3u8 +云南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226444/index.m3u8 +山西卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225624/index.m3u8 +甘肃卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8 +新疆卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225635/index.m3u8 +兵团卫视,http://39.134.24.162/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226214/index.m3u8 +重庆卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225618/index.m3u8 +贵州卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225626/index.m3u8 +青海卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225628/index.m3u8 +海南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225639/index.m3u8 +北京卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226251/index.m3u8 +辽宁卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226254/index.m3u8 +河南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226320/index.m3u8 +青海卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226323/index.m3u8 +上海东方卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226336/index.m3u8 +浙江卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226342/index.m3u8 +黑龙江影院,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226365/index.m3u8 +黑龙江新闻法治,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226368/index.m3u8 +黑龙江少儿,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226371/index.m3u8 +广东卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226374/index.m3u8 +东南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226377/index.m3u8 +广西卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226380/index.m3u8 +贵州卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226383/index.m3u8 +吉林卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226386/index.m3u8 +内蒙古卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226389/index.m3u8 +安多卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8 +康巴卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8 +山西卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226392/index.m3u8 +天津卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226395/index.m3u8 +黑龙江卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226421/index.m3u8 +某地区新闻综合,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226422/index.m3u8 +黑龙江文体,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226424/index.m3u8 +黑龙江都市,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226427/index.m3u8 +湖南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226430/index.m3u8 +西藏卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226433/index.m3u8 +兵团卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226439/index.m3u8 +海南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226445/index.m3u8 +河北卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226448/index.m3u8 +宁夏卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226454/index.m3u8 +陕西卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226457/index.m3u8 +新疆卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226460/index.m3u8 +重庆卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226463/index.m3u8 +黑龙江农业科教,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226492/index.m3u8 +江苏卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226495/index.m3u8 +安徽卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226498/index.m3u8 +湖北卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226501/index.m3u8 +江西卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226504/index.m3u8 +山东卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226507/index.m3u8 +深圳卫视-SD,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226510/index.m3u8 +四川卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226513/index.m3u8 +延边,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8 +甘肃卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226522/index.m3u8 +某地区教育频道,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226523/index.m3u8 +黑龙江卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226525/index.m3u8 +rRB-生活,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226526/index.m3u8 +黑龙江卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226531/index.m3u8 +漠河综合频道,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226535/index.m3u8 +rRB-影院,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226552/index.m3u8 +rRB-新闻综合,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226558/index.m3u8 +CETV-1,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8 +CETV-2,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8 +CETV-4,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8 +黑龙江农业科教 8M1080,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226242/index.m3u8 +黑龙江少儿 8M1080,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226304/index.m3u8 +黑龙江影院 8M1080,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226298/index.m3u8 +黑龙江文体 8M1080,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226239/index.m3u8 +黑龙江新闻法治 8M1080,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226330/index.m3u8 +黑龙江都市 8M1080,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226301/index.m3u8 +鹤岗新闻综合 8M1080,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226534/index.m3u8 +佳木斯新闻综合 2.5M1080,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226451/index.m3u8 +山东教育卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225655/index.m3u8 +北京纪实科教,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225729/index.m3u8 +卡酷少儿,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225654/index.m3u8 +浙江公共新闻,https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8 +浙江国际,https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8 +浙江少儿,https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8 +浙江教科影院,https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8 +浙江数码时代,https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8 +浙江民生休闲,https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8 +浙江经济生活,https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8 +浙江钱江频道,https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8 +优漫卡通,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8 +哈哈炫动,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8 +动作电影,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225661/index.m3u8 +古装剧场,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225663/index.m3u8 +惊悚悬疑,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8 +金牌综艺,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8 +爱情喜剧,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225669/index.m3u8 +精品大剧,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225670/index.m3u8 +精品纪录,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225672/index.m3u8 +健康有约,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225673/index.m3u8 +精品体育,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8 +军旅剧场,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225676/index.m3u8 +家庭剧场,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225677/index.m3u8 +精彩搏击,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225680/index.m3u8 +中国功夫,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225681/index.m3u8 +农业致富,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225683/index.m3u8 +潮妈辣婆,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225685/index.m3u8 +超级综艺,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225714/index.m3u8 +超级体育,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8 +超级电视剧,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225716/index.m3u8 +超级电影,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8 +炫舞未来,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225719/index.m3u8 +东北热剧,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225741/index.m3u8 +欢乐剧场,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225742/index.m3u8 + + +湖南卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8 +浙江卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8 +江苏卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8 +东方卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8 +广东卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8 +广西卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226549/index.m3u8 +深圳卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8 +北京卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8 +东南卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8 +四川卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8 +天津卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8 +安徽卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8 +山东卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8 +江西卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8 +河北卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8 +河南卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8 +海南卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8 +湖北卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8 +贵州卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8 +辽宁卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.m3u8 +重庆卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8 +吉林卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8 +黑龙江视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8 +💝广东揭阳👉电信,#genre# +无线星河高清,http://113.64.147.55:8081/hls/135/index.m3u8 +凤凰资讯高清,http://113.64.147.55:8081/hls/36/index.m3u8 +凤凰卫视高清,http://113.64.147.55:8081/hls/37/index.m3u8 +凤凰香港高清,http://113.64.147.55:8081/hls/38/index.m3u8 +揭西综合高清,http://113.64.147.55:8081/hls/39/index.m3u8 +揭西综合标清,http://113.64.147.55:8081/hls/19/index.m3u8 +北京卫视高清,http://113.64.147.55:8081/hls/45/index.m3u8 +天津卫视高清,http://113.64.147.55:8081/hls/48/index.m3u8 +广西卫视高清,http://113.64.147.55:8081/hls/60/index.m3u8 +山东卫视高清,http://113.64.147.55:8081/hls/75/index.m3u8 +黑龙江视高清,http://113.64.147.55:8081/hls/50/index.m3u8 +重庆卫视标清,http://113.64.147.55:8081/hls/76/index.m3u8 +宁夏卫视标清,http://113.64.147.55:8081/hls/71/index.m3u8 +新疆卫视标清,http://113.64.147.55:8081/hls/82/index.m3u8 +动作电影标清,http://113.64.147.55:8081/hls/62/index.m3u8 +经典电影标清,http://113.64.147.55:8081/hls/61/index.m3u8 +热播剧场标清,http://113.64.147.55:8081/hls/63/index.m3u8 +乐游综合高清,http://113.64.147.55:8081/hls/66/index.m3u8 +深都市道高清,http://113.64.147.55:8081/hls/68/index.m3u8 +深电视剧高清,http://113.64.147.55:8081/hls/69/index.m3u8 +深电视剧高清,http://113.64.147.55:8081/hls/18/index.m3u8 +山东教育标清,http://113.64.147.55:8081/hls/72/index.m3u8 +现代教育标清,http://113.64.147.55:8081/hls/109/index.m3u8 +优漫卡通标清,http://113.64.147.55:8081/hls/128/index.m3u8 +风云音乐高清,http://113.64.147.55:8081/hls/117/index.m3u8 +风云音乐标清,http://113.64.147.55:8081/hls/88/index.m3u8 +风云文化标清,http://113.64.147.55:8081/hls/33/index.m3u8 + +💝广东频道👉全网,#genre# +广州生活,https://tv.cry33.com/gztv.php?id=gzsh +潮州综合,http://time-vod-qhlive.sobeylive.com/czbtv2019/czzhpd.m3u8 +潮州民生,http://time-vod-qhlive.sobeylive.com/czbtv2019/czggpd.m3u8 +汕头小公园,https://gctxyc.liveplay.myqcloud.com/gc/bsszjs_1_md.m3u8 + +广州综合,http://r.jdshipin.com/snhya +广州影视,http://r.jdshipin.com/sFw4S +云浮综合,https://livestream.oeeee.com/slive/17806.m3u8 +云浮文旅,https://livestream.oeeee.com/slive/17807.m3u8 +河源综合,http://tmpstream.hyrtv.cn/xwzh/sd/live.m3u8 +河源公共,http://tmpstream.hyrtv.cn/hygg/sd/live.m3u8 +潮州综合,http://time-vod-qhlive.sobeylive.com/czbtv2019/czzhpd.m3u8 +潮州民生,http://time-vod-qhlive.sobeylive.com/czbtv2019/czggpd.m3u8 +💝咪咕体育👉移动,#genre# +移动咪咕直播-1-4K,http://gslbserv.itv.cmvideo.cn:80/3000000010000005180/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000005180&livemode=1&stbId=3 +移动咪咕直播-2-4K,http://gslbserv.itv.cmvideo.cn:80/3000000010000015686/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000015686&livemode=1&stbId=3 +移动咪咕中文,http://gslbserv.itv.cmvideo.cn:80/3000000010000011297/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000011297&livemode=1&stbId=3 +移动咪咕直播-2,http://gslbserv.itv.cmvideo.cn:80/3000000001000005969/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000005969&livemode=1&stbId=3 +移动咪咕直播-3,http://gslbserv.itv.cmvideo.cn:80/3000000001000007218/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000007218&livemode=1&stbId=3 +移动咪咕直播-4,http://gslbserv.itv.cmvideo.cn:80/3000000001000008001/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000008001&livemode=1&stbId=3 +移动咪咕直播-5,http://gslbserv.itv.cmvideo.cn:80/3000000001000008176/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000008176&livemode=1&stbId=3 +移动咪咕直播-6,http://gslbserv.itv.cmvideo.cn:80/3000000001000008379/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000008379&livemode=1&stbId=3 +移动咪咕直播-7,http://gslbserv.itv.cmvideo.cn:80/3000000001000010129/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000010129&livemode=1&stbId=3 +移动咪咕直播-8,http://gslbserv.itv.cmvideo.cn:80/3000000001000010948/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000010948&livemode=1&stbId=3 +移动咪咕直播-9,http://gslbserv.itv.cmvideo.cn:80/3000000001000026778/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000026778&livemode=1&stbId=3 +移动咪咕直播-10,http://gslbserv.itv.cmvideo.cn:80/3000000001000028638/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000028638&livemode=1&stbId=3 +移动咪咕直播-11,http://gslbserv.itv.cmvideo.cn:80/3000000001000031494/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000031494&livemode=1&stbId=3 +移动咪咕直播-12,http://gslbserv.itv.cmvideo.cn:80/3000000010000000097/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000000097&livemode=1&stbId=3 +移动咪咕直播-13,http://gslbserv.itv.cmvideo.cn:80/3000000010000002019/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000002019&livemode=1&stbId=3 +移动咪咕直播-14,http://gslbserv.itv.cmvideo.cn:80/3000000010000002032/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000002032&livemode=1&stbId=3 +移动咪咕直播-15,http://gslbserv.itv.cmvideo.cn:80/3000000010000002809/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000002809&livemode=1&stbId=3 +移动咪咕直播-16,http://gslbserv.itv.cmvideo.cn:80/3000000010000003915/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000003915&livemode=1&stbId=3 +移动咪咕直播-17,http://gslbserv.itv.cmvideo.cn:80/3000000010000004193/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000004193&livemode=1&stbId=3 +移动咪咕直播-18,http://gslbserv.itv.cmvideo.cn:80/3000000010000004464/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000004464&livemode=1&stbId=3 +移动咪咕直播-19,http://gslbserv.itv.cmvideo.cn:80/3000000010000005837/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000005837&livemode=1&stbId=3 +移动咪咕直播-20,http://gslbserv.itv.cmvideo.cn:80/3000000010000006077/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000006077&livemode=1&stbId=3 +移动咪咕直播-21,http://gslbserv.itv.cmvideo.cn:80/3000000010000006658/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000006658&livemode=1&stbId=3 +移动咪咕直播-22,http://gslbserv.itv.cmvideo.cn:80/3000000010000006944/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000006944&livemode=1&stbId=3 +移动咪咕直播-23,http://gslbserv.itv.cmvideo.cn:80/3000000010000007692/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000007692&livemode=1&stbId=3 +移动咪咕直播-24,http://gslbserv.itv.cmvideo.cn:80/3000000010000009788/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000009788&livemode=1&stbId=3 +移动咪咕直播-25,http://gslbserv.itv.cmvideo.cn:80/3000000010000010833/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000010833&livemode=1&stbId=3 +移动咪咕直播-26,http://gslbserv.itv.cmvideo.cn:80/3000000010000011112/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000011112&livemode=1&stbId=3 +移动咪咕直播-27,http://gslbserv.itv.cmvideo.cn:80/3000000010000011297/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000011297&livemode=1&stbId=3 +移动咪咕直播-28,http://gslbserv.itv.cmvideo.cn:80/3000000010000011518/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000011518&livemode=1&stbId=3 +移动咪咕直播-29,http://gslbserv.itv.cmvideo.cn:80/3000000010000011763/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000011763&livemode=1&stbId=3 +移动咪咕直播-30,http://gslbserv.itv.cmvideo.cn:80/3000000010000011873/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000011873&livemode=1&stbId=3 +移动咪咕直播-31,http://gslbserv.itv.cmvideo.cn:80/3000000010000012398/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000012398&livemode=1&stbId=3 +移动咪咕直播-32,http://gslbserv.itv.cmvideo.cn:80/3000000010000012450/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000012450&livemode=1&stbId=3 +移动咪咕直播-33,http://gslbserv.itv.cmvideo.cn:80/3000000010000012558/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000012558&livemode=1&stbId=3 +移动咪咕直播-34,http://gslbserv.itv.cmvideo.cn:80/3000000010000012616/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000012616&livemode=1&stbId=3 +移动咪咕直播-35,http://gslbserv.itv.cmvideo.cn:80/3000000010000015470/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000015470&livemode=1&stbId=3 +移动咪咕直播-36,http://gslbserv.itv.cmvideo.cn:80/3000000010000015560/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000015560&livemode=1&stbId=3 +移动咪咕直播-37,http://gslbserv.itv.cmvideo.cn:80/3000000010000017389/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000017389&livemode=1&stbId=3 +移动咪咕直播-38,http://gslbserv.itv.cmvideo.cn:80/3000000010000017678/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000017678&livemode=1&stbId=3 +移动咪咕直播-39,http://gslbserv.itv.cmvideo.cn:80/3000000010000017997/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000017997&livemode=1&stbId=3 +移动咪咕直播-40,http://gslbserv.itv.cmvideo.cn:80/3000000010000019380/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000019380&livemode=1&stbId=3 +移动咪咕直播-41,http://gslbserv.itv.cmvideo.cn:80/3000000010000019839/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000019839&livemode=1&stbId=3 +移动咪咕直播-42,http://gslbserv.itv.cmvideo.cn:80/3000000010000020168/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000020168&livemode=1&stbId=3 +移动咪咕直播-43,http://gslbserv.itv.cmvideo.cn:80/3000000010000021904/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000021904&livemode=1&stbId=3 +移动咪咕直播-44,http://gslbserv.itv.cmvideo.cn:80/3000000010000023434/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000023434&livemode=1&stbId=3 +移动咪咕直播-45,http://gslbserv.itv.cmvideo.cn:80/3000000010000024205/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000024205&livemode=1&stbId=3 +移动咪咕直播-46,http://gslbserv.itv.cmvideo.cn:80/3000000010000024691/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000024691&livemode=1&stbId=3 +移动咪咕直播-47,http://gslbserv.itv.cmvideo.cn:80/3000000010000025380/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000025380&livemode=1&stbId=3 +移动咪咕直播-49,http://gslbserv.itv.cmvideo.cn:80/3000000010000027318/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000027318&livemode=1&stbId=3 +移动咪咕直播-51,http://gslbserv.itv.cmvideo.cn:80/3000000010000027691/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000027691&livemode=1&stbId=3 +移动咪咕直播-52,http://gslbserv.itv.cmvideo.cn:80/3000000010000031669/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000031669&livemode=1&stbId=3 +移动咪咕直播-53,http://gslbserv.itv.cmvideo.cn:80/3000000010000032106/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000032106&livemode=1&stbId=3 + +💝IHOT爱👉ipv6,#genre# +iHOT爱喜剧,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000032/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000032&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱科幻,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000033/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000033&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱院线,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000034/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000034&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱浪漫,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000035/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000035&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱悬疑,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000036/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000036&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱经典,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000037/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000037&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱谍战,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000038/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000038&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱青春,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000041/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000041&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱历史,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000046/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000046&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱科学,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000047/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000047&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱幼教,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000049/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000049&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱玩具,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000053/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000053&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱电竞,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000054/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000054&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱赛车,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000055/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000055&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱旅行,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000056/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000056&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱奇谈,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000058/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000058&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱动漫,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000059/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000059&IASHttpSessionId=OTT19019320240419154124000281 +iHOT爱体育,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000060/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000060&IASHttpSessionId=OTT19019320240419154124000281 + +💝体育频道👉全网,#genre# +纬来篮球,http://hls.szsummer.cn/live/446035/playlist.m3u8?k=32f9ec7c13e4b390289143a8e1b2a898&t=1840341130 +纬来篮球,https://cloud.yumixiu768.com/tmp/123.m3u8 +纬来篮球,rtmp://f13h.mine.nu/sat/tv721 +精品体育,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8 +精品体育,http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225674/1.m3u8 +精品体育,http://[2409:8087:1a0b:df::4004]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8 +精品体育,https://epg.pw/stream/f7556eccd4ae06b0c2991fdc7a4f8388496559f728cc82459a8e50346040e226.m3u8 +精品体育,https://epg.pw/stream/94ed0232b61ce8d89883160a4cdfbfc8f3225cae70ef8e17d93eec249a3c8ad6.m3u8 +精品体育,https://epg.pw/stream/866a097a0907c9832440f8df38272dd555abf05200dfbafcc137e214c9b30ca7.m3u8 +CBA体育,http://live-cmvideo.cmread.com:80/migu/lunbo/cba/57/20230310/01.m3u8?msisdn=&mtv_session=&HlsSubType=1&HlsProfileId=1&nphaid=0&encrypt=261360ecdd41429ba089515be68c33d9 +超级体育,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8 +超级体育,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8 +超级体育,,https://epg.pw/stream/b5b459fdf6a6a42903675a6e0b7dea1a98b65b4821289b293c9676167fa75c74.m3u8 +咪咕体育,http://live-cmvideo.cmread.com:80/wd_r2/virtuallive/tysy201903/150/01.m3u8?msisdn=&mtv_session=&HlsSubType=1&HlsProfileId=1&nphaid=0&encrypt=d71afdb4433cfb1ced90779b543d1dee +广东体育,https://epg.pw/stream/7b470f9fc5c305db0c8622117b7b25ca00eb35ba3e93e865cf0ff9df5c736681.m3u8 +足球频道,https://epg.pw/stream/c7df950876e6a1ceb8be74ee86f9f702cebbbae29f1d15124ef8f86fd43161cf.m3u8 +足球咪咕,http://live-cmvideo.cmread.com:80/migu/lunbo/eufootball/57/20230310/01.m3u8?msisdn=&mtv_session=&HlsSubType=1&HlsProfileId=1&nphaid=0&encrypt=da834f97e3c8832f6fd8f2be9ba16464 +足球联赛,http://live-cmvideo.cmread.com:80/migu/lunbo/wudaliansai/57/20230310/01.m3u8?msisdn=&mtv_session=&HlsSubType=1&HlsProfileId=1&nphaid=0&encrypt=37390fe8508db105ef85c897db9015f6 +风云足球,https://epg.pw/stream/6d7bf281e3d739806a73f5373acaa6e01988ec9739f5ac1355ce54b47a928472.m3u8 +风云足球,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638077160c04a/1.m3u8?m3u8_level=2 +风云足球,https://epg.pw/stream/ac8062ec9484078061d3bef507c15a423ac57ae4144e3fcc4b0a198dd420f911.m3u8 +先锋乒羽,http://wouu.net:9977/udp/239.93.42.56:5140?Cf=cfss.cc +CCTV-05,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226019/index.m3u8 +CCTV-05,http://hikvision.city:880/CCTV-5.m3u8 +CCTV+5+,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225603/index.m3u8 +CCTV-台球,https://epg.pw/stream/ca9c1cd4b97fb824cedd7fedfd0c7a950afdd7f00751cfbb7c2d89831d7746a5.m3u8 +CCTV-台球,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380775932cff/1.m3u8?m3u8_level=2 +CCTV-台球,https://epg.pw/stream/25677ac2e8c1f7c3dd6359c43eb5f0f54efb3f5c11f9dda18d01b3e0308ed017.m3u8 +CCTV-台球,http://doityoume.x3322.net:5100/rtp/239.69.1.98:10224 +央视高网,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807743b61bb/1.m3u8?m3u8_level=2 +美国摔跤,https://d2p372oxiwmcn1.cloudfront.net:443/hls/1080p/playlist.m3u8 +斗地主台,http://live-cmvideo.cmread.com:80/wd_r4/virtuallive/5101059662/150/01.m3u8?msisdn=&mtv_session=&HlsSubType=1&HlsProfileId=1&nphaid=0&encrypt=86ee7113f215743d9b9272c072214c3c +JJ斗地主,http://openhls-tct.douyucdn2.cn:80/dyliveflv1a/488743rAHScWyyII_2000.m3u8 +JJ斗地主,http://tc-tct.douyucdn2.cn/dyliveflv1a/488743rAHScWyyII_2000.flv?wsAuth=fd695c444eeee99cc6122ed396c805ba&token=cpn-androidmpro-0-488743-df8b1830ef2e6ce156759645768df95bf77749da61fcc901&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=play2 +王者荣耀,http://tc-tct.douyucdn2.cn/dyliveflv1a/1863767rkpl2_2000p.flv?wsAuth=f73077d85e523eb95b6ce1ea3581b46b&token=cpn-androidmpro-0-1863767-7b520f6fe0a2b18db3c111c4e3c14350afd2dcaf43d0ef60&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=play2 +穿越火线,http://tc-tct.douyucdn2.cn:80/dyliveflv1/605964rzzgGEOZHr.flv?wsAuth=43ef2d796067cbec9c238c73235a1005&token=cpn-androidmpro-0-605964-b9be22700076c085e82232beb0fbe7838e28994acafb3964&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=play1 +穿越火线,http://112.83.136.141:80/live/605964rzzgGEOZHr.flv?302_type=cold_aggr&_session_id=2376164747.n.cn-069f7p.14re_26504&cb_retry=0&did=d010b07dcb997ada9934081c873542f0&domain=tc-tct.douyucdn2.cn&expire=0&fp_user_url=http%3A%2F%2Ftc-tct.douyucdn2.cn%2Fdyliveflv1%2F605964rzzgGEOZHr.flv%3FwsAuth%3D43ef2d796067cbec9c238c73235a1005%26token%3Dcpn-androidmpro-0-605964-b9be22700076c085e82232beb0fbe7838e28994acafb3964%26logo%3D0%26expire%3D0%26did%3Dd010b07dcb997ada9934081c873542f0%26origin%3Dtct%26vhost%3Dplay1&logo=0&manage_ip=&mir=true&node_id=&origin=tct&pro_type=http&redirect_from=pod.cn-069f7p.14re.nss&token=cpn-androidmpro-0-605964-b9be22700076c085e82232beb0fbe7838e28994acafb3964&vhost=tc-tct.douyucdn2.cn&wsAuth=43ef2d796067cbec9c238c73235a1005 +💝4K频道👉全网,#genre# + + +百事通4K电影,http://nxlj.cn:1688//udp/239.45.3.107:5140?$虹口电信组播 + + +百事通4K纪实,http://nxlj.cn:1688//rtp/239.45.1.10:5140?$虹口电信组播 + +百事通4K儿童,http://nxlj.cn:1688//rtp/239.45.1.1:5140?$虹口电信组播 + +华数电影4K,http://220.176.218.35:8888/udp/239.252.220.212:5140?$江西上饶电信 + +欢笑剧场4K,http://ipv4.sunjianwu.fun:8800/udp/239.49.8.106:8000?$盐成电信组播 +欢笑剧场4K,http://qingcheng.pro:7890/udp/238.125.5.122:5140?$新疆电信组播 + +CCTV16奥林匹克4K,http://vip.syzkgg.com:8686/rtp/239.253.64.126:5140?$海南三亚电信 +CCTV16奥林匹克4K,http://220.176.218.35:8888/udp/239.252.220.237:5140?$江西上饶电信 + +CCTV4K超清,http://27.222.3.214/liveali-tp4k.cctv.cn/live/4K10M.stream/playlist.m3u8 + +CCTV8K超清,https://tv.cry33.com/ys4k.php?id=8k + +北京4K超清,http://115.171.216.54:4000/udp/225.1.8.211:8002?$北京电信备线4 +北京4K超清,http://ikuai.zlsip.top:4022/rtp/239.3.1.249:8001$北京联通备线1 + + + +亲子趣学4K.http://171.223.198.94:4000/udp/239.93.1.191:5140?$四川电信主力线 +亲子趣学4K.http://125.69.136.119:8880/udp/239.93.1.191:5140?$四川电信备线2 +亲子趣学4Khttp://118.114.97.25:886/udp/239.93.1.191:5140?$四川电信备线1 + +南国都市4K,http://14.121.146.11:554/udp/239.253.43.99:5146?$广东电信备线1 + +广东4k超清,http://14.121.146.11:554/udp/239.77.1.237:5146?$广东电信备线1 + + +苏州4K,http://liveshowbak2.kan0512.com/norecord/csztv4k_4k.m3u8 + +💝电影频道👉全网,#genre# +邵氏影院@代,https://www.goodiptv.club/douyu/4246519 +邵氏影院@代,http://huanqiuzhibo.cn/manifest/douyu.php?id=4246519 +邵氏影院@代,http://www.goodiptv.club/douyu/4246519 +1905国内电影,http://ygbh.live/1905.php?id=1905a +1905国外电影,http://ygbh.live/1905.php?id=1905b +重温经典频道,http://mtw.so/5NPX0U +重温经典频道,http://ali.hlspull.yximgs.com/live/awei_cwjd.flv +经典电影频道,https://ali.hlspull.yximgs.com/live/asdfg32522.flv +经典影院频道,https://ali.hlspull.yximgs.com/live/asdfg32516.flv +经典影院频道,http://live.dxms.top:80/dwy/jdyst.php +经典剧场频道,http://live.dxms.top:80/dwy/jdjc.php + +经典天龙频道,http://live.dxms.top:80/dwy/jdtl.php +经典金庸频道,http://live.dxms.top:80/dwy/jyjc.php +经典三国频道,http://live.dxms.top:80/dwy/jdsg.php +经典喜剧频道,http://live.dxms.top:80/dwy/jdxj.php +经典回忆频道,http://live.dxms.top:80/dwy/hyyy.php +经典影院@代,http://ali.hlspull.yximgs.com/live/asdfg32516.flv +星光视界台,http://cfss.cc/cdn/yy/1353422557.flv +星光综合台,http://ali.hlspull.yximgs.com/live/zxcvbnm9852.flv +经典影视台,http://ali.hlspull.yximgs.com/live/asdfg32516.flv +经典电影台,http://ali.hlspull.yximgs.com/live/asdfg32522.flv +香港电影频道,http://live-cmvideo.cmread.com:80/wd_r2/virtuallive/5100180869/150/01.m3u8?msisdn=&mtv_session=&HlsSubType=1&HlsProfileId=1&nphaid=0&encrypt=a78e73c9d50f677a369a589aace6f489 +超级电影@代,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8 +中国功夫@代,http://[2409:8087:1a0b:df::4001]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225681/index.m3u8 +北京淘精彩,http://218.241.192.50:8808/udp/239.3.1.178:8001 +北京萌宠TV,http://218.241.192.50:8808/udp/239.3.1.102:8001 +北京淘Baby,http://218.241.192.50:8808/udp/239.3.1.238:8001 +北京淘剧场,http://218.241.192.50:8808/udp/239.3.1.95:8001 +北京淘电影,http://218.241.192.50:8808/udp/239.3.1.250:8001 +北京淘娱乐,http://218.241.192.50:8808/udp/239.3.1.100:8001 +电影星爷@代,http://cfss.cc/cdn/hy/11342412.flv +周星驰典@代,http://tc-tct.douyucdn2.cn/dyliveflv1a/3637778raLSXdOdu_2000.m3u8 +超级电影ipv6,http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8 +军旅剧场ipv6,http://[2409:8087:1a0b:df::4018]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225676/index.m3u8 +海外剧场ipv6,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225671/index.m3u8 +CCtv6影院代,https://epg.pw/stream/753fe6b20478c17a39f0c17d3c8d98a74cd5890a6e40f4ce011380f2dd185285.m3u8 +CCtv6影院代,http://mobilelive-ds.ysp.cctv.cn/ysp/2013693901.m3u8 +CCtv6影院代,http://hikvision.city:880/CCTV-6.m3u8 +惊悚悬疑ipv6,http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8 +明星大片ipv6,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225664/index.m3u8 +惊嫊悬疑电影,http://[2409:8087:1a0b:df::4002]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8 +梨园卫视频道,http://222.223.118.222:2180/live/lypd/index.m3u8 +梨园频道ipv6,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380788ba7bed/index.m3u8?AuthInfo=toEYVdLfxymUP2l9NZpQI5%2BK6T7j%2FlRm%2BvbM9VO7bA0q1S1k1f36SqqriM0FZoFSAJRfCt8SS7X6sTRmXb81a8O4H%2FdroDKjLoDeaMQdyJQ +黑莓电影@代,http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225743/1.m3u8 +黑莓动画@代,http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225662/1.m3u8 +超级电影ipv6,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8 +超级电视ipv6,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225716/index.m3u8 +大吉大利影院,https://pull.kktv8.com/livekktv/128600025.flv +神乐剧场✔原,https://tc-tc2-interact.douyucdn2.cn/dyliveflv1/85894rmovieChow_900p.m3u8 +神乐剧院✔原,https://tc-tc2-interact.douyucdn2.cn/dyliveflv1a/122402rK7MO9bXSq_900.m3u8 +绍兴影院频道,http://live.shaoxing.com.cn/video/s10001-sxtv3/index.m3u8 +南京影院频道,http://live.nbs.cn/channels/njtv/xxpd/m3u8:500k/live.m3u8 +新昌休闲影院,http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8 + +💝歪歪轮播👉全网,#genre# + +💝虎牙轮播👉全网,#genre# +周星驰,https://live.metshop.top/huya/11342412 +李连杰,https://live.metshop.top/huya/11342390 +甄子丹,https://live.metshop.top/huya/11352935 +刘德华,https://live.metshop.top/huya/11342424 +邱淑贞,https://live.metshop.top/huya/11352949 +女神系列,https://live.metshop.top/huya/11336571 +赌片,https://live.metshop.top/huya/11342399 +bang派,https://live.metshop.top/huya/11336719 +科幻动作,https://live.metshop.top/huya/11352964 +国产喜剧,https://live.metshop.top/huya/11602044 +五福星,https://live.metshop.top/huya/11282233 +古墓系列,https://live.metshop.top/huya/11352913 +灾难电影,https://live.metshop.top/huya/11352871 +港片,https://live.metshop.top/huya/11602043 +灾难片,https://live.metshop.top/huya/11602075 +奇幻片,https://live.metshop.top/huya/16149609 +悬疑片,https://live.metshop.top/huya/16099968 +香港贺岁,https://live.metshop.top/huya/11601971 +贺岁合家欢剧场,https://live.metshop.top/huya/11602067 +恐怖片,https://live.metshop.top/huya/16741179 +历年贺岁档,https://live.metshop.top/huya/11601986 +李世民,https://live.metshop.top/huya/11336572 +港产搞笑,https://live.metshop.top/huya/11342423 +滇军抗战,https://live.metshop.top/huya/11342388 +经典女神,https://live.metshop.top/huya/11352909 +爱情公寓,https://live.metshop.top/huya/11336726 +士兵突击,https://live.metshop.top/huya/11342430 +玄幻剧场,https://live.metshop.top/huya/11342414 +联合抗日,https://live.metshop.top/huya/11352910 +三国演义,https://live.metshop.top/huya/11602081 +三国,https://live.metshop.top/huya/11352944 +新水浒传,https://live.metshop.top/huya/11342384 +神探狄仁杰2,https://live.metshop.top/huya/11342425 +神雕侠侣,https://live.metshop.top/huya/23865171 +笑傲江湖,https://live.metshop.top/huya/23865142 +埋堆堆布衣神相,https://live.metshop.top/huya/23865036 +纪晓岚,https://live.metshop.top/huya/11342396 +雍正皇帝,https://live.metshop.top/huya/11342439 +许冠英合集,https://live.metshop.top/huya/11601972 +经典港剧笑嘻嘻,https://live.metshop.top/huya/11352965 +电影_强森,https://live.metshop.top/huya/21059581 +电影_怪兽,https://live.metshop.top/huya/21059577 +电影_救援,https://live.metshop.top/huya/21059594 +电影_盗墓,https://live.metshop.top/huya/21059552 +电影_谍战,https://live.metshop.top/huya/21059585 +电影_梁家辉,https://live.metshop.top/huya/11342429 +电影_斯坦森,https://live.metshop.top/huya/21059588 +电影_小鬼头,https://live.metshop.top/huya/11352963 +电影_八点档,https://live.metshop.top/huya/880261 +电影_丧尸片,https://live.metshop.top/huya/21059578 +电影_战争片,https://live.metshop.top/huya/21059574 +电影_犯罪片,https://live.metshop.top/huya/11352974 +电影_古装片,https://live.metshop.top/huya/11336590 +电影_国产悬疑,https://live.metshop.top/huya/11342395 +电影_喜乐影院,https://live.metshop.top/huya/21059580 +电影_蘑菇影厅,https://live.metshop.top/huya/11601981 +电影_死神来了,https://live.metshop.top/huya/11352903 +电影_怪兽系列,https://live.metshop.top/huya/21059554 +鹿鼎记小春版,https://live.metshop.top/huya/23865080 +陀枪师姐,https://live.metshop.top/huya/23860039 +倚天屠龙记,https://live.metshop.top/huya/23734246 +使徒行者,https://live.metshop.top/huya/23734256 +扫黄先锋,https://live.metshop.top/huya/23903196 +电影_强森,https://live.metshop.top/huya/21059581 +电影_怪兽,https://live.metshop.top/huya/21059577 +电影_救援,https://live.metshop.top/huya/21059594 +电影_盗墓,https://live.metshop.top/huya/21059552 +电影_贺岁,https://live.metshop.top/huya/11601971 +电影_玄幻,https://live.metshop.top/huya/11342414 +电影_谍战,https://live.metshop.top/huya/21059585 +电影_港片,https://live.metshop.top/huya/11602043 +电影_李连杰,https://live.metshop.top/huya/11342390 +电影_梁家辉,https://live.metshop.top/huya/11342429 +电影_刘德华,https://live.metshop.top/huya/11342424 + +💝斗鱼轮播👉全网,#genre# +斗鱼频道,http://zzy789.xyz/douyu1.php?id=8770422 +斗鱼频道,http://zzy789.xyz/douyu1.php?id=2436390 +斗鱼频道,http://zzy789.xyz/douyu1.php?id=218859 +斗鱼频道,http://zzy789.xyz/douyu1.php?id=9292492 + + +💝堆堆轮播👉全网,#genre# +埋堆堆1,http://cfss.cc/cdn/hy/23749096.flv +埋堆堆2,http://cfss.cc/cdn/hy/23735126.flv +埋堆堆3,http://cfss.cc/cdn/hy/23865152.flv +埋堆堆4,http://cfss.cc/cdn/hy/23903196.flv +埋堆堆5,http://cfss.cc/cdn/hy/23740156.flv +埋堆堆6,http://cfss.cc/cdn/hy/23728660.flv +埋堆堆7,http://cfss.cc/cdn/hy/23865058.flv +埋堆堆8,http://cfss.cc/cdn/hy/23734183.flv +埋堆堆9,http://cfss.cc/cdn/hy/23865036.flv +埋堆堆11,http://cfss.cc/cdn/hy/23863796.flv +埋堆堆12,http://cfss.cc/cdn/hy/23749083.flv +埋堆堆13,http://cfss.cc/cdn/hy/23824164.flv +埋堆堆14,http://cfss.cc/cdn/hy/23863804.flv +埋堆堆15,http://cfss.cc/cdn/hy/23865142.flv +埋堆堆16,http://cfss.cc/cdn/hy/23903183.flv +埋堆堆17,http://cfss.cc/cdn/hy/23903130.flv +埋堆堆18,http://cfss.cc/cdn/hy/23734169.flv +埋堆堆19,source:http://cfss.cc/cdn/hy/23728674.flv + +💝MTV视频👉全网,#genre# +歌MV33,http://vd4.bdstatic.com/mda-ickhjq8gkcxz55i1/sc/mda-ickhjq8gkcxz55i1.mp4 +歌MV34,http://vd4.bdstatic.com/mda-ihkwerpgqm1v3ehy/sc/mda-ihkwerpgqm1v3ehy.mp4 +歌MV35,http://vd4.bdstatic.com/mda-jhid37v9u4vny09j/sc/mda-jhid37v9u4vny09j.mp4 +歌MV36,http://vd4.bdstatic.com/mda-icpieeuwfuwruijw/sc/mda-icpieeuwfuwruijw.mp4 +歌MV37,http://vd4.bdstatic.com/mda-jhtriuc2z5fddtre/sc/mda-jhtriuc2z5fddtre.mp4 +歌MV38,http://vd4.bdstatic.com/mda-jepbbqntd414qsem/sc/mda-jepbbqntd414qsem.mp4 +歌MV48,http://vd4.bdstatic.com/mda-ji3nh9t9qpewj26m/sc/mda-ji3nh9t9qpewj26m.mp4 +歌MV49,http://15799848.s21v.faiusr.com/58/ABUIABA6GAAg75_b4gUogP7C2QY.mp4 +今日热歌DJ《如果爱还在》,https://vd2.bdstatic.com/mda-mhhf5mr00yyhpfjs/1080p/cae_h264/1629284581057661229/mda-mhhf5mr00yyhpfjs.mp4 +推荐9首DJ舞曲,https://vd2.bdstatic.com/mda-mhig1c3sw223mx8p/1080p/cae_h264/1629380139191731149/mda-mhig1c3sw223mx8p.mp4 +动感DJ《苦了累了听听歌》,https://vd4.bdstatic.com/mda-mhqekuf2r91v08dt/1080p/cae_h264/1629888246186602728/mda-mhqekuf2r91v08dt.mp4 +车载必备DJ《殇雪》,https://vd3.bdstatic.com/mda-mhve4gb9hi8cstzk/1080p/cae_h264/1630319514896018158/mda-mhve4gb9hi8cstzk.mp4 +DJ《心在跳情在烧》,https://vd4.bdstatic.com/mda-mhwf07t27w3gi1y7/1080p/cae_h264/1630406994590156367/mda-mhwf07t27w3gi1y7.mp4 +孙艺琪《寂寞的人别听伤感情歌》,https://vd2.bdstatic.com/mda-mdscsws7443npwa8/1080p/cae_h264/1619516504/mda-mdscsws7443npwa8.mp4 +郭镐鸣《野摩托》,https://vd3.bdstatic.com/mda-mekfm7wu6f4rtt99/1080p/cae_h264/1621595318412084671/mda-mekfm7wu6f4rtt99.mp4 +赵蕾蕾《寂寞的城伤心的人》,https://vd2.bdstatic.com/mda-mesdm11tdp69a9ye/1080p/cae_h264/1622115758783335310/mda-mesdm11tdp69a9ye.mp4 +海来阿木《浪子心》DJ沈念版,https://vd3.bdstatic.com/mda-mgr9s5pv0jeqbcm8/1080p/cae_h264/1627298307874491239/mda-mgr9s5pv0jeqbcm8.mp4 +《人间惊鸿客》,https://vd3.bdstatic.com/mda-mh2bbyjcqjxjhzkd/1080p/cae_h264/1627978577559447916/mda-mh2bbyjcqjxjhzkd.mp4 +DJ版《三月里的小雨》,https://vd2.bdstatic.com/mda-mgwegh0bzv4cy6cb/1080p/cae_h264/1627727251470197083/mda-mgwegh0bzv4cy6cb.mp4 +DJ版《望爱却步》,https://vd4.bdstatic.com/mda-mh3ei4sg2jypty79/1080p/cae_h264/1628072927342489970/mda-mh3ei4sg2jypty79.mp4 +《唱着情歌流着泪》,https://vd3.bdstatic.com/mda-mhwaejanf0ie6b8j/1080p/cae_h264/1630409563129833732/mda-mhwaejanf0ie6b8j.mp4 +DJ版《一个人挺好》,https://vd3.bdstatic.com/mda-mh6gqq4b59z26cjx/1080p/cae_h264/1628504623473300938/mda-mh6gqq4b59z26cjx.mp4 +《爱你到最后一刻》,https://vd3.bdstatic.com/mda-mhr9c7q9xzgy1812/1080p/cae_h264/1630062648077583523/mda-mhr9c7q9xzgy1812.mp4 +伤感DJ《等》,https://vd2.bdstatic.com/mda-mhq92a7nafrh8dma/1080p/cae_h264/1629977686796490849/mda-mhq92a7nafrh8dma.mp4 +DJ《我们不再是从前》,https://vd2.bdstatic.com/mda-mhne550wq5m66zvj/1080p/cae_h264/1629803514331462220/mda-mhne550wq5m66zvj.mp4 +DJ舞曲《让我做你的眼睛》,https://vd2.bdstatic.com/mda-mhaargrart2qrkdz/1080p/cae_h264/1629630942996744682/mda-mhaargrart2qrkdz.mp4 +DJ版《时间会知道你好不好》,https://vd3.bdstatic.com/mda-mhairve7gvye1192/1080p/cae_h264/1629457148988604256/mda-mhairve7gvye1192.mp4 +DJ版《爱不得忘不舍》,https://vd3.bdstatic.com/mda-mh8j8egnj8idbvd8/1080p/cae_h264/1629367979662473678/mda-mh8j8egnj8idbvd8.mp4 +DJ版《蜜雪冰城》,https://vd3.bdstatic.com/mda-mhbae2pwwxhyxjcz/1080p/cae_h264/1628767594518574030/mda-mhbae2pwwxhyxjcz.mp4 +《无味》 DJ版,https://vd3.bdstatic.com/mda-mgqiagirsmmpuarm/1080p/cae_h264/1627218846577884242/mda-mgqiagirsmmpuarm.mp4 +DJ版《原谅你的谎》,https://vd4.bdstatic.com/mda-mhacxx5vhr2we882/1080p/cae_h264/1628673933350116053/mda-mhacxx5vhr2we882.mp4 +DJ《等爱》,https://vd2.bdstatic.com/mda-mfhh1e0hwq212rrt/sc/h264/1623988905898256147/mda-mfhh1e0hwq212rrt.mp4 +DJ《醉过多少回》,https://vd4.bdstatic.com/mda-megp46e98a4f2b9g/sc/h264/1621239560364992817/mda-megp46e98a4f2b9g.mp4 +DJ情歌《爱情迷了路》,https://vd4.bdstatic.com/mda-mdbrb7fns70avrmt/1080p/cae_h264/1618222287/mda-mdbrb7fns70avrmt.mp4 +DJ 最美不过你的微笑,https://vd4.bdstatic.com/mda-mhs2qjdmkjz2rb7g/sc/cae_h264/1630029534870787600/mda-mhs2qjdmkjz2rb7g.mp4 +DJ 流浪兄弟,https://vd2.bdstatic.com/mda-mhrdtax1km0idkc5/1080p/cae_h264/1629972852606533219/mda-mhrdtax1km0idkc5.mp4 +车载DJ《多年以后》,https://vd3.bdstatic.com/mda-mhqekuegbh6112js/1080p/cae_h264/1629891559415737083/mda-mhqekuegbh6112js.mp4 +红尘只是个过客,https://vd2.bdstatic.com/mda-mhq68s6g444n437t/hd/cae_h264/1629865742325435508/mda-mhq68s6g444n437t.mp4 +经典老歌DJ舞曲七首,https://vd2.bdstatic.com/mda-mhwbtsnrmm6v6x5r/sc/cae_h264/1630403250895754314/mda-mhwbtsnrmm6v6x5r.mp4 +精选五首DJ男声串烧,https://vd2.bdstatic.com/mda-maqfk730tsig88wr/v2-hknm/1080p/mda-maqfk730tsig88wr.mp4 +韩可可《错位时空》DJ版,https://vd3.bdstatic.com/mda-mgciytzb45z6z8yj/1080p/cae_h264/1626183756603775947/mda-mgciytzb45z6z8yj.mp4 +忘记你需要多久(DJ小鱼儿版),https://vd2.bdstatic.com/mda-mc1sm1r5s9azchjv/v1-cae/1080p/mda-mc1sm1r5s9azchjv.mp4 +抖音热歌《大风吹+夜夜夜漫长》,https://vdse.bdstatic.com//13da18e12728e9d7849f6589a3070b4c.mp4 +一夜火爆i网络DJ舞曲,https://vdse.bdstatic.com//692b9306c06b72d223c9d714f8ebe579.mp4 +2021年最火伤感音乐,https://vdse.bdstatic.com//6d39df48360bdb12f73800397c4a6c02.mp4 +2021年网络火爆伤感情歌6首,https://vdse.bdstatic.com//80e0473f97055cec1c9c76c1c7e5498a.mp4 +2021热门伤感DJ,https://vdse.bdstatic.com//06b4e9b185b843e694e4d20e9b0a0aac.mp4 +几首比较火的DJ情歌,https://vdse.bdstatic.com//4d7e8fe409b2ba9e08b179de8e146fa3.mp4 +花都开了你来不来DJ,https://vd3.bdstatic.com/mda-mdee523swbezmsin/480p/h264/1618480997/mda-mdee523swbezmsin.mp4 +海来阿木《浪子心》DJ沈念版,https://vd3.bdstatic.com/mda-mgr9s5pv0jeqbcm8/1080p/cae_h264/1627298307874491239/mda-mgr9s5pv0jeqbcm8.mp4 +DJ舞曲,https://vdse.bdstatic.com//8258cbe0dfd6738613fe9efd33a7a83f.mp4 +4K高清岳云鹏,https://vd2.bdstatic.com/mda-meqitprx5ti8ed1a/720p/h264/1621948823045463060/mda-meqitprx5ti8ed1a.mp4 +甜歌美人舞,https://vd2.bdstatic.com/mda-ndr6b7bxbcxhs2hn/480p/h264_delogo/1650947738307316588/mda-ndr6b7bxbcxhs2hn.mp4 +疯疯疯,https://vd3.bdstatic.com/mda-ndk6wn1pf4bf8uye/480p/h264_delogo/1650516770231448538/mda-ndk6wn1pf4bf8uye.mp4 +真心太难求,https://vdse.bdstatic.com//19652aae08e5960c7ec9694e87e0d1f0.mp4 +DJ此生已过半,https://vd3.bdstatic.com/mda-mdaprhx095djift2/hd/mda-mdaprhx095djift2.mp4 +DJ没理由,https://bj.bcebos.com/v1/baidu-little-video/vod-gechgi84v43uhfhp/mda-kmbyf4x2aeqt8cds.mp4 +伤不起dj,https://vd2.bdstatic.com/mda-ndk1gp50bp71j652/cae_h264_delogo/1650507809324077232/mda-ndk1gp50bp71j652.mp4 +背叛情歌,https://vd2.bdstatic.com/mda-nd9g7g9pdc9d06hz/sc/cae_h264_delogo/1649669454990045825/mda-nd9g7g9pdc9d06hz.mp4 +2021酒吧夜店经典中文车载劲爆DJ舞曲大串烧FHD,https://vdse.bdstatic.com//f222c3fafbcc09db6f39991e5c982450.mp4 +2021年最劲爆的dj歌曲 全中文舞曲串烧-2021夜店混音FHD,https://vdse.bdstatic.com//02a4b136a5e939a0401fc1b58eec7831.mp4 +花儿笑了DJ,https://vd4.bdstatic.com/mda-ncj7vawq5rnk5v59/hd/cae_h264_delogo/1647759626623363912/mda-ncj7vawq5rnk5v59.mp4 +DJ《信天游》,https://vd3.bdstatic.com/mda-nd5kjj9w1dkk13am/sc/cae_h264_delogo/1649256546383547912/mda-nd5kjj9w1dkk13am.mp4 +老歌DJ《化蝶》,https://vd4.bdstatic.com/mda-nd0if1hnkf4zzh2r/hd/cae_h264_delogo/1648822586944230351/mda-nd0if1hnkf4zzh2r.mp4 +DJ老歌60-70-80爱听,https://vd2.bdstatic.com/mda-nd59vsq0r1e2j3g2/sc/cae_h264_delogo/1649230737582909591/mda-nd59vsq0r1e2j3g2.mp4 +《2首车载DJ歌曲联唱》,https://vd2.bdstatic.com/mda-jiugyuw4xwqiwzet/sc/mda-jiugyuw4xwqiwzet.mp4 +DJ《等爱的玫瑰》,https://vd2.bdstatic.com/mda-jfsusw53dxs6kyvc/sc/mda-jfsusw53dxs6kyvc.mp4 +DJ《潮湿的心》,https://vd3.bdstatic.com/mda-jfsre2z1s4xk012w/sc/mda-jfsre2z1s4xk012w.mp4 +DJ《小薇》,https://vd3.bdstatic.com/mda-nd6jimimnfwyjuar/sc/cae_h264_delogo/1649345922829980302/mda-nd6jimimnfwyjuar.mp4 +《野狼的士高》,https://vd2.bdstatic.com/mda-ncp47pjrm7kqjfwq/720p/h264_delogo/1648091187992655346/mda-ncp47pjrm7kqjfwq.mp4 +DJ《精选8首》,https://vdse.bdstatic.com//200ab148a9e867ad29f5fda4ac175305.mp4 +荷东dj,https://vd4.bdstatic.com/mda-kc2b015ijvbriss5/v1-cae/sc/mda-kc2b015ijvbriss5.mp4 +光明DJ4K,https://vd4.bdstatic.com/mda-ma7y4ug97hcdf710/v1-cae/1080p/mda-ma7y4ug97hcdf710.mp4 +为爱疯狂,https://vd2.bdstatic.com/mda-maiq19kmh7y0q6wz/v1-cae/1080p/mda-maiq19kmh7y0q6wz.mp4 +任妙音《天在下雨我在想你》DJ版,https://vd3.bdstatic.com/mda-makbbuxuhfwrbbjv/v1-cae/1080p/mda-makbbuxuhfwrbbjv.mp4 +郑亦辰《消遣》DJ版,https://vd4.bdstatic.com/mda-mapavg9qcn4t5hm6/v2-hknm/1080p/mda-mapavg9qcn4t5hm6.mp4 +情歌《你是我今生不能忘的唯一》DJ版,https://vd4.bdstatic.com/mda-mbdzgfvp4bz1hhg8/v1-cae/1080p/mda-mbdzgfvp4bz1hhg8.mp4 +一首《爱一回错一回》DJ版,https://vd4.bdstatic.com/mda-mbim69siwwsgwp7d/v1-cae/1080p/mda-mbim69siwwsgwp7d.mp4 +小倩《绣红装》DJ版,https://vd2.bdstatic.com/mda-mbimxt1mdeam71vi/v1-cae/1080p/mda-mbimxt1mdeam71vi.mp4 +经典DJ,https://vd3.bdstatic.com/mda-nc1z7hjnxxzffuuw/hd/cae_h264_delogo/1646263916412254842/mda-nc1z7hjnxxzffuuw.mp4 +电子琴《20分钟经典流行音乐》,https://vdse.bdstatic.com//aa18d91f14915e1e79eacb046ac7747e.mp4 +十首车载音乐,https://vd3.bdstatic.com/mda-nb6afsyti2t91p54/sc/cae_h264_delogo/1644221195521496576/mda-nb6afsyti2t91p54.mp4 +10首车载,https://vd3.bdstatic.com/mda-nb6afsyti2t91p54/sc/cae_h264_delogo/1644221195521496576/mda-nb6afsyti2t91p54.mp4 +DJ爆红老歌10首车载,https://vd3.bdstatic.com/mda-nbhgwre9iykh09ya/sc/cae_h264_delogo/1645187028367793873/mda-nbhgwre9iykh09ya.mp4 +最火10首车载DJ,https://vd4.bdstatic.com/mda-nahdi45ud73s2842/sc/cae_h264_delogo/1642519489503455798/mda-nahdi45ud73s2842.mp4 +DJ10首老歌,https://vd3.bdstatic.com/mda-ka6r4qi3e0s5isqm/sc/mda-ka6r4qi3e0s5isqm.mp4 +DJ13首《经典老歌》,https://vd4.bdstatic.com/mda-igbpw1bm4vdxitj0/logo/sc/mda-igbpw1bm4vdxitj0.mp4 +DJ爱难求,https://vd4.bdstatic.com/mda-mk99haw9m5kp6p5s/default/h264/1636526565199080954/mda-mk99haw9m5kp6p5s.mp4 +DJ天后,https://vd3.bdstatic.com/mda-kk5f22n13qna8edp/v1-cae/sc/mda-kk5f22n13qna8edp.mp4 +DJ版《黑街》,https://vd3.bdstatic.com/mda-mk612p9ceppwbgxj/sc/cae_h264/1636246729628620650/mda-mk612p9ceppwbgxj.mp4 +DJ《给你留念》》,https://vd4.bdstatic.com/mda-kim3r6dpd04ypqn4/cae_h264_nowatermark/mda-kim3r6dpd04ypqn4.mp4 +DJ《连锁反应》,https://vd2.bdstatic.com/mda-na26q8vkv1hegaw4/sc/cae_h264/1641186067929723723/mda-na26q8vkv1hegaw4.mp4 +DJ4首吸烟的女人,https://vd2.bdstatic.com/mda-mg7zcjiauy83ehmz/sc/cae_h264/1625790109974824055/mda-mg7zcjiauy83ehmz.mp4 +DJ车载音乐,https://vd3.bdstatic.com/mda-mjtm31vvhj027na9/720p/h264/1635433115826085505/mda-mjtm31vvhj027na9.mp4 +DJ《三月里的小雨》,https://vd2.bdstatic.com/mda-mgwegh0bzv4cy6cb/1080p/cae_h264/1627727251470197083/mda-mgwegh0bzv4cy6cb.mp4 +DJ《时间会知道你好不好》,https://vd3.bdstatic.com/mda-mhairve7gvye1192/1080p/cae_h264/1629457148988604256/mda-mhairve7gvye1192.mp4 +DJ《望爱却步》,https://vd4.bdstatic.com/mda-mh3ei4sg2jypty79/1080p/cae_h264/1628072927342489970/mda-mh3ei4sg2jypty79.mp4 +DJ《一个人挺好》,https://vd3.bdstatic.com/mda-mh6gqq4b59z26cjx/1080p/cae_h264/1628504623473300938/mda-mh6gqq4b59z26cjx.mp4 +DJ《原谅你的谎》,https://vd4.bdstatic.com/mda-mhacxx5vhr2we882/1080p/cae_h264/1628673933350116053/mda-mhacxx5vhr2we882.mp4 +DJ《心在跳情在烧》,https://vd4.bdstatic.com/mda-mhwf07t27w3gi1y7/1080p/cae_h264/1630406994590156367/mda-mhwf07t27w3gi1y7.mp4# +DJ《我们不再是从前》,https://vd2.bdstatic.com/mda-mhne550wq5m66zvj/1080p/cae_h264/1629803514331462220/mda-mhne550wq5m66zvj.mp4 +DJ舞曲《让我做你的眼睛》,https://vd2.bdstatic.com/mda-mhaargrart2qrkdz/1080p/cae_h264/1629630942996744682/mda-mhaargrart2qrkdz.mp4 +DJ版《爱不得忘不舍》,https://vd3.bdstatic.com/mda-mh8j8egnj8idbvd8/1080p/cae_h264/1629367979662473678/mda-mh8j8egnj8idbvd8.mp4 +DJ版《蜜雪冰城》,https://vd3.bdstatic.com/mda-mhbae2pwwxhyxjcz/1080p/cae_h264/1628767594518574030/mda-mhbae2pwwxhyxjcz.mp4 +2021年最火伤感音乐,https://vdse.bdstatic.com//6d39df48360bdb12f73800397c4a6c02.mp4 +芒种,https://vd3.bdstatic.com/mda-kat1tr4ka5st965k/hd/mda-kat1tr4ka5st965k.mp4?pd=20 +2021年网络火爆伤感情歌6首,https://vdse.bdstatic.com//80e0473f97055cec1c9c76c1c7e5498a.mp4 +2021热门伤感DJ,https://vdse.bdstatic.com//06b4e9b185b843e694e4d20e9b0a0aac.mp4 +几首比较火的DJ情歌,https://vdse.bdstatic.com//4d7e8fe409b2ba9e08b179de8e146fa3.mp4 +《爱难求情难断…》,https://vdse.bdstatic.com//0c8ed110c5522e9bd31752ecb999b1ab.mp4 +花都开了你来不来DJ,https://vd3.bdstatic.com/mda-mdee523swbezmsin/480p/h264/1618480997/mda-mdee523swbezmsin.mp4 +六首伤感DJ舞曲《为爱受尽相思罪》《爱过了头心伤透》FHD,https://vdse.bdstatic.com//f27d59d8b75915e122f53c173e27a32e.mp4 +一首伤感歌曲,https://vd3.bdstatic.com/mda-nbr5d212a9mkb4vp/cae_h264_delogo/1645848373794241498/mda-nbr5d212a9mkb4vp.mp4 +5首伤感情歌DJ,https://vdse.bdstatic.com//a34f76474b9bdfca8c487761861fb603.mp4 +几首绝美情歌DJ,https://vdse.bdstatic.com//c5c64b60c9fdfbdfa3e959bb1d56c4b0.mp4 +【经典老歌】DJ精选8首,https://vdse.bdstatic.com//200ab148a9e867ad29f5fda4ac175305.mp4 +经典老歌DJ版精选六首FHD,https://vdse.bdstatic.com//f203048340fe15016fbec9a72905680d.mp4 +【老歌DJ版】《精选8首》FHD,https://vdse.bdstatic.com//525174705415c8773bd465ce4b88b18d.mp4 +2021一夜火爆几首DJ舞曲FHD,https://vdse.bdstatic.com//1fc9fd16e02ca272bb81666b85bf4135.mp4 +2021《精选5首酒吧DJ舞曲》FHD,https://vdse.bdstatic.com//0e59c29ddbc68ed60dce8a6f4631c1f1.mp4 +2021火爆女生版伤感DJ情歌FHD,https://vdse.bdstatic.com//8fe197e92568201d4899dfd3d94585a7.mp4 +让人陶醉的几首DJ舞曲FHD,https://vdse.bdstatic.com//0f464b2beaf5887f90ac36b68fcd342f.mp4 +女生DJ伤感情歌FHD,https://vdse.bdstatic.com//8fe41305b5c64f8e11715b4dfd442c67.mp4 +2021最佳伤感情歌HD,https://vdse.bdstatic.com//59c5abc138bf1da5585bb765c530137e.mp4 +车载DJ舞曲,https://vd3.bdstatic.com/mda-nask5v8g11h6fqmf/sc/cae_h264_delogo/1643293983357482773/mda-nask5v8g11h6fqmf.mp4 +7首「伤感情歌」,https://vd2.bdstatic.com/mda-nbdj7sp20st0jd9d/sc/cae_h264_delogo/1644847557994341172/mda-nbdj7sp20st0jd9d.mp4 +经典老歌6首,https://vd2.bdstatic.com/mda-ncd2yz4tkhsx9x7n/sc/cae_h264_delogo/1647224948607209677/mda-ncd2yz4tkhsx9x7n.mp4 +DJ情歌8首,https://vd2.bdstatic.com/mda-mk7hhug7aprk2806/sc/cae_h264/1636496746808750167/mda-mk7hhug7aprk2806.mp4 +DJ情歌5首,https://vd3.bdstatic.com/mda-mmg7iqkrutbwd7az/sc/cae_h264/1639851941696222972/mda-mmg7iqkrutbwd7az.mp4 +5首伤感DJ,https://vd2.bdstatic.com/mda-nd5cr584424xr57c/sc/cae_h264_delogo/1649238205192327499/mda-nd5cr584424xr57c.mp4 +DJ《情火》《拥抱你离去》《夜夜夜漫长》,https://vd3.bdstatic.com/mda-nd3gy7ukv0reh4xv/sc/cae_h264_delogo/1649115109025912038/mda-nd3gy7ukv0reh4xv.mp4 +DJ最烈的酒最猛的烟,https://vd4.bdstatic.com/mda-nd3eicnw62x3z3j0/hd/cae_h264_delogo/1649067794176996768/mda-nd3eicnw62x3z3j0.mp4 +DJ《酒醉风雨情》《伤心苦酒》《朋友的酒》《红尘没有错》,https://vd4.bdstatic.com/mda-nd1a4zuxf78py830/sc/cae_h264_delogo/1649003829932795060/mda-nd1a4zuxf78py830.mp4 +dj《错过不是我的错》,hhttps://vd3.bdstatic.com/mda-na6dv0mi83nwdcj9/sc/cae_h264/1641656080219161555/mda-na6dv0mi83nwdcj9.mp4 +DJ《舍不得又能怎样呢》,https://vd2.bdstatic.com/mda-ncv1qd3acxskd46p/sc/cae_h264_delogo/1648720820032252958/mda-ncv1qd3acxskd46p.mp4 +情哥哥DJ,https://vd3.bdstatic.com/mda-kjs8ewqz9tidsdjk/v1-cae/hd/mda-kjs8ewqz9tidsdjk.mp4 +精选车载酒吧劲爆中文DJ舞曲,https://vd2.bdstatic.com/mda-nc1dmpzkg7y9k6y1/sc/cae_h264_delogo/1646218423219778510/mda-nc1dmpzkg7y9k6y1.mp4 +伤感情歌DJ《爱错绝情的你》《我只想告诉你》新歌上线,https://vd4.bdstatic.com/mda-nc37edj3rtfxe0dw/720p/h264_delogo/1646371172935157274/mda-nc37edj3rtfxe0dw.mp4 +现场一曲《最美的情缘》DJ版,https://vd3.bdstatic.com/mda-ih4mz2ubqfx9q9gb/sc/mda-ih4mz2ubqfx9q9gb.mp4 +DJ舞曲《闯天涯》,https://vd2.bdstatic.com/mda-mjf3hahmam95yfkd/sc/cae_h264_nowatermark/1634352379471224566/mda-mjf3hahmam95yfkd.mp4 +女孩街头演唱DJ《放不下想又怕》,https://vd2.bdstatic.com/mda-nb8mpxwznwj6s3ps/sc/cae_h264_nowatermark_delogo/1644456565663753843/mda-nb8mpxwznwj6s3ps.mp4 +DJ舞曲《拼命的喝酒拼命的抽烟》,https://vd2.bdstatic.com/mda-nd1n5vscnn77rui2/sc/cae_h264_delogo/1648915878369422268/mda-nd1n5vscnn77rui2.mp4 +「精选DJ洗脑神曲」节奏欢快,动感魔性,https://vd2.bdstatic.com/mda-ncsh78jh0xna7ngs/sc/cae_h264_delogo/1648389408244925817/mda-ncsh78jh0xna7ngs.mp4 +最火的5首DJ舞曲,https://vd2.bdstatic.com/mda-mmqfbgzdj99h2g2a/sc/cae_h264_nowatermark/1640431486180468034/mda-mmqfbgzdj99h2g2a.mp4 +情难断,https://vd2.bdstatic.com/mda-nc64m5emhisa13mr/cae_h264_delogo/1646623933147802848/mda-nc64m5emhisa13mr.mp4 +13首《经典老歌》DJ舞曲版,https://vd4.bdstatic.com/mda-igbpw1bm4vdxitj0/logo/sc/mda-igbpw1bm4vdxitj0.mp4 +《经典老歌》DJ舞曲串烧,70、80、90后,https://vd3.bdstatic.com/mda-ihps4033ktcz7mfq/sc/mda-ihps4033ktcz7mfq.mp4 +《感动天感动地》无损超嗨版,https://vd2.bdstatic.com/mda-kc9syj5km9m1bvbq/sc/mda-kc9syj5km9m1bvbq.mp4 +《潇洒的走DJ》动感节奏,https://vd4.bdstatic.com/mda-kgirfiwxg342z9d8/v1-cae/sc/mda-kgirfiwxg342z9d8.mp4 +《经典老歌》伤感女声篇,https://vd3.bdstatic.com/mda-ig8mrb0k4jjc5ydt/sc/mda-ig8mrb0k4jjc5ydt.mp4 +《听风的歌》DJ舞曲重低音夜店歌曲,https://vd3.bdstatic.com/mda-kb2nbj78xr6a1mbi/v1-cae/sc/mda-kb2nbj78xr6a1mbi.mp4 +2018精选十首《动感DJ舞曲》串烧大碟,https://vd3.bdstatic.com/mda-ii00rzrptt9e56yf/sc/mda-ii00rzrptt9e56yf.mp4 +DJ舞曲,https://vd4.bdstatic.com/mda-idpg23napy9gsnxb/logo/sc/mda-idpg23napy9gsnxb.mp4 +2020国外热门动感DJ版,https://vd3.bdstatic.com/mda-kb2bqk7bw0ntjpfn/sc/mda-kb2bqk7bw0ntjpfn.mp4 +2019火爆DJ串烧第一期,https://vd2.bdstatic.com/mda-jgjca1pammc75yy9/sc/mda-jgjca1pammc75yy9.mp4 +车载DJ推荐《将军在上》《馋丫头》,https://vd4.bdstatic.com/mda-mm83f0d9sws2zdu4/sc/cae_h264/1639107595725814486/mda-mm83f0d9sws2zdu4.mp4 +车载音乐DJ歌曲劲歌热舞提神醒目,https://vd3.bdstatic.com/mda-ncf25mrs5bm53k6j/sc/cae_h264_delogo/1647396409036292673/mda-ncf25mrs5bm53k6j.mp4 +DJ歌曲《怎么爱都爱不够》,https://vd3.bdstatic.com/mda-mksyipb0103ck0pm/sc/cae_h264_nowatermark/1638055298562460672/mda-mksyipb0103ck0pm.mp4 +《鸳鸯DJ》劲爆DJ,https://vd3.bdstatic.com/mda-nba9z1mqi949jyyb/sc/cae_h264_delogo/1644629210546304303/mda-nba9z1mqi949jyyb.mp4 +今日热歌DJ《如果爱还在》,https://vd2.bdstatic.com/mda-mhhf5mr00yyhpfjs/1080p/cae_h264/1629284581057661229/mda-mhhf5mr00yyhpfjs.mp4# +推荐9首DJ舞曲,https://vd2.bdstatic.com/mda-mhig1c3sw223mx8p/1080p/cae_h264/1629380139191731149/mda-mhig1c3sw223mx8p.mp4# +动感DJ《苦了累了听听歌》,https://vd4.bdstatic.com/mda-mhqekuf2r91v08dt/1080p/cae_h264/1629888246186602728/mda-mhqekuf2r91v08dt.mp4# +车载DJ《殇雪》,https://vd3.bdstatic.com/mda-mhve4gb9hi8cstzk/1080p/cae_h264/1630319514896018158/mda-mhve4gb9hi8cstzk.mp4# +DJ《心在跳情在烧》,https://vd4.bdstatic.com/mda-mhwf07t27w3gi1y7/1080p/cae_h264/1630406994590156367/mda-mhwf07t27w3gi1y7.mp4# +孙艺琪《寂寞的人别听伤感情歌》,https://vd2.bdstatic.com/mda-mdscsws7443npwa8/1080p/cae_h264/1619516504/mda-mdscsws7443npwa8.mp4# +郭镐鸣《野摩托》,https://vd3.bdstatic.com/mda-mekfm7wu6f4rtt99/1080p/cae_h264/1621595318412084671/mda-mekfm7wu6f4rtt99.mp4# +赵蕾蕾《寂寞的城伤心的人》,https://vd2.bdstatic.com/mda-mesdm11tdp69a9ye/1080p/cae_h264/1622115758783335310/mda-mesdm11tdp69a9ye.mp4# +海来阿木《浪子心》DJ沈念版,https://vd3.bdstatic.com/mda-mgr9s5pv0jeqbcm8/1080p/cae_h264/1627298307874491239/mda-mgr9s5pv0jeqbcm8.mp4# +《人间惊鸿客》,https://vd3.bdstatic.com/mda-mh2bbyjcqjxjhzkd/1080p/cae_h264/1627978577559447916/mda-mh2bbyjcqjxjhzkd.mp4# +DJ版《三月里的小雨》,https://vd2.bdstatic.com/mda-mgwegh0bzv4cy6cb/1080p/cae_h264/1627727251470197083/mda-mgwegh0bzv4cy6cb.mp4# +DJ版《望爱却步》,https://vd4.bdstatic.com/mda-mh3ei4sg2jypty79/1080p/cae_h264/1628072927342489970/mda-mh3ei4sg2jypty79.mp4# +《唱着情歌流着泪》,https://vd3.bdstatic.com/mda-mhwaejanf0ie6b8j/1080p/cae_h264/1630409563129833732/mda-mhwaejanf0ie6b8j.mp4# +DJ版《一个人挺好》,https://vd3.bdstatic.com/mda-mh6gqq4b59z26cjx/1080p/cae_h264/1628504623473300938/mda-mh6gqq4b59z26cjx.mp4# +《爱你到最后一刻》,https://vd3.bdstatic.com/mda-mhr9c7q9xzgy1812/1080p/cae_h264/1630062648077583523/mda-mhr9c7q9xzgy1812.mp4# +伤感DJ《等》,https://vd2.bdstatic.com/mda-mhq92a7nafrh8dma/1080p/cae_h264/1629977686796490849/mda-mhq92a7nafrh8dma.mp4# +DJ《我们不再是从前》,https://vd2.bdstatic.com/mda-mhne550wq5m66zvj/1080p/cae_h264/1629803514331462220/mda-mhne550wq5m66zvj.mp4# +DJ舞曲《让我做你的眼睛》,https://vd2.bdstatic.com/mda-mhaargrart2qrkdz/1080p/cae_h264/1629630942996744682/mda-mhaargrart2qrkdz.mp4# +DJ版《时间会知道你好不好》,https://vd3.bdstatic.com/mda-mhairve7gvye1192/1080p/cae_h264/1629457148988604256/mda-mhairve7gvye1192.mp4# +DJ版《爱不得忘不舍》,https://vd3.bdstatic.com/mda-mh8j8egnj8idbvd8/1080p/cae_h264/1629367979662473678/mda-mh8j8egnj8idbvd8.mp4# +DJ版《蜜雪冰城》,https://vd3.bdstatic.com/mda-mhbae2pwwxhyxjcz/1080p/cae_h264/1628767594518574030/mda-mhbae2pwwxhyxjcz.mp4# +《无味》 DJ版,https://vd3.bdstatic.com/mda-mgqiagirsmmpuarm/1080p/cae_h264/1627218846577884242/mda-mgqiagirsmmpuarm.mp4# +DJ版《原谅你的谎》,https://vd4.bdstatic.com/mda-mhacxx5vhr2we882/1080p/cae_h264/1628673933350116053/mda-mhacxx5vhr2we882.mp4# +DJ《等爱》,https://vd2.bdstatic.com/mda-mfhh1e0hwq212rrt/sc/h264/1623988905898256147/mda-mfhh1e0hwq212rrt.mp4# +DJ《醉过多少回》,https://vd4.bdstatic.com/mda-megp46e98a4f2b9g/sc/h264/1621239560364992817/mda-megp46e98a4f2b9g.mp4# +DJ情歌《爱情迷了路》,https://vd4.bdstatic.com/mda-mdbrb7fns70avrmt/1080p/cae_h264/1618222287/mda-mdbrb7fns70avrmt.mp4# +DJ 最美不过你的微笑,https://vd4.bdstatic.com/mda-mhs2qjdmkjz2rb7g/sc/cae_h264/1630029534870787600/mda-mhs2qjdmkjz2rb7g.mp4# +DJ 流浪兄弟,https://vd2.bdstatic.com/mda-mhrdtax1km0idkc5/1080p/cae_h264/1629972852606533219/mda-mhrdtax1km0idkc5.mp4# +车载DJ《多年以后》,https://vd3.bdstatic.com/mda-mhqekuegbh6112js/1080p/cae_h264/1629891559415737083/mda-mhqekuegbh6112js.mp4# +经典老歌DJ舞曲七首,https://vd2.bdstatic.com/mda-mhwbtsnrmm6v6x5r/sc/cae_h264/1630403250895754314/mda-mhwbtsnrmm6v6x5r.mp4# +精选五首DJ男声串烧,https://vd2.bdstatic.com/mda-maqfk730tsig88wr/v2-hknm/1080p/mda-maqfk730tsig88wr.mp4# +韩可可《错位时空》DJ版,https://vd3.bdstatic.com/mda-mgciytzb45z6z8yj/1080p/cae_h264/1626183756603775947/mda-mgciytzb45z6z8yj.mp4# +忘记你需要多久(DJ小鱼儿版),https://vd2.bdstatic.com/mda-mc1sm1r5s9azchjv/v1-cae/1080p/mda-mc1sm1r5s9azchjv.mp4# +抖音热歌《大风吹+夜夜夜漫长》,https://vdse.bdstatic.com//13da18e12728e9d7849f6589a3070b4c.mp4# +一夜火爆i网络DJ舞曲,https://vdse.bdstatic.com//692b9306c06b72d223c9d714f8ebe579.mp4# +2021年最火伤感音乐,https://vdse.bdstatic.com//6d39df48360bdb12f73800397c4a6c02.mp4# +2021年网络火爆伤感情歌6首,https://vdse.bdstatic.com//80e0473f97055cec1c9c76c1c7e5498a.mp4# +2021热门伤感DJ,https://vdse.bdstatic.com//06b4e9b185b843e694e4d20e9b0a0aac.mp4# +几首比较火的DJ情歌,https://vdse.bdstatic.com//4d7e8fe409b2ba9e08b179de8e146fa3.mp4# +花都开了你来不来DJ,https://vd3.bdstatic.com/mda-mdee523swbezmsin/480p/h264/1618480997/mda-mdee523swbezmsin.mp4 +DJ舞曲,https://vd2.bdstatic.com/mda-ncp5ggtppe1c0gw0/720p/h264_delogo/1648094099072851708/mda-ncp5ggtppe1c0gw0.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1648813542-0-0-b75fb95e3bd44e8af5cc964483db1b1a&bcevod_channel=searchbox_feed&pd=1&vt=1&cd=0&watermark=0&did=ced9e69a4f6154e91be590c1d5a488ab&logid=0942439256&vid=12262793352915624883&pt=0&appver=7.2.1.10&model=T7-5G10&osver=9&cr=2&abtest=peav_g52&sle=1&sl=2303&split=1993062&dt=0&nt=0&kpdl=1&h265_m=-1&klogid=0000000000000000&kapid=1&psp=1&psk=8&pif=0_0_0_0&qtfc=65535&qtut=0&stg=none +DJ舞曲,https://vd2.bdstatic.com/mda-nch73gktvfmgdrbd/sc/cae_h264_delogo/1647644537085447432/mda-nch73gktvfmgdrbd.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1648813542-0-0-4a2d27d50015d19f3ed5cf5fbc261f79&bcevod_channel=searchbox_feed&pd=1&vt=1&cd=0&watermark=0&did=ced9e69a4f6154e91be590c1d5a488ab&logid=0942439256&vid=4192073541598205553&pt=0&appver=7.2.1.10&model=T7-5G10&osver=9&cr=2&abtest=peav_g52&sle=1&sl=1420&split=1235330&dt=1&nt=0&pe=0&prerender=0&kpdl=1&h265_m=-1&klogid=c770aa16cadb579d&kapid=1&psp=1&psk=68&pif=0_0_0_0&qtfc=65535&qtut=0&stg=none +7 DJ舞曲,https://vd2.bdstatic.com/mda-nch73gktvfmgdrbd/sc/cae_h264_delogo/1647644537085447432/mda-nch73gktvfmgdrbd.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1648813542-0-0-4a2d27d50015d19f3ed5cf5fbc261f79&bcevod_channel=searchbox_feed&pd=1&vt=1&cd=0&watermark=0&did=ced9e69a4f6154e91be590c1d5a488ab&logid=0942439256&vid=4192073541598205553&pt=0&appver=7.2.1.10&model=T7-5G10&osver=9&cr=2&abtest=peav_g52&sle=1&sl=1420&split=1235330&dt=1&nt=0&pe=0&prerender=0&kpdl=1&h265_m=-1&klogid=c770aa16cadb579d&kapid=1&psp=1&psk=1028&pif=0_0_0_0&qtfc=65535&qtut=0&stg=none +DJ 无情书,https://vd3.bdstatic.com/mda-kkikg9rzshuhcxwy/v1-cae/sc/mda-kkikg9rzshuhcxwy.mp4 +2021热门伤感DJ,https://vdse.bdstatic.com//06b4e9b185b843e694e4d20e9b0a0aac.mp4 +几首比较火的DJ情歌,https://vdse.bdstatic.com//4d7e8fe409b2ba9e08b179de8e146fa3.mp4 +《爱难求情难断…》,https://vdse.bdstatic.com//0c8ed110c5522e9bd31752ecb999b1ab.mp4 +花都开了你来不来DJ,https://vd3.bdstatic.com/mda-mdee523swbezmsin/480p/h264/1618480997/mda-mdee523swbezmsin.mp4 +5首劲爆dj,https://vd2.bdstatic.com/mda-mm69dxgtcqg28j9j/sc/cae_h264/1638860024910192032/mda-mm69dxgtcqg28j9j.mp4 +动感超人dj,https://vd3.bdstatic.com/mda-mm49pxqfvevcqbx4/sc/cae_h264/1638687905397245214/mda-mm49pxqfvevcqbx4.mp4 +野花香dj,https://vd3.bdstatic.com/mda-mm68k5z0h1qjm8n0/sc/cae_h264/1638980550463660240/mda-mm68k5z0h1qjm8n0.mp4 +精选dj,https://vd3.bdstatic.com/mda-mm68drt808w1nins/720p/h264/1638861890075163680/mda-mm68drt808w1nins.mp4 +伤感情歌DJ,https://vd3.bdstatic.com/mda-mkv7idcnxrgc3cnd/sc/cae_h264/1638257251905732477/mda-mkv7idcnxrgc3cnd.mp4 +DJ情歌,https://vd2.bdstatic.com/mda-mm67ychk60q5n0d1/sc/cae_h264/1638893384360470440/mda-mm67ychk60q5n0d1.mp4 +爱情情歌dj网,https://vd2.bdstatic.com/mda-mkq4iax6ed1yimay/sc/cae_h264/1637837116068761026/mda-mkq4iax6ed1yimay.mp4 +绝美情歌dj,https://vd2.bdstatic.com/mda-mkp952u577gbq8uc/sc/cae_h264/1637737197319948432/mda-mkp952u577gbq8uc.mp4 +慢摇dj舞曲,https://vd2.bdstatic.com/mda-mkpi5r0xe92ja446/sc/cae_h264/1637775035132431598/mda-mkpi5r0xe92ja446.mp4 +男神dj舞曲,https://vd4.bdstatic.com/mda-mkpbcp1thzqg8vju/sc/cae_h264/1637772142027994508/mda-mkpbcp1thzqg8vju.mp4 +韩国女团dj,https://vd3.bdstatic.com/mda-mknba5i60je0d2dn/sc/cae_h264/1637654844357830568/mda-mknba5i60je0d2dn.mp4 +dj舞曲女人版,https://vd3.bdstatic.com/mda-mkp88kxv6r8y73k9/sc/cae_h264/1637733263867775329/mda-mkp88kxv6r8y73k9.mp4 +情歌DJ合集,https://vd4.bdstatic.com/mda-mkp3tpu9ghk2ufev/sc/cae_h264/1637733480141753790/mda-mkp3tpu9ghk2ufev.mp4 +新世纪舞曲,https://vd4.bdstatic.com/mda-mkq704rtr59i9jtj/sc/cae_h264/1637823373696903055/mda-mkq704rtr59i9jtj.mp4 +日韩舞曲DJ,https://vd4.bdstatic.com/mda-mknatf58h2evy18i/sc/cae_h264/1637653930525484478/mda-mknatf58h2evy18i.mp4 +国际舞曲,https://vd4.bdstatic.com/mda-mkpde77et4yvqx7e/sc/cae_h264/1637766610977026004/mda-mkpde77et4yvqx7e.mp4 +六首伤感DJ舞曲《为爱受尽相思罪》《爱过了头心伤透》,https://vdse.bdstatic.com//f27d59d8b75915e122f53c173e27a32e.mp4 +车载DJ舞曲《大风吹》《浪子闲话》《玛尼情歌》《沙漠骆驼》,https://vdse.bdstatic.com//7002925e04c4c451cfa8aafc9b4190c7.mp4 +七首DJ情歌《拈花一笑》《对面的小姐姐》《想你了小哥哥》等,https://vdse.bdstatic.com//ed10354ac1acc37c9922074fd88d3697.mp4 +《拈花一笑》《对面的小姐姐》《想你了小哥哥》《一朵情花开》,https://vdse.bdstatic.com//7cfaf27a4db89583e069a40fbc2ed84b.mp4 +网络金曲《拈花一笑》《陪你千山万水》《对面小姐姐》,https://vdse.bdstatic.com//c2deba4d320384736569e542ac531aff.mp4 +dj舞曲英雄泪,https://vd3.bdstatic.com/mda-mkt45tnypacz3smk/sc/cae_h264/1638069225501294830/mda-mkt45tnypacz3smk.mp4 +爱江山更爱美人金典,https://vd4.bdstatic.com/mda-mm2a18n5jdh6d8bs/sc/cae_h264/1638516147610932793/mda-mm2a18n5jdh6d8bs.mp4 +今夜回望dj,https://vd2.bdstatic.com/mda-mkv7cbzq5xdtf9ms/sc/cae_h264/1638478442002383579/mda-mkv7cbzq5xdtf9ms.mp4 +车震视频1,https://vd2.bdstatic.com/mda-mki7h67gag5wcev9/720p/h264/1637299107495714243/mda-mki7h67gag5wcev9.mp4 +车震视频2,https://vd4.bdstatic.com/mda-mkp41tr6gmkgjjxm/sc/cae_h264/1637725035882295978/mda-mkp41tr6gmkgjjxm.mp4 +车震视频5,https://vd4.bdstatic.com/mda-mkj6mgsuic4gdknp/sc/cae_h264/1637383677947993989/mda-mkj6mgsuic4gdknp.mp4 +舞曲视频1,https://vd4.bdstatic.com/mda-mkf4g5p5hpevqbx6/sc/cae_h264/1637033781127837401/mda-mkf4g5p5hpevqbx6.mp4 +舞曲视频3,https://vd3.bdstatic.com/mda-mkmee6e6z4rq6zy7/sc/cae_h264/1637580756649466839/mda-mkmee6e6z4rq6zy7.mp4 +舞曲视频4,https://vd2.bdstatic.com/mda-mkn56h2g8ux3dtxq/sc/cae_h264/1637642599802363137/mda-mkn56h2g8ux3dtxq.mp4 +车震一小时,http://gcw.bdcdn.shoujiduoduo.com/201805/0748-641.mp4 +车载DJ视频6,https://vdse.bdstatic.com//7e9d2da860d4ac39c0ea86502360d6fe.mp4 +好歌分享《精选6首伤感DJ舞曲》HD,https://vdse.bdstatic.com//0c87c8977d0a33498fe7362d3c60c22c.mp4 +2021爆红《6首女生版伤感DJ》HD,https://vdse.bdstatic.com//2e77709380ad7e6163e80c4d5c179689.mp4 +美人热舞洗脑DJ舞曲HD,https://vdse.bdstatic.com//3700f6b78ceaf0f4a5313f4d68c95b72.mp4 +新中国,https://vd4.bdstatic.com/mda-mhg67kdwtpf3cmh2/sc/cae_h264/1629175568665923880/mda-mhg67kdwtpf3cmh2.mp4 +东方红,https://vd2.bdstatic.com/mda-kh8w62s1t0bm4r4v/v1-cae/sc/mda-kh8w62s1t0bm4r4v.mp4 +社会主义好,https://vd4.bdstatic.com/mda-mbif119nsfbzfd9b/v2-hknm/sc/mda-mbif119nsfbzfd9b.mp4 +中国人民解放军军歌,https://vd3.bdstatic.com/mda-mfs4xh85jg1hbrtu/sc/cae_h264/1624765782220430033/mda-mfs4xh85jg1hbrtu.mp4#https://vd4.bdstatic.com/mda-mfj4a2ihswqd9gcp/sc/cae_h264_delogo/1642481986194660170/mda-mfj4a2ihswqd9gcp.mp4 +唱支山歌给党听,https://vd4.bdstatic.com/mda-md2dw3g1iw0x5rkw/720p/h264_cae/1621166557293046027/mda-md2dw3g1iw0x5rkw.mp4 +人说山西好风光,https://vd3.bdstatic.com/mda-mc3n63tfyp4fpj3i/v2-hknm/sc/mda-mc3n63tfyp4fpj3i.mp4 +人说山西好风光,https://vd3.bdstatic.com/mda-mc3n63tfyp4fpj3i/v2-hknm/sc/mda-mc3n63tfyp4fpj3i.mp4 +小鸟小鸟,https://vd2.bdstatic.com/mda-nf0g4wpn1h6d6gzc/sc/cae_h264/1654097751881430749/mda-nf0g4wpn1h6d6gzc.mp4 +让我们荡起双桨,https://vd2.bdstatic.com/mda-kg1gexwxqwfj1ggj/v1-cae/sc/mda-kg1gexwxqwfj1ggj.mp4 +让我们荡起双桨,https://vd2.bdstatic.com/mda-kf2maiw5viky6fvx/v1-cae/sc/mda-kf2maiw5viky6fvx.mp4 +泉水叮咚响,https://vd4.bdstatic.com/mda-nhp5i19mfnfgcszt/sc/cae_h264/1661317041237423922/mda-nhp5i19mfnfgcszt.mp4 +学习雷锋好榜样,https://vd2.bdstatic.com/mda-mgw17rf13eg3c42a/sc/cae_h264/1627694245970038550/mda-mgw17rf13eg3c42a.mp4 +学习雷锋好榜样,https://vd4.bdstatic.com/mda-kkjs55rjapdq2mpg/v1-cae/sc/mda-kkjs55rjapdq2mpg.mp4 +我们的生活充满阳光,https://vd4.bdstatic.com/mda-mantbc3hcfwa47wb/v1-cae/sc/mda-mantbc3hcfwa47wb.mp4 +金梭和银梭,https://vd3.bdstatic.com/mda-nhc8akg6b7iekrjg/sc/cae_h264/1660372513167581351/mda-nhc8akg6b7iekrjg.mp4 +年轻的朋友来相会,https://vd3.bdstatic.com/mda-mg7ez868p9n3i2ck/sc/cae_h264/1625741125840222642/mda-mg7ez868p9n3i2ck.mp4#https://vd3.bdstatic.com/mda-jk6u0s2f81jmkk26/sc/mda-jk6u0s2f81jmkk26.mp4 +珊瑚颂,https://vd2.bdstatic.com/mda-nhj3zr4muyqtq2b4/sc/cae_h264/1660975076761325859/mda-nhj3zr4muyqtq2b4.mp4 +边疆的泉水清又纯,https://vd2.bdstatic.com/mda-mmbesjsvurqym92e/sc/cae_h264_delogo/1642484372769778974/mda-mmbesjsvurqym92e.mp4 +好大一棵树,https://vd4.bdstatic.com/mda-mi9h2rqyrf17jv3a/sc/cae_h264/1631276071798216929/mda-mi9h2rqyrf17jv3a.mp4 +好大一棵树,https://vd2.bdstatic.com/mda-khnv020keaw8mzzr/v1-cae/sc/mda-khnv020keaw8mzzr.mp4 +工农齐武装,https://vd3.bdstatic.com/mda-mh02va3743q055ea/sc/cae_h264/1627783707904573933/mda-mh02va3743q055ea.mp4 +送别,https://vd4.bdstatic.com/mda-kkpng5smwvp3cucb/v2-hknm/sc/mda-kkpng5smwvp3cucb.mp4 +十送红军,https://vd3.bdstatic.com/mda-mb5h3hw9trune66u/v1-cae/sc/mda-mb5h3hw9trune66u.mp4 +归心似箭,https://vd2.bdstatic.com/mda-madsxchwatcbey51/v1-cae/sc/mda-madsxchwatcbey51.mp4 +地道战,https://vd4.bdstatic.com/mda-mhj4gdgmg0se8cu5/sc/cae_h264/1629430759183704924/mda-mhj4gdgmg0se8cu5.mp4 +主席的话儿记心上,https://vd4.bdstatic.com/mda-ndc67jecf3hrkv88/sc/cae_h264_delogo/1649829462288374554/mda-ndc67jecf3hrkv88.mp4 +主席的话儿记心上,https://vd2.bdstatic.com/mda-mbfp33q9269yhd3h/v1-cae/sc/mda-mbfp33q9269yhd3h.mp4 +歌唱大别山,https://vd4.bdstatic.com/mda-mem38kggyuwfn5iq/sc/cae_h264/1621651438111375917/mda-mem38kggyuwfn5iq.mp4 +拥军秧歌,https://vd4.bdstatic.com/mda-nifdqsrn4r0w5qte/sc/cae_h264/1663339717929113782/mda-nifdqsrn4r0w5qte.mp4 +英雄赞歌,https://vd3.bdstatic.com/mda-nin6t17p7dt7u499/sc/cae_h264/1664117214428826970/mda-nin6t17p7dt7u499.mp4 +蒙山巍巍碧水长,https://vd4.bdstatic.com/mda-mkc6mfj4mvzaq7vf/sc/cae_h264_delogo/1643221180678628350/mda-mkc6mfj4mvzaq7vf.mp4 +梦驼铃,https://vd4.bdstatic.com/mda-ne0ngf5wrh7xepup/sc/cae_h264_delogo/1651420721641862470/mda-ne0ngf5wrh7xepup.mp4 +梦驼铃,https://vd4.bdstatic.com/mda-km1irzp1nd4m6bwd/v1-cae/sc/mda-km1irzp1nd4m6bwd.mp4 +绒花,https://vd3.bdstatic.com/mda-nejfar2cv6abkknu/sc/cae_h264/1653045247793474175/mda-nejfar2cv6abkknu.mp4 +怀念战友,https://vd4.bdstatic.com/mda-ndke5u2ygfnadshu/sc/cae_h264_delogo/1650548928284163626/mda-ndke5u2ygfnadshu.mp4 +花儿为什么这样红,https://vd4.bdstatic.com/mda-kebk0sgcynynd2mp/v1-cae/sc/mda-kebk0sgcynynd2mp.mp4 +热血颂,https://vd2.bdstatic.com/mda-nhm1iukvqj73jrk9/sc/cae_h264/1661134887035608960/mda-nhm1iukvqj73jrk9.mp4 +望星空,https://vd2.bdstatic.com/mda-ng4fy538tkhfaurj/sc/cae_h264/1657082985795825784/mda-ng4fy538tkhfaurj.mp4 +望星空,https://vd4.bdstatic.com/mda-nchgx50sjh86dxst/sc/cae_h264_delogo/1647605291757722048/mda-nchgx50sjh86dxst.mp4 +军中绿花,https://vd4.bdstatic.com/mda-mm2i12yuzh2nt7um/sc/cae_h264_delogo/1642489258635777773/mda-mm2i12yuzh2nt7um.mp4 +少年壮志不言愁,https://vd2.bdstatic.com/mda-mmt4gmqeznpd0uu9/sc/cae_h264_delogo/1643235838750590202/mda-mmt4gmqeznpd0uu9.mp4 +十五的月亮,https://vd4.bdstatic.com/mda-mipa0k9x8fczuqsi/sc/cae_h264/1632467395111368550/mda-mipa0k9x8fczuqsi.mp4 +高山下的花环,https://vd2.bdstatic.com/mda-ngq0sksae82vsz1s/sc/cae_h264/1658728345217881856/mda-ngq0sksae82vsz1s.mp4 +血染的风采,https://vd4.bdstatic.com/mda-nic7biexcec8run3/sc/cae_h264/1663067132889621847/mda-nic7biexcec8run3.mp4 +驼铃,https://vd3.bdstatic.com/mda-mchq89ac3391xayj/720p/h264_cae/1620925227029359387/mda-mchq89ac3391xayj.mp4 +相逢是首歌,https://vd3.bdstatic.com/mda-maapy96tkswujh1e/v1-cae/sc/mda-maapy96tkswujh1e.mp4 +为了谁,https://vd2.bdstatic.com/mda-mi3ea8etqe1y8tpv/sc/cae_h264/1630750989946581520/mda-mi3ea8etqe1y8tpv.mp4 +为了谁,https://vd3.bdstatic.com/mda-ma1jz4cuh8fn7fy9/v1-cae/sc/mda-ma1jz4cuh8fn7fy9.mp4 +英雄泪,https://vd3.bdstatic.com/mda-mben1iextqu3in9c/v1-cae/sc/mda-mben1iextqu3in9c.mp4 +当兵的人,https://vd2.bdstatic.com/mda-kjbb0xzvqi8ew4u7/sc/mda-kjbb0xzvqi8ew4u7.mp4 + +💝收音广播👉全网,#genre# +楚天音乐广播 FM105.8 (Opt-1)[0*0],http://ls.qingting.fm/live/1289.m3u8 +楚天交通广播 FM92.7[0*0],http://ls.qingting.fm/live/1291.m3u8 +荆门交通音乐频率 FM99.3 (Opt-2)[0*0],http://ls.qingting.fm/live/60808.m3u8 +襄阳交通广播 FM89.0 (Opt-1)[0*0],http://ls.qingting.fm/live/1307.m3u8 +襄阳交通广播 FM89.0 (Opt-2)[0*0],http://ls.qingting.fm/live/1308.m3u8 +襄阳音乐广播[0*0],http://ls.qingting.fm/live/5057.m3u8 +北京房山经典音乐 FM96.90*0][0*0],http://live.xmcdn.com/live/963/64.m3u8 +北京房山经典音乐 FM96.90*0][0*0],http://ls.qingting.fm/live/68746.m3u8 +北京房山经典音乐 FM96.90*0][0*0],http://ls.qingting.fm/live/68746.m3u8 +重庆新闻广播 FM96.80*0][0*0],http://live.xmcdn.com/live/128/64.m3u8 +重庆新闻广播 FM96.80*0][0*0],http://ls.qingting.fm/live/1498.m3u8 +重庆经济广播 FM101.50*0][0*0],http://ls.qingting.fm/live/1499.m3u8 +重庆经济广播 FM101.50*0][0*0],http://ls.qingting.fm/live/1499.m3u8 +重庆交通广播 FM95.50*0][0*0],http://live.xmcdn.com/live/130/64.m3u8 +重庆交通广播 FM95.50*0][0*0],http://ls.qingting.fm/live/1500.m3u8 +重庆交通广播 FM95.50*0][0*0],http://ls.qingting.fm/live/1500.m3u8 +重庆音乐广播 FM88.10*0][0*0],http://live.xmcdn.com/live/131/64.m3u8 +重庆音乐广播 FM88.10*0][0*0],http://ls.qingting.fm/live/647.m3u8 +重庆音乐广播 FM88.10*0][0*0],http://ls.qingting.fm/live/647.m3u8 +重庆都市广播 FM93.80*0][0*0],http://live.xmcdn.com/live/132/64.m3u8 +重庆都市广播 FM93.80*0][0*0],http://ls.qingting.fm/live/1502.m3u8 +重庆都市广播 FM93.80*0][0*0],http://ls.qingting.fm/live/1502.m3u8 +巴渝之声 FM104.50*0][0*0],http://ls.qingting.fm/live/3545693.m3u8 +万州交通广播0*0][0*0],http://live.xmcdn.com/live/1679/64.m3u8 +厦门音乐广播0*0][0*0],http://ls.qingting.fm/live/1739.m3u8 +厦门音乐广播0*0][0*0],http://ls.qingting.fm/live/1739.m3u8 +厦门新闻广播0*0][0*0],http://ls.qingting.fm/live/1737.m3u8 +厦门新闻广播0*0][0*0],http://ls.qingting.fm/live/1737.m3u8 +广州新闻电台 FM96.20*0][0*0],http://live.xmcdn.com/live/256/64.m3u8 +广州新闻电台 FM96.20*0][0*0],http://ls.qingting.fm/live/4848.m3u8 +广州新闻电台 FM96.20*0][0*0],http://ls.qingting.fm/live/4848.m3u8 +广州汽车音乐电台 FM102.70*0][0*0],http://live.xmcdn.com/live/257/64.m3u8 +广州汽车音乐电台 FM102.70*0][0*0],http://ls.qingting.fm/live/52710.m3u8 +广州汽车音乐电台 FM102.70*0][0*0],http://ls.qingting.fm/live/52710.m3u8 +广州交通电台 FM106.10*0][0*0],http://ls.qingting.fm/live/4955.m3u8 +广州 MYFM 88.0 (都市生活)0*0][0*0],http://ls.qingting.fm/live/52712.m3u8 +东广新闻台 FM90.9[0*0],http://ls.qingting.fm/live/275.m3u8 +东莞FM104音乐广播[0*0],http://ls.qingting.fm/live/93619.m3u8 +东莞畅享1075交通广播[0*0],http://ls.qingting.fm/live/1288.m3u8 +九江交通广播 FM88.4 FM88.9[0*0],http://ls.qingting.fm/live/2785094.m3u8 +云南交通广播 FM91.8[0*0],http://ls.qingting.fm/live/1928.m3u8 +云南教育广播 FM100[0*0],http://ls.qingting.fm/live/1930.m3u8 +云南新闻广播 FM105.8[0*0],http://ls.qingting.fm/live/1926.m3u8 +云南民族广播 SW7210[0*0],http://ls.qingting.fm/live/1933.m3u8 +云南经济广播 私家车 FM88.7[0*0],http://ls.qingting.fm/live/1927.m3u8 +云南音乐广播 FM97[0*0],http://ls.qingting.fm/live/1929.m3u8 +保定交通广播 FM104.8[0*0],http://ls.qingting.fm/live/28140.m3u8 +保定城市服务广播 乐动1016[0*0],http://ls.qingting.fm/live/62628.m3u8 +保定新闻广播 FM93.7[0*0],http://ls.qingting.fm/live/3701149.m3u8 +保定经典964汽车音乐广播[0*0],http://ls.qingting.fm/live/2227017.m3u8 +南宁交通音乐广播 FM107.4[0*0],http://ls.qingting.fm/live/80793.m3u8?aac +呼和浩特城市生活广播 FM90.1[0*0],http://ls.qingting.fm/live/2218717.m3u8 +呼和浩特文艺广播 FM99.8[0*0],http://ls.qingting.fm/live/3099076.m3u8 +呼和浩特新闻综合广播 FM92.9[0*0],http://ls.qingting.fm/live/2218711.m3u8 +咸阳城市之声 FM100.7[0*0],http://ls.qingting.fm/live/3559664.m3u8 +四川文艺广播 快乐900 FM90.0[0*0],http://ls.qingting.fm/live/4887.m3u8 +四川新闻综合广播 FM98.1[0*0],http://ls.qingting.fm/live/4906.m3u8 +四川民族广播 AM954[0*0],http://ls.qingting.fm/live/1115.m3u8 +四川私家车广播 FM92.5[0*0],http://ls.qingting.fm/live/4939.m3u8 +四川财富广播 FM94.0[0*0],http://ls.qingting.fm/live/4927.m3u8 +太原交通广播 FM107[0*0],http://ls.qingting.fm/live/4900.m3u8 +太原新闻广播 FM91.2[0*0],http://ls.qingting.fm/live/23873.m3u8 +太原私家车Radio FM104.4[0*0],http://ls.qingting.fm/live/4018.m3u8 +太原音乐广播 FM102.6[0*0],http://ls.qingting.fm/live/1185.m3u8 +宁夏交通广播 FM98.4[0*0],http://ls.qingting.fm/live/1840.m3u8 +宁夏都市广播 FM103.7[0*0],http://ls.qingting.fm/live/1842.m3u8 +山东体育广播 FM102.1[0*0],http://ls.qingting.fm/live/60266.m3u8 +山东女主播电台 FM97.5[0*0],http://ls.qingting.fm/live/60258.m3u8 +山东新闻广播 FM95[0*0],http://ls.qingting.fm/live/60180.m3u8 +山东生活广播 MyFM FM105[0*0],http://ls.qingting.fm/live/60260.m3u8 +山东音乐广播 FM99.1[0*0],http://ls.qingting.fm/live/1665.m3u8 +岳阳交通广播 FM106.1[0*0],http://ls.qingting.fm/live/88931.m3u8 +岳阳新闻综合广播[0*0],http://ls.qingting.fm/live/88933.m3u8 +常州交通广播 FM90[0*0],http://ls.qingting.fm/live/2796.m3u8 +广西女主播电台 FM97.0[0*0],http://ls.qingting.fm/live/1754.m3u8 +广西新闻910 FM91.0[0*0],http://ls.qingting.fm/live/1753.m3u8 +广西私家车930 FM93.0[0*0],http://ls.qingting.fm/live/1756.m3u8 +广西音乐台 FM95.0[0*0],http://ls.qingting.fm/live/4875.m3u8 +新疆交通广播 FM94.9 (Opt-2)[0*0],http://ls.qingting.fm/live/1910.m3u8 +新疆新闻广播 FM96.1 (Opt-1)[0*0],http://ls.qingting.fm/live/1902.m3u8 +新疆民生广播 FM92.4 (Opt-2)[0*0],http://ls.qingting.fm/live/76186.m3u8 +新疆维吾尔语交通文艺广播 (Opt-2)[0*0],http://ls.qingting.fm/live/78923.m3u8 +新疆蒙古语广播 (Opt-1)[0*0],http://ls.qingting.fm/live/1903.m3u8 +无锡新闻广播 FM93.7[0*0],http://ls.qingting.fm/live/2777.m3u8 +昆明汽车广播 FM95.4[0*0],http://ls.qingting.fm/live/1936.m3u8 +昆明都市调频 FM102.8[0*0],http://ls.qingting.fm/live/1935.m3u8 +昆明阳光广播[0*0],http://ls.qingting.fm/live/1934.m3u8 +梅州交通广播 FM105.8[0*0],http://ls.qingting.fm/live/24195.m3u8 +梅州新闻广播 FM94.8[0*0],http://ls.qingting.fm/live/24173.m3u8 +江苏新闻广播 FM93.7[0*0],http://ls.qingting.fm/live/4944.m3u8 +沈阳新闻广播 FM104.5[0*0],http://ls.qingting.fm/live/23891.m3u8 +河北 My FM 102.9[0*0],http://ls.qingting.fm/live/2508757.m3u8 +河北交通广播 FM99.2[0*0],http://ls.qingting.fm/live/1646.m3u8 +河北农民广播 AM558[0*0],http://ls.qingting.fm/live/1650.m3u8 +河北故事广播 FM107.9[0*0],http://ls.qingting.fm/live/1645.m3u8 +河北新闻广播 FM104.3[0*0],http://ls.qingting.fm/live/1644.m3u8 +河北旅游广播 AM603[0*0],http://ls.qingting.fm/live/1651.m3u8 +河北生活广播 FM88.8[0*0],http://ls.qingting.fm/live/4867.m3u8 +河北音乐广播 FM102.4[0*0],http://ls.qingting.fm/live/1649.m3u8 +河南乐龄(信息广播) FM105.6[0*0],http://ls.qingting.fm/live/59896.m3u8 +河南交通广播 FM104.1[0*0],http://ls.qingting.fm/live/1209.m3u8 +河南娱乐广播 FM97.6[0*0],http://ls.qingting.fm/live/1719795.m3u8 +河南音乐广播 魅力881 FM88.1[0*0],http://ls.qingting.fm/live/1208.m3u8 +河南驾车1066 FM106.6[0*0],http://ls.qingting.fm/live/1207.m3u8 +济南故事广播 FM104.3[0*0],http://ls.qingting.fm/live/1672.m3u8 +济南私家车广播 FM93.6[0*0],http://ls.qingting.fm/live/1670.m3u8 +济南经济广播 FM90.9[0*0],http://ls.qingting.fm/live/1668.m3u8 +济南音乐广播(MUSIC887)[0*0],http://ls.qingting.fm/live/1671.m3u8 +浙江之声 FM88 (Opt-1)[0*0],http://ls.qingting.fm/live/4518.m3u8 +浙江交通之声 FM93 (Opt-1)[0*0],http://ls.qingting.fm/live/4522.m3u8 +浙江动听(音乐调频) FM96.8 (Opt-2)[0*0],http://ls.qingting.fm/live/4866.m3u8 +浙江女主播电台 FM104.5 (Opt-2)[0*0],http://ls.qingting.fm/live/4524.m3u8 +浙江财富广播 FM95 (Opt-1)[0*0],http://ls.qingting.fm/live/4519.m3u8 +海南交通广播 FM100[0*0],http://ls.qingting.fm/live/4911.m3u8 +海南国际旅游之声 FM103.8[0*0],http://ls.qingting.fm/live/1862.m3u8 +海南新闻广播 FM88.6[0*0],http://ls.qingting.fm/live/1861.m3u8 +海南民生广播 FM101[0*0],http://ls.qingting.fm/live/1511803.m3u8 +深圳私家车广播 FM94.2[0*0],http://ls.qingting.fm/live/1273.m3u8 +深圳飞扬音乐971[0*0],http://ls.qingting.fm/live/1271.m3u8 +温州交通广播 FM103.9[0*0],http://ls.qingting.fm/live/23863.m3u8 +温州新闻广播 FM94.9[0*0],http://ls.qingting.fm/live/23861.m3u8 +温州私家车音乐广播 FM100.3[0*0],http://ls.qingting.fm/live/23865.m3u8 +温州经济生活广播 FM88.8[0*0],http://ls.qingting.fm/live/23867.m3u8 +温州绿色之声 FM93.8[0*0],http://ls.qingting.fm/live/1158.m3u8 +珠海电台交通音乐875[0*0],http://ls.qingting.fm/live/1275.m3u8 +西宁交通频率[0*0],http://ls.qingting.fm/live/3400408.m3u8 +西宁新闻频率[0*0],http://ls.qingting.fm/live/3400403.m3u8 +西安交通广播 FM104.3 (Opt-1)[0*0],http://ls.qingting.fm/live/1611.m3u8 +西安新闻广播 FM95.0 (Opt-1)[0*0],http://ls.qingting.fm/live/1610.m3u8 +西安音乐广播 FM93.1 (Opt-1)[0*0],http://ls.qingting.fm/live/1612.m3u8 +贵州新闻综合广播 FM94.6[0*0],http://ls.qingting.fm/live/23933.m3u8 +贵州电台交通广播 FM95.2[0*0],http://ls.qingting.fm/live/23927.m3u8 +贵州电台旅游广播 FM97.2[0*0],http://ls.qingting.fm/live/23929.m3u8 +贵州电台经济广播 FM98.9[0*0],http://ls.qingting.fm/live/23935.m3u8 +贵州电台音乐广播 FM91.6[0*0],http://ls.qingting.fm/live/23937.m3u8 +辽宁交通广播 FM97.5[0*0],http://ls.qingting.fm/live/23801.m3u8 +郑州新闻广播 FM98.6[0*0],http://ls.qingting.fm/live/1220.m3u8 +郑州汽车广播 FM91.2[0*0],http://ls.qingting.fm/live/1211.m3u8 +郑州车道931[0*0],http://ls.qingting.fm/live/1221.m3u8 +郴州综合广播 FM99.2[0*0],http://ls.qingting.fm/live/76765.m3u8 +郴州音乐交通广播 FM102.8[0*0],http://ls.qingting.fm/live/86747.m3u8 +金鹰955电台[0*0],http://ls.qingting.fm/live/4937.m3u8 +长春生活故事广播 FM90.0[0*0],http://ls.qingting.fm/live/5014.m3u8 +长沙城市之声 FM101.7[0*0],http://ls.qingting.fm/live/4237.m3u8 +长治交通文艺广播 FM94.9[0*0],http://ls.qingting.fm/live/2669405.m3u8 +长治新闻综合广播(幸福广播) FM94.3[0*0],http://ls.qingting.fm/live/2702863.m3u8 +阳信人民广播电台 FM103.4[0*0],http://ls.qingting.fm/live/2915753.m3u8 +阳泉交通广播[0*0],http://ls.qingting.fm/live/4592896.m3u8?aac +阳泉新闻综合广播[0*0],http://ls.qingting.fm/live/5876899.m3u8?aac +陕西交通广播 FM91.6[0*0],http://ls.qingting.fm/live/1601.m3u8 +陕西故事广播 AM603[0*0],http://ls.qingting.fm/live/1608.m3u8 +陕西秦腔广播 FM101.1[0*0],http://ls.qingting.fm/live/1604.m3u8 +陕西都市广播-陕广新闻 FM101.8[0*0],http://ls.qingting.fm/live/1609.m3u8 +陕西音乐广播 FM98.8[0*0],http://ls.qingting.fm/live/4873.m3u8 +青岛交通广播 FM89.7[0*0],http://ls.qingting.fm/live/1676.m3u8 +青岛故事广播 FM95.2[0*0],http://ls.qingting.fm/live/4956.m3u8 +青岛新闻广播 FM107.6[0*0],http://ls.qingting.fm/live/1673.m3u8 +青岛西海岸城市生活广播 FM92.6[0*0],http://ls.qingting.fm/live/33446.m3u8 +青海交通音乐广播 FM97.2[0*0],http://ls.qingting.fm/live/5009.m3u8 +青海生活广播 花儿调频 FM90.3[0*0],http://ls.qingting.fm/live/2163891.m3u8 +青海经济广播 FM07.5[0*0],http://ls.qingting.fm/live/5008.m3u8 +鹤壁交通音乐广播 FM93.5[0*0],http://ls.qingting.fm/live/3032681.m3u8 +龙广交通广播 FM99.8[0*0],http://ls.qingting.fm/live/4973.m3u8 +龙广新闻广播 FM94.6[0*0],http://ls.qingting.fm/live/4974.m3u8 +龙广新闻广播 FM94.6[0*0],http://ls.qingting.fm/live/4974.m3u8 +龙广音乐广播 FM95.8[0*0],http://ls.qingting.fm/live/4969.m3u8 +龙广音乐广播 FM95.8[0*0],http://ls.qingting.fm/live/4969.m3u8 + +💝景区直播👉全网,#genre# +直播中国,https://gcalic.v.myalicdn.com/gc/wgw05_1/index.m3u8?contentid=2820180516001 +新疆天山(定海神针),http://gctxyc.liveplay.myqcloud.com/gc/xjtcdhsz_1/index.m3u8 +黄花城水长城02,http://gctxyc.liveplay.myqcloud.com/gc/wgw02_1/index.m3u8 +直播中国,https://gcalic.v.myalicdn.com/gc/wgw05_1/index.m3u8?contentid=2820180516001 +湖南张家界水绕四门,https://gcalic.v.myalicdn.com/gc/zjjsrsm_1/index.m3u8 +湖南张家界将军列队,https://gcalic.v.myalicdn.com/gc/zjjjjdl_1/index.m3u8 +湖南张家界迷魂台,https://gcalic.v.myalicdn.com/gc/zjjmht_1/index.m3u8 +湖南张家界宝峰湖,https://gcalic.v.myalicdn.com/gc/zjjbfh_1/index.m3u8 +湖南张家界御笔峰,https://gcalic.v.myalicdn.com/gc/zjjybf_1/index.m3u8 +四川峨眉山云海日出,https://gcalic.v.myalicdn.com/gc/emsarm_1/index.m3u8 +四川峨眉山远眺贡嘎山,https://gcalic.v.myalicdn.com/gc/emsyh_1/index.m3u8 +四川峨眉山贤菩萨铜像,https://gcalic.v.myalicdn.com/gc/emspxps_1/index.m3u8 +四川峨眉山远眺万佛顶,https://gcalic.v.myalicdn.com/gc/emswfs_1/index.m3u8 +新疆天山(定海神针),https://gcalic.v.myalicdn.com/gc/xjtcdhsz_1/index.m3u8 +新疆天山(定海神针),https://gcalic.v.myalicdn.com/gc/xjtcdhsz_1/index.m3u8 +新疆天山(马牙山),https://gcalic.v.myalicdn.com/gc/xjtcmys_1/index.m3u8 +新疆天山(灯杆山),https://gcalic.v.myalicdn.com/gc/xjtcdgs_1/index.m3u8 +湖南张家界天门山西线玻璃栈道,https://gcalic.v.myalicdn.com/gc/tms05_1/index.m3u8 +厦门鼓浪屿,https://gcalic.v.myalicdn.com/gc/gly01_1/index.m3u8 +厦门鼓浪屿,https://gcalic.v.myalicdn.com/gc/gly01_1/index.m3u8 +广西玉林大容山莲花山顶,https://gcalic.v.myalicdn.com/gc/drs01_1/index.m3u8 +八里沟风景区桃花湾瀑布,https://gcalic.v.myalicdn.com/gc/blg05_1/index.m3u8 +八里沟风景区天界山玻璃栈道,https://gcalic.v.myalicdn.com/gc/blg03_1/index.m3u8 +安徽池州九华山风景区九华山,https://gcalic.v.myalicdn.com/gc/jhs05_1/index.m3u8 +安徽池州九华山风景区九华山,https://gcalic.v.myalicdn.com/gc/jhs05_1/index.m3u8 +安徽池州九华山风景区花台,https://gcalic.v.myalicdn.com/gc/jhs01_1/index.m3u8 +江苏徐州云龙湖风景区云龙山观景台西,https://gcalic.v.myalicdn.com/gc/ylh04_1/index.m3u8 +南京玄武湖公园,https://gcalic.v.myalicdn.com/gc/xwh01_1/index.m3u8 +云南丽江蓝月谷,https://gcalic.v.myalicdn.com/gc/ylxs12_1/index.m3u8 +云南丽江玉龙山草甸,https://gcalic.v.myalicdn.com/gc/hkylxs06_1/index.m3u8 +云南丽江冰川,https://gcalic.v.myalicdn.com/gc/hkylxs05_1/index.m3u8 +云南丽江印象实景,https://gcalic.v.myalicdn.com/gc/hkylxs01_1/index.m3u8 +江苏南京牛首山,https://gcalic.v.myalicdn.com/gc/nss01_1/index.m3u8 +福建漳州醉美沙滩翡翠湾,https://gcalic.v.myalicdn.com/gc/fcw03_1/index.m3u8 +普陀山,https://gcalic.v.myalicdn.com/gc/pts01_1/index.m3u8 +浙江舟山东极岛,https://gcalic.v.myalicdn.com/gc/djd01_1/index.m3u8 +四川四姑娘山隆珠措,https://gcalic.v.myalicdn.com/gc/sgns02_1/index.m3u8 +丽江古城大研花巷观景,https://gcalic.v.myalicdn.com/gc/ljgcdyhxgjt_1/index.m3u8 +丽江古城大研花巷观景,https://gcalic.v.myalicdn.com/gc/ljgcdyhxgjt_1/index.m3u8 +丽江古城大水车,https://gcalic.v.myalicdn.com/gc/ljgcdsc_1/index.m3u8 +丽江古城万古楼遥望玉龙山,https://gcalic.v.myalicdn.com/gc/ljgcwglytylxs_1/index.m3u8 +狮子山鸟瞰丽江古城,https://gcalic.v.myalicdn.com/gc/ljgcszsnkgc_1/index.m3u8 +雪乡梦幻家园,https://gcalic.v.myalicdn.com/gc/mdjxxmhjyxj_1/index.m3u8 +雪乡大石碑,https://gcalic.v.myalicdn.com/gc/mdjxxdsb_1/index.m3u8 +乌镇蓝印花布,https://gcalic.v.myalicdn.com/gc/zjwzlyhb_1/index.m3u8 +乌镇西市河,https://gcalic.v.myalicdn.com/gc/zjwzbblh_1/index.m3u8 +乌镇西市河,https://gcalic.v.myalicdn.com/gc/zjwzbblh_1/index.m3u8 +乌镇龙形田,https://gcalic.v.myalicdn.com/gc/zjwzlxt_1/index.m3u8 +乌镇全景,https://gcalic.v.myalicdn.com/gc/zjwzblt_1/index.m3u8 +凤凰古城南华山,https://gcalic.v.myalicdn.com/gc/fhgcdnhs_1/index.m3u8 +凤凰古城东关门,https://gcalic.v.myalicdn.com/gc/fhgcdgm_1/index.m3u8 +黄花城水长城01,https://gcalic.v.myalicdn.com/gc/wgw01_1/index.m3u8 +黄花城水长城02,https://gcalic.v.myalicdn.com/gc/wgw02_1/index.m3u8 +黄花城水长城02,https://gcalic.v.myalicdn.com/gc/wgw02_1/index.m3u8 +黄花城水长城03,https://gcalic.v.myalicdn.com/gc/wgw03_1/index.m3u8 +鸣沙山,https://gcalic.v.myalicdn.com/gc/dhyyqst_1/index.m3u8 +月牙泉,https://gcalic.v.myalicdn.com/gc/dhyyqsm_1/index.m3u8 +五彩池,https://gcalic.v.myalicdn.com/gc/hlwcc_1/index.m3u8 +黄龙,https://gcalic.v.myalicdn.com/gc/hlzycc_1/index.m3u8 +望乡台,https://gcalic.v.myalicdn.com/gc/hlwxt_1/index.m3u8 +泰山主峰,https://gcalic.v.myalicdn.com/gc/taishan01_1/index.m3u8 +泰山大观峰,https://gcalic.v.myalicdn.com/gc/taishan03_1/index.m3u8 +泰山玉皇顶,https://gcalic.v.myalicdn.com/gc/taishan06_1/index.m3u8 +泰山玉皇顶,https://gcalic.v.myalicdn.com/gc/taishan06_1/index.m3u8 +泰山十八盘,https://gcalic.v.myalicdn.com/gc/taishan05_1/index.m3u8 +泰山望人松,https://gcalic.v.myalicdn.com/gc/taishan02_1/index.m3u8 +泰山南天门,https://gcalic.v.myalicdn.com/gc/hkts07_1/index.m3u8 +泰山白云亭悬崖,https://gcalic.v.myalicdn.com/gc/hkts02_1/index.m3u8 +泰山太平岭,https://gcalic.v.myalicdn.com/gc/hkts09_1/index.m3u8 +泰山太平岭,https://gcalic.v.myalicdn.com/gc/hkts09_1/index.m3u8 +泰山碧霞祠,https://gcalic.v.myalicdn.com/gc/hkts03_1/index.m3u8 +黄山始信新道,https://gcalic.v.myalicdn.com/gc/hsyg_1/index.m3u8 +黄山排云亭,https://gcalic.v.myalicdn.com/gc/hspyt_1/index.m3u8 +黄山飞来石,https://gcalic.v.myalicdn.com/gc/hsptgy_1/index.m3u8 +黄山,https://gcalic.v.myalicdn.com/gc/ahhs01_1/index.m3u8 +陕西洋县国宝朱鹮03,https://gcalic.v.myalicdn.com/gc/zh03_1/index.m3u8 +安徽黟县西递牌坊,https://gcalic.v.myalicdn.com/gc/yxxdpf_1/index.m3u8 +安徽黟县芦村远眺,https://gcalic.v.myalicdn.com/gc/yxlcyt_1/index.m3u8 +中央电视塔东,https://gcalic.v.myalicdn.com/gc/ztd_1/index.m3u8 +中央电视塔南,https://gcalic.v.myalicdn.com/gc/ztn_1/index.m3u8 +恒山悬空寺全景,https://gcalic.v.myalicdn.com/gc/hsxksqj_1/index.m3u8 +恒山悬空寺全景,https://gcalic.v.myalicdn.com/gc/hsxksqj_1/index.m3u8 +黄果树六角亭瀑布,https://gcalic.v.myalicdn.com/gc/hgsspzxdpb_1/index.m3u8 +天涯石,https://gcalic.v.myalicdn.com/gc/tyhjtys_1/index.m3u8 +天涯石,https://gcalic.v.myalicdn.com/gc/tyhjtys_1/index.m3u8 +六盘山红军长征景区,https://gcalic.v.myalicdn.com/gc/lpsgmjng01_1/index.m3u8 +贵州省兴义市万峰林,https://gcalic.v.myalicdn.com/gc/xywfl_1/index.m3u8 +云南大理崇圣寺三塔中景,https://gcalic.v.myalicdn.com/gc/dlst03_1/index.m3u8 +云南大理崇圣寺三塔远景,https://gcalic.v.myalicdn.com/gc/dlst01_1/index.m3u8 +广西桂林漓江景区,https://gcalic.v.myalicdn.com/gc/gllj01_1/index.m3u8 +青岛崂山双福,https://gcalic.v.myalicdn.com/gc/qdls03_1/index.m3u8 +青岛崂山八水河,https://gcalic.v.myalicdn.com/gc/qdls02_1/index.m3u8 +张掖七彩丹霞,https://gcalic.v.myalicdn.com/gc/zyqcdx01_1/index.m3u8 +都江堰鱼嘴,https://gcalic.v.myalicdn.com/gc/djyqyl1_1/index.m3u8 +乐山大佛全景,https://gcalic.v.myalicdn.com/gc/lsdfgfl_1/index.m3u8 +乐山大佛全景,https://gcalic.v.myalicdn.com/gc/lsdfgfl_1/index.m3u8 +💝春晚现场👉全网,#genre# +1983年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2022/01/31/15/BMjAyMjAxMzExNTU5MTRfNDAzMDAxOTlfNjYyNzMxNjcwMjBfMF8z_b_Beb3bda599f76c60c463c433ca7460153.mp4 +1984年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2022/01/31/15/BMjAyMjAxMzExNTU5NTRfNDAzMDAxOTlfNjYyNzMyMzg3MTRfMF8z_b_B192356dadbc90d207ba16964d4c2914c.mp4 +1985年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2022/01/31/16/BMjAyMjAxMzExNjAwMDFfNDAzMDAxOTlfNjYyNzMyNTAwMzJfMF8z_b_Be73c5abcbc0eeb2ec9fce6842e1362a4.mp4 +1986年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2022/01/31/16/BMjAyMjAxMzExNjAwMDRfNDAzMDAxOTlfNjYyNzMyNTU0OTRfMF8z_b_B24f7d19f1132fa5d7f502f8377ad5567.mp4 +1987年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2022/01/31/16/BMjAyMjAxMzExNjAwMDhfNDAzMDAxOTlfNjYyNzMyNjMyMDNfMF8z_b_B570493ed8f7200d4013a66b2d21b2de9.mp4 +1988年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2022/01/31/16/BMjAyMjAxMzExNjAwMTJfNDAzMDAxOTlfNjYyNzMyNjkxNjBfMF8z_b_B8c835b83a92d25bde81ba22c5cd9521e.mp4 +1989年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2022/01/31/16/BMjAyMjAxMzExNjAwMTVfNDAzMDAxOTlfNjYyNzMyNzQ2OTlfMF8z_b_Be477b27b9ce655d2372df56a5a3d96ef.mp4 +1990年中央电视台春节联欢晚会,https://cdn8.yzzy-online.com/20220704/597_e0d90c37/1000k/hls/index.m3u8 +1991年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2022/01/31/16/BMjAyMjAxMzExNjI2MTVfNDAzMDAxOTlfNjYyNzYwNjUxNjVfMF8z_b_B8feb7b85888678d71bf37a259c6850f6.mp4 +1992年中央电视台春节联欢晚会,https://txmov2.a.kwimgs.com/bs3/video-hls/5256826755663896297_hlshd15.m3u8 +1993年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/22/BMjAyMzAxMTMyMjEwMDNfNDAzMDAxOTlfOTM1MTIzMzYwODJfMF8z_b_B647d10e431b4cc5e48e6c77347d69021.mp4 +1994年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/22/BMjAyMzAxMTMyMjEwMDNfNDAzMDAxOTlfOTM1MTIzMzYxMjNfMF8z_b_B3dde97f36273f04403d4dc5eec611a35.mp4 +1995年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQwNzVfMF8z_b_B811c0dec6b9a3d3074a18522c185010a.mp4 +1996年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/22/BMjAyMzAxMTMyMjEwMDNfNDAzMDAxOTlfOTM1MTIzMzYxNTJfMF8z_b_Bd841eae10ab1c9955ef55fbedfae6c45.mp4 +1997年中央电视台春节联欢晚会,https://txmov2.a.kwimgs.com/bs3/video-hls/5230649583590411879_hlshd15.m3u8 +1998年中央电视台春节联欢晚会,https://txmov2.a.kwimgs.com/bs3/video-hls/5225864507896315430_hlshd15.m3u8 +1999年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQxNTRfMF8z_b_B0b5e52bc003285ef66ec0cbb2be08556.mp4 +2000年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/21/BMjAyMzAxMTMyMTE4MzRfNDAzMDAxOTlfOTM1MDY4ODIxMTNfMF8z_b_Bdddf4e7ef0ff6cfd477857bb40e78419.mp4 +2001年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQyMDFfMF8z_b_B70592cb7c4054e9cabb675e849bbf4bd.mp4 +2002年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/21/BMjAyMzAxMTMyMTE4MzRfNDAzMDAxOTlfOTM1MDY4ODIxNDdfMF8z_b_Ba6271d10b7e6cfae83759033a091f257.mp4 +2003年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/14/23/BMjAyMzAxMTQyMzQxNDdfNDAzMDAxOTlfOTM2MTU0MTk1NDFfMF8z_b_B182749d2cd2ea9323639254af385f24b.mp4 +2004年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/21/BMjAyMzAxMTMyMTE4MzRfNDAzMDAxOTlfOTM1MDY4ODIxOTVfMF8z_b_B86c4430b82ff5a7f4e8132f6ee558536.mp4 +2005年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQyMzhfMF8z_b_B35ad7cc86aec8fc9e5ddfb31fc7bed63.mp4 +2006年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQyNzlfMF8z_b_Bbc3703fc331dc994c50859c19aad28ff.mp4 +2007年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQzMjNfMF8z_b_B00b069c7899976459ceeaa99353dfefe.mp4 +2008年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQzNTNfMF8z_b_Bd7346962e61bd7b84e11a1fa6e4616f9.mp4 +2009年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQzOTBfMF8z_b_B29a36a85e0277f6c2a1f033ef7c10708.mp4 + 2010年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQ0MjlfMF8z_b_B8818807a00eed329a69fb494f405bd43.mp4 +2011年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/16/11/BMjAyMzAxMTYxMTA3MjFfNDAzMDAxOTlfOTM3MjcyMjA3ODhfMF8z_b_B8214200efc869dc6fcf99dad619fa4c1.mp4 +2012年中央电视台春节联欢晚会,https://cdn8.yzzy-online.com/20220704/591_82b72f82/1000k/hls/index.m3u8 +2013年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQ1NjNfMF8z_b_B4fea55408dca4471a68a963ae096be59.mp4 +2014年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/06/16/BMjAyMzAxMDYxNjMxMTNfNDAzMDAxOTlfOTI4OTY2ODAzNjlfMF8z_b_Bdee65c77f9e7b2120a185c919dad81d2.mp4 +2015年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQ2MTZfMF8z_b_B4851f43f5a2bc2871a9b0ec87294a6e7.mp4 + 2016年中央电视台春节联欢晚会,https://cdn8.yzzy-online.com/20220704/577_cda9c8d1/1000k/hls/index.m3u8 +2017年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQ2NDhfMF8z_b_B6527b0c2ce3dda1d9b3f34edd4fdb9aa.mp4 +2018年中央电视台春节联欢晚会,https://cdn8.yzzy-online.com/20220704/610_ae5255ad/1000k/hls/index.m3u8 +2019年中央电视台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2023/01/06/16/BMjAyMzAxMDYxNjMxMTRfNDAzMDAxOTlfOTI4OTY2ODE2MTBfMF8z_b_B11a778e34390a21de42d407e94f45b91.mp4 +2020年中央广播电视总台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2022/01/30/17/BMjAyMjAxMzAxNzA5NDdfNDAzMDAxOTlfNjYxNzQ2MDAyMTFfMF8z_b_B5d51d9564c5670dc66faeba20aa7af3f.mp4 +2021年中央广播电视总台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2022/01/30/17/BMjAyMjAxMzAxNzE4NTJfNDAzMDAxOTlfNjYxNzUzOTg3NjlfMF8z_b_Be41d9503181d7b0608a839ed401e02c2.mp4 +2022年中央广播电视总台春节联欢晚会,https://alimov2.a.kwimgs.com/upic/2022/02/01/11/BMjAyMjAyMDExMTEwMjNfNDAzMDAxOTlfNjYzNzA4MTk4NzNfMF8z_b_B898cc7ddd0025bf54ddb18ec1f723c84.mp4 + 2023年中央广播电视总台春节联欢晚会,https://txmov2.a.kwimgs.com/bs3/video-hls/5251197255879398624_hlshd15.m3u8 + 2024年中央广播电视总台春节联欢晚会【CCTV1综合频道】,https://p2.bdstatic.com/rtmp.liveshow.lss-user.baidubce.com/live/stream_bduid_6488563992_8982723413/merged_1707497046297_88536_25144_41936.m3u8 +2024年中央广播电视总台春节联欢晚会【CCTV4K超高清频道】https://v10.dious.cc/20240209/4AK9UB5p/index.m3u8 +2024年辽宁卫视春节联欢晚会(上),https://v10.dious.cc/20240209/J95B9fT5/index.m3u8 +2024年辽宁卫视春节联欢晚会(下),https://v10.dious.cc/20240209/HWVp60d1/index.m3u8 +2024年深圳卫视春节联欢晚会,https://v10.dious.cc/20240209/DKcsA9sZ/index.m3u8 +2024年安徽卫视春节联欢晚会,https://v10.dious.cc/20240208/LHLdSBLv/index.m3u8 +2024吉林春晚,https://v10.dious.cc/20240208/9ahrnAPw/index.m3u8 +2024年山东卫视春节联欢晚会,https://v10.dious.cc/20240208/mJvkOFpp/index.m3u8 +2024年河南卫视春节联欢晚会,https://v10.dious.cc/20240208/AN4hlNqo/index.m3u8 +2024年山西卫视春节联欢晚会,https://v10.dious.cc/20240208/85CjUOf8/index.m3u8 +2024年北京卫视春节联欢晚会,https://v10.dious.cc/20240210/Ll7WeunD/index.m3u8 +2024年湖北卫视春节联欢晚会,https://v10.dious.cc/20240210/pOo0DnPW/index.m3u8 +2024云南卫视春节联欢晚会,https://v10.dious.cc/20240210/yOFfQfxj/index.m3u8 +2024年海南卫视春节联欢晚会,https://v10.dious.cc/20240210/vaplHwkP/index.m3u8 +2024年陕西卫视春节联欢晚会https://v10.dious.cc/20240210/yYlVw3Ur/index.m3u8 +2024安徽卫视农民春节联欢晚会,https://v10.dious.cc/20240210/UnLrYixW/index.m3u8 +2024年中国杂技大联欢,https://v10.dious.cc/20240210/672HyyQ9/index.m3u8 +启航2024 CCTV跨年晚会【CCTV综艺频道】,https://v10.dious.cc/20240101/jb33ogNp/index.m3u8 +2024年珠江春节联欢晚会,https://v10.dious.cc/20240209/lNN6pUqq/index.m3u8 +2024年中央广播电视总台网络春节联欢晚会【CCTV综合频道】,https://ikcdn01.ikzybf.com/20240205/QBNgom4j/2000kb/hls/index.m3u8 + ,#genre# +⑥开心转播线路1,https://vdm6-ali.wujiekeji1.com/live/h6-2.flv +⑥开心转播线路2,https://vdm6-hw.nbgdsygs.com/live/h6-2.flv +⑥香港21:30四九,rtmp://100www.ku55.cn/zzjj123/livekj123?auth_key=2299702236-0-0-4d409d8bca97ea5ff8fd9cf763129ac1 +@老熬21:32播放,https://vdm6-ali.kavimmensucat.com/live/2032-2.flv + +💝下列P2P和MITV,#genre# +💝宝全影院,http://live.dxms.top:80/dwy/mgak.php#https://ldncctvwbndhwy.cntv.myhwcdn.cn/ldncctvwbnd/ldcctv1_2/index.m3u8#http://1.62.64.76/0b926d37065dc656266be75dd9d25565.v.smtcdns.net/tlive-test-cdn.ysp.cctv.cn/ysp/2022576803.m3u8#https://a.xttv.top/xttv/27f43e697655f4d44c62d7f4d32fcctv.m3u8?aliyun_uuid=b3b8e538-3470-4fa0-b6ed-2b138e5f5fef&auth_key=2145888000-0-0-fda7ddb73d3cb5ac5bddf4eeba9b665e#http://110.249.196.71/0b926d37065dc656266be75dd9d25565.v.smtcdns.net/zycfcdn.gdwlcloud.com/PLTV/88888888/224/3221225490/index.m3u8 +💝OK影视,https://tc-tc2-interact.douyucdn2.cn/dyliveflv1a/122402rK7MO9bXSq_900.m3u8 +💝蜜蜂影视,https://tc-tc2-interact.douyucdn2.cn/dyliveflv1a/122402rK7MO9bXSq_900.m3u8 +💝开心TV,https://tc-tc2-interact.douyucdn2.cn/dyliveflv1a/122402rK7MO9bXSq_900.m3u8 +💝开心影视,https://tc-tc2-interact.douyucdn2.cn/dyliveflv1a/122402rK7MO9bXSq_900.m3u8 +💝可以使用,https://tc-tc2-interact.douyucdn2.cn/dyliveflv1a/122402rK7MO9bXSq_900.m3u8 +💝影视仓淘汰,http://mobilelive-ds.ysp.cctv.cn/ysp/2013693901.m3u8 +💝会闪退,https://tc-tc2-interact.douyucdn2.cn/dyliveflv1/85894rmovieChow_900p.m3u8 +mitv纪录纪实,#genre# +BBC地球,mitv://generationnexxxt.com:19806/49261fefe28441bea7b775cc44fa16b5 +BBC地球,mitv://generationnexxxt.com:19806/17826db977f04f8fa679d438d6c51700 +BBC生活,mitv://generationnexxxt.com:19806/5955951f08424fd49e21d90e882e5228 +BBC生活,mitv://generationnexxxt.com:19806/178e533979bb4ec3af9190ca475f23ef +动物星球,mitv://generationnexxxt.com:19806/ff4ce945b27940f89712c63366f0454d +动物星球,mitv://generationnexxxt.com:19806/5b41e724ea8e4e7eb92e3dac95589165 + +探索频道,mitv://generationnexxxt.com:19806/202aafe50f8947eeac67a09b828f8c40 +探索频道,mitv://generationnexxxt.com:19806/9f2e92df32b34a569ad7e6818f4732fb + +探索亚洲,mitv://generationnexxxt.com:19806/0afefbe6244c42dbac40a3d8abef8d07 +探索科学,mitv://generationnexxxt.com:19806/39e1494bd82c449892c6f92a6c8dc213 +探索动力,mitv://generationnexxxt.com:19806/50af7fb4500840e292bcfae4dd50e97f +历史频道,mitv://generationnexxxt.com:19806/63e740392c4641cc9dab02d98b74782f +历史频道,mitv://generationnexxxt.com:19806/e6f506b509c94bacb4a371cdbcbe7719 +罪案侦缉,mitv://generationnexxxt.com:19806/ef7b4ee3be374092a4a0074a6be41e03 +EVE探索,mitv://generationnexxxt.com:19806/f21130546932443d98f6ec02aa4ec99a +HGTV居家,mitv://generationnexxxt.com:19806/84613e96237545769558cc572e6d1ab0 +Love Nature,mitv://generationnexxxt.com:19806/574be1e2e0054216abe436413ea4221a +Lifetime,mitv://generationnexxxt.com:19806/112b06172cdf41cbb6990e64d30cab0c +美食星球,mitv://generationnexxxt.com:19806/60c698afbda7443998a2b9fd5c00c54d +美食星球,mitv://generationnexxxt.com:19806/1baaeb6967434fee9bf4412904e573b0 +亚洲美食,mitv://generationnexxxt.com:19806/5b787bd078c84a3caa09c3665c66dc50 +亚洲美食,mitv://generationnexxxt.com:19806/8a565409a26044bead7e66ac44c894f0 +亚洲旅游,mitv://generationnexxxt.com:19806/816c4598cfb641f5845b90a3bc772f1c +亚洲旅游,mitv://generationnexxxt.com:19806/259c24cb79ce4b5db1fb1e1b894c517e +EYETV旅游,mitv://generationnexxxt.com:19806/2d426994acef44deb401aa8a4cd5a92e +EYETV旅游,mitv://generationnexxxt.com:19806/055ce8e749c1425c87950f93d0bf9bcd +TLC旅游生活,mitv://generationnexxxt.com:19806/621ca70412034f5eb919c1ec03679804 +达文西频道,mitv://generationnexxxt.com:19806/65939a080006919098d4bd6914a733d2 + +BBC地球,P2p://generationnexxxt.com:19806/49261fefe28441bea7b775cc44fa16b5 +BBC地球,P2p://generationnexxxt.com:19806/17826db977f04f8fa679d438d6c51700 +BBC生活,P2p://generationnexxxt.com:19806/5955951f08424fd49e21d90e882e5228 +BBC生活,P2p://generationnexxxt.com:19806/178e533979bb4ec3af9190ca475f23ef +动物星球,P2p://generationnexxxt.com:19806/ff4ce945b27940f89712c63366f0454d +动物星球,P2p://generationnexxxt.com:19806/5b41e724ea8e4e7eb92e3dac95589165 +国家地理,P2p://generationnexxxt.com:19806/37a44d0af7634364a91f2fb8d9b9cf9b +探索频道,P2p://generationnexxxt.com:19806/202aafe50f8947eeac67a09b828f8c40 +探索频道,P2p://generationnexxxt.com:19806/9f2e92df32b34a569ad7e6818f4732fb +探索亚洲,P2p://generationnexxxt.com:19806/65e9a59d000f257fe8f2360919064328 +探索亚洲,P2p://generationnexxxt.com:19806/0afefbe6244c42dbac40a3d8abef8d07 +探索科学,P2p://generationnexxxt.com:19806/39e1494bd82c449892c6f92a6c8dc213 +探索动力,P2p://generationnexxxt.com:19806/50af7fb4500840e292bcfae4dd50e97f +历史频道,P2p://generationnexxxt.com:19806/63e740392c4641cc9dab02d98b74782f +历史频道,P2p://generationnexxxt.com:19806/e6f506b509c94bacb4a371cdbcbe7719 +罪案侦缉,P2p://generationnexxxt.com:19806/ef7b4ee3be374092a4a0074a6be41e03 +EVE探索,P2p://generationnexxxt.com:19806/f21130546932443d98f6ec02aa4ec99a +HGTV居家,P2p://generationnexxxt.com:19806/84613e96237545769558cc572e6d1ab0 +Love Nature,P2p://generationnexxxt.com:19806/574be1e2e0054216abe436413ea4221a +Lifetime,P2p://generationnexxxt.com:19806/112b06172cdf41cbb6990e64d30cab0c +美食星球,P2p://generationnexxxt.com:19806/60c698afbda7443998a2b9fd5c00c54d +美食星球,P2p://generationnexxxt.com:19806/1baaeb6967434fee9bf4412904e573b0 +亚洲美食,P2p://generationnexxxt.com:19806/5b787bd078c84a3caa09c3665c66dc50 +亚洲美食,P2p://generationnexxxt.com:19806/8a565409a26044bead7e66ac44c894f0 +亚洲旅游,P2p://generationnexxxt.com:19806/816c4598cfb641f5845b90a3bc772f1c +亚洲旅游,P2p://generationnexxxt.com:19806/259c24cb79ce4b5db1fb1e1b894c517e +EYETV旅游,P2p://generationnexxxt.com:19806/2d426994acef44deb401aa8a4cd5a92e +EYETV旅游,P2p://generationnexxxt.com:19806/055ce8e749c1425c87950f93d0bf9bcd +TLC旅游生活,P2p://generationnexxxt.com:19806/621ca70412034f5eb919c1ec03679804 +达文西频道,P2p://generationnexxxt.com:19806/65939a080006919098d4bd6914a733d2 + +mitv国际频道,#genre# +ABC AU,mitv://generationnexxxt.com:19806/65159e6a0003ce6d3e47fc21533740b0 +Arirang,mitv://generationnexxxt.com:19806/853704c2f9a442e7a1532038f14d8d00 +BBC World News,mitv://generationnexxxt.com:19806/ecc7214268ee448ab42b65d9f2e2663a +Bloomberg TV,mitv://generationnexxxt.com:19806/885bb543b9cb4bbeb5bcfe518fb90780 +Business News Network,mitv://generationnexxxt.com:19806/6579228a00091f3e3171f0bd49686fdf +CBC News,mitv://generationnexxxt.com:19806/6579228b000ea7c13171f60c6a0d21f3 +CBS News,mitv://generationnexxxt.com:19806/697a642115f74499aafe783d34690381 +CNA,mitv://generationnexxxt.com:19806/52b67f21b37b4764a87c33dd46844fdb +CNBC,mitv://generationnexxxt.com:19806/b642a4ce45734a7190f0acbd8cd462dd +CNN,mitv://generationnexxxt.com:19806/6579228c000644123171f7d14c4002bd +Euronews,mitv://generationnexxxt.com:19806/5b3289dff2154e2c8e166cc3f081f326 +FOX News,mitv://generationnexxxt.com:19806/6579228d000333673171faee60517ea8 +FOX News,mitv://generationnexxxt.com:19806/e9305a82b75c42f5901c0594e063e999 +France 24,mitv://generationnexxxt.com:19806/72d5e1665d3e4b729ff9dbd4325e8694 +KBS World,mitv://generationnexxxt.com:19806/61432c16625e41d3b52570bb136f5054 +MSNBC,mitv://generationnexxxt.com:19806/6579228b000782ab3171f43764692427 +NHK World,mitv://generationnexxxt.com:19806/c2da55d84a72418c8f1876c25ec97a1d +Sky News,mitv://generationnexxxt.com:19806/f023e7189a5541b3a288267608b4836a +The Weather Network,mitv://generationnexxxt.com:19806/65792289000be5843171ed9050240875 +The Weather Channel,mitv://generationnexxxt.com:19806/65792289000516983171ebcb68d70d48 + +ABC AU,P2p://generationnexxxt.com:19806/65159e6a0003ce6d3e47fc21533740b0 +Arirang,P2p://generationnexxxt.com:19806/853704c2f9a442e7a1532038f14d8d00 +BBC World News,P2p://generationnexxxt.com:19806/ecc7214268ee448ab42b65d9f2e2663a +Bloomberg TV,P2p://generationnexxxt.com:19806/885bb543b9cb4bbeb5bcfe518fb90780 +Business News Network,P2p://generationnexxxt.com:19806/6579228a00091f3e3171f0bd49686fdf +CBC News,P2p://generationnexxxt.com:19806/6579228b000ea7c13171f60c6a0d21f3 +CBS News,P2p://generationnexxxt.com:19806/697a642115f74499aafe783d34690381 +CNA,P2p://generationnexxxt.com:19806/52b67f21b37b4764a87c33dd46844fdb +CNBC,P2p://generationnexxxt.com:19806/b642a4ce45734a7190f0acbd8cd462dd +CNN,P2p://generationnexxxt.com:19806/6579228c000644123171f7d14c4002bd +Euronews,P2p://generationnexxxt.com:19806/5b3289dff2154e2c8e166cc3f081f326 +FOX News,P2p://generationnexxxt.com:19806/6579228d000333673171faee60517ea8 +FOX News,P2p://generationnexxxt.com:19806/e9305a82b75c42f5901c0594e063e999 +France 24,P2p://generationnexxxt.com:19806/72d5e1665d3e4b729ff9dbd4325e8694 +KBS World,P2p://generationnexxxt.com:19806/61432c16625e41d3b52570bb136f5054 +MSNBC,P2p://generationnexxxt.com:19806/6579228b000782ab3171f43764692427 +NHK World,P2p://generationnexxxt.com:19806/c2da55d84a72418c8f1876c25ec97a1d +Sky News,P2p://generationnexxxt.com:19806/f023e7189a5541b3a288267608b4836a +The Weather Network,P2p://generationnexxxt.com:19806/65792289000be5843171ed9050240875 +The Weather Channel,P2p://generationnexxxt.com:19806/65792289000516983171ebcb68d70d48 + +mitv国内频道,#genre# +CCTV-1 综合,mitv://generationnexxxt.com:19806/1a50835e80564ba8ae28fce9bb7f228f#mitv://generationnexxxt.com:19806/f1e3bc8a344e49dab603272c8fd2641e +CCTV-2 财经mitv://generationnexxxt.com:19806/ce08ee69cea5402c99bf285704eac3e5 +CCTV-3 综艺,mitv://generationnexxxt.com:19806/784f6703531044be9cee14b793948d30 +CCTV-4 中文国际,mitv://generationnexxxt.com:19806/50c3e18e04bf478db59251455cf3d309 +CCTV-5 体育,mitv://generationnexxxt.com:19806/7d00bdeddb6c422796e62ae9e8b9398d +CCTV-5+ 体育赛事,mitv://generationnexxxt.com:19806/65a531aa00057c26dd8d1ccf196a034e +CCTV-6 电影,mitv://generationnexxxt.com:19806/3ec70c48b2024e4f9210169aec2914c7 +CCTV-7 国防军事,mitv://generationnexxxt.com:19806/e70ef03e57794075962ec3960df5b167 +CCTV-8 电视剧,mitv://generationnexxxt.com:19806/65a52e1d00012b4cdd7f3cee366e723b +CCTV-9 纪录,mitv://generationnexxxt.com:19806/65a52e1d0007b3b6dd7f3e945c727248 +CCTV-10 科教,mitv://generationnexxxt.com:19806/65a52e1d000c0c0bdd7f3fad13ad7f10 +CCTV-11 戏曲,mitv://generationnexxxt.com:19806/65a52e1e0002f04bdd7f414333117e01 +CCTV-12 社会与法,mitv://generationnexxxt.com:19806/65a52e1e0008b4e1dd7f42ba38ef4a02 +CCTV-13 新闻,mitv://generationnexxxt.com:19806/65a52dc0000d93bbdd7dd4d235813afb +CCTV-14 少儿,mitv://generationnexxxt.com:19806/65a52dc1000332e5dd7dd60b29277892 +CCTV-15 音乐,mitv://generationnexxxt.com:19806/65a52dc10008dffbdd7dd78215274e95 +CCTV-16 噢林匹克,mitv://generationnexxxt.com:19806/65a614e0000be91ae104b1833fc057ba +CCTV-17 农业农村,mitv://generationnexxxt.com:19806/65a614e00004fec6e104afbe58b32445 +北京卫视,mitv://generationnexxxt.com:19806/8d7d0547db754c32bca6011693893b40 +天津卫视,mitv://generationnexxxt.com:19806/0d7fa1ec8c4348e29bc3f09a38ae3691 +河北卫视,mitv://generationnexxxt.com:19806/f0390f4cc1fa4b9991338bc6426deb17 +黑龙江视,mitv://generationnexxxt.com:19806/2f690600a9454710b15b0e90853268c3 +辽宁卫视,mitv://generationnexxxt.com:19806/4b1903b35f804f1180a4b346efbabfc9 +东方卫视,mitv://generationnexxxt.com:19806/10521db17e054dbeba85448ac091ae64 +江苏卫视,mitv://generationnexxxt.com:19806/13f3f27751184d95902e5c588264551e +浙江卫视,mitv://generationnexxxt.com:19806/b4518016c79d45f38a27eeafb3309925#mitv://generationnexxxt.com:19806/7bf4b3a65eaf421ab6d71bd8dcc4547a +江西卫视,mitv://generationnexxxt.com:19806/d3548b106a7d45b4972427c3a75135ab +山东卫视,mitv://generationnexxxt.com:19806/be77ccef4df042ab909e0a2586844431 +东南卫视,mitv://generationnexxxt.com:19806/00aae4669ca24ddabf43997323ceef8e +湖北卫视,mitv://generationnexxxt.com:19806/7553b94400ac4d85b752579acb37c0ce +湖南卫视,mitv://generationnexxxt.com:19806/d8ea1b07516449b6968c04b07cb188ea#mitv://generationnexxxt.com:19806/45dc7947c5574ebfb0e68e5d0a537ed0 +深圳卫视,mitv://generationnexxxt.com:19806/b8c8ef10f65649c9a43388d771203f61 +广东卫视,mitv://generationnexxxt.com:19806/cf7073fbb4c5490a86aca002247700f9 +广西卫视,mitv://generationnexxxt.com:19806/eb435193f43d4c8ca09c9ce477d4d7b9 +重庆卫视,mitv://generationnexxxt.com:19806/c173700eaecc412695b37ac062b6abac +云南卫视,mitv://generationnexxxt.com:19806/9203ba029385410793e3f2b7bffb3335 +星空卫视,mitv://generationnexxxt.com:19806/0b87528420394614b1016123ff4fda4c +湾区卫视,mitv://generationnexxxt.com:19806/eaf180a6f2b44f4bb6b780e39e431f4b#mitv://generationnexxxt.com:19806/587bc565d5a4413987fdce380a48a332 +广东影视,mitv://generationnexxxt.com:19806/f2dbc62d3b0b4af3ac2420174eadf202 +广东珠江,mitv://generationnexxxt.com:19806/a25f500eaa204ab89f61c1dc4679c7b3#mitv://generationnexxxt.com:19806/a050c8e736174de681b13b8ebd2ce3c4 +广东体育,mitv://generationnexxxt.com:19806/bb744a1252da46a6a2ae5546f4da7c72 +五星体育,mitv://generationnexxxt.com:19806/387fd2fee8ce4ced972cd7be0f1fc77a#mitv://generationnexxxt.com:19806/d75057c993f84e7c86f94e8f1e56ad24 +魅力足球,mitv://generationnexxxt.com:19806/ca7a1a18635e453a9a77e5fd5d425e89 +快乐垂钓,mitv://generationnexxxt.com:19806/65a4f19a000ece67dc92e0b05e060435 +私人影院,mitv://generationnexxxt.com:19806/3cfadd5e9af14d6db652b3c23acd7a7d +动作电影,mitv://generationnexxxt.com:19806/ab40a3bbbef244a1b4c8c0f841f0561f#mitv://generationnexxxt.com:19806/1b4ebad47ed94c6291646a4a5d1ff3b6 +影迷电影,mitv://generationnexxxt.com:19806/bc7bf77f1cb5401389500427f060caa1#mitv://generationnexxxt.com:19806/02385419696a411db959037c2190cf11 +家庭影院,mitv://generationnexxxt.com:19806/53491943aa934355b381bc8684bc4fc2#mitv://generationnexxxt.com:19806/28fb3856055c452db8f17441c99f21cf +重温经典,mitv://generationnexxxt.com:19806/65fa5e2600039eda2a43168726d80618 +ChannelV,mitv://generationnexxxt.com:19806/65938874000d6c7c9890150e746d4c5b + +CCTV-1 综合,mitv://generationnexxxt.com:19806/f1e3bc8a344e49dab603272c8fd2641e +CCTV-2 财经,mitv://generationnexxxt.com:19806/ce08ee69cea5402c99bf285704eac3e5 +CCTV-3 综艺,mitv://generationnexxxt.com:19806/784f6703531044be9cee14b793948d30 +CCTV-4 中文国际,mitv://generationnexxxt.com:19806/50c3e18e04bf478db59251455cf3d309 +CCTV-5 体育,mitv://generationnexxxt.com:19806/7d00bdeddb6c422796e62ae9e8b9398d +CCTV-5+ 体育赛事,mitv://generationnexxxt.com:19806/5b390808c064415fa55fa30feb8788ff +CCTV-6 电影,mitv://generationnexxxt.com:19806/3ec70c48b2024e4f9210169aec2914c7 +CCTV-7 国防军事,mitv://generationnexxxt.com:19806/e70ef03e57794075962ec3960df5b167 +CCTV-8 电视剧,mitv://generationnexxxt.com:19806/7c422f17b94c47928316bba288c64a25 +CCTV-9 纪录,mitv://generationnexxxt.com:19806/1d25488429514e78ab4d100819bece3e +CCTV-10 科教,mitv://generationnexxxt.com:19806/db6e0eae415d4d3c80389e51f8aac382 +CCTV-11 戏曲,mitv://generationnexxxt.com:19806/aed547d30ca64a089f9b9adad8d9ee91 +CCTV-12 社会与法,mitv://generationnexxxt.com:19806/70a7e5f93ab14d978706c237fe142277 +CCTV-13 新闻,mitv://generationnexxxt.com:19806/89e640d10d2646d3b7580c9bd85e9565 +CCTV-14 少儿,mitv://generationnexxxt.com:19806/5ce5a7ff03b541cc8ef405312b4fec09 +CCTV-15 音乐,mitv://generationnexxxt.com:19806/8914df6967f546eb8cf20ea35946ad8d +北京卫视,mitv://generationnexxxt.com:19806/8d7d0547db754c32bca6011693893b40 +天津卫视,mitv://generationnexxxt.com:19806/0d7fa1ec8c4348e29bc3f09a38ae3691 +东方卫视,mitv://generationnexxxt.com:19806/10521db17e054dbeba85448ac091ae64 +重庆卫视,mitv://generationnexxxt.com:19806/c173700eaecc412695b37ac062b6abac +江苏卫视,mitv://generationnexxxt.com:19806/13f3f27751184d95902e5c588264551e +浙江卫视,mitv://generationnexxxt.com:19806/7bf4b3a65eaf421ab6d71bd8dcc4547a +江西卫视,mitv://generationnexxxt.com:19806/d3548b106a7d45b4972427c3a75135ab +东南卫视,mitv://generationnexxxt.com:19806/00aae4669ca24ddabf43997323ceef8e +山东卫视,mitv://generationnexxxt.com:19806/be77ccef4df042ab909e0a2586844431 +河北卫视,mitv://generationnexxxt.com:19806/f0390f4cc1fa4b9991338bc6426deb17 +湖北卫视,mitv://generationnexxxt.com:19806/7553b94400ac4d85b752579acb37c0ce +湖南卫视,mitv://generationnexxxt.com:19806/45dc7947c5574ebfb0e68e5d0a537ed0 +广东卫视,mitv://generationnexxxt.com:19806/cf7073fbb4c5490a86aca002247700f9 +广西卫视,mitv://generationnexxxt.com:19806/eb435193f43d4c8ca09c9ce477d4d7b9 +深圳卫视,mitv://generationnexxxt.com:19806/b8c8ef10f65649c9a43388d771203f61 +云南卫视,mitv://generationnexxxt.com:19806/9203ba029385410793e3f2b7bffb3335 +辽宁卫视,mitv://generationnexxxt.com:19806/4b1903b35f804f1180a4b346efbabfc9 +黑龙江卫视,mitv://generationnexxxt.com:19806/2f690600a9454710b15b0e90853268c3 + + +CCTV-1 综合,P2p://generationnexxxt.com:19806/f1e3bc8a344e49dab603272c8fd2641e +CCTV-2 财经,P2p://generationnexxxt.com:19806/ce08ee69cea5402c99bf285704eac3e5 +CCTV-3 综艺,P2p://generationnexxxt.com:19806/784f6703531044be9cee14b793948d30 +CCTV-4 中文国际,P2p://generationnexxxt.com:19806/50c3e18e04bf478db59251455cf3d309 +CCTV-5 体育,P2p://generationnexxxt.com:19806/7d00bdeddb6c422796e62ae9e8b9398d +CCTV-5+ 体育赛事,P2p://generationnexxxt.com:19806/5b390808c064415fa55fa30feb8788ff +CCTV-6 电影,P2p://generationnexxxt.com:19806/3ec70c48b2024e4f9210169aec2914c7 +CCTV-7 国防军事,P2p://generationnexxxt.com:19806/e70ef03e57794075962ec3960df5b167 +CCTV-8 电视剧,P2p://generationnexxxt.com:19806/7c422f17b94c47928316bba288c64a25 +CCTV-9 纪录,P2p://generationnexxxt.com:19806/1d25488429514e78ab4d100819bece3e +CCTV-10 科教,P2p://generationnexxxt.com:19806/db6e0eae415d4d3c80389e51f8aac382 +CCTV-11 戏曲,P2p://generationnexxxt.com:19806/aed547d30ca64a089f9b9adad8d9ee91 +CCTV-12 社会与法,P2p://generationnexxxt.com:19806/70a7e5f93ab14d978706c237fe142277 +CCTV-13 新闻,P2p://generationnexxxt.com:19806/89e640d10d2646d3b7580c9bd85e9565 +CCTV-14 少儿,P2p://generationnexxxt.com:19806/5ce5a7ff03b541cc8ef405312b4fec09 +CCTV-15 音乐,P2p://generationnexxxt.com:19806/8914df6967f546eb8cf20ea35946ad8d +北京卫视,P2p://generationnexxxt.com:19806/8d7d0547db754c32bca6011693893b40 +天津卫视,P2p://generationnexxxt.com:19806/0d7fa1ec8c4348e29bc3f09a38ae3691 +东方卫视,P2p://generationnexxxt.com:19806/10521db17e054dbeba85448ac091ae64 +重庆卫视,P2p://generationnexxxt.com:19806/c173700eaecc412695b37ac062b6abac +江苏卫视,P2p://generationnexxxt.com:19806/13f3f27751184d95902e5c588264551e +浙江卫视,P2p://generationnexxxt.com:19806/7bf4b3a65eaf421ab6d71bd8dcc4547a +江西卫视,P2p://generationnexxxt.com:19806/d3548b106a7d45b4972427c3a75135ab +东南卫视,P2p://generationnexxxt.com:19806/00aae4669ca24ddabf43997323ceef8e +山东卫视,P2p://generationnexxxt.com:19806/be77ccef4df042ab909e0a2586844431 +河北卫视,P2p://generationnexxxt.com:19806/f0390f4cc1fa4b9991338bc6426deb17 +湖北卫视,P2p://generationnexxxt.com:19806/7553b94400ac4d85b752579acb37c0ce +湖南卫视,P2p://generationnexxxt.com:19806/45dc7947c5574ebfb0e68e5d0a537ed0 +广东卫视,P2p://generationnexxxt.com:19806/cf7073fbb4c5490a86aca002247700f9 +广西卫视,P2p://generationnexxxt.com:19806/eb435193f43d4c8ca09c9ce477d4d7b9 +深圳卫视,P2p://generationnexxxt.com:19806/b8c8ef10f65649c9a43388d771203f61 +云南卫视,P2p://generationnexxxt.com:19806/9203ba029385410793e3f2b7bffb3335 +辽宁卫视,P2p://generationnexxxt.com:19806/4b1903b35f804f1180a4b346efbabfc9 +黑龙江卫视,P2p://generationnexxxt.com:19806/2f690600a9454710b15b0e90853268c3 + + +mitv台湾频道,#genre# +中天新闻台,mitv://generationnexxxt.com:19806/bd9064ee198045a386f1f2dba5073f4e#mitv://generationnexxxt.com:19806/e92e93fd67794e92acdc0d4005f0781a +东森新闻台,mitv://generationnexxxt.com:19806/7bbf7bf4cb8f4a58893f6b5017a9fe05#mitv://generationnexxxt.com:19806/e1a899eded4d48578084c61957fb8c2b +TVBS新闻台,mitv://generationnexxxt.com:19806/65fa6dc600095b662a8020fe14c65804#mitv://generationnexxxt.com:19806/6a155a5d7bea461b980b4fa559119a60 +三立新闻台,mitv://generationnexxxt.com:19806/96118abbe8ee48ddaef2c9c1cea1af04#mitv://generationnexxxt.com:19806/9388262af2604cc798800736d070d39e +年代新闻台,mitv://generationnexxxt.com:19806/65fa6ea5000ec21a2a83897e03cd44bb#mitv://generationnexxxt.com:19806/65ddd162000837a5babd25111eb9560c +非凡新闻台,mitv://generationnexxxt.com:19806/65fa6fc4000df93d2a87ea67255a50ce#mitv://generationnexxxt.com:19806/02f80f7aad2c480992e06e1bd8a7facb +民视新闻台,mitv://generationnexxxt.com:19806/d24f18e610d248b7a450d29492b37ebf +中视新闻台,mitv://generationnexxxt.com:19806/cb5965a89e434df7aeb66b2364116ae4 +寰宇新闻台,mitv://generationnexxxt.com:19806/a265fb55774a4554bc2db19b16f53be6 +华视新闻台,mitv://generationnexxxt.com:19806/ebe8db2daafa47768f37bcae17bfe299 +TVBSHD台,mitv://generationnexxxt.com:19806/be3d1c188f0c4b938ccfca04566b0fc1#mitv://generationnexxxt.com:19806/9fb651a7ec2e402588a0752ba1035476 +BBC-HD台,mitv://generationnexxxt.com:19806/178e533979bb4ec3af9190ca475f23ef +民视-HD台,mitv://generationnexxxt.com:19806/7b662823ed634f1fad66ab442b177118 +台视-HD台,mitv://generationnexxxt.com:19806/9868c18e3c0940cd8aa003d9ae54f862 +中视-HD台,mitv://generationnexxxt.com:19806/27826c4ed7234c0d8759bc7fe6786a18 +公视-HD台,mitv://generationnexxxt.com:19806/5bc9388122b840f1abd2ff73c85049a6 +华视-HD台,mitv://generationnexxxt.com:19806/761bc3c0662247d18b0db4da8070b7f4 +超视-HD台,mitv://generationnexxxt.com:19806/5121f16c4b634c1683e9444aa68494b6 +Lifetime台,mitv://generationnexxxt.com:19806/112b06172cdf41cbb6990e64d30cab0c +大爱-HD台,mitv://generationnexxxt.com:19806/e89ec8c592484d88bc001e8d8a6c9e31 +靖天国际台,mitv://generationnexxxt.com:19806/12d39bada24843588ad72a3175b785a2 +霹雳台湾台,mitv://generationnexxxt.com:19806/dcdf778fe9ca4184ad6af3a911765cf0 +居家乐活台,mitv://generationnexxxt.com:19806/84613e96237545769558cc572e6d1ab0 +食交子频道,mitv://generationnexxxt.com:19806/574be1e2e0054216abe436413ea4221a +美食星球台,mitv://generationnexxxt.com:19806/1baaeb6967434fee9bf4412904e573b0 +亚洲美食台,mitv://generationnexxxt.com:19806/5b787bd078c84a3caa09c3665c66dc50 +好消息频道,mitv://generationnexxxt.com:19806/febf2282369d409d92d68514b72fc433 +亚洲旅游台,mitv://generationnexxxt.com:19806/259c24cb79ce4b5db1fb1e1b894c517e +EYETV旅游,mitv://generationnexxxt.com:19806/2d426994acef44deb401aa8a4cd5a92e +原住民频道,mitv://generationnexxxt.com:19806/cb5b7549e3604100a605ca17c82808f5 +好消息二台,mitv://generationnexxxt.com:19806/2b9f20946a6147dfba8f92373fbafee5 +三立综合台,mitv://generationnexxxt.com:19806/792a7263dd7b4c7484512d07f3c21083 +靖天资讯台,mitv://generationnexxxt.com:19806/5c9d432112fd4d4e92263a34415293fa +靖天综合台,mitv://generationnexxxt.com:19806/ed2e3f294dcc40c1b72aba372fbed64d +靖天育乐台,mitv://generationnexxxt.com:19806/d67fd6c2e7c44e17b9e86d9073f2930e +中视经典台,mitv://generationnexxxt.com:19806/8b9e15ff15474ccbbc2780c1484e50c9 +中视菁采台,mitv://generationnexxxt.com:19806/ae5e01a7bc294327b88f65aa5d38217c +客家电视台,mitv://generationnexxxt.com:19806/eafabb6e7c30439b8ecd35ad40a46a96 +TVBS-精采,mitv://generationnexxxt.com:19806/2089afbec2474359add275658522922f +壹电视综合,mitv://generationnexxxt.com:19806/617d6cf150574cb485ee07aea57262fd +纬来精采台,mitv://generationnexxxt.com:19806/1db14fe8aad841b4b28eca2b136e7206 +ETto综合台,mitv://generationnexxxt.com:19806/8e1b32241c9d4d079a2df7dc99adb312 +台视综合台,mitv://generationnexxxt.com:19806/6593a4d5000dedcb98fef0154abd184d +民视第一台,mitv://generationnexxxt.com:19806/b97979cec8d74feebc370f3470cc06c6 +民视台湾台,mitv://generationnexxxt.com:19806/192bd12842624eb39e2f6b86eeacdca8 +靖天欢乐台,mitv://generationnexxxt.com:19806/439163cf3469473b8ffd582b687991be +探索频道台,mitv://generationnexxxt.com:19806/9f2e92df32b34a569ad7e6818f4732fb +八大优频道,mitv://generationnexxxt.com:19806/7abaa68442ce4ed7ad7c9772fb46eda9 +三立戏剧台,mitv://generationnexxxt.com:19806/7a5b874b630d457bb5997a2fe4690550 +龙华戏剧台,mitv://generationnexxxt.com:19806/5d4f0bd2b18b4a588a0ca733569b18dd +靖天戏剧台,mitv://generationnexxxt.com:19806/1282202787324223b35e3c84d9e673c6 +靖洋戏剧台,mitv://generationnexxxt.com:19806/84a559f1b4884854be933d5d4fc0d4a6 +靖天日本台,mitv://generationnexxxt.com:19806/c88dcc9ddf6747b991fc1a0db939147d +iFun动漫台,mitv://generationnexxxt.com:19806/91a0e3fa1a714dd7b7cf55343052cd4f +TLC旅游台,mitv://generationnexxxt.com:19806/621ca70412034f5eb919c1ec03679804 +韩国娱乐台,mitv://generationnexxxt.com:19806/80d680dc15ec44bea9c3a3160ecdcb14 +达文西频道,mitv://generationnexxxt.com:19806/65939a080006919098d4bd6914a733d2 +动物星球台,mitv://generationnexxxt.com:19806/5b41e724ea8e4e7eb92e3dac95589165 +ROCK-频道,mitv://generationnexxxt.com:19806/fc56480dab3541a6a99d66c3d2048526 +卡通频道台,mitv://generationnexxxt.com:19806/f4dd909eedc64e6b9736e248aedf6d61 +NHK信息台,mitv://generationnexxxt.com:19806/c2da55d84a72418c8f1876c25ec97a1d +龙华电影台,mitv://generationnexxxt.com:19806/1df6f5f0993a46faa17f676518654709 +Smart-频道,mitv://generationnexxxt.com:19806/65939c760002de7398de3a2e3f1b051b +靖天映画台,mitv://generationnexxxt.com:19806/b723859f3ed94e5ba712148b209eefd0 +MOMO频道,mitv://generationnexxxt.com:19806/2f2d9ad70ce7410aa99f2b9fa1753dd4 +靖天电影台,mitv://generationnexxxt.com:19806/d8c581e0e1a24823a3d2110e3584ef8b +WARNER台,mitv://generationnexxxt.com:19806/cd2062a6c5a94d548f3516d96e23deec +公视台语台,mitv://generationnexxxt.com:19806/6593a0f40009baf898efc82314242462 +amc电影台,mitv://generationnexxxt.com:19806/24ce0147e36a438eab843a3168cea3bc +东森幼幼台,mitv://generationnexxxt.com:19806/baa16215e2224e399f6dc71eb3576ed4 +HBOFamily,mitv://generationnexxxt.com:19806/8a0208ebdfa04b5eab112f0c8b01719c +Catc电影台,mitv://generationnexxxt.com:19806/2dccaec60f0e418d82d2d0bb09f0c4a8 +CinemaW台,mitv://generationnexxxt.com:19806/e262f40881b2461f9a270b4d9d0b54c3 +壹电视电影,mitv://generationnexxxt.com:19806/1be1329b6d124745a87a16de445d2352 +纬来综合台,mitv://generationnexxxt.com:19806/d40310ae8bba42569d3d90b4cf7d9928 +采昌影剧台,mitv://generationnexxxt.com:19806/a0d691053f9b4876ab2b509a62296911 +八大第一台,mitv://generationnexxxt.com:19806/270abff66f5e496fb9c100a0dbca3fe6 +佛卫慈悲台,mitv://generationnexxxt.com:19806/be70c8b5b35c4551b5c7d3c905234e69 +八大综合台,mitv://generationnexxxt.com:19806/6c18a737c1394e59ae5072935d630f40 +三立台湾台,mitv://generationnexxxt.com:19806/ff12e8f29f9b4f61a9b766709aa498f6 +三立都会台,mitv://generationnexxxt.com:19806/7a36f98eee8e48a48ea64a1359083c8a +东森综合台,mitv://generationnexxxt.com:19806/a05a4d8b51f54013925315261a2c6aa9 +中天综合台,mitv://generationnexxxt.com:19806/65b21a81000274a20ffaac0a0c7b0000 +中天娱乐台,mitv://generationnexxxt.com:19806/6932151dd5a74b759a053f78a719fbf3 +东森戏剧台,mitv://generationnexxxt.com:19806/4fae332a68a04f3fa77a158ac1fa4bce +八大戏剧台,mitv://generationnexxxt.com:19806/4eec82bd1e634ceab82b90e395116c83 +TVBS--欢乐,mitv://generationnexxxt.com:19806/569aec3edbbc4267bd6f829b3d495d5a +纬来戏剧台,mitv://generationnexxxt.com:19806/69036778f8fc40729301e9e88aeee556 +高点综合台,mitv://generationnexxxt.com:19806/462775e2153243fc92adec0793c638d0 +CNBC-频道,mitv://generationnexxxt.com:19806/b642a4ce45734a7190f0acbd8cd462dd +Bloomberg,mitv://generationnexxxt.com:19806/885bb543b9cb4bbeb5bcfe518fb90780 +HITS--频道,mitv://generationnexxxt.com:19806/a65416c2039f4644aeef10da853fb928 +壹电视新闻,mitv://generationnexxxt.com:19806/31dad83ef5b74c5db225482cd2e0fbae +年代新闻备,mitv://generationnexxxt.com:19806/95f67e884d88463e907c301d05fa68b7 +东森财经台,mitv://generationnexxxt.com:19806/6596322e000d4091a2f7138e424b32c5 +MOMO综合,mitv://generationnexxxt.com:19806/659391fc000353d298b54dbe4b486dab +东森电影台,mitv://generationnexxxt.com:19806/08435f286ac744a0942899c551209779 +纬来电影台,mitv://generationnexxxt.com:19806/429796f5f00946fa933e400729286c7e +龙祥电影台,mitv://generationnexxxt.com:19806/78502c9b515845a7baca6a3a6ea88b8a +HBO电影台,mitv://generationnexxxt.com:19806/37f11d742fee447ab15f07db28095bd6 +东森洋片台,mitv://generationnexxxt.com:19806/5e8420f5477344b9b7b39d9e96162ce1 +AXN电影台,mitv://generationnexxxt.com:19806/893f7dec641a42458f47ccfbd93525ba +好莱坞电影,mitv://generationnexxxt.com:19806/9862f4958472458ca2ebc718bb92a5c6 +CINE--MAX,mitv://generationnexxxt.com:19806/fd7fd316ff5f4ae0a79d274a86483a4f +纬来育乐台,mitv://generationnexxxt.com:19806/78b57c4d9e644fafafe01588c43b4787 +纬来体育台,mitv://generationnexxxt.com:19806/79090c69d43040148deaa21d5e26c32a +ELEVEN1台,mitv://generationnexxxt.com:19806/fcfde35352d5464f9ed1c711ef2d05b1 +JET-综合台,mitv://generationnexxxt.com:19806/cbd0c62dcb2a45cfa04f672fb2c49d14 +国兴卫视台,mitv://generationnexxxt.com:19806/18aaee00d2af442ebb4592e15f7b2a20 +Z频道-综合,mitv://generationnexxxt.com:19806/8789d946039740bda334150ac3138166 +Animax--台,mitv://generationnexxxt.com:19806/22f75ace87a545aab39a2e4cd244bbad +人间卫视台,mitv://generationnexxxt.com:19806/66140e7f000b35888e9bf42339867058 +尼克儿童台,mitv://generationnexxxt.com:19806/879f28be19bc47df84ad3d5470be58d0 +八大娱乐台,mitv://generationnexxxt.com:19806/cea44ead76804413bd48caf76c5c2749 +三立iNEWS,mitv://generationnexxxt.com:19806/ac384b2c9a4a47c3a538f9116ab7e4d8 +龙华偶像台,mitv://generationnexxxt.com:19806/5b720b1e1b404f129e7009363d3035f8 +tvN-频道台,mitv://generationnexxxt.com:19806/5653c9fb655842ee99b4590ff903efe7 +France--24,mitv://generationnexxxt.com:19806/72d5e1665d3e4b729ff9dbd4325e8694 +非凡商业台,mitv://generationnexxxt.com:19806/0c1ba96949414628ae64fc70c3354e7b +公视HD3台,mitv://generationnexxxt.com:19806/95f2ed538e044aac891abfe6a9ce6ba7 +大爱HD2台,mitv://generationnexxxt.com:19806/2036b83c58e344c782eb154b233c8c77 +生活英语台,mitv://generationnexxxt.com:19806/78c0f08e89a844ef89d6803bce27a827 +靖洋卡通台,mitv://generationnexxxt.com:19806/1279fb2d1ae14676a31b2e5b38a2cd57 +靖天卡通台,mitv://generationnexxxt.com:19806/0e27e5f319264b609ec810e126edf969 +NickJr频道,mitv://generationnexxxt.com:19806/acebbded37714fa4a5554c025873a92c +MezzoLive,mitv://generationnexxxt.com:19806/1c1e90cd01934a5f917ec4fad5c97665 +CLASSICA,mitv://generationnexxxt.com:19806/133be9054bcd4fa68d2e34205004a51a +爱尔达一台,mitv://generationnexxxt.com:19806/1180278580d04cb490450ec59b4edc6b +爱尔达二台,mitv://generationnexxxt.com:19806/d1f16ee235314a0fbc33742ab7af534b +TRAC-频道,mitv://generationnexxxt.com:19806/b0cb233f10e84f29910fa38e15a07035 +博斯高球台,mitv://generationnexxxt.com:19806/6ff0b79453d2430986930b7c84a286df +博斯高二台,mitv://generationnexxxt.com:19806/65e1b654000ce227c9f3778a2b254b95 +博斯网球台,mitv://generationnexxxt.com:19806/7fb5b66ce38747de84be865952153959 +博斯魅力网,mitv://generationnexxxt.com:19806/65e1b6530009723ec9f372c730a82585 +博斯无限台,mitv://generationnexxxt.com:19806/f2973cfa7c2045e6b8a184f1bf18af7c +博斯无二台,mitv://generationnexxxt.com:19806/65e1b653000eb97ec9f3741f6f4318a0 +博斯运动台,mitv://generationnexxxt.com:19806/6293839c167e4b6393c745db434b2465 +ELEVEN2台,mitv://generationnexxxt.com:19806/057061c0da744aa7b035169dba5ebe2a +智林体育台,mitv://generationnexxxt.com:19806/931c171e2f774f7aa1a92e97f5098c9f +博斯运二台,mitv://generationnexxxt.com:19806/65e1b65400075c3dc9f3762355b36cc1 +HBO强档台,mitv://generationnexxxt.com:19806/563a5981b8ad4df085b59ce98bbecb95 +HBO原创台,mitv://generationnexxxt.com:19806/bd0a33ff8b6f4fe9ba7791ad73c6c16e +BBC Earth,mitv://generationnexxxt.com:19806/49261fefe28441bea7b775cc44fa16b5 +Discovery,mitv://generationnexxxt.com:19806/0afefbe6244c42dbac40a3d8abef8d07 +D-科学频道,mitv://generationnexxxt.com:19806/39e1494bd82c449892c6f92a6c8dc213 +DMAX频道,mitv://generationnexxxt.com:19806/50af7fb4500840e292bcfae4dd50e97f +EVE频道台,mitv://generationnexxxt.com:19806/f21130546932443d98f6ec02aa4ec99a +历史频道台,mitv://generationnexxxt.com:19806/e6f506b509c94bacb4a371cdbcbe7719 +罪案侦缉台,mitv://generationnexxxt.com:19806/ef7b4ee3be374092a4a0074a6be41e03 +EYE-戏剧台,mitv://generationnexxxt.com:19806/2831986ed4b448c9b626788fbd3f2f89 +台视新闻台,mitv://generationnexxxt.com:19806/9817b59742464113bd5656fcc7dced84 +寰宇台湾台,mitv://generationnexxxt.com:19806/65b21a80000977cd0ffaa9e72e6218af +台视财经台,mitv://generationnexxxt.com:19806/e01d7738e33e456a812f7cefbf27b29a +纬来日本台,mitv://generationnexxxt.com:19806/5f9d37ba1fc04a04aaec6979908294a2 +爱尔达影剧,mitv://generationnexxxt.com:19806/65b2176e0008ea530feeab784c543898 +民视-HD备,mitv://generationnexxxt.com:19806/2fbdcb9b354a461b99ce6346109794a8 +三立台湾备,mitv://generationnexxxt.com:19806/7554a57ea53f4c10ae4e219ac2d374c4 +影迷数位台,mitv://generationnexxxt.com:19806/bc069c037478448a9e41dbc3e1d5d0f6 +爱尔达一台,mitv://generationnexxxt.com:19806/68e521d35c0247ddbc5073dee98245a3 +爱尔达三台,mitv://generationnexxxt.com:19806/3ebc6b89559c44dca30c4c259a5646b9 +爱尔达四台,mitv://generationnexxxt.com:19806/df4f198dbe6347e1a084c79d208f227d +台视-HD备,mitv://generationnexxxt.com:19806/3c20d4387ec845149b2ded5f28805f18 +中视-HD备,mitv://generationnexxxt.com:19806/c4ede9c3d1a84d0b9afe57622abcb9e7 +华视-HD备,mitv://generationnexxxt.com:19806/177390ae66634acca9be01242a769660 +东森新闻备,mitv://generationnexxxt.com:19806/35983e2efd5c44bf84bfb2977bbbc96d +镜新闻频道,mitv://generationnexxxt.com:19806/668a0abb880a496d8f57fad2f580566b +MTV频道台,mitv://generationnexxxt.com:19806/eb5ba5262e2e4779a1418c78d14ad1e5 +东森购一台,mitv://generationnexxxt.com:19806/eccc79da1c0a4b54b49a71277e1534a0 +东森购二台,mitv://generationnexxxt.com:19806/71a90a7da65142e795b97def2400e1fb +TechStorm,mitv://generationnexxxt.com:19806/994876c6aadc4234ba73441f18d36602 +纬来育乐台,mitv://generationnexxxt.com:19806/09f5cbcd57934038bc76de430a767046 +纬来电影台,mitv://generationnexxxt.com:19806/7ab30b79b011427287733d8ba51333e8 +纬来综合台,mitv://generationnexxxt.com:19806/a537a3ebc712483993ab82440801d1e6 +CINE--MAX,mitv://generationnexxxt.com:19806/adf42efd52864d6e9454132f0d849fb7 +亚洲美食台,mitv://generationnexxxt.com:19806/8a565409a26044bead7e66ac44c894f0 +美食星球台,mitv://generationnexxxt.com:19806/60c698afbda7443998a2b9fd5c00c54d +EYETV旅游,mitv://generationnexxxt.com:19806/055ce8e749c1425c87950f93d0bf9bcd +Ani--max台,mitv://generationnexxxt.com:19806/9a6969de27b145dc972e19d71c1a8932 +CinemaWo,mitv://generationnexxxt.com:19806/c6efdcd038204b4781cafc2273b4adb3 +爱尔达一台,mitv://generationnexxxt.com:19806/38729b9421044022a4d81ee0fe899dcd +亚洲旅游台,mitv://generationnexxxt.com:19806/816c4598cfb641f5845b90a3bc772f1c +TVBS-欢乐,mitv://generationnexxxt.com:19806/b7e4efb094034ce1895b3d9a5548cc2b +高点综合台,mitv://generationnexxxt.com:19806/0add95963fcd4b6ba03d63cc32dbd1a4 +HBOFamily,mitv://generationnexxxt.com:19806/924dad4bd6604751ba4c4ae69781784b +HBO强档台,mitv://generationnexxxt.com:19806/85cdd046958e48a794ff6f2d26b8ceba +HBO原创台,mitv://generationnexxxt.com:19806/6cf195d6fb5a4f9bb6fd98cf97af421b +amc电影台,mitv://generationnexxxt.com:19806/3dc5467282034921b7124f4be60f4782 +DiscoveryA,mitv://generationnexxxt.com:19806/65e9a59d000f257fe8f2360919064328 +探索频道台,mitv://generationnexxxt.com:19806/202aafe50f8947eeac67a09b828f8c40 +动物星球台,mitv://generationnexxxt.com:19806/ff4ce945b27940f89712c63366f0454d +三立iNEWS,mitv://generationnexxxt.com:19806/31103be1231e435ab69fdc1492cf08ee +霹雳台湾台,mitv://generationnexxxt.com:19806/c72cf3cb004849c082422b8e0fa31067 +BBCEarth台,mitv://generationnexxxt.com:19806/17826db977f04f8fa679d438d6c51700 +BBCLifestyl,mitv://generationnexxxt.com:19806/5955951f08424fd49e21d90e882e5228 +影迷数位台,mitv://generationnexxxt.com:19806/381a31aedcd2452c9be9582fc5a8ac51 +爱尔达四台,mitv://generationnexxxt.com:19806/797d51a6805c4a5fac1b71a678228513 +博斯高球台,mitv://generationnexxxt.com:19806/1938e9044d66468a9f38456fc383259f +博斯网球台,mitv://generationnexxxt.com:19806/6895bdc150744da98afe23ce77e32e51 +博斯运动台,mitv://generationnexxxt.com:19806/1fded122b4b74670b6012a8068e44766 +博斯无限台,mitv://generationnexxxt.com:19806/d0a027824de144fd88aef46f0fba7c99 +中天亚洲台,mitv://generationnexxxt.com:19806/cb5ccc31dac94210bdc7507c320fb32e +中天娱乐台,mitv://generationnexxxt.com:19806/f2d219cb882a47038438e2f483f7bf95 +WARNER台,mitv://generationnexxxt.com:19806/f613ad7c2e684a3599566ad2405d9c6e +iFun动漫台,mitv://generationnexxxt.com:19806/a215407035a548a7bd01ec29a94e5ed2 +八大优频道,mitv://generationnexxxt.com:19806/e1b81f9f50644fd38273333129365a4c +民视第一台,mitv://generationnexxxt.com:19806/1c48731982a54a59a9555f7247f3bf7f +东森戏剧台,mitv://generationnexxxt.com:19806/8e23c200926a4eaaa00043b39dca9075 +历史频道台,mitv://generationnexxxt.com:19806/63e740392c4641cc9dab02d98b74782f +爱尔达二台,mitv://generationnexxxt.com:19806/b63a56b3be724653802408c3b2044490 +爱尔达三台,mitv://generationnexxxt.com:19806/c34b66fc16df4781baceff8a2f6430e4 +中视新闻,mitv://generationnexxxt.com:19806/cb5965a89e434df7aeb66b2364116ae4 +华视新闻,mitv://generationnexxxt.com:19806/ebe8db2daafa47768f37bcae17bfe299 +台视新闻,mitv://generationnexxxt.com:19806/9817b59742464113bd5656fcc7dced84 +台视财经,mitv://generationnexxxt.com:19806/e01d7738e33e456a812f7cefbf27b29a +民视新闻,mitv://generationnexxxt.com:19806/d24f18e610d248b7a450d29492b37ebf +TVBS新闻,mitv://generationnexxxt.com:19806/6a155a5d7bea461b980b4fa559119a60 +TVBS新闻,mitv://generationnexxxt.com:19806/65fa6dc600095b662a8020fe14c65804 +TVBS HD,mitv://generationnexxxt.com:19806/be3d1c188f0c4b938ccfca04566b0fc1 +TVBS HD,mitv://generationnexxxt.com:19806/9fb651a7ec2e402588a0752ba1035476 +东森新闻,mitv://generationnexxxt.com:19806/e1a899eded4d48578084c61957fb8c2b +东森新闻,mitv://generationnexxxt.com:19806/35983e2efd5c44bf84bfb2977bbbc96d +东森新闻,mitv://generationnexxxt.com:19806/7bbf7bf4cb8f4a58893f6b5017a9fe05 +东森财经,mitv://generationnexxxt.com:19806/6596322e000d4091a2f7138e424b32c5 +三立iNEWS,mitv://generationnexxxt.com:19806/ac384b2c9a4a47c3a538f9116ab7e4d8 +三立iNEWS,mitv://generationnexxxt.com:19806/31103be1231e435ab69fdc1492cf08ee +三立新闻,mitv://generationnexxxt.com:19806/96118abbe8ee48ddaef2c9c1cea1af04 +三立新闻,mitv://generationnexxxt.com:19806/9388262af2604cc798800736d070d39e +中天新闻,mitv://generationnexxxt.com:19806/bd9064ee198045a386f1f2dba5073f4e +中天新闻,mitv://generationnexxxt.com:19806/e92e93fd67794e92acdc0d4005f0781a +寰宇新闻,mitv://generationnexxxt.com:19806/a265fb55774a4554bc2db19b16f53be6 +寰宇新闻,mitv://generationnexxxt.com:19806/ca27b65855704124be186aa0e5127c24 +寰宇台湾,mitv://generationnexxxt.com:19806/65b21a80000977cd0ffaa9e72e6218af +非凡新闻,mitv://generationnexxxt.com:19806/02f80f7aad2c480992e06e1bd8a7facb +非凡新闻,mitv://generationnexxxt.com:19806/65fa6fc4000df93d2a87ea67255a50ce +非凡商业,mitv://generationnexxxt.com:19806/0c1ba96949414628ae64fc70c3354e7b +年代新闻,mitv://generationnexxxt.com:19806/65fa6ea5000ec21a2a83897e03cd44bb +年代新闻,mitv://generationnexxxt.com:19806/95f67e884d88463e907c301d05fa68b7 +年代新闻,mitv://generationnexxxt.com:19806/65ddd162000837a5babd25111eb9560c +壹新闻,mitv://generationnexxxt.com:19806/617d6cf150574cb485ee07aea57262fd +壹新闻,mitv://generationnexxxt.com:19806/31dad83ef5b74c5db225482cd2e0fbae +镜新闻,mitv://generationnexxxt.com:19806/668a0abb880a496d8f57fad2f580566b + +中视,mitv://generationnexxxt.com:19806/27826c4ed7234c0d8759bc7fe6786a18 +中视,mitv://generationnexxxt.com:19806/c4ede9c3d1a84d0b9afe57622abcb9e7 +中视经典,mitv://generationnexxxt.com:19806/8b9e15ff15474ccbbc2780c1484e50c9 +中视菁采,mitv://generationnexxxt.com:19806/ae5e01a7bc294327b88f65aa5d38217c +华视,mitv://generationnexxxt.com:19806/761bc3c0662247d18b0db4da8070b7f4 +华视,mitv://generationnexxxt.com:19806/177390ae66634acca9be01242a769660 +台视,mitv://generationnexxxt.com:19806/3c20d4387ec845149b2ded5f28805f18 +台视,mitv://generationnexxxt.com:19806/9868c18e3c0940cd8aa003d9ae54f862 +台视综合,mitv://generationnexxxt.com:19806/6593a4d5000dedcb98fef0154abd184d +民视,mitv://generationnexxxt.com:19806/7b662823ed634f1fad66ab442b177118 +民视,mitv://generationnexxxt.com:19806/2fbdcb9b354a461b99ce6346109794a8 +民视,mitv://generationnexxxt.com:19806/7b046996e7d5417eb4a619194072bbc0 +民视,mitv://generationnexxxt.com:19806/8d864649cfc54b518b3d137d67583155 +民视第一,mitv://generationnexxxt.com:19806/b97979cec8d74feebc370f3470cc06c6 +民视第一,mitv://generationnexxxt.com:19806/1c48731982a54a59a9555f7247f3bf7f +民视台湾,mitv://generationnexxxt.com:19806/192bd12842624eb39e2f6b86eeacdca8 +公视,mitv://generationnexxxt.com:19806/5bc9388122b840f1abd2ff73c85049a6 +公视台语,mitv://generationnexxxt.com:19806/6593a0f40009baf898efc82314242462 +公视3台,mitv://generationnexxxt.com:19806/95f2ed538e044aac891abfe6a9ce6ba7 +TVBS精采,mitv://generationnexxxt.com:19806/2089afbec2474359add275658522922f +TVBS欢乐,mitv://generationnexxxt.com:19806/569aec3edbbc4267bd6f829b3d495d5a +TVBS欢乐,mitv://generationnexxxt.com:19806/b7e4efb094034ce1895b3d9a5548cc2b +TVBS亚洲,mitv://generationnexxxt.com:19806/5459e179cc3b4ea49e5b6ed6a4f298c9 +东森综合,mitv://generationnexxxt.com:19806/8e1b32241c9d4d079a2df7dc99adb312 +东森综合,mitv://generationnexxxt.com:19806/a05a4d8b51f54013925315261a2c6aa9 +东森超视,mitv://generationnexxxt.com:19806/5121f16c4b634c1683e9444aa68494b6 +东森亚洲,mitv://generationnexxxt.com:19806/8a43d9cb067b47aaa8fd5f550930be0c +东森幼幼,mitv://generationnexxxt.com:19806/baa16215e2224e399f6dc71eb3576ed4 +三立综合,mitv://generationnexxxt.com:19806/792a7263dd7b4c7484512d07f3c21083 +三立台湾,mitv://generationnexxxt.com:19806/ff12e8f29f9b4f61a9b766709aa498f6 +三立台湾,mitv://generationnexxxt.com:19806/7554a57ea53f4c10ae4e219ac2d374c4 +三立都会,mitv://generationnexxxt.com:19806/7a36f98eee8e48a48ea64a1359083c8a +中天综合,mitv://generationnexxxt.com:19806/65b21a81000274a20ffaac0a0c7b0000 +中天综合,mitv://generationnexxxt.com:19806/d6433dcd1a2a4aacb1c63a81ae8f11e6 +中天亚洲,mitv://generationnexxxt.com:19806/cb5ccc31dac94210bdc7507c320fb32e +中天娱乐,mitv://generationnexxxt.com:19806/f2d219cb882a47038438e2f483f7bf95 +中天娱乐,mitv://generationnexxxt.com:19806/6932151dd5a74b759a053f78a719fbf3 +八大第一,mitv://generationnexxxt.com:19806/270abff66f5e496fb9c100a0dbca3fe6 +八大综合,mitv://generationnexxxt.com:19806/6c18a737c1394e59ae5072935d630f40 +八大娱乐,mitv://generationnexxxt.com:19806/cea44ead76804413bd48caf76c5c2749 +八大优频道,mitv://generationnexxxt.com:19806/7abaa68442ce4ed7ad7c9772fb46eda9 +八大优频道,mitv://generationnexxxt.com:19806/e1b81f9f50644fd38273333129365a4c +纬来综合,mitv://generationnexxxt.com:19806/a537a3ebc712483993ab82440801d1e6 +纬来综合,mitv://generationnexxxt.com:19806/d40310ae8bba42569d3d90b4cf7d9928 +纬来精采,mitv://generationnexxxt.com:19806/1db14fe8aad841b4b28eca2b136e7206 +纬来日本,mitv://generationnexxxt.com:19806/5f9d37ba1fc04a04aaec6979908294a2 +纬来育乐,mitv://generationnexxxt.com:19806/78b57c4d9e644fafafe01588c43b4787 +纬来育乐,mitv://generationnexxxt.com:19806/09f5cbcd57934038bc76de430a767046 +靖天资讯,mitv://generationnexxxt.com:19806/5c9d432112fd4d4e92263a34415293fa +靖天国际,mitv://generationnexxxt.com:19806/12d39bada24843588ad72a3175b785a2 +靖天综合,mitv://generationnexxxt.com:19806/ed2e3f294dcc40c1b72aba372fbed64d +靖天欢乐,mitv://generationnexxxt.com:19806/439163cf3469473b8ffd582b687991be +靖天日本,mitv://generationnexxxt.com:19806/c88dcc9ddf6747b991fc1a0db939147d +靖天育乐,mitv://generationnexxxt.com:19806/d67fd6c2e7c44e17b9e86d9073f2930e +爱尔达生活英语,mitv://generationnexxxt.com:19806/78c0f08e89a844ef89d6803bce27a827 +客家电视,mitv://generationnexxxt.com:19806/eafabb6e7c30439b8ecd35ad40a46a96 +原住民电视,mitv://generationnexxxt.com:19806/cb5b7549e3604100a605ca17c82808f5 +高点综合,mitv://generationnexxxt.com:19806/0add95963fcd4b6ba03d63cc32dbd1a4 +高点综合,mitv://generationnexxxt.com:19806/462775e2153243fc92adec0793c638d0 +JET综合,mitv://generationnexxxt.com:19806/cbd0c62dcb2a45cfa04f672fb2c49d14 +国兴卫视,mitv://generationnexxxt.com:19806/18aaee00d2af442ebb4592e15f7b2a20 +人间卫视,mitv://generationnexxxt.com:19806/66140e7f000b35888e9bf42339867058 +人间卫视,mitv://generationnexxxt.com:19806/6593ab070007d601991721de206b22e9 +Z频道,mitv://generationnexxxt.com:19806/8789d946039740bda334150ac3138166 +大爱台,mitv://generationnexxxt.com:19806/e89ec8c592484d88bc001e8d8a6c9e31 +大爱2台,mitv://generationnexxxt.com:19806/2036b83c58e344c782eb154b233c8c77 +好消息,mitv://generationnexxxt.com:19806/febf2282369d409d92d68514b72fc433 +好消息2台,mitv://generationnexxxt.com:19806/2b9f20946a6147dfba8f92373fbafee5 +佛卫慈悲,mitv://generationnexxxt.com:19806/be70c8b5b35c4551b5c7d3c905234e69 +MOMO综合,mitv://generationnexxxt.com:19806/659391fc000353d298b54dbe4b486dab +MOMO亲子,mitv://generationnexxxt.com:19806/2f2d9ad70ce7410aa99f2b9fa1753dd4 + +中视新闻,P2p://generationnexxxt.com:19806/cb5965a89e434df7aeb66b2364116ae4 +华视新闻,P2p://generationnexxxt.com:19806/ebe8db2daafa47768f37bcae17bfe299 +台视新闻,P2p://generationnexxxt.com:19806/9817b59742464113bd5656fcc7dced84 +台视财经,P2p://generationnexxxt.com:19806/e01d7738e33e456a812f7cefbf27b29a +民视新闻,P2p://generationnexxxt.com:19806/d24f18e610d248b7a450d29492b37ebf +TVBS新闻,P2p://generationnexxxt.com:19806/6a155a5d7bea461b980b4fa559119a60 +TVBS新闻,P2p://generationnexxxt.com:19806/65fa6dc600095b662a8020fe14c65804 +TVBS HD,P2p://generationnexxxt.com:19806/be3d1c188f0c4b938ccfca04566b0fc1 +TVBS HD,P2p://generationnexxxt.com:19806/9fb651a7ec2e402588a0752ba1035476 +东森新闻,P2p://generationnexxxt.com:19806/e1a899eded4d48578084c61957fb8c2b +东森新闻,P2p://generationnexxxt.com:19806/35983e2efd5c44bf84bfb2977bbbc96d +东森新闻,P2p://generationnexxxt.com:19806/7bbf7bf4cb8f4a58893f6b5017a9fe05 +东森财经,P2p://generationnexxxt.com:19806/6596322e000d4091a2f7138e424b32c5 +三立iNEWS,P2p://generationnexxxt.com:19806/ac384b2c9a4a47c3a538f9116ab7e4d8 +三立iNEWS,P2p://generationnexxxt.com:19806/31103be1231e435ab69fdc1492cf08ee +三立新闻,P2p://generationnexxxt.com:19806/96118abbe8ee48ddaef2c9c1cea1af04 +三立新闻,P2p://generationnexxxt.com:19806/9388262af2604cc798800736d070d39e +中天新闻,P2p://generationnexxxt.com:19806/bd9064ee198045a386f1f2dba5073f4e +中天新闻,P2p://generationnexxxt.com:19806/e92e93fd67794e92acdc0d4005f0781a +寰宇新闻,P2p://generationnexxxt.com:19806/a265fb55774a4554bc2db19b16f53be6 +寰宇新闻,P2p://generationnexxxt.com:19806/ca27b65855704124be186aa0e5127c24 +寰宇台湾,P2p://generationnexxxt.com:19806/65b21a80000977cd0ffaa9e72e6218af +非凡新闻,P2p://generationnexxxt.com:19806/02f80f7aad2c480992e06e1bd8a7facb +非凡新闻,P2p://generationnexxxt.com:19806/65fa6fc4000df93d2a87ea67255a50ce +非凡商业,P2p://generationnexxxt.com:19806/0c1ba96949414628ae64fc70c3354e7b +年代新闻,P2p://generationnexxxt.com:19806/65fa6ea5000ec21a2a83897e03cd44bb +年代新闻,P2p://generationnexxxt.com:19806/95f67e884d88463e907c301d05fa68b7 +年代新闻,P2p://generationnexxxt.com:19806/65ddd162000837a5babd25111eb9560c +壹新闻,P2p://generationnexxxt.com:19806/617d6cf150574cb485ee07aea57262fd +壹新闻,P2p://generationnexxxt.com:19806/31dad83ef5b74c5db225482cd2e0fbae +镜新闻,P2p://generationnexxxt.com:19806/668a0abb880a496d8f57fad2f580566b + +中视,P2p://generationnexxxt.com:19806/27826c4ed7234c0d8759bc7fe6786a18 +中视,P2p://generationnexxxt.com:19806/c4ede9c3d1a84d0b9afe57622abcb9e7 +中视经典,P2p://generationnexxxt.com:19806/8b9e15ff15474ccbbc2780c1484e50c9 +中视菁采,P2p://generationnexxxt.com:19806/ae5e01a7bc294327b88f65aa5d38217c +华视,P2p://generationnexxxt.com:19806/761bc3c0662247d18b0db4da8070b7f4 +华视,P2p://generationnexxxt.com:19806/177390ae66634acca9be01242a769660 +台视,P2p://generationnexxxt.com:19806/3c20d4387ec845149b2ded5f28805f18 +台视,P2p://generationnexxxt.com:19806/9868c18e3c0940cd8aa003d9ae54f862 +台视综合,P2p://generationnexxxt.com:19806/6593a4d5000dedcb98fef0154abd184d +民视,P2p://generationnexxxt.com:19806/7b662823ed634f1fad66ab442b177118 +民视,P2p://generationnexxxt.com:19806/2fbdcb9b354a461b99ce6346109794a8 +民视,P2p://generationnexxxt.com:19806/7b046996e7d5417eb4a619194072bbc0 +民视,P2p://generationnexxxt.com:19806/8d864649cfc54b518b3d137d67583155 +民视第一,P2p://generationnexxxt.com:19806/b97979cec8d74feebc370f3470cc06c6 +民视第一,P2p://generationnexxxt.com:19806/1c48731982a54a59a9555f7247f3bf7f +民视台湾,P2p://generationnexxxt.com:19806/192bd12842624eb39e2f6b86eeacdca8 +公视,P2p://generationnexxxt.com:19806/5bc9388122b840f1abd2ff73c85049a6 +公视台语,P2p://generationnexxxt.com:19806/6593a0f40009baf898efc82314242462 +公视3台,P2p://generationnexxxt.com:19806/95f2ed538e044aac891abfe6a9ce6ba7 +TVBS精采,P2p://generationnexxxt.com:19806/2089afbec2474359add275658522922f +TVBS欢乐,P2p://generationnexxxt.com:19806/569aec3edbbc4267bd6f829b3d495d5a +TVBS欢乐,P2p://generationnexxxt.com:19806/b7e4efb094034ce1895b3d9a5548cc2b +TVBS亚洲,P2p://generationnexxxt.com:19806/5459e179cc3b4ea49e5b6ed6a4f298c9 +东森综合,P2p://generationnexxxt.com:19806/8e1b32241c9d4d079a2df7dc99adb312 +东森综合,P2p://generationnexxxt.com:19806/a05a4d8b51f54013925315261a2c6aa9 +东森超视,P2p://generationnexxxt.com:19806/5121f16c4b634c1683e9444aa68494b6 +东森亚洲,P2p://generationnexxxt.com:19806/8a43d9cb067b47aaa8fd5f550930be0c +东森幼幼,P2p://generationnexxxt.com:19806/baa16215e2224e399f6dc71eb3576ed4 +三立综合,P2p://generationnexxxt.com:19806/792a7263dd7b4c7484512d07f3c21083 +三立台湾,P2p://generationnexxxt.com:19806/ff12e8f29f9b4f61a9b766709aa498f6 +三立台湾,P2p://generationnexxxt.com:19806/7554a57ea53f4c10ae4e219ac2d374c4 +三立都会,P2p://generationnexxxt.com:19806/7a36f98eee8e48a48ea64a1359083c8a +中天综合,P2p://generationnexxxt.com:19806/65b21a81000274a20ffaac0a0c7b0000 +中天亚洲,P2p://generationnexxxt.com:19806/cb5ccc31dac94210bdc7507c320fb32e +中天娱乐,P2p://generationnexxxt.com:19806/f2d219cb882a47038438e2f483f7bf95 +中天娱乐,P2p://generationnexxxt.com:19806/6932151dd5a74b759a053f78a719fbf3 +八大第一,P2p://generationnexxxt.com:19806/270abff66f5e496fb9c100a0dbca3fe6 +八大综合,P2p://generationnexxxt.com:19806/6c18a737c1394e59ae5072935d630f40 +八大娱乐,P2p://generationnexxxt.com:19806/cea44ead76804413bd48caf76c5c2749 +八大优频道,P2p://generationnexxxt.com:19806/7abaa68442ce4ed7ad7c9772fb46eda9 +八大优频道,P2p://generationnexxxt.com:19806/e1b81f9f50644fd38273333129365a4c +纬来综合,P2p://generationnexxxt.com:19806/a537a3ebc712483993ab82440801d1e6 +纬来综合,P2p://generationnexxxt.com:19806/d40310ae8bba42569d3d90b4cf7d9928 +纬来精采,P2p://generationnexxxt.com:19806/1db14fe8aad841b4b28eca2b136e7206 +纬来日本,P2p://generationnexxxt.com:19806/5f9d37ba1fc04a04aaec6979908294a2 +纬来育乐,P2p://generationnexxxt.com:19806/78b57c4d9e644fafafe01588c43b4787 +纬来育乐,P2p://generationnexxxt.com:19806/09f5cbcd57934038bc76de430a767046 +靖天资讯,P2p://generationnexxxt.com:19806/5c9d432112fd4d4e92263a34415293fa +靖天国际,P2p://generationnexxxt.com:19806/12d39bada24843588ad72a3175b785a2 +靖天综合,P2p://generationnexxxt.com:19806/ed2e3f294dcc40c1b72aba372fbed64d +靖天欢乐,P2p://generationnexxxt.com:19806/439163cf3469473b8ffd582b687991be +靖天日本,P2p://generationnexxxt.com:19806/c88dcc9ddf6747b991fc1a0db939147d +靖天育乐,P2p://generationnexxxt.com:19806/d67fd6c2e7c44e17b9e86d9073f2930e +爱尔达生活英语,P2p://generationnexxxt.com:19806/78c0f08e89a844ef89d6803bce27a827 +客家电视,P2p://generationnexxxt.com:19806/eafabb6e7c30439b8ecd35ad40a46a96 +原住民电视,P2p://generationnexxxt.com:19806/cb5b7549e3604100a605ca17c82808f5 +高点综合,P2p://generationnexxxt.com:19806/0add95963fcd4b6ba03d63cc32dbd1a4 +高点综合,P2p://generationnexxxt.com:19806/462775e2153243fc92adec0793c638d0 +JET综合,P2p://generationnexxxt.com:19806/cbd0c62dcb2a45cfa04f672fb2c49d14 +国兴卫视,P2p://generationnexxxt.com:19806/18aaee00d2af442ebb4592e15f7b2a20 +人间卫视,P2p://generationnexxxt.com:19806/66140e7f000b35888e9bf42339867058 +人间卫视,P2p://generationnexxxt.com:19806/6593ab070007d601991721de206b22e9 +Z频道,P2p://generationnexxxt.com:19806/8789d946039740bda334150ac3138166 +大爱台,P2p://generationnexxxt.com:19806/e89ec8c592484d88bc001e8d8a6c9e31 +大爱2台,P2p://generationnexxxt.com:19806/2036b83c58e344c782eb154b233c8c77 +好消息,P2p://generationnexxxt.com:19806/febf2282369d409d92d68514b72fc433 +好消息2台,P2p://generationnexxxt.com:19806/2b9f20946a6147dfba8f92373fbafee5 +佛卫慈悲,P2p://generationnexxxt.com:19806/be70c8b5b35c4551b5c7d3c905234e69 +MOMO综合,P2p://generationnexxxt.com:19806/659391fc000353d298b54dbe4b486dab +MOMO亲子,P2p://generationnexxxt.com:19806/2f2d9ad70ce7410aa99f2b9fa1753dd4 + +mitv港澳频道,#genre# +有线新闻台,mitv://generationnexxxt.com:19806/eb5a565eb80d40509f0a248018dfd337 +无线新闻台,mitv://generationnexxxt.com:19806/85a50e6db781406bacc41b10a75a70d5#mitv://147.135.39.171:9906/65e067d500043d6d2f5b0fce7ad17a25 +无线新闻备,mitv://147.135.39.171:9906/66141a3d000c7a12f94c49ad085f4fe9 +Now新闻台,mitv://generationnexxxt.com:19806/5c263253cf5241b1a155f0b1b85edea1#mitv://generationnexxxt.com:19806/d7a5bbf5664945cc8589b36b8434d68d +无线翡翠台,mitv://generationnexxxt.com:19806/660d193500015d6c736dc89372d11bb9#mitv://147.135.39.171:9906/659ad8a2000d34621fa351dc7e476ef7 +无线翡翠备,mitv://147.135.39.171:9906/661411cd000976fff92b536266ba3275 +有线综合台,mitv://generationnexxxt.com:19806/10c18372b612479086c1f259245543ff +有线赛马台,mitv://generationnexxxt.com:19806/140377dc9e0848678d614d451d69af9e +无线赛马台,mitv://generationnexxxt.com:19806/8bf8f53c61944785b13817297101af20 +无线Plus台,mitv://generationnexxxt.com:19806/6a623cf5c0bc4c96b8fd45a47af4a872#mitv://147.135.39.171:9906/65fd6048000be8b2a085bc4d061c504d +无线Popc台,mitv://generationnexxxt.com:19806/65b212f60006eae40fdd362b7ad67084#mitv://generationnexxxt.com:19806/acf61c067b48468dbdf3ae976c322d1a +无线星河台,mitv://generationnexxxt.com:19806/0c08d9d705a747908c23ba652726d777#mitv://generationnexxxt.com:19806/2dfd5ed435e841c1b6949346c2b58583 +无线娱乐台,mitv://generationnexxxt.com:19806/46bb3afe133d4cd8ac4b195c7f5f428c#mitv://generationnexxxt.com:19806/94c52f4f55a646f6825cff0b78316ae2 +无线明珠台,mitv://generationnexxxt.com:19806/9993262cc067418a983f0c7ec18adef9#mitv://generationnexxxt.com:19806/fd4c4431a2204a20b5c7c67698592912 +无线粤片台,mitv://generationnexxxt.com:19806/3a44c9c92439443494b8ecff6fdb2336 +无线亚洲台,mitv://generationnexxxt.com:19806/ee081a662356489d8b2170952ec91d24 +无线功夫台,mitv://generationnexxxt.com:19806/ef6373344abf4bedae4d49ac953c1742 +无线戏曲台,mitv://generationnexxxt.com:19806/4c3b3c3a6c8849c3aa0fc9938859e134 +无线千禧台,mitv://generationnexxxt.com:19806/1a5b04c67ece47bb87aa482e2c73138a +无线黄金台,mitv://generationnexxxt.com:19806/864714d6ebe847edaa948e9104107f12#mitv://generationnexxxt.com:19806/c2e1bcd2c5544341b2a0d7f7a53e0d98 +天映经典国,mitv://generationnexxxt.com:19806/3ac31fa9f30145b68f8469b00d91b200 +天映频道粤,mitv://generationnexxxt.com:19806/65e1b0870000c6d7c9dccba555040378 +美亚电影国,mitv://generationnexxxt.com:19806/a850e570b868424c94319a2652ca7c62 +美亚电影粤,mitv://generationnexxxt.com:19806/ee16565eb5fe46be8d22cbbde1fa9fae +ViuTV台粤,mitv://generationnexxxt.com:19806/976916e8baee45a89d5e023224f7ab2b +ViuTV台英,mitv://generationnexxxt.com:19806/ba99e7a39d9c4e74bacc5de14f58dcf6#mitv://generationnexxxt.com:19806/4117b4e170014c2fbce73011cfaf066a +now财经台,mitv://generationnexxxt.com:19806/88f95058c046453a973e2540701ccb4e#mitv://generationnexxxt.com:19806/3a492b41b36f45acab0b75396aadc32d +香港财经台,mitv://generationnexxxt.com:19806/6aa47af091b54d618d1513b1bc23b0b9#mitv://generationnexxxt.com:19806/f3cb31dde1e040a4a30f89e8f95beea7 +港台电视31,mitv://generationnexxxt.com:19806/e4b56cb972e940ee8be694602294d242 +港台电视32,mitv://generationnexxxt.com:19806/9c0a161f9c59476584fe4d8effc125b6 +凤凰中文台,mitv://generationnexxxt.com:19806/64e1ab2a000417167359b3ca0417008f#mitv://generationnexxxt.com:19806/65fd687c000dccf1362379174a9617fc +凤凰资讯台,mitv://generationnexxxt.com:19806/6684e9f6606f49fba9b6de846dbdcb64#mitv://generationnexxxt.com:19806/65fd6d04000e7c8036352c8637e97c89 +凤凰香港台,mitv://generationnexxxt.com:19806/8e396c3ec52f4eee9e5b7868042b1bf2 +澳门-MACAU,mitv://generationnexxxt.com:19806/f9ba8df6f9ed45789e882211735e6414#mitv://generationnexxxt.com:19806/ed4ff86efe2647dd8c6f6f91739dd9c9 +澳门莲花,mitv://generationnexxxt.com:19806/4c56fbe4e68541a9a759fa269574f98b#mitv://generationnexxxt.com:19806/35abc186b6194a4ca97a6d9f9d59e501 +Hands Up,mitv://generationnexxxt.com:19806/7a79a82b627a417f897895b4adf874aa +Thrill,mitv://generationnexxxt.com:19806/1c3c73215afd42558101c3ee65737202 +凤凰中文台,mitv://generationnexxxt.com:19806/64e1ab2a000417167359b3ca0417008f +凤凰资讯台,mitv://generationnexxxt.com:19806/6684e9f6606f49fba9b6de846dbdcb64 +凤凰香港台,mitv://generationnexxxt.com:19806/8e396c3ec52f4eee9e5b7868042b1bf2 +HKS卫视,http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8 +港台31,mitv://generationnexxxt.com:19806/e4b56cb972e940ee8be694602294d242 +港台32,mitv://generationnexxxt.com:19806/9c0a161f9c59476584fe4d8effc125b6 +港台33,https://rthktv33-live.akamaized.net/hls/live/2101641/RTHKTV33/stream03/streamPlaylist.m3u8 +港台34,https://rthktv34-live.akamaized.net/hls/live/2101642/RTHKTV34/stream02/streamPlaylist.m3u8 +港台35,https://rthktv35-live.akamaized.net/hls/live/2101643/RTHKTV35/stream02/streamPlaylist.m3u8 +HOY TV,mitv://generationnexxxt.com:19806/10c18372b612479086c1f259245543ff +J2,mitv://generationnexxxt.com:19806/6a623cf5c0bc4c96b8fd45a47af4a872 +无线财经体育资讯台,mitv://generationnexxxt.com:19806/8bcc654c89f74ebdb4e82062ef5f998c +ViuTVsix,mitv://generationnexxxt.com:19806/ba99e7a39d9c4e74bacc5de14f58dcf6 +ViuTV,mitv://generationnexxxt.com:19806/976916e8baee45a89d5e023224f7ab2b +TVB星河(粤),mitv://generationnexxxt.com:19806/0c08d9d705a747908c23ba652726d777 +澳门-MACAU,mitv://generationnexxxt.com:19806/f9ba8df6f9ed45789e882211735e6414 +澳门莲花,mitv://generationnexxxt.com:19806/4c56fbe4e68541a9a759fa269574f98b +now新闻台,mitv://generationnexxxt.com:19806/d7a5bbf5664945cc8589b36b8434d68d +HKC 18,mitv://generationnexxxt.com:19806/140377dc9e0848678d614d451d69af9e +戏曲台,mitv://generationnexxxt.com:19806/4c3b3c3a6c8849c3aa0fc9938859e134 +TVB娱乐新闻台,mitv://generationnexxxt.com:19806/46bb3afe133d4cd8ac4b195c7f5f428c +千禧经典台,mitv://generationnexxxt.com:19806/1a5b04c67ece47bb87aa482e2c73138a +Thrill,mitv://generationnexxxt.com:19806/1c3c73215afd42558101c3ee65737202 +明珠台,mitv://generationnexxxt.com:19806/9993262cc067418a983f0c7ec18adef9 +香港国际财经台,mitv://generationnexxxt.com:19806/6aa47af091b54d618d1513b1bc23b0b9 +18台,mitv://generationnexxxt.com:19806/8bf8f53c61944785b13817297101af20 +now财经台,mitv://generationnexxxt.com:19806/88f95058c046453a973e2540701ccb4e +美亚电影台(粤语),mitv://generationnexxxt.com:19806/ee16565eb5fe46be8d22cbbde1fa9fae +Hands Up,mitv://generationnexxxt.com:19806/7a79a82b627a417f897895b4adf874aa +粤语片台,mitv://generationnexxxt.com:19806/3a44c9c92439443494b8ecff6fdb2336 +亚洲剧台,mitv://generationnexxxt.com:19806/ee081a662356489d8b2170952ec91d24 +功夫台,mitv://generationnexxxt.com:19806/ef6373344abf4bedae4d49ac953c1742 +HOY资讯台,mitv://generationnexxxt.com:19806/eb5a565eb80d40509f0a248018dfd337 +黄金翡翠台,mitv://generationnexxxt.com:19806/864714d6ebe847edaa948e9104107f12 + +无线新闻台,mitv://147.135.39.171:9906/658f93d500090264f39e82304f2d4370 +无线新闻台,mitv://147.135.39.171:9906/659ad8a20009ddcb1fa351025e007328 +无线新闻台,mitv://generationnexxxt.com:19806/85a50e6db781406bacc41b10a75a70d5 +无线财经体育资讯台,mitv://generationnexxxt.com:19806/8bcc654c89f74ebdb4e82062ef5f998c +无线财经体育资讯台,mitv://generationnexxxt.com:19806/acf61c067b48468dbdf3ae976c322d1a +无线翡翠台,mitv://147.135.39.171:9906/659ad8a2000d34621fa351dc7e476ef7 +无线翡翠台,mitv://147.135.39.171:9906/661411cd000976fff92b536266ba32757 +无线翡翠台,mitv://generationnexxxt.com:19806/660d193500015d6c736dc89372d11bb9 +无线明珠台,mitv://generationnexxxt.com:19806/9993262cc067418a983f0c7ec18adef9 +无线明珠台,mitv://generationnexxxt.com:19806/85a50e6db781406bacc41b10a75a70d5 +无线J2,mitv://generationnexxxt.com:19806/6a623cf5c0bc4c96b8fd45a47af4a872 +无线J2,mitv://147.135.39.171:9906/65fd6048000be8b2a085bc4d061c504d +无线娱乐新闻台,mitv://generationnexxxt.com:19806/46bb3afe133d4cd8ac4b195c7f5f428c +无线娱乐新闻台,mitv://generationnexxxt.com:19806/94c52f4f55a646f6825cff0b78316ae2 +无线华丽台,mitv://generationnexxxt.com:19806/864714d6ebe847edaa948e9104107f12 +无线华丽台,mitv://generationnexxxt.com:19806/c2e1bcd2c5544341b2a0d7f7a53e0d98 +无线华丽台,mitv://generationnexxxt.com:19806/0485c5b3e68c43268b39c8e68b0e6244 +无线戏曲台,mitv://generationnexxxt.com:19806/4c3b3c3a6c8849c3aa0fc9938859e134 +无线千禧经典台,mitv://generationnexxxt.com:19806/1a5b04c67ece47bb87aa482e2c73138a +无线粤语片台,mitv://generationnexxxt.com:19806/3a44c9c92439443494b8ecff6fdb2336 +无线亚洲剧台,mitv://generationnexxxt.com:19806/ee081a662356489d8b2170952ec91d24 +NOW新闻台,mitv://generationnexxxt.com:19806/d7a5bbf5664945cc8589b36b8434d68d +NOW新闻台,mitv://generationnexxxt.com:19806/3a492b41b36f45acab0b75396aadc32d +NOW财经台,mitv://generationnexxxt.com:19806/88f95058c046453a973e2540701ccb4e +HKC 18,mitv://generationnexxxt.com:19806/140377dc9e0848678d614d451d69af9e +HOY 76,mitv://generationnexxxt.com:19806/10c18372b612479086c1f259245543ff +HOY 77,mitv://generationnexxxt.com:19806/eb5a565eb80d40509f0a248018dfd337 +RTHK 31,mitv://Generationnexxxt.com:19806/e4b56cb972e940ee8be694602294d242 +RTHK 32,mitv://generationnexxxt.com:19806/9c0a161f9c59476584fe4d8effc125b6 +ViuTV,mitv://generationnexxxt.com:19806/976916e8baee45a89d5e023224f7ab2b +ViuTV,http://mywlkj.ddns.net:754/dl/dl668/yximgs.php?id=13 +ViuTV 6,mitv://generationnexxxt.com:19806/ba99e7a39d9c4e74bacc5de14f58dcf6 +ViuTV 6,mitv://generationnexxxt.com:19806/4117b4e170014c2fbce73011cfaf066a +香港国际财经台,mitv://generationnexxxt.com:19806/6aa47af091b54d618d1513b1bc23b0b9 +香港国际财经台,mitv://generationnexxxt.com:19806/f3cb31dde1e040a4a30f89e8f95beea7 +星空卫视,mitv://generationnexxxt.com:19806/0b87528420394614b1016123ff4fda4c +澳门MACAU,mitv://generationnexxxt.com:19806/f9ba8df6f9ed45789e882211735e6414 +澳门MACAU,mitv://generationnexxxt.com:19806/ed4ff86efe2647dd8c6f6f91739dd9c9 + +无线新闻台,P2p://147.135.39.171:9906/658f93d500090264f39e82304f2d4370 +无线新闻台,P2p://147.135.39.171:9906/659ad8a20009ddcb1fa351025e007328 +无线新闻台,P2p://generationnexxxt.com:19806/85a50e6db781406bacc41b10a75a70d5 +无线财经体育资讯台,P2p://generationnexxxt.com:19806/8bcc654c89f74ebdb4e82062ef5f998c +无线财经体育资讯台,P2p://generationnexxxt.com:19806/acf61c067b48468dbdf3ae976c322d1a +无线翡翠台,P2p://147.135.39.171:9906/659ad8a2000d34621fa351dc7e476ef7 +无线翡翠台,P2p://147.135.39.171:9906/661411cd000976fff92b536266ba32757 +无线翡翠台,P2p://generationnexxxt.com:19806/660d193500015d6c736dc89372d11bb9 +无线明珠台,P2p://generationnexxxt.com:19806/9993262cc067418a983f0c7ec18adef9 +无线明珠台,P2p://generationnexxxt.com:19806/85a50e6db781406bacc41b10a75a70d5 +无线J2,P2p://generationnexxxt.com:19806/6a623cf5c0bc4c96b8fd45a47af4a872 +无线J2,P2p://147.135.39.171:9906/65fd6048000be8b2a085bc4d061c504d +无线娱乐新闻台,P2p://generationnexxxt.com:19806/46bb3afe133d4cd8ac4b195c7f5f428c +无线娱乐新闻台,P2p://generationnexxxt.com:19806/94c52f4f55a646f6825cff0b78316ae2 +无线华丽台,P2p://generationnexxxt.com:19806/864714d6ebe847edaa948e9104107f12 +无线华丽台,P2p://generationnexxxt.com:19806/c2e1bcd2c5544341b2a0d7f7a53e0d98 +无线华丽台,P2p://generationnexxxt.com:19806/0485c5b3e68c43268b39c8e68b0e6244 +无线戏曲台,P2p://generationnexxxt.com:19806/4c3b3c3a6c8849c3aa0fc9938859e134 +无线千禧经典台,P2p://generationnexxxt.com:19806/1a5b04c67ece47bb87aa482e2c73138a +无线粤语片台,P2p://generationnexxxt.com:19806/3a44c9c92439443494b8ecff6fdb2336 +无线亚洲剧台,P2p://generationnexxxt.com:19806/ee081a662356489d8b2170952ec91d24 +NOW新闻台,P2p://generationnexxxt.com:19806/d7a5bbf5664945cc8589b36b8434d68d +NOW新闻台,P2p://generationnexxxt.com:19806/3a492b41b36f45acab0b75396aadc32d +NOW财经台,P2p://generationnexxxt.com:19806/88f95058c046453a973e2540701ccb4e +HKC 18,P2p://generationnexxxt.com:19806/140377dc9e0848678d614d451d69af9e +HOY 76,P2p://generationnexxxt.com:19806/10c18372b612479086c1f259245543ff +HOY 77,P2p://generationnexxxt.com:19806/eb5a565eb80d40509f0a248018dfd337 +RTHK 31,P2p://Generationnexxxt.com:19806/e4b56cb972e940ee8be694602294d242 +RTHK 32,P2p://generationnexxxt.com:19806/9c0a161f9c59476584fe4d8effc125b6 +ViuTV,P2p://generationnexxxt.com:19806/976916e8baee45a89d5e023224f7ab2b +ViuTV,http://mywlkj.ddns.net:754/dl/dl668/yximgs.php?id=13 +ViuTV 6,P2p://generationnexxxt.com:19806/ba99e7a39d9c4e74bacc5de14f58dcf6 +ViuTV 6,P2p://generationnexxxt.com:19806/4117b4e170014c2fbce73011cfaf066a +香港国际财经台,P2p://generationnexxxt.com:19806/6aa47af091b54d618d1513b1bc23b0b9 +香港国际财经台,P2p://generationnexxxt.com:19806/f3cb31dde1e040a4a30f89e8f95beea7 +星空卫视,P2p://generationnexxxt.com:19806/0b87528420394614b1016123ff4fda4c +澳门MACAU,P2p://generationnexxxt.com:19806/f9ba8df6f9ed45789e882211735e6414 +澳门MACAU,P2p://generationnexxxt.com:19806/ed4ff86efe2647dd8c6f6f91739dd9c9 + +mtv海外华语,#genre# +Astro AEC,mitv://generationnexxxt.com:19806/0cd8ffd5742f43f2aba6b6bf8736641d +Astro AOD 311,mitv://generationnexxxt.com:19806/676d5767c17749f8950a81ed8681380a +Astro爱奇艺,mitv://generationnexxxt.com:19806/220100b4bf8a42b49b38d1152cf9ab84 +Astro欢喜台,mitv://generationnexxxt.com:19806/a2f732d447dc4c0b9e80417490de4e1d +Astro小太阳,mitv://generationnexxxt.com:19806/b9014d57594d4cfdb87848d4b2610506 +八度空间,mitv://generationnexxxt.com:19806/c1351c973d544fd9b9fcf34d36cc3ab1 +八度空间,mitv://generationnexxxt.com:19806/34bef24c069e40779fb4b4c827e0051f +新時代1(东部),mitv://generationnexxxt.com:19806/28d014f7982c4041ab7197218b9c1284 +新時代1(西部),mitv://generationnexxxt.com:19806/a3d06a9ecf30410582ad64ed15cdf6fd +新時代2,mitv://generationnexxxt.com:19806/65013e4c0002afeaeeb07d8a59ff6121 +城市电视,mitv://generationnexxxt.com:19806/a18fbea7eddd4079b3e2e684d19df5c4 + +Astro AEC,P2p://generationnexxxt.com:19806/0cd8ffd5742f43f2aba6b6bf8736641d +Astro AOD 311,P2p://generationnexxxt.com:19806/676d5767c17749f8950a81ed8681380a +Astro爱奇艺,P2p://generationnexxxt.com:19806/220100b4bf8a42b49b38d1152cf9ab84 +Astro欢喜台,P2p://generationnexxxt.com:19806/a2f732d447dc4c0b9e80417490de4e1d +Astro小太阳,P2p://generationnexxxt.com:19806/b9014d57594d4cfdb87848d4b2610506 +八度空间,P2p://generationnexxxt.com:19806/c1351c973d544fd9b9fcf34d36cc3ab1 +八度空间,P2p://generationnexxxt.com:19806/34bef24c069e40779fb4b4c827e0051f +新時代1(东部),P2p://generationnexxxt.com:19806/28d014f7982c4041ab7197218b9c1284 +新時代1(西部),P2p://generationnexxxt.com:19806/a3d06a9ecf30410582ad64ed15cdf6fd +新時代2,P2p://generationnexxxt.com:19806/65013e4c0002afeaeeb07d8a59ff6121 +城市电视,P2p://generationnexxxt.com:19806/a18fbea7eddd4079b3e2e684d19df5c4 + +mitv体育频道,#genre# +Arena Bola,mitv://generationnexxxt.com:19806/6597c3de0009a0efa91838f96fd623b1 +Astro Arena,mitv://generationnexxxt.com:19806/c046c74b43184a9bac5b0e402944aca5 +Astro Supersport,mitv://generationnexxxt.com:19806/8f8ad3ee6aa54ccbac64314553dfa1fa +Astro Supersport 2,mitv://generationnexxxt.com:19806/650d4fca00064e791dd4dbcd16fd08c0 +Astro Supersport 3,mitv://generationnexxxt.com:19806/5b9b9986c20244908be60c3f18a3e435 +Astro Supersport 4,mitv://generationnexxxt.com:19806/c7f1be20958243f68c943016c446501e +Astro Supersport 5,mitv://generationnexxxt.com:19806/d41f257d25e54a0aa09227bde87eccf5 +BeiN Sports,mitv://generationnexxxt.com:19806/eefa5931a750470d8a3267932e36c644 +BeiN Sports 2,mitv://generationnexxxt.com:19806/65619d35000372e967236fc35ab64b39 +BeiN Sports 3,mitv://generationnexxxt.com:19806/65a52dc1000d76fbdd7dd8ab186b4afd +ESPN,mitv://generationnexxxt.com:19806/2436baa9e481444fa785298d5931bdba +Eurosport HD,mitv://generationnexxxt.com:19806/65159769000b9a153e2ca23c14c042d2 +Fight Sports,mitv://generationnexxxt.com:19806/7375a5f151c047b294a8e8c6ddad178d +Golf Channel,mitv://generationnexxxt.com:19806/65619e930003f0fc6728c71226a25f2d +J Sports 2,mitv://generationnexxxt.com:19806/1dec0300cce54ba5853fd5aadc349595 +J Sports 3,mitv://generationnexxxt.com:19806/1a9fd30d67f8480490d1fe07440658b5 +J Sports 4,mitv://generationnexxxt.com:19806/f7915841f9c04692b3c336849b8ed00c +NBA,mitv://generationnexxxt.com:19806/65159b8e000aa81c3e3cd2861b6b31f1 +Sky Sports Arena,mitv://generationnexxxt.com:19806/65791ef8000e15953163ffb52b633954 +Sky Sports Cricket,mitv://generationnexxxt.com:19806/65791ef8000290523163fcb71a5c79e1 +Sky Sports F1,mitv://generationnexxxt.com:19806/65791ef90003eb94316400fd79094faa +Sky Sports Football,mitv://generationnexxxt.com:19806/65791ef900094e3c3164026476a47cd3 +Sky Sports Golf,mitv://generationnexxxt.com:19806/65791ef9000e6a67316403ad31ad3930 +Sky Sports Main Event,mitv://generationnexxxt.com:19806/65791ef800079cd23163fe0f44d92213 +Sky Sports Mix,mitv://generationnexxxt.com:19806/65791ef7000cb6683163fb6f54195e6f +Skynet Sports,mitv://generationnexxxt.com:19806/64f03b7d000cf732ac3d879228791c70 +Skynet Sports 2,mitv://generationnexxxt.com:19806/64f03b7e0004ca5cac3d89676c3c51df +Skynet Sports 5,mitv://generationnexxxt.com:19806/64f03b7f0003688dac3d8cf1521c6e9f +Skynet Sports 6,mitv://generationnexxxt.com:19806/64f03b7e000b23c7ac3d8b0d775b55a1 +SPOTV,mitv://generationnexxxt.com:19806/60ad67b765414b32882a24ce6c63808a +WWE,mitv://generationnexxxt.com:19806/32e0838eeab84b3a96297dcceca27f5a + +魅力足球,mitv://generationnexxxt.com:19806/ca7a1a18635e453a9a77e5fd5d425e89 +五星体育,mitv://generationnexxxt.com:19806/d75057c993f84e7c86f94e8f1e56ad24 +广东体育,mitv://generationnexxxt.com:19806/bb744a1252da46a6a2ae5546f4da7c72 +DAZN 1台,mitv://generationnexxxt.com:19806/fcfde35352d5464f9ed1c711ef2d05b1 +DAZN 2台,mitv://generationnexxxt.com:19806/057061c0da744aa7b035169dba5ebe2a +爱尔达体育1台,mitv://generationnexxxt.com:19806/38729b9421044022a4d81ee0fe899dcd +爱尔达体育1台,mitv://generationnexxxt.com:19806/68e521d35c0247ddbc5073dee98245a3 +爱尔达体育1台,mitv://generationnexxxt.com:19806/1180278580d04cb490450ec59b4edc6b +爱尔达体育2台,mitv://generationnexxxt.com:19806/d1f16ee235314a0fbc33742ab7af534b +爱尔达体育2台,mitv://generationnexxxt.com:19806/b63a56b3be724653802408c3b2044490 +爱尔达体育3台,mitv://generationnexxxt.com:19806/c34b66fc16df4781baceff8a2f6430e4 +爱尔达体育3台,mitv://generationnexxxt.com:19806/3ebc6b89559c44dca30c4c259a5646b9 +爱尔达体育4台,mitv://generationnexxxt.com:19806/df4f198dbe6347e1a084c79d208f227d +爱尔达体育4台,mitv://generationnexxxt.com:19806/797d51a6805c4a5fac1b71a678228513 +博斯高球台,mitv://generationnexxxt.com:19806/1938e9044d66468a9f38456fc383259f +博斯高球台,mitv://generationnexxxt.com:19806/6ff0b79453d2430986930b7c84a286df +博斯高球2台,mitv://generationnexxxt.com:19806/65e1b654000ce227c9f3778a2b254b95 +博斯高球2台,mitv://generationnexxxt.com:19806/8afa52d0fe0047f8a6d7e51f46697f93 +博斯网球台,mitv://generationnexxxt.com:19806/6895bdc150744da98afe23ce77e32e51 +博斯网球台,mitv://generationnexxxt.com:19806/7fb5b66ce38747de84be865952153959 +博斯运动台,mitv://generationnexxxt.com:19806/1fded122b4b74670b6012a8068e44766 +博斯运动台,mitv://generationnexxxt.com:19806/6293839c167e4b6393c745db434b2465 +博斯运动2台,mitv://generationnexxxt.com:19806/65e1b65400075c3dc9f3762355b36cc1 +博斯运动2台,mitv://generationnexxxt.com:19806/cbd52c51fbab49ae9b3bc0da9137f681 +博斯无限台,mitv://generationnexxxt.com:19806/f2973cfa7c2045e6b8a184f1bf18af7c +博斯无限台,mitv://generationnexxxt.com:19806/d0a027824de144fd88aef46f0fba7c99 +博斯无限2台,mitv://generationnexxxt.com:19806/65e1b653000eb97ec9f3741f6f4318a0 +博斯无限2台,mitv://generationnexxxt.com:19806/143f1c23ac834d28a5296d61fed9250c +博斯魅力台,mitv://generationnexxxt.com:19806/65e1b6530009723ec9f372c730a82585 +博斯魅力台,mitv://generationnexxxt.com:19806/c585ebfbfc7c4260a8d9556b5409faf0 +纬来体育,mitv://generationnexxxt.com:19806/79090c69d43040148deaa21d5e26c32a +智林体育,mitv://generationnexxxt.com:19806/931c171e2f774f7aa1a92e97f5098c9f +TRACE Sport Stars,mitv://generationnexxxt.com:19806/b0cb233f10e84f29910fa38e15a07035 + +Arena Bola,P2p://generationnexxxt.com:19806/6597c3de0009a0efa91838f96fd623b1 +Astro Arena,mitv://generationnexxxt.com:19806/c046c74b43184a9bac5b0e402944aca5 +Astro Supersport,P2p://generationnexxxt.com:19806/8f8ad3ee6aa54ccbac64314553dfa1fa +Astro Supersport 2,P2p://generationnexxxt.com:19806/650d4fca00064e791dd4dbcd16fd08c0 +Astro Supersport 3,P2p://generationnexxxt.com:19806/5b9b9986c20244908be60c3f18a3e435 +Astro Supersport 4,P2p://generationnexxxt.com:19806/c7f1be20958243f68c943016c446501e +Astro Supersport 5,P2p://generationnexxxt.com:19806/d41f257d25e54a0aa09227bde87eccf5 +BeiN Sports,P2p://generationnexxxt.com:19806/eefa5931a750470d8a3267932e36c644 +BeiN Sports 2,P2p://generationnexxxt.com:19806/65619d35000372e967236fc35ab64b39 +BeiN Sports 3,P2p://generationnexxxt.com:19806/65a52dc1000d76fbdd7dd8ab186b4afd +ESPN,P2p://generationnexxxt.com:19806/2436baa9e481444fa785298d5931bdba +Eurosport HD,P2p://generationnexxxt.com:19806/65159769000b9a153e2ca23c14c042d2 +Fight Sports,P2p://generationnexxxt.com:19806/7375a5f151c047b294a8e8c6ddad178d +Golf Channel,P2p://generationnexxxt.com:19806/65619e930003f0fc6728c71226a25f2d +J Sports 2,P2p://generationnexxxt.com:19806/1dec0300cce54ba5853fd5aadc349595 +J Sports 3,P2p://generationnexxxt.com:19806/1a9fd30d67f8480490d1fe07440658b5 +J Sports 4,P2p://generationnexxxt.com:19806/f7915841f9c04692b3c336849b8ed00c +NBA,P2p://generationnexxxt.com:19806/65159b8e000aa81c3e3cd2861b6b31f1 +Sky Sports Arena,P2p://generationnexxxt.com:19806/65791ef8000e15953163ffb52b633954 +Sky Sports Cricket,P2p://generationnexxxt.com:19806/65791ef8000290523163fcb71a5c79e1 +Sky Sports F1,P2p://generationnexxxt.com:19806/65791ef90003eb94316400fd79094faa +Sky Sports Football,P2p://generationnexxxt.com:19806/65791ef900094e3c3164026476a47cd3 +Sky Sports Golf,P2p://generationnexxxt.com:19806/65791ef9000e6a67316403ad31ad3930 +Sky Sports Main Event,P2p://generationnexxxt.com:19806/65791ef800079cd23163fe0f44d92213 +Sky Sports Mix,P2p://generationnexxxt.com:19806/65791ef7000cb6683163fb6f54195e6f +Skynet Sports,P2p://generationnexxxt.com:19806/64f03b7d000cf732ac3d879228791c70 +Skynet Sports 2,P2p://generationnexxxt.com:19806/64f03b7e0004ca5cac3d89676c3c51df +Skynet Sports 5,P2p://generationnexxxt.com:19806/64f03b7f0003688dac3d8cf1521c6e9f +Skynet Sports 6,P2p://generationnexxxt.com:19806/64f03b7e000b23c7ac3d8b0d775b55a1 +SPOTV,P2p://generationnexxxt.com:19806/60ad67b765414b32882a24ce6c63808a +WWE,P2p://generationnexxxt.com:19806/32e0838eeab84b3a96297dcceca27f5a + +魅力足球,P2p://generationnexxxt.com:19806/ca7a1a18635e453a9a77e5fd5d425e89 +五星体育,P2p://generationnexxxt.com:19806/d75057c993f84e7c86f94e8f1e56ad24 +广东体育,P2p://generationnexxxt.com:19806/bb744a1252da46a6a2ae5546f4da7c72 +DAZN 1台,P2p://generationnexxxt.com:19806/fcfde35352d5464f9ed1c711ef2d05b1 +DAZN 2台,P2p://generationnexxxt.com:19806/057061c0da744aa7b035169dba5ebe2a +爱尔达体育1台,P2p://generationnexxxt.com:19806/38729b9421044022a4d81ee0fe899dcd +爱尔达体育1台,P2p://generationnexxxt.com:19806/68e521d35c0247ddbc5073dee98245a3 +爱尔达体育1台,P2p://generationnexxxt.com:19806/1180278580d04cb490450ec59b4edc6b +爱尔达体育2台,P2p://generationnexxxt.com:19806/d1f16ee235314a0fbc33742ab7af534b +爱尔达体育2台,P2p://generationnexxxt.com:19806/b63a56b3be724653802408c3b2044490 +爱尔达体育3台,P2p://generationnexxxt.com:19806/c34b66fc16df4781baceff8a2f6430e4 +爱尔达体育3台,P2p://generationnexxxt.com:19806/3ebc6b89559c44dca30c4c259a5646b9 +爱尔达体育4台,P2p://generationnexxxt.com:19806/df4f198dbe6347e1a084c79d208f227d +爱尔达体育4台,P2p://generationnexxxt.com:19806/797d51a6805c4a5fac1b71a678228513 +博斯高球台,P2p://generationnexxxt.com:19806/1938e9044d66468a9f38456fc383259f +博斯高球台,P2p://generationnexxxt.com:19806/6ff0b79453d2430986930b7c84a286df +博斯高球2台,P2p://generationnexxxt.com:19806/65e1b654000ce227c9f3778a2b254b95 +博斯高球2台,P2p://generationnexxxt.com:19806/8afa52d0fe0047f8a6d7e51f46697f93 +博斯网球台,P2p://generationnexxxt.com:19806/6895bdc150744da98afe23ce77e32e51 +博斯网球台,P2p://generationnexxxt.com:19806/7fb5b66ce38747de84be865952153959 +博斯运动台,P2p://generationnexxxt.com:19806/1fded122b4b74670b6012a8068e44766 +博斯运动台,P2p://generationnexxxt.com:19806/6293839c167e4b6393c745db434b2465 +博斯运动2台,P2p://generationnexxxt.com:19806/65e1b65400075c3dc9f3762355b36cc1 +博斯运动2台,P2p://generationnexxxt.com:19806/cbd52c51fbab49ae9b3bc0da9137f681 +博斯无限台,P2p://generationnexxxt.com:19806/f2973cfa7c2045e6b8a184f1bf18af7c +博斯无限台,P2p://generationnexxxt.com:19806/d0a027824de144fd88aef46f0fba7c99 +博斯无限2台,P2p://generationnexxxt.com:19806/65e1b653000eb97ec9f3741f6f4318a0 +博斯无限2台,P2p://generationnexxxt.com:19806/143f1c23ac834d28a5296d61fed9250c +博斯魅力台,P2p://generationnexxxt.com:19806/65e1b6530009723ec9f372c730a82585 +博斯魅力台,P2p://generationnexxxt.com:19806/c585ebfbfc7c4260a8d9556b5409faf0 +纬来体育,P2p://generationnexxxt.com:19806/79090c69d43040148deaa21d5e26c32a +智林体育,P2p://generationnexxxt.com:19806/931c171e2f774f7aa1a92e97f5098c9f +TRACE Sport Stars,P2p://generationnexxxt.com:19806/b0cb233f10e84f29910fa38e15a07035 + +mitv影视频道,#genre# +amc电影,mitv://generationnexxxt.com:19806/24ce0147e36a438eab843a3168cea3bc +amc电影,mitv://generationnexxxt.com:19806/3dc5467282034921b7124f4be60f4782 +AXN,mitv://generationnexxxt.com:19806/893f7dec641a42458f47ccfbd93525ba +BOO,mitv://generationnexxxt.com:19806/72791d5b2d0847bdbd28aaee41af5537 +Cinemax,mitv://generationnexxxt.com:19806/fd7fd316ff5f4ae0a79d274a86483a4f +Cinemax,mitv://generationnexxxt.com:19806/adf42efd52864d6e9454132f0d849fb7 +Cinema World,mitv://generationnexxxt.com:19806/e262f40881b2461f9a270b4d9d0b54c3 +Cinema World,mitv://generationnexxxt.com:19806/c6efdcd038204b4781cafc2273b4adb3 +HBO高清频道,mitv://generationnexxxt.com:19806/37f11d742fee447ab15f07db28095bd6 +HBO强档巨献,mitv://generationnexxxt.com:19806/85cdd046958e48a794ff6f2d26b8ceba +HBO强档巨献,mitv://generationnexxxt.com:19806/563a5981b8ad4df085b59ce98bbecb95 +HBO原创巨献,mitv://generationnexxxt.com:19806/bd0a33ff8b6f4fe9ba7791ad73c6c16e +HBO原创巨献,mitv://generationnexxxt.com:19806/6cf195d6fb5a4f9bb6fd98cf97af421b +HBO家庭频道,mitv://generationnexxxt.com:19806/924dad4bd6604751ba4c4ae69781784b +HBO家庭频道,mitv://generationnexxxt.com:19806/8a0208ebdfa04b5eab112f0c8b01719c +Hits,mitv://generationnexxxt.com:19806/a65416c2039f4644aeef10da853fb928 +Star Movies,mitv://generationnexxxt.com:19806/cdbfcfca93f846c7bcc30d0fd108923f +tvN,mitv://generationnexxxt.com:19806/5653c9fb655842ee99b4590ff903efe7 +Warner TV,mitv://generationnexxxt.com:19806/f613ad7c2e684a3599566ad2405d9c6e +Warner TV,mitv://generationnexxxt.com:19806/cd2062a6c5a94d548f3516d96e23deec +好莱坞电影,mitv://generationnexxxt.com:19806/9862f4958472458ca2ebc718bb92a5c6 +壹电影,mitv://generationnexxxt.com:19806/1be1329b6d124745a87a16de445d2352 +美亚电影,mitv://generationnexxxt.com:19806/a850e570b868424c94319a2652ca7c62 +东森电影,mitv://generationnexxxt.com:19806/08435f286ac744a0942899c551209779 +东森洋片,mitv://generationnexxxt.com:19806/5e8420f5477344b9b7b39d9e96162ce1 +东森戏剧,mitv://generationnexxxt.com:19806/4fae332a68a04f3fa77a158ac1fa4bce +东森戏剧,mitv://generationnexxxt.com:19806/8e23c200926a4eaaa00043b39dca9075 +八大戏剧,mitv://generationnexxxt.com:19806/4eec82bd1e634ceab82b90e395116c83 +龙华电影,mitv://generationnexxxt.com:19806/1df6f5f0993a46faa17f676518654709 +龙华偶像,mitv://generationnexxxt.com:19806/5b720b1e1b404f129e7009363d3035f8 +龙华戏剧,mitv://generationnexxxt.com:19806/5d4f0bd2b18b4a588a0ca733569b18dd +龙祥电影,mitv://generationnexxxt.com:19806/78502c9b515845a7baca6a3a6ea88b8a +纬来电影,mitv://generationnexxxt.com:19806/429796f5f00946fa933e400729286c7e +纬来电影,mitv://generationnexxxt.com:19806/7ab30b79b011427287733d8ba51333e8 +纬来戏剧,mitv://generationnexxxt.com:19806/69036778f8fc40729301e9e88aeee556 +三立戏剧,mitv://generationnexxxt.com:19806/7a5b874b630d457bb5997a2fe4690550 +靖天电影,mitv://generationnexxxt.com:19806/d8c581e0e1a24823a3d2110e3584ef8b +靖天映画,mitv://generationnexxxt.com:19806/b723859f3ed94e5ba712148b209eefd0 +靖天戏剧,mitv://generationnexxxt.com:19806/1282202787324223b35e3c84d9e673c6 +靖洋戏剧,mitv://generationnexxxt.com:19806/84a559f1b4884854be933d5d4fc0d4a6 +采昌影剧,mitv://generationnexxxt.com:19806/a0d691053f9b4876ab2b509a62296911 +亚洲剧台,mitv://generationnexxxt.com:19806/ee081a662356489d8b2170952ec91d24 +爱尔达影剧,mitv://generationnexxxt.com:19806/65b2176e0008ea530feeab784c543898 +爱尔达影剧,mitv://generationnexxxt.com:19806/932d4522f2294c6a926b7ab8027c269f +EYETV戏剧,mitv://generationnexxxt.com:19806/2831986ed4b448c9b626788fbd3f2f89 +影迷数位电影,mitv://generationnexxxt.com:19806/381a31aedcd2452c9be9582fc5a8ac51 +影迷数位电影,mitv://generationnexxxt.com:19806/bc069c037478448a9e41dbc3e1d5d0f6 +CatchPlay电影,mitv://generationnexxxt.com:19806/2dccaec60f0e418d82d2d0bb09f0c4a8 +霹雳台湾台,mitv://generationnexxxt.com:19806/c72cf3cb004849c082422b8e0fa31067 +霹雳台湾台,mitv://generationnexxxt.com:19806/dcdf778fe9ca4184ad6af3a911765cf0 + +天映频道,mitv://generationnexxxt.com:19806/f7581adcfa1e4eaa88b4d1206f3abe61 +天映经典,mitv://generationnexxxt.com:19806/3ac31fa9f30145b68f8469b00d91b200 +澳门莲花,mitv://generationnexxxt.com:19806/4c56fbe4e68541a9a759fa269574f98b +澳门莲花,mitv://generationnexxxt.com:19806/35abc186b6194a4ca97a6d9f9d59e501 +私人影院,mitv://generationnexxxt.com:19806/3cfadd5e9af14d6db652b3c23acd7a7d +卫视电影,mitv://generationnexxxt.com:19806/f5f1de75dbbf48e2a21a498977ffb8e4 +星卫电影,mitv://generationnexxxt.com:19806/832bfeb4b3b84dd2a7428f9db69504eb +亚洲武侠频道,mitv://generationnexxxt.com:19806/ef6373344abf4bedae4d49ac953c1742 +亚洲武侠频道,mitv://generationnexxxt.com:19806/ef6373344abf4bedae4d49ac953c1742 +Thrill恐怖电影,mitv://generationnexxxt.com:19806/1c3c73215afd42558101c3ee65737202 + +CHC动作电影,mitv://generationnexxxt.com:19806/1b4ebad47ed94c6291646a4a5d1ff3b6 +CHC影迷电影,mitv://generationnexxxt.com:19806/02385419696a411db959037c2190cf11 +CHC家庭影院,mitv://generationnexxxt.com:19806/28fb3856055c452db8f17441c99f21cf +广东影视,mitv://generationnexxxt.com:19806/f2dbc62d3b0b4af3ac2420174eadf202 + +Animax,mitv://generationnexxxt.com:19806/22f75ace87a545aab39a2e4cd244bbad +Animax,mitv://generationnexxxt.com:19806/9a6969de27b145dc972e19d71c1a8932 +CN卡通频道,mitv://generationnexxxt.com:19806/f4dd909eedc64e6b9736e248aedf6d61 +Nick Jr.,mitv://generationnexxxt.com:19806/879f28be19bc47df84ad3d5470be58d0 +Nick Jr.,mitv://generationnexxxt.com:19806/acebbded37714fa4a5554c025873a92c +i-Fun动漫,mitv://generationnexxxt.com:19806/91a0e3fa1a714dd7b7cf55343052cd4f +i-Fun动漫,mitv://generationnexxxt.com:19806/a215407035a548a7bd01ec29a94e5ed2 +靖洋卡通,mitv://generationnexxxt.com:19806/1279fb2d1ae14676a31b2e5b38a2cd57 +靖天卡通,mitv://generationnexxxt.com:19806/0e27e5f319264b609ec810e126edf969 + +amc电影,P2p://generationnexxxt.com:19806/24ce0147e36a438eab843a3168cea3bc +amc电影,P2p://generationnexxxt.com:19806/3dc5467282034921b7124f4be60f4782 +AXN,P2p://generationnexxxt.com:19806/893f7dec641a42458f47ccfbd93525ba +BOO,P2p://generationnexxxt.com:19806/72791d5b2d0847bdbd28aaee41af5537 +Cinemax,P2p://generationnexxxt.com:19806/fd7fd316ff5f4ae0a79d274a86483a4f +Cinemax,P2p://generationnexxxt.com:19806/adf42efd52864d6e9454132f0d849fb7 +Cinema World,P2p://generationnexxxt.com:19806/e262f40881b2461f9a270b4d9d0b54c3 +Cinema World,P2p://generationnexxxt.com:19806/c6efdcd038204b4781cafc2273b4adb3 +HBO高清频道,P2p://generationnexxxt.com:19806/37f11d742fee447ab15f07db28095bd6 +HBO强档巨献,P2p://generationnexxxt.com:19806/85cdd046958e48a794ff6f2d26b8ceba +HBO强档巨献,P2p://generationnexxxt.com:19806/563a5981b8ad4df085b59ce98bbecb95 +HBO原创巨献,P2p://generationnexxxt.com:19806/bd0a33ff8b6f4fe9ba7791ad73c6c16e +HBO原创巨献,P2p://generationnexxxt.com:19806/6cf195d6fb5a4f9bb6fd98cf97af421b +HBO家庭频道,P2p://generationnexxxt.com:19806/924dad4bd6604751ba4c4ae69781784b +HBO家庭频道,P2p://generationnexxxt.com:19806/8a0208ebdfa04b5eab112f0c8b01719c +Hits,P2p://generationnexxxt.com:19806/a65416c2039f4644aeef10da853fb928 +Star Movies,P2p://generationnexxxt.com:19806/cdbfcfca93f846c7bcc30d0fd108923f +tvN,P2p://generationnexxxt.com:19806/5653c9fb655842ee99b4590ff903efe7 +Warner TV,P2p://generationnexxxt.com:19806/f613ad7c2e684a3599566ad2405d9c6e +Warner TV,P2p://generationnexxxt.com:19806/cd2062a6c5a94d548f3516d96e23deec +好莱坞电影,P2p://generationnexxxt.com:19806/9862f4958472458ca2ebc718bb92a5c6 +壹电影,P2p://generationnexxxt.com:19806/1be1329b6d124745a87a16de445d2352 +美亚电影,P2p://generationnexxxt.com:19806/a850e570b868424c94319a2652ca7c62 +东森电影,P2p://generationnexxxt.com:19806/08435f286ac744a0942899c551209779 +东森洋片,P2p://generationnexxxt.com:19806/5e8420f5477344b9b7b39d9e96162ce1 +东森戏剧,P2p://generationnexxxt.com:19806/4fae332a68a04f3fa77a158ac1fa4bce +东森戏剧,P2p://generationnexxxt.com:19806/8e23c200926a4eaaa00043b39dca9075 +八大戏剧,P2p://generationnexxxt.com:19806/4eec82bd1e634ceab82b90e395116c83 +龙华电影,P2p://generationnexxxt.com:19806/1df6f5f0993a46faa17f676518654709 +龙华偶像,P2p://generationnexxxt.com:19806/5b720b1e1b404f129e7009363d3035f8 +龙华戏剧,P2p://generationnexxxt.com:19806/5d4f0bd2b18b4a588a0ca733569b18dd +龙祥电影,P2p://generationnexxxt.com:19806/78502c9b515845a7baca6a3a6ea88b8a +纬来电影,P2p://generationnexxxt.com:19806/429796f5f00946fa933e400729286c7e +纬来电影,P2p://generationnexxxt.com:19806/7ab30b79b011427287733d8ba51333e8 +纬来戏剧,P2p://generationnexxxt.com:19806/69036778f8fc40729301e9e88aeee556 +三立戏剧,P2p://generationnexxxt.com:19806/7a5b874b630d457bb5997a2fe4690550 +靖天电影,P2p://generationnexxxt.com:19806/d8c581e0e1a24823a3d2110e3584ef8b +靖天映画,P2p://generationnexxxt.com:19806/b723859f3ed94e5ba712148b209eefd0 +靖天戏剧,P2p://generationnexxxt.com:19806/1282202787324223b35e3c84d9e673c6 +靖洋戏剧,P2p://generationnexxxt.com:19806/84a559f1b4884854be933d5d4fc0d4a6 +采昌影剧,P2p://generationnexxxt.com:19806/a0d691053f9b4876ab2b509a62296911 +亚洲剧台,P2p://generationnexxxt.com:19806/ee081a662356489d8b2170952ec91d24 +爱尔达影剧,P2p://generationnexxxt.com:19806/65b2176e0008ea530feeab784c543898 +爱尔达影剧,P2p://generationnexxxt.com:19806/932d4522f2294c6a926b7ab8027c269f +EYETV戏剧,P2p://generationnexxxt.com:19806/2831986ed4b448c9b626788fbd3f2f89 +影迷数位电影,P2p://generationnexxxt.com:19806/381a31aedcd2452c9be9582fc5a8ac51 +影迷数位电影,P2p://generationnexxxt.com:19806/bc069c037478448a9e41dbc3e1d5d0f6 +CatchPlay电影,P2p://generationnexxxt.com:19806/2dccaec60f0e418d82d2d0bb09f0c4a8 +霹雳台湾台,P2p://generationnexxxt.com:19806/c72cf3cb004849c082422b8e0fa31067 +霹雳台湾台,P2p://generationnexxxt.com:19806/dcdf778fe9ca4184ad6af3a911765cf0 + +天映频道,P2p://generationnexxxt.com:19806/f7581adcfa1e4eaa88b4d1206f3abe61 +天映经典,P2p://generationnexxxt.com:19806/3ac31fa9f30145b68f8469b00d91b200 +澳门莲花,P2p://generationnexxxt.com:19806/4c56fbe4e68541a9a759fa269574f98b +澳门莲花,P2p://generationnexxxt.com:19806/35abc186b6194a4ca97a6d9f9d59e501 +私人影院,P2p://generationnexxxt.com:19806/3cfadd5e9af14d6db652b3c23acd7a7d +卫视电影,P2p://generationnexxxt.com:19806/f5f1de75dbbf48e2a21a498977ffb8e4 +星卫电影,P2p://generationnexxxt.com:19806/832bfeb4b3b84dd2a7428f9db69504eb +亚洲武侠频道,P2p://generationnexxxt.com:19806/ef6373344abf4bedae4d49ac953c1742 +亚洲武侠频道,P2p://generationnexxxt.com:19806/ef6373344abf4bedae4d49ac953c1742 +Thrill恐怖电影,P2p://generationnexxxt.com:19806/1c3c73215afd42558101c3ee65737202 + +CHC动作电影,P2p://generationnexxxt.com:19806/1b4ebad47ed94c6291646a4a5d1ff3b6 +CHC影迷电影,P2p://generationnexxxt.com:19806/02385419696a411db959037c2190cf11 +CHC家庭影院,P2p://generationnexxxt.com:19806/28fb3856055c452db8f17441c99f21cf +广东影视,P2p://generationnexxxt.com:19806/f2dbc62d3b0b4af3ac2420174eadf202 + +Animax,P2p://generationnexxxt.com:19806/22f75ace87a545aab39a2e4cd244bbad +Animax,P2p://generationnexxxt.com:19806/9a6969de27b145dc972e19d71c1a8932 +CN卡通频道,P2p://generationnexxxt.com:19806/f4dd909eedc64e6b9736e248aedf6d61 +Nick Jr.,P2p://generationnexxxt.com:19806/879f28be19bc47df84ad3d5470be58d0 +Nick Jr.,P2p://generationnexxxt.com:19806/acebbded37714fa4a5554c025873a92c +i-Fun动漫,P2p://generationnexxxt.com:19806/91a0e3fa1a714dd7b7cf55343052cd4f +i-Fun动漫,P2p://generationnexxxt.com:19806/a215407035a548a7bd01ec29a94e5ed2 +靖洋卡通,P2p://generationnexxxt.com:19806/1279fb2d1ae14676a31b2e5b38a2cd57 +靖天卡通,P2p://generationnexxxt.com:19806/0e27e5f319264b609ec810e126edf969 + +mitv娱乐频道,#genre# +ChannelV,mitv://generationnexxxt.com:19806/65938874000d6c7c9890150e746d4c5b +Classica古典乐,mitv://generationnexxxt.com:19806/133be9054bcd4fa68d2e34205004a51a +Hands Up,mitv://generationnexxxt.com:19806/7a79a82b627a417f897895b4adf874aa +KIX,mitv://generationnexxxt.com:19806/3f7be3ad31504c9fa358e3fe583fac0a +Mezzo Live,mitv://generationnexxxt.com:19806/1c1e90cd01934a5f917ec4fad5c97665 +MTV,mitv://generationnexxxt.com:19806/eb5ba5262e2e4779a1418c78d14ad1e5 +ROCK Extreme,mitv://generationnexxxt.com:19806/fc56480dab3541a6a99d66c3d2048526 +Smart知识台,mitv://generationnexxxt.com:19806/65939c760002de7398de3a2e3f1b051b +Star World,mitv://generationnexxxt.com:19806/e60c9c99922d4fed8cfb3a8333f2d360 +Tech Storm,mitv://generationnexxxt.com:19806/994876c6aadc4234ba73441f18d36602 +韩国娱乐,mitv://generationnexxxt.com:19806/80d680dc15ec44bea9c3a3160ecdcb14 + +ChannelV,P2p://generationnexxxt.com:19806/65938874000d6c7c9890150e746d4c5b +Classica古典乐,P2p://generationnexxxt.com:19806/133be9054bcd4fa68d2e34205004a51a +Hands Up,P2p://generationnexxxt.com:19806/7a79a82b627a417f897895b4adf874aa +KIX,P2p://generationnexxxt.com:19806/3f7be3ad31504c9fa358e3fe583fac0a +Mezzo Live,P2p://generationnexxxt.com:19806/1c1e90cd01934a5f917ec4fad5c97665 +MTV,P2p://generationnexxxt.com:19806/eb5ba5262e2e4779a1418c78d14ad1e5 +ROCK Extreme,P2p://generationnexxxt.com:19806/fc56480dab3541a6a99d66c3d2048526 +Smart知识台,P2p://generationnexxxt.com:19806/65939c760002de7398de3a2e3f1b051b +Star World,P2p://generationnexxxt.com:19806/e60c9c99922d4fed8cfb3a8333f2d360 +Tech Storm,P2p://generationnexxxt.com:19806/994876c6aadc4234ba73441f18d36602 +韩国娱乐,P2p://generationnexxxt.com:19806/80d680dc15ec44bea9c3a3160ecdcb14 + diff --git a/drpy_t3/lives/杭州华数.m3u b/drpy_t3/lives/杭州华数.m3u new file mode 100644 index 0000000..5d3aeb1 --- /dev/null +++ b/drpy_t3/lives/杭州华数.m3u @@ -0,0 +1,156 @@ +#EXTM3U +#EXT-X-APP APTV +#EXT-X-APTV-TYPE blank + +#EXTINF:-1 group-title="未分类",CCTV1综合 +http://125.210.150.58:9090/live/hzgq-cctv1gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV2财经 +http://125.210.150.58:9090/live/hzgq-cctv2gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV3综艺 +http://125.210.150.58:9090/live/hzgq-cctv3gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV4中文国际 +http://125.210.150.58:9090/live/hzgq-cctv4gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV5体育 +http://125.210.150.58:9090/live/hzgq-cctv5gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV5+体育赛事 +http://125.210.150.58:9090/live/hzgq-cctvzhgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV6电影 +http://125.210.150.58:9090/live/hzgq-cctv6gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV7国防军事 +http://125.210.150.58:9090/live/hzgq-cctv7gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV8电视剧 +http://125.210.150.58:9090/live/hzgq-cctv8gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV9纪录 +http://125.210.150.58:9090/live/hzgq-cctvjlgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV10科教 +http://125.210.150.58:9090/live/hzgq-cctv10gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV11戏曲 +http://125.210.150.58:9090/live/hszx-cctv11-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV12社会与法 +http://125.210.150.58:9090/live/hzgq-cctv12gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV13新闻 +http://125.210.150.58:9090/live/hzgq-cctvnewsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV14少儿 +http://125.210.150.58:9090/live/hzgq-cctvsegq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV15音乐 +http://125.210.150.58:9090/live/hzgq-cctvmusicgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV16奥林匹克 +http://125.210.150.58:9090/live/hzgq-cctv16gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CCTV17农业农村 +http://125.210.150.58:9090/live/hzgq-cctv17gq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CGTN +http://125.210.150.58:9090/live/hszx-cctvgj-h264.m3u8 +#EXTINF:-1 group-title="未分类",重温经典 +http://125.210.150.58:9090/live/hzgq-cwjdgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",CETV4中教4台 +http://125.210.150.58:9090/live/hszx-CETV-4-h264.m3u8 +#EXTINF:-1 group-title="未分类",北京卫视 +http://125.210.150.58:9090/live/hzgq-bjgqws-h264.m3u8 +#EXTINF:-1 group-title="未分类",东方卫视 +http://125.210.150.58:9090/live/hzgq-dftvgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",天津卫视 +http://125.210.150.58:9090/live/hzgq-tjwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",重庆卫视 +http://125.210.150.58:9090/live/hzgq-cqwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",黑龙江卫视 +http://125.210.150.58:9090/live/hzgq-hljwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",吉林卫视 +http://125.210.150.58:9090/live/hzgq-jlwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",辽宁卫视 +http://125.210.150.58:9090/live/hzgq-lnwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",内蒙古卫视 +http://125.210.150.58:9090/live/hszx-nmgtv-h264.m3u8 +#EXTINF:-1 group-title="未分类",宁夏卫视 +http://125.210.150.58:9090/live/hszx-nxtv-h264.m3u8 +#EXTINF:-1 group-title="未分类",甘肃卫视 +http://125.210.150.58:9090/live/hszx-gstv-h264.m3u8 +#EXTINF:-1 group-title="未分类",青海卫视 +http://125.210.150.58:9090/live/hszx-qhtv-h264.m3u8 +#EXTINF:-1 group-title="未分类",陕西卫视 +http://125.210.150.58:9090/live/hszx-sxtv-h264.m3u8 +#EXTINF:-1 group-title="未分类",河北卫视 +http://125.210.150.58:9090/live/hszx-hebeitv-h264.m3u8 +#EXTINF:-1 group-title="未分类",山西卫视 +http://125.210.150.58:9090/live/hszx-shanxitv-h264.m3u8 +#EXTINF:-1 group-title="未分类",山东卫视 +http://125.210.150.58:9090/live/hzgq-sdwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",安徽卫视 +http://125.210.150.58:9090/live/hzgq-ahwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",河南卫视 +http://125.210.150.58:9090/live/hszx-henantv-h264.m3u8 +#EXTINF:-1 group-title="未分类",湖北卫视 +http://125.210.150.58:9090/live/hzgq-hbwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",湖南卫视 +http://125.210.150.58:9090/live/hzgq-hnwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",江西卫视 +http://125.210.150.58:9090/live/hzgq-jxwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",江苏卫视 +http://125.210.150.58:9090/live/hzgq-jswsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",浙江卫视 +http://125.210.150.58:9090/live/hzgq-zjwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",东南卫视 +http://125.210.150.58:9090/live/hzgq-fjwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",广东卫视 +http://125.210.150.58:9090/live/hzgq-gdwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",深圳卫视 +http://125.210.150.58:9090/live/hzgq-szwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",广西卫视 +http://125.210.150.58:9090/live/hszx-gxtv-h264.m3u8 +#EXTINF:-1 group-title="未分类",云南卫视 +http://125.210.150.58:9090/live/hszx-yntv-h264.m3u8 +#EXTINF:-1 group-title="未分类",贵州卫视 +http://125.210.150.58:9090/live/hzgq-gzwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",四川卫视 +http://125.210.150.58:9090/live/hzgq-scwsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",新疆卫视 +http://125.210.150.58:9090/live/hszx-xjtv-h264.m3u8 +#EXTINF:-1 group-title="未分类",兵团卫视 +http://125.210.150.58:9090/live/hszx-bttv-h264.m3u8 +#EXTINF:-1 group-title="未分类",西藏卫视 +http://125.210.150.58:9090/live/hszx-xztv-h264.m3u8 +#EXTINF:-1 group-title="未分类",海南卫视 +http://125.210.150.58:9090/live/hszx-lytv-h264.m3u8 +#EXTINF:-1 group-title="未分类",三沙卫视 +http://125.210.150.58:9090/live/hzgq-ssws-h264.m3u8 +#EXTINF:-1 group-title="未分类",北京纪实科教 +http://125.210.150.58:9090/live/hszx-bjjs-h264.m3u8 +#EXTINF:-1 group-title="未分类",四海钓鱼 +http://125.210.150.58:9090/live/hszx-shdy-h264.m3u8 +#EXTINF:-1 group-title="未分类",金鹰纪实 +http://125.210.150.58:9090/live/hszx-jyjs-h264.m3u8 +#EXTINF:-1 group-title="未分类",浙江钱江 +http://125.210.150.58:9090/live/hzgq-qjpdgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",浙江经济生活 +http://125.210.150.58:9090/live/hzgq-zjjsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",浙江教育科技 +http://125.210.150.58:9090/live/hzgq-zjjygq-h264.m3u8 +#EXTINF:-1 group-title="未分类",浙江民生休闲 +http://125.210.150.58:9090/live/hzgq-msxxgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",浙江新闻 +http://125.210.150.58:9090/live/hzgq-zjxwgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",浙江少儿 +http://125.210.150.58:9090/live/hzgq-zjsegq-h264.m3u8 +#EXTINF:-1 group-title="未分类",浙江好易购 +http://125.210.150.58:9090/live/hzgq-hyggq-h264.m3u8 +#EXTINF:-1 group-title="未分类",杭州综合 +http://125.210.150.58:9090/live/hzgq-hzzhgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",杭州明珠 +http://125.210.150.58:9090/live/hzgq-xhmzgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",杭州生活 +http://125.210.150.58:9090/live/hzgq-hzshgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",杭州影视 +http://125.210.150.58:9090/live/hzgq-hzysgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",杭州青少 +http://125.210.150.58:9090/live/hzgq-hzsegq-h264.m3u8 +#EXTINF:-1 group-title="未分类",杭州导视 +http://125.210.150.58:9090/live/hzgq-hzdsgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",临平新闻 +http://125.210.150.58:9090/live/hszx-klcd-h264.m3u8 +#EXTINF:-1 group-title="未分类",华数频道 +http://125.210.150.58:9090/live/hzgq-hsfwgq-h264.m3u8 +#EXTINF:-1 group-title="未分类",天元围棋 +http://125.210.150.58:9090/live/hszx-tywq-h264.m3u8 +#EXTINF:-1 group-title="未分类",凤 凰中文 +http://125.210.150.58:9090/live/hszx-fhzw-h264.m3u8 +#EXTINF:-1 group-title="未分类",凤 凰资讯 +http://125.210.150.58:9090/live/hszx-fhzx-h264.m3u8 diff --git a/tgdc.json b/tgdc.json index 1462090..a4d6e72 100644 --- a/tgdc.json +++ b/tgdc.json @@ -20,6 +20,10 @@ "url": "https://ghproxy.net/https://raw.githubusercontent.com/ls125781003/xyqonlinerule/main/XYQTVBox.json", "name": "香雅情演示线路" }, + { + "url": "https://bitbucket.org/ls125781003/tvboxtg/raw/main/drpy_t3/api.json", + "name": "drpy_t3精选" + }, { "url": "https://bitbucket.org/ls125781003/tvboxtg/raw/main/南风/api.json", "name": "南风"