diff --git a/南风/api.json b/南风/api.json
index e1def7f..6d5eff6 100644
--- a/南风/api.json
+++ b/南风/api.json
@@ -53,6 +53,16 @@
"quickSearch": 1,
"filterable": 1
},
+ {
+ "key": "kafeiys",
+ "name": "💢狂风",
+ "type": 3,
+ "api": "csp_Qiji",
+ "searchable": 1,
+ "quickSearch": 1,
+ "filterable": 1,
+ "ext": "7lj763gg402i7942522k849kg4499i9hl1k5ik48i38l292l1l4l1klgl41255091i8313k2ik478h8j751kh28kh9gk56l3k874684ll3h7j9k83l9034li7lhi5g45k8k3j6hkk760276g8h5h295i9jk7597177g3kk7g3hh79ili"
+ },
{
"key": "巧技二",
"name": "💢聚搜┃仅搜索",
@@ -103,6 +113,26 @@
"filterable": 1,
"ext": "7lj763gg0939795i0678i481k40hi2i3ghlg840i9lj166700g1449g3k5244k2017h35698h4739ih31117kigil3k02hl2jk6i5155ih9kkgl311gl37g240g85111ggg2"
},
+ {
+ "key": "时常",
+ "name": "💢时常",
+ "type": 3,
+ "api": "csp_Muou",
+ "searchable": 1,
+ "quickSearch": 1,
+ "filterable": 1,
+ "ext": "7lj763gg402i79425i3l85i6h14i9ijiljqiaojihhj910il877129534l1ik9l1184k401g9g54gk8j5i9097751kh28kh9j12ji8i541446kghk19hg576j46gg538l41l0kkkklj6hk72gjj3li45h3h492747k8g976kk5h43i69h6"
+ },
+ {
+ "key": "柚子",
+ "name": "💢柚子",
+ "type": 3,
+ "api": "csp_Muou",
+ "searchable": 1,
+ "quickSearch": 1,
+ "filterable": 1,
+ "ext": "7lj763gg402i79425i3l85i6hqiaoji14i9ijiljhhj910il877129534l1ik9l1184k401g9g54gk8j5i9097751kh28kh9j12ji8i541446kghk792gj76jj64g621h95554k67k18797k9jl3l058g4h59763kh1i2823llg3"
+ },
{
"key": "huomaoys",
"name": "💢火猫",
@@ -163,26 +193,6 @@
"filterable": 1,
"ext": "7lj763gg402i794247258k9jh6598585l3g6ij13il8g20g9qiaoji8j9i9k1g3k90h7i507i213k5j602"
},
- {
- "key": "柚子",
- "name": "💢柚子",
- "type": 3,
- "api": "csp_Muou",
- "searchable": 1,
- "quickSearch": 1,
- "filterable": 1,
- "ext": "7lj763gg0939790i413gi4igh94585i7g0l98449i399qiaoji20187h78327624i6j3i9lj8g09l9ig1ii3"
- },
- {
- "key": "专业",
- "name": "💢专业",
- "type": 3,
- "api": "csp_Shark",
- "searchable": 1,
- "quickSearch": 1,
- "filterable": 1,
- "ext": "7lj763gg0939795i007ii481k008i2i3g5l8840l9kjk6670031743g2h6164h07558245g3845392972819h994k1k400khli736i0lligk9gh273ih6jkl7jg84k54lhl9i5gkl376266h9k4624548kl649676gg9k2763llkj6gj818l"
- },
{
"key": "csp_Qiyou",
"name": "🦌奇优",
diff --git a/南风/jars/弹幕.jar b/南风/jars/弹幕.jar
index f8eadac..820a418 100644
Binary files a/南风/jars/弹幕.jar and b/南风/jars/弹幕.jar differ
diff --git a/南风/json/peizhi.json b/南风/json/peizhi.json
index 30deab9..05f08be 100644
--- a/南风/json/peizhi.json
+++ b/南风/json/peizhi.json
@@ -20,5 +20,5 @@
"tgPic": "true",
//tgsou 图片显示与否
//每次更新jar 该值都必须更新
- "exeMd5": "Be9p9RdUTwf3oDeNxM+MTREbI4RBVi4ASccT1fRGRiaJmP9Jz/vEtEoqo+P8hfwORRCZSCAnuQUcsu6hbSC/LN3c71aKNdXZfrwtniQNBgDgszyJtZXLb7VqhFS5LpOmKxSUsTSiwbSdbUQ7IVK37KaEHJ/znUzJV1xrv9LbujH9Y9+uMJCGRR3ZUBAYKcyc8pGJcaFtlrBIbRhuVBlxv2/4atnoIlwjCvxMV1ezgA4DyPQ63RhaX56qnqGL2AiGZkRGDvmEZgEfTX6OcO+IUWdxits+ln6kW8UCgbROiypI8GsyJo+1r/ibQl3VdnD053JuHoqZzY45ECfCO5IuGVKM90XOa+5rMRFcFomfGYcL+VIBktpDtIy8qOodWKVHztHZ2pWxVQgM0RhCukbkJqk4UR4UJGwsoGYYpw8QQqH0qhNRikzKtVJ8V7ycY/xCWdcPH/60uhBupOcp+frwdA=="
+ "exeMd5": "LHFymn1Et59Vb5lbfwcXXL4I6c97ZuhxPKzXB7nzMY66HrL4dhXeyPCTtIsxJ8NRwNInixUWp4sa8Uy166b8+DICyJPyTcua8Cmjay4TAhLvmBMJXYf5+HDQBmAuDvhKqjV807KHROzSUbygOvKkWKA237z3BgQr1786Kws3LuYdMPL56qEoZPm8D0WfJb3vF59VsK2lvXnqMGfEL4X1dHjsV+VuvWFQfl+uVuj8LmPoRbNVXi1Azpi6XzhvbBgxKGZYSU5lv6bdzH8inALg3HnEnYG+lk2UDLf3lieYBc6WKjY8FSBOVoAH681ErB1sJ+QC+mpEjHq9f0ZKglaSDxwGQsfHxz/lHCZU0glX1lk5MrDxPpNzw0C1HlHD1JYE9iHLiLKtLna7tRUdOx6Z7yY6AFfPfhcUTX28C/k0u4XKm8qvgAZusns6C5+XeD5zxE2zXrndWo1NJtKkzQ=="
}
diff --git a/南风/spider.jar b/南风/spider.jar
index 35cfc06..f3ef44c 100644
Binary files a/南风/spider.jar and b/南风/spider.jar differ
diff --git a/小米/api.json b/小米/api.json
index 0c2ab09..ba27b3a 100644
--- a/小米/api.json
+++ b/小米/api.json
@@ -53,10 +53,10 @@
"filterable": 1,
"ext": {
"site_urls": [
- "http://www.2xiaopan.fun/",
+ "https://www.2xiaopan.fun/",
"https://2xiaopan.fun/",
- "https://erxiaofn.click/",
- "https://erixaopan.fun/",
+ "https://www.2xiaoyun.fun/",
+ "https://www.2xiaoyun.fun/",
"https://www.xhww.net/"
],
"url_key": "UC",
@@ -190,7 +190,7 @@
"searchable": 1,
"quickSearch": 1,
"api": "csp_AppGet",
- "ext": "XRksEN3W20hd3bSb1cdiKgyQTbBO6aM0THhjKXE4Nl7W0aOx624xuIFTAGd0lwLd+GTB05zPlJYlZO1OgsJ6tfUd3LU926poUPnJ/jPh+h8GMdpo75H2pTl+Wb4waE5COjhN/OQGW7RRuI3cdPEtNw=="
+ "ext": "rP+4azM8YFgp3eAhyeALtUUEFpbkqmzGj2V5VZryxRbpkSjlsHbarRCZPOInvId4s3WK9rZ2YJsDy8NvMqQKQXowVmh33j+qD55VxmvMzzfiJ2fHkCRZg4+8NFWs+b1X"
},
{
"key": "QD4K",
@@ -202,6 +202,15 @@
"playerType": 2,
"ext": "./txt/cs.txt"
},
+ {
+ "key": "咖啡",
+ "name": "☕咖啡┃影视",
+ "type": 3,
+ "quickSearch": 1,
+ "searchable": 1,
+ "api": "csp_AppGet",
+ "ext": "Koog6uPyOjHNZh8eY8CgUL+XGp1zR8d/K2NE9Ls6xomS8zNeZA6OEFwcZ27Zy0ZH9i0JczXR1zmcv9qIihz837BdnQrvJfE8QEyUmS3qKxs="
+ },
{
"key": "海豚",
"name": "🍁海豚┃影视",
@@ -209,7 +218,7 @@
"searchable": 1,
"quickSearch": 1,
"api": "csp_AppGet",
- "ext": "XRksEN3W20hd3bSb1cdiKs8RUIegfh9/V/YlhVyjCL0eqxZYfImI5sC9kLAqQXjv66FYClFaEI40zh/NzOUPsBYCLt4NsSH1V+UpZf/dKjEDsI0tm9aILcvqHG2qxVoV8AVi+Ij/7n9IRf3pTN1BxQ=="
+ "ext": "QxNFQL63IQgXoB/O+Q12SpWJNcSeybsKVx0uAk9+pBwLEYRybmr89ubfoMpO9ZMnmJwYP5eKIrLK/w5t9S+6+F2ZlfWUyUoDUP2rV9QVabZh8nM+rBV7F/sxe+7GgsdL"
},
{
"key": "巧技",
@@ -272,20 +281,6 @@
"playerType": 2,
"ext": "7lj763gg402i7942463ji4qiaojijjh456889il6k6i35kj995h4j18li7kl2870klhg8hi647j5707k4ki7ig6953kj"
},
- {
- "key": "咖啡",
- "name": "☕咖啡┃影视",
- "type": 3,
- "quickSearch": 1,
- "searchable": 1,
- "api": "./api/get3.py",
- "ext": {
- "host": "./txt/2.txt",
- "api": "/api.php/qijiappapi",
- "datakey": "qwertyuiopqwertt",
- "dataiv": "qwertyuiopqwertt"
- }
- },
{
"key": "牛牛",
"name": "🍁牛牛┃影视",
diff --git a/小米/api/get3.py b/小米/api/get3.py
deleted file mode 100644
index 18dfa05..0000000
--- a/小米/api/get3.py
+++ /dev/null
@@ -1,337 +0,0 @@
-import re
-import sys
-import uuid
-import json
-import base64
-from Crypto.Cipher import AES
-from base.spider import Spider
-from Crypto.Util.Padding import pad
-from Crypto.Util.Padding import unpad
-sys.path.append('..')
-
-headerx = {
- 'User-Agent': 'okhttp/3.10.0' # okhttp/3.14.9
-}
-
-class Spider(Spider):
- global headerx
- init_data = ''
- search_verify = ''
-
- def getName(self):
- return "首页"
-
- def init(self, extend):
- js1=json.loads(extend)
- host = js1['host']
- if re.match(r'^https:\/\/.*\.(txt|json)$',host):
- host = self.fetch(host, headers=headerx, timeout=10).text.rstrip('/')
- self.xurl = host + js1.get('api','/api.php/getappapi')
- self.key = js1['datakey']
- self.iv = js1.get('dataiv',self.key)
-
- res = self.fetch(self.xurl + '.index/initV119', headers=headerx).json()
- encrypted_data = res['data']
- response = self.decrypt(encrypted_data)
- init_data = json.loads(response)
- self.init_data = init_data
- self.search_verify = init_data['config'].get('system_search_verify_status',False)
-
- def homeContent(self, filter):
- kjson = self.init_data
- result = {"class": [], "filters": {}}
- for i in kjson['type_list']:
- if not(i['type_name'] in ['全部', 'QQ', 'juo.one'] or '企鹅群' in i['type_name']):
- result['class'].append({
- "type_id": i['type_id'],
- "type_name": i['type_name']
- })
- name_mapping = {'class': '类型', 'area': '地区', 'lang': '语言', 'year': '年份', 'sort': '排序'}
- filter_items = []
- for filter_type in i.get('filter_type_list', []):
- filter_name = filter_type.get('name')
- values = filter_type.get('list', [])
-
- if not values:
- continue
-
- value_list = [{"n": value, "v": value} for value in values]
- display_name = name_mapping.get(filter_name, filter_name)
- key = 'by' if filter_name == 'sort' else filter_name
-
- filter_items.append({
- "key": key,
- "name": display_name,
- "value": value_list
- })
-
- type_id = i.get('type_id')
- if filter_items:
- result["filters"][str(type_id)] = filter_items
-
- return result
-
- def homeVideoContent(self):
- videos = []
- kjson = self.init_data
- for i in kjson['type_list']:
- for item in i['recommend_list']:
- vod_id = item['vod_id']
- name = item['vod_name']
- pic = item['vod_pic']
- remarks = item['vod_remarks']
- video = {
- "vod_id": vod_id,
- "vod_name": name,
- "vod_pic": pic,
- "vod_remarks": remarks
- }
- videos.append(video)
- return {'list': videos}
-
- def categoryContent(self, cid, pg, filter, ext):
- videos = []
- payload = {
- 'area': ext.get('area','全部'),
- 'year': ext.get('year','全部'),
- 'type_id': cid,
- 'page': str(pg),
- 'sort': ext.get('sort','最新'),
- 'lang': ext.get('lang','全部'),
- 'class': ext.get('class','全部')
- }
- url = f'{self.xurl}.index/typeFilterVodList'
- res = self.post(url=url, headers=headerx,data=payload).json()
- encrypted_data = res['data']
- kjson = self.decrypt(encrypted_data)
- kjson1 = json.loads(kjson)
- for i in kjson1['recommend_list']:
- id = i['vod_id']
- name = i['vod_name']
- pic = i['vod_pic']
- remarks = i['vod_remarks']
- video = {
- "vod_id": id,
- "vod_name": name,
- "vod_pic": pic,
- "vod_remarks": remarks
- }
- videos.append(video)
- return {'list': videos, 'page': pg, 'pagecount': 9999, 'limit': 90, 'total': 999999}
-
- def detailContent(self, ids):
- did = ids[0]
- payload = {
- 'vod_id': did,
- }
- api_endpoints = ['vodDetail', 'vodDetail2']
-
- for endpoint in api_endpoints:
- url = f'{self.xurl}.index/{endpoint}'
- response = self.post(url=url, headers=headerx, data=payload)
-
- if response.status_code == 200:
- response_data = response.json()
- encrypted_data = response_data['data']
- kjson1 = self.decrypt(encrypted_data)
- kjson = json.loads(kjson1)
- break
- videos = []
- play_form = ''
- play_url = ''
-
- actor = kjson['vod']['vod_actor']
- director = kjson['vod'].get('vod_director', '')
- area = kjson['vod']['vod_area']
- name = kjson['vod']['vod_name']
- year = kjson['vod']['vod_year']
- content = kjson['vod']['vod_content']
- subtitle = kjson['vod']['vod_remarks']
- desc = kjson['vod']['vod_lang']
- remark = '时间:' + subtitle + ' 语言:' + desc
- for line in kjson['vod_play_list']:
- keywords = ['防走丢', '群', '防失群', 'Q','juo.one',]
- if any(keyword in line['player_info']['show'] for keyword in keywords):
- continue
- play_form += line['player_info']['show'] + '$$$'
- parse = line['player_info']['parse']
- player_parse_type = line['player_info']['player_parse_type']
- kurls = ""
- for vod in line['urls']:
- kurl = vod['url']
- if '.m3u8' in kurl:
- kurls += str(vod['name']) + '$' + vod['url'] + '#'
- else:
- if 'm3u8' not in kurl:
- token = 'token+' + vod['token']
- kurls += str(vod['name']) + '$' + parse + ',' + vod[
- 'url'] + ',' + token + ',' + player_parse_type + '#'
- kurls = kurls.rstrip('#')
- play_url += kurls + '$$$'
- play_form = play_form.rstrip('$$$')
- play_url = play_url.rstrip('$$$')
- videos.append({
- "vod_id": did,
- "vod_name": name,
- "vod_actor": actor.replace('演员', ''),
- "vod_director": director.replace('导演', ''),
- "vod_content": content,
- "vod_remarks": remark,
- "vod_year": year + '年',
- "vod_area": area,
- "vod_play_from": play_form,
- "vod_play_url": play_url
- })
- return {'list': videos}
-
- def playerContent(self, flag, id, vipFlags):
- url = ''
- if re.search(r'https?:\/\/.*\.(m3u8|mp4|flv)', id):
- url = id
- elif 'url=' in id:
- aid = id.split(',')
- uid = aid[0]
- kurl = aid[1]
- kjson = uid + kurl
- url2 = f"{kjson}"
- response = self.fetch(url=url2)
- if response.status_code == 200:
- kjson1 = response.json()
- url = kjson1['url']
- else:
- aid = id.split(',')
- bid = aid[-1]
- uid = aid[0]
- kurl = aid[1]
- token = aid[2].replace('token+', '')
- id1 = self.decrypt_wb(kurl)
- payload = {
- 'parse_api': uid,
- 'url': id1,
- 'player_parse_type': bid,
- 'token': token
- }
- url1 = f"{self.xurl}.index/vodParse"
- response = self.post(url=url1, headers=headerx, data=payload)
- if response.status_code == 200:
- response_data = response.json()
- encrypted_data = response_data['data']
- kjson = self.decrypt(encrypted_data)
- kjson1 = json.loads(kjson)
- kjson2 = kjson1['json']
- kjson3 = json.loads(kjson2)
- url = kjson3['url']
- return {"parse": 0, "playUrl": '', "url": url, "header": {'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 14; 23113RK12C Build/SKQ1.231004.001)'}}
-
- def searchContent(self, key, quick, pg="1"):
- videos = []
- # 使用urllib.parse.quote确保关键词被正确编码
- import urllib.parse
- encoded_key = urllib.parse.quote(key)
-
- # 构建POST请求的表单数据,使用编码后的关键词
- payload = {
- 'keywords': encoded_key,
- 'type_id': "0",
- 'page': str(pg)
- }
-
- if self.search_verify:
- verifi = self.verification()
- if verifi is None:
- return {'list':[]}
- payload['code'] = verifi['code']
- payload['key'] = verifi['uuid']
-
- url = f'{self.xurl}.index/searchList'
- # 发送POST请求并携带表单数据
- res = self.post(url=url, data=payload, headers=headerx).json()
-
- if not res.get('data'):
- return {'list':[] ,'msg': res.get('msg')}
-
- encrypted_data = res['data']
- kjson = self.decrypt(encrypted_data)
- kjson1 = json.loads(kjson)
-
- for i in kjson1['search_list']:
- id = i['vod_id']
- name = i['vod_name']
- pic = i['vod_pic']
- remarks = i['vod_year'] + ' ' + i['vod_class']
-
- video = {
- "vod_id": id,
- "vod_name": name,
- "vod_pic": pic,
- "vod_remarks": remarks
- }
- videos.append(video)
-
- return {'list': videos, 'page': pg, 'pagecount': 9999, 'limit': 90, 'total': 999999}
-
- def localProxy(self, params):
- if params['type'] == "m3u8":
- return self.proxyM3u8(params)
- elif params['type'] == "media":
- return self.proxyMedia(params)
- elif params['type'] == "ts":
- return self.proxyTs(params)
- return None
-
- def isVideoFormat(self, url):
- pass
-
- def manualVideoCheck(self):
- pass
-
- def decrypt(self, encrypted_data_b64):
- key_text = self.key
- iv_text = self.iv
- key_bytes = key_text.encode('utf-8')
- iv_bytes = iv_text.encode('utf-8')
- encrypted_data = base64.b64decode(encrypted_data_b64)
- cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)
- decrypted_padded = cipher.decrypt(encrypted_data)
- decrypted = unpad(decrypted_padded, AES.block_size)
- return decrypted.decode('utf-8')
-
- def decrypt_wb(self, sencrypted_data):
- key_text = self.key
- iv_text = self.iv
- key_bytes = key_text.encode('utf-8')
- iv_bytes = iv_text.encode('utf-8')
- data_bytes = sencrypted_data.encode('utf-8')
- padded_data = pad(data_bytes, AES.block_size)
- cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)
- encrypted_bytes = cipher.encrypt(padded_data)
- encrypted_data_b64 = base64.b64encode(encrypted_bytes).decode('utf-8')
- return encrypted_data_b64
-
- def ocr(self,base64Img):
- dat2 = self.post("https://api.nn.ci/ocr/b64/text",data=base64Img,headers=headerx).text
- if dat2:
- return dat2
- else:
- return None
-
- def verification(self):
- random_uuid = str(uuid.uuid4())
- dat = self.fetch(f'{self.xurl}.verify/create?key={random_uuid}',headers=headerx).content
- base64_img = base64.b64encode(dat).decode('utf-8')
- if not dat:
- return None
- code = self.ocr(base64_img)
- if not code:
- return None
- code = replace_code(code)
- if not (len(code) == 4 and code.isdigit()):
- return None
- return {'uuid': random_uuid, 'code': code}
-
-def replace_code(text):
- replacements = {'y': '9','口': '0','q': '0','u': '0','o': '0','>': '1','d': '0','b': '8','已': '2','D': '0','五': '5'}
- if len(text) == 3:
- text = text.replace('066', '1666')
- text = text.replace('566', '5066')
- return ''.join(replacements.get(c, c) for c in text)
\ No newline at end of file
diff --git a/小米/spider.jar b/小米/spider.jar
index 5751e60..a57cb88 100644
Binary files a/小米/spider.jar and b/小米/spider.jar differ
diff --git a/小米/txt/2.txt b/小米/txt/2.txt
deleted file mode 100644
index 36f4aa3..0000000
--- a/小米/txt/2.txt
+++ /dev/null
@@ -1 +0,0 @@
-http://160.202.244.9:9788/
\ No newline at end of file
diff --git a/小虎斑/spider.jar b/小虎斑/spider.jar
index a461a23..4791a63 100644
Binary files a/小虎斑/spider.jar and b/小虎斑/spider.jar differ
diff --git a/摸鱼儿/api.json b/摸鱼儿/api.json
index 1f24f44..95066ce 100644
--- a/摸鱼儿/api.json
+++ b/摸鱼儿/api.json
@@ -69,19 +69,6 @@
"key3": "aassddwwxxllsx1x"
}
},
- {
- "key": "斗量",
- "name": "🌀斗量┃超清┃弹幕",
- "type": 3,
- "api": "csp_AppSy",
- "jar": "./jars/config.jar",
- "ext": {
- "url": "https://app.ystva.com",
- "key1": "hsZwQK5yrnefW7OJ",
- "key2": "hsZwQK5yrnefW7OJ",
- "key3": "hsZwQK5yrnefW7OJ"
- }
- },
{
"key": "追忆",
"name": "🌀追忆┃超清┃弹幕",
@@ -112,18 +99,19 @@
}
},
{
- "key": "橘猫",
- "name": "🌀橘猫┃超清┃弹幕",
+ "key": "灵虎",
+ "name": "🌀灵虎┃超清┃弹幕",
"type": 3,
"quickSearch": 1,
- "api": "csp_AppGet2",
+ "api": "csp_AppGet",
"jar": "./jars/config.jar",
"ext": {
- "url": "https://qjappcms.jm4k.top",
- "dataKey": "pBVmysmGX8TsgrQN",
- "dataIv": "pBVmysmGX8TsgrQN",
+ "url": "",
+ "site": "./txt/89.txt",
+ "dataKey": "#getapp@TMD@2025",
+ "dataIv": "#getapp@TMD@2025",
"deviceId": "",
- "version": "120"
+ "version": ""
}
},
{
@@ -187,18 +175,31 @@
}
},
{
- "key": "光盘",
- "name": "🌀光盘┃超清┃弹幕",
+ "key": "码头",
+ "name": "🌀码头┃超清┃弹幕",
"type": 3,
- "quickSearch": 1,
"api": "csp_AppGet",
"jar": "./jars/config.jar",
"ext": {
- "url": "http://119.13.88.18",
- "dataKey": "xnybssspqtwotuwj",
- "dataIv": "xnybssspqtwotuwj",
+ "url": "https://www.lgmt.cc",
+ "dataKey": "asfjaskasgggassf",
+ "dataIv": "asfjaskasgggassf",
"deviceId": "",
- "version": "101"
+ "version": ""
+ }
+ },
+ {
+ "key": "米诺",
+ "name": "🌀米诺┃超清┃弹幕",
+ "type": 3,
+ "api": "csp_AppGet",
+ "jar": "./jars/config.jar",
+ "ext": {
+ "url": "http://www.milkidc.cn",
+ "dataKey": "20c79c979da8db0f",
+ "dataIv": "20c79c979da8db0f",
+ "deviceId": "",
+ "version": ""
}
},
{
@@ -247,28 +248,13 @@
"version": "119"
}
},
- {
- "key": "魔方",
- "name": "🌀魔方┃超清┃弹幕",
- "type": 3,
- "quickSearch": 1,
- "api": "csp_AppGet",
- "jar": "./jars/config.jar",
- "ext": {
- "url": "https://mfsp33.top",
- "dataKey": "1234567887654321",
- "dataIv": "1234567887654321",
- "deviceId": "",
- "version": ""
- }
- },
{
"key": "海豚",
"name": "🌀海豚┃超清┃弹幕",
- "jar": "./jars/config.jar",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
+ "jar": "./jars/config.jar",
"ext": {
"url": "https://appcms.htsp4k.top",
"dataKey": "7CYQQzwchRQpHCOj",
@@ -277,6 +263,21 @@
"version": ""
}
},
+ {
+ "key": "溜溜",
+ "name": "🌀溜溜┃超清┃弹幕",
+ "type": 3,
+ "quickSearch": 1,
+ "api": "csp_AppGet",
+ "jar": "./jars/config.jar",
+ "ext": {
+ "url": "https://appcms.ll4k.xyz",
+ "dataKey": "NiDGaKiVnkO3QX1Q",
+ "dataIv": "NiDGaKiVnkO3QX1Q",
+ "deviceId": "2fbaf48ee97783260bc907e3ab0bd40c3",
+ "version": "200"
+ }
+ },
{
"key": "瓜萌",
"name": "🌀瓜萌┃超清┃弹幕",
@@ -337,21 +338,6 @@
"version": "300"
}
},
- {
- "key": "彼岸",
- "name": "🌀彼岸┃超清┃弹幕",
- "jar": "./jars/config.jar",
- "type": 3,
- "quickSearch": 1,
- "api": "csp_AppGet",
- "ext": {
- "url": "https://mfsp33.top",
- "dataKey": "1234567887654321",
- "dataIv": "1234567887654321",
- "deviceId": "298e5fe29c74b35aabb9836ee2f6f449f",
- "version": "315"
- }
- },
{
"key": "雨滴",
"name": "🌀雨滴┃超清┃弹幕",
@@ -367,6 +353,51 @@
"version": "100"
}
},
+ {
+ "key": "萝卜",
+ "name": "🌀萝卜┃超清┃弹幕",
+ "type": 3,
+ "quickSearch": 1,
+ "api": "csp_AppGet",
+ "jar": "./jars/config.jar",
+ "ext": {
+ "url": "https://apiapplbys.lbys.app:5678",
+ "dataKey": "apiapplbyskey168",
+ "dataIv": "apiapplbyskey168",
+ "deviceId": "",
+ "version": "107"
+ }
+ },
+ {
+ "key": "小红",
+ "name": "🌀小红┃超清┃弹幕",
+ "type": 3,
+ "quickSearch": 1,
+ "api": "csp_AppGet",
+ "jar": "./jars/config.jar",
+ "ext": {
+ "url": "https://www.xiaohys.com",
+ "dataKey": "ENonBHeVBoYZhVUV",
+ "dataIv": "ENonBHeVBoYZhVUV",
+ "deviceId": "298e5fe29c74b35aabb9836ee2f6f449f",
+ "version": "166"
+ }
+ },
+ {
+ "key": "在看",
+ "name": "🌀小红┃超清┃弹幕",
+ "type": 3,
+ "quickSearch": 1,
+ "api": "csp_AppGet",
+ "jar": "./jars/config.jar",
+ "ext": {
+ "url": "http://149.88.64.161:9525",
+ "dataKey": "123456789ABCDEFG",
+ "dataIv": "123456789ABCDEFG",
+ "deviceId": "",
+ "version": ""
+ }
+ },
{
"key": "若惜",
"name": "🌀若惜┃超清┃弹幕",
diff --git a/摸鱼儿/api/drpy.min.js b/摸鱼儿/api/drpy.min.js
new file mode 100644
index 0000000..7111baf
--- /dev/null
+++ b/摸鱼儿/api/drpy.min.js
@@ -0,0 +1,2317 @@
+import cheerio from "assets://js/lib/cheerio.min.js";
+import "assets://js/lib/crypto-js.js";
+import "./jsencrypt.js";
+import 模板 from "./模板.js";
+import {
+ gbkTool
+}
+from "./gbk.js";
+
+function init_test() {
+ console.log("init_test_start");
+ console.log("当前版本号:" + VERSION);
+ console.log(RKEY);
+ console.log(JSON.stringify(rule));
+ console.log("init_test_end")
+}
+function pre() {
+ if (typeof rule.预处理 === "string" && rule.预处理 && rule.预处理.trim()) {
+ let code = rule.预处理.trim();
+ console.log("执行预处理代码:" + code);
+ if (code.startsWith("js:")) {
+ code = code.replace("js:", "")
+ }
+ try {
+ eval(code)
+ } catch (e) {
+ console.log("预处理执行失败:" + e.message)
+ }
+ }
+}
+let rule = {};
+let vercode = typeof pdfl === "function" ? "drpy2.1" : "drpy2";
+const VERSION = vercode + " 3.9.49beta40 202400426";
+const MOBILE_UA = "Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36";
+const PC_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36";
+const UA = "Mozilla/5.0";
+const UC_UA = "Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36";
+const IOS_UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1";
+const RULE_CK = "cookie";
+const CATE_EXCLUDE = "首页|留言|APP|下载|资讯|新闻|动态";
+const TAB_EXCLUDE = "猜你|喜欢|下载|剧情|热播";
+const OCR_RETRY = 3;
+const OCR_API = "http://drpy.nokia.press:8028/ocr/drpy/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)$/;
+const SELECT_REGEX = /:eq|:lt|:gt|#/g;
+const SELECT_REGEX_A = /:eq|:lt|:gt/g;
+if (typeof Object.assign != "function") {
+ Object.assign = function() {
+ let target = arguments[0];
+ for (let i = 1; i < arguments.length; i++) {
+ let source = arguments[i];
+ for (let key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key]
+ }
+ }
+ }
+ return target
+ }
+}
+if (!String.prototype.includes) {
+ String.prototype.includes = function(search, start) {
+ if (typeof start !== "number") {
+ start = 0
+ }
+ if (start + search.length > this.length) {
+ return false
+ } else {
+ return this.indexOf(search, start) !== -1
+ }
+ }
+}
+if (!Array.prototype.includes) {
+ Object.defineProperty(Array.prototype, "includes", {
+ value: function(searchElement, fromIndex) {
+ if (this == null) {
+ throw new TypeError('"this" is null or not defined')
+ }
+ var o = Object(this);
+ var len = o.length >>> 0;
+ if (len === 0) {
+ return false
+ }
+ var n = fromIndex | 0;
+ var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
+ while (k < len) {
+ if (o[k] === searchElement) {
+ return true
+ }
+ k++
+ }
+ return false
+ }
+ })
+}
+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 || "";
+ 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
+ }
+}
+if (typeof Array.prototype.toReversed != "function") {
+ Array.prototype.toReversed = function() {
+ const clonedList = this.slice();
+ const reversedList = clonedList.reverse();
+ return reversedList
+ }
+}
+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 = [];
+ d.forEach(function(it) {
+ let obj = {
+ vod_id: it.url || "",
+ vod_name: it.title || "",
+ vod_remarks: it.desc || "",
+ vod_content: it.content || "",
+ vod_pic: it.pic_url || it.img || ""
+ };
+ let keys = Object.keys(it);
+ if (keys.includes("tname")) {
+ obj.type_name = it.tname || ""
+ }
+ if (keys.includes("tid")) {
+ obj.type_id = it.tid || ""
+ }
+ if (keys.includes("year")) {
+ obj.vod_year = it.year || ""
+ }
+ if (keys.includes("actor")) {
+ obj.vod_actor = it.actor || ""
+ }
+ if (keys.includes("director")) {
+ obj.vod_director = it.director || ""
+ }
+ if (keys.includes("area")) {
+ obj.vod_area = it.area || ""
+ }
+ VODS.push(obj)
+ });
+ return VODS
+}
+function setResult2(res) {
+ VODS = res.list || [];
+ return VODS
+}
+function setHomeResult(res) {
+ if (!res || typeof res !== "object") {
+ return []
+ }
+ return setResult(res.list)
+}
+function rc(js) {
+ if (js === "maomi_aes.js") {
+ var a = CryptoJS.enc.Utf8.parse("625222f9149e961d");
+ var t = CryptoJS.enc.Utf8.parse("5efdtf6060e2o330");
+ return {
+ De: function(word) {
+ word = CryptoJS.enc.Hex.parse(word);
+ return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(word), a, {
+ iv: t,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.Pkcs7
+ })
+ .toString(CryptoJS.enc.Utf8)
+ },
+ En: function(word) {
+ var Encrypted = CryptoJS.AES.encrypt(word, a, {
+ iv: t,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.Pkcs7
+ });
+ return Encrypted.ciphertext.toString()
+ }
+ }
+ }
+ return {}
+}
+function maoss(jxurl, ref, key) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ eval(getCryptoJS());
+ try {
+ var getVideoInfo = function(text) {
+ return CryptoJS.AES.decrypt(text, key, {
+ iv: iv,
+ padding: CryptoJS.pad.Pkcs7
+ })
+ .toString(CryptoJS.enc.Utf8)
+ };
+ var token_key = key == undefined ? "dvyYRQlnPRCMdQSe" : key;
+ if (ref) {
+ var html = request(jxurl, {
+ headers: {
+ Referer: ref
+ }
+ })
+ } else {
+ var html = request(jxurl)
+ }
+ if (html.indexOf("&btwaf=") != -1) {
+ html = request(jxurl + "&btwaf" + html.match(/&btwaf(.*?)"/)[1], {
+ headers: {
+ Referer: ref
+ }
+ })
+ }
+ var token_iv = html.split('_token = "')[1].split('"')[0];
+ var key = CryptoJS.enc.Utf8.parse(token_key);
+ var iv = CryptoJS.enc.Utf8.parse(token_iv);
+ eval(html.match(/var config = {[\s\S]*?}/)[0] + "");
+ if (!config.url.startsWith("http")) {
+ config.url = CryptoJS.AES.decrypt(config.url, key, {
+ iv: iv,
+ padding: CryptoJS.pad.Pkcs7
+ })
+ .toString(CryptoJS.enc.Utf8)
+ }
+ return config.url
+ } catch (e) {
+ return ""
+ }
+}
+function urlencode(str) {
+ str = (str + "")
+ .toString();
+ return encodeURIComponent(str)
+ .replace(/!/g, "%21")
+ .replace(/'/g, "%27")
+ .replace(/\(/g, "%28")
+ .replace(/\)/g, "%29")
+ .replace(/\*/g, "%2A")
+ .replace(/%20/g, "+")
+}
+function base64Encode(text) {
+ return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text))
+}
+function base64Decode(text) {
+ return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(text))
+}
+function md5(text) {
+ return CryptoJS.MD5(text)
+ .toString()
+}
+function encodeStr(input, encoding) {
+ encoding = encoding || "gbk";
+ if (encoding.startsWith("gb")) {
+ const strTool = gbkTool();
+ input = strTool.encode(input)
+ }
+ return input
+}
+function decodeStr(input, encoding) {
+ encoding = encoding || "gbk";
+ if (encoding.startsWith("gb")) {
+ const strTool = gbkTool();
+ input = strTool.decode(input)
+ }
+ return input
+}
+function getCryptoJS() {
+ return 'console.log("CryptoJS已装载");'
+}
+const RSA = {
+ decode: function(data, key, option) {
+ option = option || {};
+ if (typeof JSEncrypt === "function") {
+ let chunkSize = option.chunkSize || 117;
+ let privateKey = this.getPrivateKey(key);
+ const decryptor = new JSEncrypt;
+ decryptor.setPrivateKey(privateKey);
+ let uncrypted = "";
+ uncrypted = decryptor.decryptUnicodeLong(data);
+ return uncrypted
+ } else {
+ return false
+ }
+ },
+ encode: function(data, key, option) {
+ option = option || {};
+ if (typeof JSEncrypt === "function") {
+ let chunkSize = option.chunkSize || 117;
+ let publicKey = this.getPublicKey(key);
+ const encryptor = new JSEncrypt;
+ encryptor.setPublicKey(publicKey);
+ let encrypted = "";
+ encrypted = encryptor.encryptUnicodeLong(data);
+ return encrypted
+ } else {
+ return false
+ }
+ },
+ fixKey(key, prefix, endfix) {
+ if (!key.includes(prefix)) {
+ key = prefix + key
+ }
+ if (!key.includes(endfix)) {
+ key += endfix
+ }
+ return key
+ },
+ getPrivateKey(key) {
+ let prefix = "-----BEGIN RSA PRIVATE KEY-----";
+ let endfix = "-----END RSA PRIVATE KEY-----";
+ return this.fixKey(key, prefix, endfix)
+ },
+ getPublicKey(key) {
+ let prefix = "-----BEGIN PUBLIC KEY-----";
+ let endfix = "-----END PUBLIC KEY-----";
+ return this.fixKey(key, prefix, endfix)
+ }
+};
+
+function getProxyUrl() {
+ if (typeof getProxy === "function") {
+ return getProxy(true)
+ } else {
+ return "http://127.0.0.1:9978/proxy?do=js"
+ }
+}
+function fixAdM3u8(m3u8_text, m3u8_url, ad_remove) {
+ if (!m3u8_text && !m3u8_url || !m3u8_text && m3u8_url && !m3u8_url.startsWith("http")) {
+ return ""
+ }
+ if (!m3u8_text) {
+ log("m3u8_url:" + m3u8_url);
+ m3u8_text = request(m3u8_url)
+ }
+ log("len(m3u8_text):" + m3u8_text.length);
+ if (!ad_remove) {
+ return m3u8_text
+ }
+ if (ad_remove.startsWith("reg:")) {
+ ad_remove = ad_remove.slice(4)
+ } else if (ad_remove.startsWith("js:")) {
+ ad_remove = ad_remove.slice(3)
+ }
+ let m3u8_start = m3u8_text.slice(0, m3u8_text.indexOf("#EXTINF"))
+ .trim();
+ let m3u8_body = m3u8_text.slice(m3u8_text.indexOf("#EXTINF"), m3u8_text.indexOf("#EXT-X-ENDLIST"))
+ .trim();
+ let m3u8_end = m3u8_text.slice(m3u8_text.indexOf("#EXT-X-ENDLIST"))
+ .trim();
+ let murls = [];
+ let m3_body_list = m3u8_body.split("\n");
+ let m3_len = m3_body_list.length;
+ let i = 0;
+ while (i < m3_len) {
+ let mi = m3_body_list[i];
+ let mi_1 = m3_body_list[i + 1];
+ if (mi.startsWith("#EXTINF")) {
+ murls.push([mi, mi_1].join("&"));
+ i += 2
+ } else if (mi.startsWith("#EXT-X-DISCONTINUITY")) {
+ let mi_2 = m3_body_list[i + 2];
+ murls.push([mi, mi_1, mi_2].join("&"));
+ i += 3
+ } else {
+ break
+ }
+ }
+ let new_m3u8_body = [];
+ for (let murl of murls) {
+ if (ad_remove && new RegExp(ad_remove)
+ .test(murl)) {} else {
+ let murl_list = murl.split("&");
+ if (!murl_list[murl_list.length - 1].startsWith("http") && m3u8_url.startsWith("http")) {
+ murl_list[murl_list.length - 1] = urljoin(m3u8_url, murl_list[murl_list.length - 1])
+ }
+ murl_list.forEach(it => {
+ new_m3u8_body.push(it)
+ })
+ }
+ }
+ new_m3u8_body = new_m3u8_body.join("\n")
+ .trim();
+ m3u8_text = [m3u8_start, new_m3u8_body, m3u8_end].join("\n")
+ .trim();
+ return m3u8_text
+}
+function fixAdM3u8Ai(m3u8_url) {
+ let ts = (new Date)
+ .getTime();
+
+ function b(s1, s2) {
+ let i = 0;
+ while (i < s1.length) {
+ if (s1[i] !== s2[i]) {
+ break
+ }
+ i++
+ }
+ return i
+ }
+ function reverseString(str) {
+ return str.split("")
+ .reverse()
+ .join("")
+ }
+ let m3u8 = request(m3u8_url);
+ m3u8 = m3u8.trim()
+ .split("\n")
+ .map(it => it.startsWith("#") ? it : urljoin(m3u8_url, it))
+ .join("\n");
+ let last_url = m3u8.split("\n")
+ .slice(-1)[0];
+ if (last_url.includes(".m3u8") && last_url !== m3u8_url) {
+ m3u8_url = last_url;
+ m3u8 = request(m3u8_url)
+ }
+ 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 maxl = 0;
+ let firststrlen = firststr.length;
+ let ml = Math.round(ss.length / 2)
+ .toString()
+ .length;
+ let laststr = ss.toReversed()
+ .find(x => {
+ if (!x.startsWith("#")) {
+ let k = b(reverseString(firststr), reverseString(x));
+ maxl = b(firststr, x);
+ if (firststrlen - maxl <= ml + k) {
+ return true
+ }
+ }
+ return false
+ });
+ log("最后一条切片:" + laststr);
+ let ad_urls = [];
+ for (let i = 0; i < ss.length; i++) {
+ let s = ss[i];
+ if (!s.startsWith("#")) {
+ if (b(firststr, s) < maxl) {
+ ad_urls.push(s);
+ ss.splice(i - 1, 2);
+ i = i - 2
+ } else {
+ ss[i] = urljoin(m3u8_url, s)
+ }
+ } else {
+ ss[i] = s.replace(/URI=\"(.*)\"/, 'URI="' + urljoin(m3u8_url, "$1") + '"')
+ }
+ }
+ log("处理的m3u8地址:" + m3u8_url);
+ log("----广告地址----");
+ log(ad_urls);
+ m3u8 = ss.join("\n");
+ log("处理耗时:" + ((new Date)
+ .getTime() - ts)
+ .toString());
+ return m3u8
+}
+function forceOrder(lists, key, option) {
+ let start = Math.floor(lists.length / 2);
+ let end = Math.min(lists.length - 1, start + 1);
+ if (start >= end) {
+ return lists
+ }
+ let first = lists[start];
+ let second = lists[end];
+ if (key) {
+ try {
+ first = first[key];
+ second = second[key]
+ } catch (e) {}
+ }
+ if (option && typeof option === "function") {
+ try {
+ first = option(first);
+ second = option(second)
+ } catch (e) {}
+ }
+ first += "";
+ second += "";
+ if (first.match(/(\d+)/) && second.match(/(\d+)/)) {
+ let num1 = Number(first.match(/(\d+)/)[1]);
+ let num2 = Number(second.match(/(\d+)/)[1]);
+ if (num1 > num2) {
+ lists.reverse()
+ }
+ }
+ return lists
+}
+let VODS = [];
+let VOD = {};
+let TABS = [];
+let LISTS = [];
+globalThis.encodeUrl = urlencode;
+globalThis.urlencode = urlencode;
+
+function urljoin(fromPath, nowPath) {
+ fromPath = fromPath || "";
+ nowPath = nowPath || "";
+ return joinUrl(fromPath, nowPath)
+}
+var urljoin2 = urljoin;
+const defaultParser = {
+ pdfh: pdfh,
+ pdfa: pdfa,
+ pd: pd
+};
+
+function pdfh2(html, parse) {
+ let html2 = html;
+ try {
+ if (typeof html !== "string") {
+ html2 = html.rr(html.ele)
+ .toString()
+ }
+ } catch (e) {
+ print("html对象转文本发生了错误:" + e.message)
+ }
+ let result = defaultParser.pdfh(html2, parse);
+ let option = parse.includes("&&") ? parse.split("&&")
+ .slice(-1)[0] : parse.split(" ")
+ .slice(-1)[0];
+ if (/style/.test(option.toLowerCase()) && /url\(/.test(result)) {
+ try {
+ result = result.match(/url\((.*?)\)/)[1];
+ 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 = request(OCR_API, {
+ data: {
+ img: img
+ },
+ headers: {
+ "User-Agent": PC_UA
+ },
+ method: "POST"
+ }, true);
+ code = html || ""
+ } catch (e) {
+ log(`OCR识别验证码发生错误:${e.message}`)
+ }
+ return code
+ }
+};
+
+function verifyCode(url) {
+ let cnt = 0;
+ let host = getHome(url);
+ let cookie = "";
+ while (cnt < OCR_RETRY) {
+ try {
+ let yzm_url = `${host}/index.php/verify/index.html`;
+ console.log(`验证码链接:${yzm_url}`);
+ let hhtml = request(yzm_url, {
+ withHeaders: true,
+ toBase64: true
+ }, true);
+ let json = JSON.parse(hhtml);
+ if (!cookie) {
+ let setCk = Object.keys(json)
+ .find(it => it.toLowerCase() === "set-cookie");
+ cookie = setCk ? json[setCk].split(";")[0] : ""
+ }
+ console.log("cookie:" + cookie);
+ let img = json.body;
+ let code = OcrApi.classification(img);
+ console.log(`第${cnt+1}次验证码识别结果:${code}`);
+ let submit_url = `${host}/index.php/ajax/verify_check?type=search&verify=${code}`;
+ console.log(submit_url);
+ let html = request(submit_url, {
+ headers: {
+ Cookie: cookie,
+ "User-Agent": MOBILE_UA
+ },
+ method: "POST"
+ });
+ html = JSON.parse(html);
+ if (html.msg === "ok") {
+ console.log(`第${cnt+1}次验证码提交成功`);
+ return cookie
+ } else if (html.msg !== "ok" && cnt + 1 >= OCR_RETRY) {
+ cookie = ""
+ }
+ } catch (e) {
+ console.log(`第${cnt+1}次验证码提交失败:${e.message}`);
+ if (cnt + 1 >= OCR_RETRY) {
+ cookie = ""
+ }
+ }
+ cnt += 1
+ }
+ return cookie
+}
+function setItem(k, v) {
+ local.set(RKEY, k, v);
+ console.log(`规则${RKEY}设置${k} => ${v}`)
+}
+function getItem(k, v) {
+ return local.get(RKEY, k) || v
+}
+function clearItem(k) {
+ local.delete(RKEY, k)
+}
+function getHome(url) {
+ if (!url) {
+ return ""
+ }
+ let tmp = url.split("//");
+ url = tmp[0] + "//" + tmp[1].split("/")[0];
+ try {
+ url = decodeURIComponent(url)
+ } catch (e) {}
+ return url
+}
+function buildUrl(url, obj) {
+ obj = obj || {};
+ if (url.indexOf("?") < 0) {
+ url += "?"
+ }
+ let param_list = [];
+ let keys = Object.keys(obj);
+ keys.forEach(it => {
+ param_list.push(it + "=" + obj[it])
+ });
+ let prs = param_list.join("&");
+ if (keys.length > 0 && !url.endsWith("?")) {
+ url += "&"
+ }
+ url += prs;
+ return url
+}
+function require(url) {
+ eval(request(url))
+}
+function request(url, obj, ocr_flag) {
+ ocr_flag = ocr_flag || false;
+ if (typeof obj === "undefined" || !obj || obj === {}) {
+ if (!fetch_params || !fetch_params.headers) {
+ let headers = {
+ "User-Agent": MOBILE_UA
+ };
+ if (rule.headers) {
+ Object.assign(headers, rule.headers)
+ }
+ if (!fetch_params) {
+ fetch_params = {}
+ }
+ fetch_params.headers = headers
+ }
+ if (!fetch_params.headers.Referer) {
+ fetch_params.headers.Referer = getHome(url)
+ }
+ obj = fetch_params
+ } else {
+ let headers = obj.headers || {};
+ let keys = Object.keys(headers)
+ .map(it => it.toLowerCase());
+ if (!keys.includes("user-agent")) {
+ headers["User-Agent"] = MOBILE_UA
+ }
+ if (!keys.includes("referer")) {
+ headers["Referer"] = getHome(url)
+ }
+ obj.headers = headers
+ }
+ if (rule.encoding && rule.encoding !== "utf-8" && !ocr_flag) {
+ if (!obj.headers.hasOwnProperty("Content-Type") && !obj.headers.hasOwnProperty("content-type")) {
+ obj.headers["Content-Type"] = "text/html; charset=" + rule.encoding
+ }
+ }
+ if (typeof obj.body != "undefined" && obj.body && typeof obj.body === "string") {
+ if (!obj.headers.hasOwnProperty("Content-Type") && !obj.headers.hasOwnProperty("content-type")) {
+ obj.headers["Content-Type"] = "application/x-www-form-urlencoded; charset=" + rule.encoding
+ }
+ } else if (typeof obj.body != "undefined" && obj.body && typeof obj.body === "object") {
+ obj.data = obj.body;
+ delete obj.body
+ }
+ if (!url) {
+ return obj.withHeaders ? "{}" : ""
+ }
+ if (obj.toBase64) {
+ obj.buffer = 2;
+ delete obj.toBase64
+ }
+ 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.method = "POST";
+ return request(url, obj)
+}
+fetch = request;
+print = function(data) {
+ data = data || "";
+ if (typeof data == "object" && Object.keys(data)
+ .length > 0) {
+ try {
+ data = JSON.stringify(data);
+ console.log(data)
+ } catch (e) {
+ console.log(typeof data + ":" + data.length);
+ return
+ }
+ } else if (typeof data == "object" && Object.keys(data)
+ .length < 1) {
+ console.log("null object")
+ } else {
+ console.log(data)
+ }
+};
+log = print;
+
+function checkHtml(html, url, obj) {
+ if (/\?btwaf=/.test(html)) {
+ let btwaf = html.match(/btwaf(.*?)"/)[1];
+ url = url.split("#")[0] + "?btwaf" + btwaf;
+ print("宝塔验证访问链接:" + url);
+ html = request(url, obj)
+ }
+ return html
+}
+function getCode(url, obj) {
+ let html = request(url, obj);
+ html = checkHtml(html, url, obj);
+ return html
+}
+function getHtml(url) {
+ let obj = {};
+ if (rule.headers) {
+ obj.headers = rule.headers
+ }
+ let cookie = getItem(RULE_CK, "");
+ if (cookie) {
+ if (obj.headers && !Object.keys(obj.headers)
+ .map(it => it.toLowerCase())
+ .includes("cookie")) {
+ log("历史无cookie,新增过验证后的cookie");
+ obj.headers["Cookie"] = cookie
+ } else if (obj.headers && obj.headers.cookie && obj.headers.cookie !== cookie) {
+ obj.headers["Cookie"] = cookie;
+ log("历史有小写过期的cookie,更新过验证后的cookie")
+ } else if (obj.headers && obj.headers.Cookie && obj.headers.Cookie !== cookie) {
+ obj.headers["Cookie"] = cookie;
+ log("历史有大写过期的cookie,更新过验证后的cookie")
+ } else if (!obj.headers) {
+ obj.headers = {
+ Cookie: cookie
+ };
+ log("历史无headers,更新过验证后的含cookie的headers")
+ }
+ }
+ let html = getCode(url, obj);
+ return html
+}
+function homeParse(homeObj) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let classes = [];
+ if (homeObj.class_name && homeObj.class_url) {
+ let names = homeObj.class_name.split("&");
+ let urls = homeObj.class_url.split("&");
+ let cnt = Math.min(names.length, urls.length);
+ for (let i = 0; i < cnt; i++) {
+ classes.push({
+ type_id: urls[i],
+ type_name: names[i]
+ })
+ }
+ }
+ if (homeObj.class_parse) {
+ if (homeObj.class_parse.startsWith("js:")) {
+ var input = homeObj.MY_URL;
+ try {
+ eval(homeObj.class_parse.replace("js:", ""));
+ if (Array.isArray(input)) {
+ classes = input
+ }
+ } catch (e) {
+ log("通过js动态获取分类发生了错误:" + e.message)
+ }
+ } else {
+ let p = homeObj.class_parse.split(";");
+ let p0 = p[0];
+ let _ps = parseTags.getParse(p0);
+ let is_json = p0.startsWith("json:");
+ _pdfa = _ps.pdfa;
+ _pdfh = _ps.pdfh;
+ _pd = _ps.pd;
+ MY_URL = rule.url;
+ if (is_json) {
+ try {
+ let cms_cate_url = homeObj.MY_URL.replace("ac=detail", "ac=list");
+ let html = 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 = 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]) {
+ let exp = new RegExp(p[3]);
+ url = url.match(exp)[1]
+ }
+ classes.push({
+ type_id: url.trim(),
+ type_name: name.trim()
+ })
+ } catch (e) {
+ console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`)
+ }
+ })
+ }
+ }
+ } catch (e) {
+ console.log(e.message)
+ }
+ }
+ }
+ }
+ classes = classes.filter(it => !homeObj.cate_exclude || !new RegExp(homeObj.cate_exclude)
+ .test(it.type_name));
+ let resp = {
+ class: classes
+ };
+ if (homeObj.filter) {
+ resp.filters = homeObj.filter
+ }
+ console.log(JSON.stringify(resp));
+ return JSON.stringify(resp)
+}
+function getPP(p, pn, pp, ppn) {
+ try {
+ let ps = p[pn] === "*" && pp.length > ppn ? pp[ppn] : p[pn];
+ return ps
+ } catch (e) {
+ return ""
+ }
+}
+function homeVodParse(homeVodObj) {
+ fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
+ let d = [];
+ MY_URL = homeVodObj.homeUrl;
+ console.log(MY_URL);
+ let t1 = (new Date)
+ .getTime();
+ let p = homeVodObj.推荐;
+ print("p:" + p);
+ if (p === "*" && rule.一级) {
+ p = rule.一级;
+ homeVodObj.double = false
+ }
+ if (!p || typeof p !== "string") {
+ return "{}"
+ }
+ p = p.trim();
+ let pp = rule.一级.split(";");
+ if (p.startsWith("js:")) {
+ const TYPE = "home";
+ var input = MY_URL;
+ 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.图片替换 && 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)
+ }
+ 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.图片替换 && 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.一级.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.图片替换 && 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 is_tab_js = p.tabs.trim()
+ .startsWith("js:");
+ for (let i = 0; i < playFrom.length; i++) {
+ let tab_name = playFrom[i];
+ let tab_ext = p.tabs.split(";")
+ .length > 1 && !is_tab_js ? p.tabs.split(";")[1] : "";
+ let p1 = p.lists.replaceAll("#idv", tab_name)
+ .replaceAll("#id", i);
+ tab_ext = tab_ext.replaceAll("#idv", tab_name)
+ .replaceAll("#id", i);
+ let tabName = tab_ext ? _pdfh(html, tab_ext) : tab_name;
+ console.log(tabName);
+ let new_vod_list = [];
+ let tt1 = (new Date)
+ .getTime();
+ if (typeof pdfl === "function") {
+ new_vod_list = pdfl(html, p1, list_text, list_url, MY_URL)
+ } else {
+ let vodList = [];
+ try {
+ vodList = _pdfa(html, p1);
+ console.log("len(vodList):" + vodList.length)
+ } catch (e) {}
+ for (let i = 0; i < vodList.length; i++) {
+ let it = vodList[i];
+ new_vod_list.push(_pdfh(it, list_text)
+ .trim() + "$" + _pd(it, list_url, MY_URL))
+ }
+ }
+ if (new_vod_list.length > 0) {
+ new_vod_list = forceOrder(new_vod_list, "", x => x.split("$")[0]);
+ console.log(`drpy影响性能代码共计列表数循环次数:${new_vod_list.length},耗时:${(new Date).getTime()-tt1}毫秒`)
+ }
+ let vlist = new_vod_list.join("#");
+ vod_tab_list.push(vlist)
+ }
+ vod_play_url = vod_tab_list.join(vod_play_url)
+ }
+ }
+ vod.vod_play_url = vod_play_url
+ }
+ if (rule.图片替换 && rule.图片替换.includes("=>")) {
+ let replace_from = rule.图片替换.split("=>")[0];
+ let replace_to = rule.图片替换.split("=>")[1];
+ vod.vod_pic = vod.vod_pic.replace(replace_from, replace_to)
+ }
+ if (rule.图片来源 && vod.vod_pic && vod.vod_pic.startsWith("http")) {
+ vod.vod_pic = vod.vod_pic + rule.图片来源
+ }
+ if (!vod.vod_id || vod_id.includes("$") && vod.vod_id !== vod_id) {
+ vod.vod_id = vod_id
+ }
+ let t2 = (new Date)
+ .getTime();
+ console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);
+ vod = vodDeal(vod);
+ 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: 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.replace("js:", "")
+ .trim();
+ print("开始执行js免嗅=>" + lazy_code);
+ eval(lazy_code);
+ lazy_play = typeof input === "object" ? input : {
+ parse: 1,
+ jx: tellIsJx(input),
+ url: input
+ }
+ } catch (e) {
+ print("js免嗅错误:" + e.message);
+ lazy_play = common_play
+ }
+ } else {
+ lazy_play = common_play
+ }
+ if (Array.isArray(rule.play_json) && rule.play_json.length > 0) {
+ let web_url = lazy_play.url;
+ for (let pjson of rule.play_json) {
+ if (pjson.re && (pjson.re === "*" || web_url.match(new RegExp(pjson.re)))) {
+ if (pjson.json && typeof pjson.json === "object") {
+ let base_json = pjson.json;
+ lazy_play = Object.assign(lazy_play, base_json);
+ break
+ }
+ }
+ }
+ } else if (rule.play_json && !Array.isArray(rule.play_json)) {
+ let base_json = {
+ jx: 1,
+ parse: 1
+ };
+ lazy_play = Object.assign(lazy_play, base_json)
+ } else if (!rule.play_json) {
+ let base_json = {
+ jx: 0,
+ parse: 1
+ };
+ lazy_play = Object.assign(lazy_play, base_json)
+ }
+ console.log(JSON.stringify(lazy_play));
+ return JSON.stringify(lazy_play)
+}
+function 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 init(ext) {
+ console.log("init");
+ try {
+ let muban = 模板.getMubans();
+ if (typeof ext == "object") {
+ rule = ext
+ } else if (typeof ext == "string") {
+ if (ext.startsWith("http")) {
+ let js = request(ext, {
+ method: "GET"
+ });
+ if (js) {
+ eval(js.replace("var rule", "rule"))
+ }
+ } else {
+ eval(ext.replace("var rule", "rule"))
+ }
+ }
+ if (rule.模板 && muban.hasOwnProperty(rule.模板)) {
+ print("继承模板:" + rule.模板);
+ rule = Object.assign(muban[rule.模板], rule)
+ }
+ let rule_cate_excludes = (rule.cate_exclude || "")
+ .split("|")
+ .filter(it => it.trim());
+ let rule_tab_excludes = (rule.tab_exclude || "")
+ .split("|")
+ .filter(it => it.trim());
+ rule_cate_excludes = rule_cate_excludes.concat(CATE_EXCLUDE.split("|")
+ .filter(it => it.trim()));
+ rule_tab_excludes = rule_tab_excludes.concat(TAB_EXCLUDE.split("|")
+ .filter(it => it.trim()));
+ rule.cate_exclude = rule_cate_excludes.join("|");
+ rule.tab_exclude = rule_tab_excludes.join("|");
+ rule.host = (rule.host || "")
+ .rstrip("/");
+ 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)
+ }
+ }
+ 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 : "";
+ rule.sniffer = rule.hasOwnProperty("sniffer") ? rule.sniffer : "";
+ rule.sniffer = !! (rule.sniffer && rule.sniffer !== "0" && rule.sniffer !== "false");
+ rule.isVideo = rule.hasOwnProperty("isVideo") ? rule.isVideo : "";
+ 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) {
+ console.log("home");
+ let homeObj = {
+ filter: rule.filter || false,
+ MY_URL: rule.homeUrl,
+ class_name: rule.class_name || "",
+ class_url: rule.class_url || "",
+ class_parse: rule.class_parse || "",
+ cate_exclude: rule.cate_exclude
+ };
+ return homeParse(homeObj)
+}
+function homeVod(params) {
+ console.log("homeVod");
+ let homeVodObj = {
+ "推荐": rule.推荐,
+ double: rule.double,
+ homeUrl: rule.homeUrl,
+ detailUrl: rule.detailUrl
+ };
+ return homeVodParse(homeVodObj)
+}
+function category(tid, pg, filter, extend) {
+ let cateObj = {
+ url: rule.url,
+ "一级": rule.一级,
+ tid: tid,
+ pg: parseInt(pg),
+ filter: filter,
+ extend: extend
+ };
+ return categoryParse(cateObj)
+}
+function detail(vod_url) {
+ let orId = vod_url;
+ let fyclass = "";
+ 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 DRPY() {
+ return {
+ init: init,
+ home: home,
+ homeVod: homeVod,
+ category: category,
+ detail: detail,
+ play: play,
+ search: search,
+ proxy: proxy,
+ sniffer: sniffer,
+ isVideo: isVideo
+ }
+}
+export
+default {
+ init: init,
+ home: home,
+ homeVod: homeVod,
+ category: category,
+ detail: detail,
+ play: play,
+ search: search,
+ proxy: proxy,
+ sniffer: sniffer,
+ isVideo: isVideo,
+ DRPY: DRPY
+};
\ No newline at end of file
diff --git a/潇洒/js/jsencrypt.js b/摸鱼儿/api/jsencrypt.js
similarity index 100%
rename from 潇洒/js/jsencrypt.js
rename to 摸鱼儿/api/jsencrypt.js
diff --git a/摸鱼儿/jars/config.jar b/摸鱼儿/jars/config.jar
index 745764b..fc9e591 100644
Binary files a/摸鱼儿/jars/config.jar and b/摸鱼儿/jars/config.jar differ
diff --git a/摸鱼儿/jars/瓜子影视.jar b/摸鱼儿/jars/瓜子影视.jar
index 745764b..fc9e591 100644
Binary files a/摸鱼儿/jars/瓜子影视.jar and b/摸鱼儿/jars/瓜子影视.jar differ
diff --git a/摸鱼儿/js/guazi.js b/摸鱼儿/js/guazi.js
new file mode 100644
index 0000000..6570b87
--- /dev/null
+++ b/摸鱼儿/js/guazi.js
@@ -0,0 +1 @@
+H4sIAAAAAAACA+19eZMjx5Xf/4rQd4CaZB9CN+ouFIbRYuC+7xu0YlhHFqqAulAHLmoiaHvJJbUkxfVKjFiTlsTVekl7V14qLK8pciR9GaJn+Je/grMKQDeO6pkeSivtSgBJNCrzvcyXme9lvnq/zOQ3v/HNb4xZM2A6CghcBl795jcC8GPLtgLuBU4e/c2Hi5+/d3K+TJV0y4aJkm0b1j0EYQ05xDi2YPOjEK+rayrHVCAREjUMJKsJYFqQLRuR17/WVAjiFaiCpkfulgmLxHAyhON4CMPoEIW42QJrs96P0MDStTW3BViTl5o7NSEirKaom6ClC899+9vbxCzntghfpY0cmR/WvYx7AWyVKMqKDcwl4TqNV1jLuq+xqtcdP/w/i1//4hj+efzxG4u3Pj5efP+Tq4f/ePzoi4eP3/r8+NFPfg4TT7Y4l72BHePH5DFxTJMnW3XdO8mQVja6/gRxNtwk2WqtnkYIqyXZCNfLiFRb081BW9HJrmhIE2WUxEtFO60X2llLTXE1GR91R3qsP7VbrRqT7uGC03TKKi+JTsJJZLL4NCclSCndnTXm47CkqFR41qPZlIT0Db0PxESBmhFMbhQUHR4dD5UyA3rRSq5djFH1cAMggzCVA1wNkbkZaAhMD8sgEbUYk3OFXo9jgm3HaofTUpwakanwYF4hglVLwkdcZ1qvDgyhmK63TYvDHFUalhpG36TVThGlWXI0Hgloqh7Oj3LcmGo1+7PCVLRqViafmelWMFJiHadGNPFMKRnmes38LJWpIElU6qSCZkUVy8migUSRYKaOCeUGg4dVlJ8IeK9fHttmbJBi7bjdQx06NUdGmYRBKjPCwWM5SlVrhZpYDGrC1DEE0yzQZrsyZBuTAhe0WmMQJRyOtes218ODMTwdFRINbpwWQY/s0LhEOM0gzTBENsIKXNyedvSRMqyU21jSVLEKyLfqKREbxhKSUInHkkat1teoqhBTUhGyLM/qMpuZ1lq1cXIQxIxi1UkKYj7ahSorxWbNkY42InqyNlSiMquPtIqdiIbLFFub9PVKtirF4gk9majmguyoP6KosTaeNeutXGfQSsdH1ZQQkyajfKsUV2tyLJmt9atMpmhgumUVar1Gqkai8cQomc1Wq1Iinoxnq3osWox3DK6mziaJXmzYn01ivZjVn1VzXe9Prxu1oni1B1JamzJTrVFWatDl0pzvzGeKIAxQtmMkG0yrzfWskm7glFnOJtGeRuGV1nwUyeczelFsZKis5TRzuX5WUfPagJ5TtepQkUdss2VrPadbk/VYcW7jhRIlN5tiipzlxKGAYg10yjY6846RluwUEyxqXQKv9+Igr7U7eKUk9IbjqYY2uIqmjohxQ9BaehywWgNH04Qz0+hegRsbQOeFepKiCnbS5kTcQcVOONayC/FSw5zyg3pMDE9aPUKZ5kEmmSTVXLNDpypWwgpWizmuMsfa0VGFdfCxFW50M+NcGjTREhXBsgCdB7EMg4qKM52a4easzQzGJMGUhkw92MYTTMnp96WyNkRmeKFvUlw1OByWImnRcMxYpcBl5HwBKbAxSMsluBLoGmodTYSriDAkZvNYTJxzpeJwntWm+DyRLRLJHBYxo7NERJmzKtbvxRzCbnciFTzTA5KV5gBDq+2smzzuOERcskE5TnesaTZtZaIdi8aGdNbMoU48NQxrcn0m2NNcr4yRdDxmTqelONanemU0m283xkKqkMO54bDPksDSuim2HOSMaKsRx7kcZtUZhiKjSD+SxfNOdRhJpJtkN4xlh4ACSSWSI+08N2lYdK8BqvVRxJnFmkBz6qNKDc9hGSPMphN1NVKJ5zqgldEL+VaNFrCyHimQSr9pjPMmmgG0Gcdr4lx2yFE2MlPooJxIdeKjrCKa/W412GYyhEhMB1i/kjOCxValF+MbygCt1B19OhSj2jBeqswb80ywblemcasGp9aNdUeRVRmuY/R1iqA73pwvsooFVqmGws7uG6xpwXTbdNbJCjuf3Qs8P7BCtl63TVnrn56eBS6/s144PRpgBwS4lr783RdvEhGE1zVLV0BI0funRxNW688l+fLy8igoa4Zjn92QusvxWBfuy24hXmbIMhTZPj1Cjs5eRjdL9UjhEnMLLbZLawIogmPLuna5RfySR3xDKzoa71IFkhpvzgz7FHaHrDXA1D7bbOm6tUMwg9XHXUo9Vw8BjQ81bZEJef13eqSOO7F6OwyGJsjaJatxdPbifhny+ElF4E0Cqm+BsebRvIGmBntFwHFdfPrG1ft/efXhPy2+/9PFP7/x5WefB6LJOhKPxZFKPl6nKqwgwAELXP304eLhD/YlAMu2AmFTEFhCCOx2wrnb4vPdnnA/8vge/O98P0PVBahJ18W6jyEomQ+lsRRzgximhCpD3gpvEz9w+2CvFx6/+38XP3h/2QWPvvibqx9/uPjVvzz+9T+53ZEB06e33iW6vHkM8bIhAdOGzb7R+a1xggy7o2EC2zG1rTIhc9MwgBln4XieveiJ+tsfLj748eLvP1688be+sj3w0cgEWA7GRDeF1TjIY1+t3Kwdyr2rXq5MS+1yi/Ltyy9//dtHP/zET4muPvkISvr4tx88/ujtxx//DPb1fv3CUtJdbVoln/poz01X39uVfmfof48aeNNQ+LRs1zMp5Q2/20HPhRcf/ePi9dfvoqrQYJd9t3jv3Uf/9S+ufvTp1Tv/C6rq1Tt/B7V18e5PFh//1dKib+1cICxHdvV4i4a6M4m/sXgauCWET30rbd6s8kVfJXWnWFtWgWWzqgGl0sAkkGBtqO+hPrAbMAcuFkgAQ1HUNQB3Jbgm31kAXLW5zrtp1tlqxj4JnXhLwbqUs915fuRA1vvLiTlXL5dClleALM52Fe9I0FU4r923ZwY4uhc4Yo52lOdouRjBvOWP3ew1o7tk7vHerDiQ5OZhr4rlIubWsfy10b9n61ZutOr29uKwwetVa5PBpxB8pxRL7mssHGr3RfjE1odAg4Jcnnu/LjHXxQIMwBg2IrIYw+EcI1AkgdORiMAKaIjlUZQBAk2hooAyYU7kAC/iosBGBAYHEYagcIoAIk4yJAFoDmNEXsBwhsPQME2QkTDHixEBUkSoiEgR4TAvAJRgeBzl3QwsLNIoyUc4huNoQGMoiQlAZOgwHuFwkQ+TKMMJOIkBnOBxjGB5KiyiOE4DQFM0wDkOZSmGYAEKSJHgRJqnWY7myQjKR1haRAWGF0SBoGmW5UVKYAgsQtBhjGVEVxCMFTFRhI3ASEoAERzwsAk8E+ZFkhN4iiZEGuZFREDgDI1xKIgQHIYxgCfCAoMSlMhxBB+iIoKAUjwlRFiGBWGcpnAmDGvCGRx2BkaJgBZxHuUZWAsQBBYWgXNEmBR5WLAQjpwbkq4BT08vsfONcbw8CQS3VSAYODlnDcMdPuzcNSOPxPbSIYF12cswfUMwItx04KTxUj4ShppJ6OGmPA9GQCvJtopKEk8NiUE4WQNWkehmtGS818yEY+VSqTEwZuFaqyQjXVlNO6WuKcfDcdWajMlKqSunuvNJpCopo15+UhLjRTrbNFI9tEGavSmTDjPz4Ri3Sy1O7MbJUakKhLSMhrV2jyAEpe60prVyS+xSuWm5nSlm0ctvH8/HgvuPwInycDh0VFsVJiPDMF76Htn9lvUtnDNP1up9rcO36bZrH6pAbRDuse7aBacLs2uTOBjCH90Qjq/npuNNkzjeVvRVnrvOK5dTmdVV+QLHURzDMczkj59mBi/gsWcwhBfw1B/AFF4gEsdPs/vjazX2sjf03s1cTwrHrHB/DEzLfRPCro3HVfSzTTfB1X7JVhWo/SKween0tuCnF4SE/aM7Jg+QFlzDEsBmZQWxJH1S1sDJnq8mAVaAAtzz8+FO4iwvgYu4rtmmrpzcC5xo+gXvpp34OHYnrWVDXDqcRGkUp3zJKiw/ZPugxKrAJYVShxwR2hwnojxO0qERIIkItAAKhFSGZUWK5sI4xYZkEXA0GSZIWryterc8LBQJ4b4ENSACc0n0lNjxFlvnIu5Ytq4C8yKuyECzL7KGVxEeDqHwH8yXy+00l7YBbcKlhiOuyDzrOh3I9GIymVyIuqlewBGCniG0DcG3lIxu2Uvup8sJa9SA93LicuQBMC6iijz2HSsEOYnyPDDsi6RbO/TIXJ7+XDZ8i25asPHRPmyPS6YP3e5DiBCGh9CT3TeC7WdXle953zsZKrAlXYClVcr1BlTLm8+u0zuAjYrrS7ffDYH4uWSucexZjBuzX7udyzcsjyzkpm+FRHajIoL3ubz0wiI7XqvLfLbn9lkG5AcrP9clCW2m3fh8N2k7RbjT4JrV/b1mcX/vNcztzmVVR8VsNi70s7FoIlqK9YcjaSinIxM0Fq0mU9FoPR5Vo5N+P8dH+8loVE9HAS3lzXZBxuZVddBoYPqcS5JVIQVy6dLU4aaKQKfNVHoqq1OxaBVjdMzISQbf0J3oaDaJpgxDzgO7GYtxnUnX6jaxScmkSabTUitqvBifkWaXGQuKnNK4YnOAMnSiSfeCiN6JCe0mgXBYGk2UiGRk0izU6hM+32sQkwHCx7PY2IqrRH+A16j6aBiNdNF4dAJlruZj/WguEyTj0xaKzGMtviDH4plxPVpSUSWcAfaMa0jIADfQLmY1OqZORguTKBtvNMFIiA3acqGuR5TSJJFJzUbMvBNBg/3SlA3zVHLEt1uRlKq0OibTksTYnO/pmNYBJaGTaoTtKj5jJUQXbIGfBse1Yj2dEzAboYYUlxAik+i4K2QTnFKM9oMTOZ/vUXleiA6TUYyPs8NkiSyB6TBF2ZlKzazRnXIX6WTE4agzTUrFkVriYpEmQVpsI6cV2tlMnMl2ZhZdVedzAm3Y8/jAKY/ytdosmCoWyYYwycWiuWovVRlY6XiwNuLTVHPcKsrFiqRNAMJ1kkCqS3mGnuXySB9pynmzzIQlgk06VJ/PjWKzfmNExGIxPYOrAmGYSDsoNYvtmBWvVuOSKDWyppCQtbxMK7WpKcQ0DS1Lgz7OT5xRnprPmxEDKQXrkWk4PmQmzSxFJPIqM2jmkkw7mg63CwNEj5fbSSko83QpO2l4fTFAO4wmTelox+rHu7WRgg0VbmS31AITjFD5Xj5cgc1PI1lxUG3OCKOS1utsLywKIyfNcCNGn4lUUJgPkoje6PCxWT1Id2rVXLSCULw8w7gCUZKaksWWWzOKKmY6WmUg8I0OmmILcnDGdXpZMVvFK6TJYRG1NcJEUOTiHWkeLGBmmtFZm1K6edEAzJAhelFo75tr8L6ZrlK9IOHGvFKrR914CpzGPYM9X9Odne0UJ4/37f4J8cZrrtDmq+O+WE8MWt4UAmtfl7EniDs1uj75Oq61OVfdxLc259td9xwuZfuzLX4WgulrNvhzg8kL/d6AveuPB1XCr50FYxUER8/9/Jd7HnAcWjkzvkERC9jQMXIU+1RYyfDgbBMEvnr3k8fvvPekoLpH5hNX30zfW3JWfuHpMrp+tsXhzfbQDUhCl+pUtoG6XxnsJZjuLVnWBqkf4Sp+7Yr2yhrHxsgQRuAhigrhcPJVEJXzXB5DMhDD1MeyAJCxLiAvsfyl+6ArsmUfT4TL51+V7ZCHvj84fuXFvYqEkOFY0um+BKvRuw7ObGWt0Px1yX4kstr3CAyZ98sWgMV7+Sxv7uc/ONtJenC2Lfru875KeBnXevHlZ689+vzjr4WzHJCLA3JxQC4OyMUBuXgm5OJaSfvAdv0W4tQbpf1J8xAn/3ceJ3dXvKeGx0cJQ7eTOAcEWc0T1fRImbUoGXQ6cSIpsZVCNZgt52YZLSMq8QE1QcLJej6c6s8mxbHZH0y5KZoeKslUIUsGc5bUn9UBTRDlbM2ynaE9EeT4jIg3gmKhbjjTWC6RVcRONcGCDCH3sYkcQ3NWj0axTkZOTUC66JB2T9TqRqZPlDW9QGtzxHHMpizi5Tz5u4fH7xAi318Cbg2YH4Lmf+pB86caxwt4bMs8XsBTtxsIJL7dRGDm1zcSWO2NmfiFzldTwdeKmPuuM67O+y4vbpTPPoTPDuGzQ/jsXyt85u/LuaGgU2cZFztfY06+Tp0kXINcjq97fg1YrX74OOq3gg4+wMM+wZMQh60owtYyy2oaMHfiX8Ie1nALYrDk9sUMfJb0FVawYvJBC/x8gGeLWvpWevdA5T77M0QofXRiCX0+JTTpuxS4rE9+05BGlsOdFrv349FG0v89w+Hc/n75iDo6DxxhuPtNoO437v0++u4+jy0LSx7Mo3O/SI/P/aLJXRYvfuOeHfG2WwlWyHsoi9dy7bROFgOnS/pvXV4GLrAzP0tZdYEr/sse8Xd3Snng22VHXgw8cPXm+49fe/3qp7+Cr5Rfffja43/4j6tow+v/8uUX7y9ee3jr1rOVYe5Hdu+OJ98BS/7XwJGfiCF/Dfz42bHj3x03vitmfGe8+O5Y8R1x4r2diu6Uv1L0nY3iUHdh3raJfr19jl9rW+Oz7GYMHLEmYI/uBVxBU4WQ+xT43vcC6NlG+dD4YVNuiNz2QRr4Z4dqBljzhsx98ivLgPpfl+fetsfljGTppr1RPHxy+Y68jZM+zJAUUlai6SRMsL2Nj+5wbC1xd93Y6LtZ6zqOs1mCG9DxR5/WrsLRk/a3+BznO9p1LW498WC7H2iKnIvt+8FYLgTii2O5GeuF1v29wec+XqMzSwzoO7uT3zZmEtjHRTw0yN3a6p7y8/FLluDHNRVslS1rTgDO/2jgpfWhwJMANLyrD3559f6nj//yf58Ed8mDJ1998Iaf1+Oq2EbpFm/qfkJ4AM011Q1MswfgvfL8q9dksvAA2XhcifLglfNdx2pza8edkLsvP3/7DggNXM28/SAHkOYA0hxAmgNIcwBpfq8gDX4Aaf6cQZqqOpUpXm53uOp8aIb1YL1ZkptOdVpNigwSbc2a7S7ZQGJpie/Ess05qZVnmVhajETJPFdE5XyKmBmRYrgd7aKmaVGVudCIlmMkZSh8HZ/30ElT5viOk87hkVYrXWvn05NkZO7g48JEEvuDBssmjI5OmtwsGE5PO42hPc+p07EGyk2hCzJysNKzGpIyrmT/ICDNAZb5s4Zlds3hBTy2aRAv4Km1ScCffwijgAL4mgVMvzaM3zcss32Q4QDRHCCaA0RzgGgOEM0BonkGiGa5FBzQhAOacEc0YRXnK3bvN2uFJaYAf6wvl3nuueVVNCtDXGb6HEdY3khjAkNheXD7ScuT88DJydntV+t4xVzAz+XW7Tp70m7Fcn3vzlkJvIykfr0LenZkg1w3kvmW+28GVtm95GHlpnuIB3yNoJ/5mghV52QF+vdQTBftOPerwC398E72x34nO9o66fn7BaTwOwBSz4RHVRR2hrhXj2Q1UX8CHLU+mIr7nUyFGuuyv7hrr9LEEeC//Ytbj6TiZ7dfRUI83ay82054RXdWpuPuWPAxqy3DesrVKMTtApH+I0b4FUP6nMDDbxlHcjmO+yNJ3HUot47Oe4fmV0OJ34zl5hk4Yq86f/iQWMGH26eGNE1T1V1QagtL3DkUtgeAuAq3+OdfPf7FR25Q963Xrj58a2tnxo0b5VJWWJNVXU+qzLn+c2jMKrDrvEpCbr4fYKWwlu3xuQuBoyi+AMIX71796NNHX/yFK8SHry3ee/fLz1778rP/uXj9Pz/65U8XD19bfPxX/+/h24v3/nrx1jtXP/nvV2/9Bj4++uCXizc/hb/h95L+q//240f/43NYiOFWuNcQ2CmBUw9Eg7LctCcEfZe+LQUuAtiLMOs7lwEU/r248N0T426cuWF9Wf5uyKvLl3Z50d5N8334XvTn4kzADn3yHuztv7kFjLn6+c8Wb/7t448+efyb3ywe/mDx9q++ev2dvSuJbkbXzcoKRRa+k0FBr4UOqW7KKbLivDz9D0LwDNkd5mURG3fy7fFv5PkX4cIc//CfXBTOk/TqzfcW3/+JO+SfvuGh24v/8vZKBqgli/fehCriouFw5E0P2V2qz/4ep412+Q6RZ0FLYP0V98wiVOTlqcXnn3/1BnneKAX6Uw9eev7Vmwa5Ca+c3b4xamvlaZUT++8hG/A9fht+70YTr0ncg5YNtr+5G2Nnq8A10r8s0IEvUvzSk9+hdHNZ3tbNTXIvwY8QauUWHXz2IRNkE+wWuU7bIb/eDYDfsh3AS3WvsBRNXXV3Jvz1Z1/94uGjn/1o+0bnPXJvC8FycAe6rJ2ePHdytufyX+8CuHrvw0e//LvDOc3DFoDDFoDDFoDDFoDDOc3Da/bhnOYf8ZzmYQvA4WTm4WTmAfY/wP4H2P8A+/95wP47IftNDjdmf8vdj3+0DQO74lrsFH580IWbm+vO/v1vOdhptWYNB5Y2GQ4EDQzcCz9HI9gJo/1O8OCZs2fbvvAHhlGX1+9twcDPLWFgBIF5t4IxGObH5v5fWJ7t9BtMd8MLlne//kbp54EjmAzM+2NW8XDVo63DPXccEffUlmtEv8vN+7/TAbXDLpQ/pV0oX++k6g4o7N5Reddjh3t6vTp9eEf88ImnD59uQvAD6/vTO7S4AkU2KmAFwZ05/22fXHzw/wEbnUaU7nIAAA==
\ No newline at end of file
diff --git a/摸鱼儿/js/jp.js b/摸鱼儿/js/jp.js
new file mode 100644
index 0000000..5ba9817
--- /dev/null
+++ b/摸鱼儿/js/jp.js
@@ -0,0 +1,150 @@
+/**
+ * 影视TV 超連結跳轉支持
+ * https://t.me/fongmi_offical/
+ * https://github.com/FongMi/Release/tree/main/apk
+ */
+
+var rule = {
+ title: '荐片',
+ host: 'http://api2.rinhome.com',
+ homeUrl: '/api/tag/hand?code=unknown601193cf375db73d&channel=wandoujia',//网站的首页链接,用于分类获取和推荐获取
+ // url:'/api/crumb/list?area=0&category_id=fyclass&page=fypage&type=0&limit=24&fyfilter',
+ url: '/api/crumb/list?page=fypage&type=0&limit=24&fyfilter',
+ class_name: '全部&电影&电视剧&动漫&综艺', // 筛选 /api/term/ad_fenlei?limit=10&page=1
+ class_url: '0&1&2&3&4',
+ detailUrl: '/api/node/detail?channel=wandoujia&token=&id=fyid',//二级详情拼接链接(json格式用)
+ searchUrl: '/api/video/search?key=**&page=fypage',
+ searchable: 2,
+ quickSearch: 0,
+ filterable: 1,
+ filter: {
+ "0":[{"key":"area","name":"地區","value":[{"n":"全部","v":"0"},{"n":"国产","v":"1"},{"n":"中国香港","v":"3"},{"n":"中国台湾","v":"6"},{"n":"美国","v":"5"},{"n":"韩国","v":"18"},{"n":"日本","v":"2"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":"0"},{"n":"2023","v":"153"},{"n":"2022","v":"101"},{"n":"2021","v":"118"},{"n":"2020","v":"16"},{"n":"2019","v":"7"},{"n":"2018","v":"2"},{"n":"2017","v":"3"},{"n":"2016","v":"22"}]},{"key":"sort","name":"排序","value":[{"n":"热门","v":"hot"},{"n":"评分","v":"rating"},{"n":"更新","v":"update"}]}],
+ "1":[{"key":"cateId","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":"13"}]},{"key":"area","name":"地區","value":[{"n":"全部","v":"0"},{"n":"国产","v":"1"},{"n":"中国香港","v":"3"},{"n":"中国台湾","v":"6"},{"n":"美国","v":"5"},{"n":"韩国","v":"18"},{"n":"日本","v":"2"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":"0"},{"n":"2023","v":"153"},{"n":"2022","v":"101"},{"n":"2021","v":"118"},{"n":"2020","v":"16"},{"n":"2019","v":"7"},{"n":"2018","v":"2"},{"n":"2017","v":"3"},{"n":"2016","v":"22"}]},{"key":"sort","name":"排序","value":[{"n":"热门","v":"hot"},{"n":"评分","v":"rating"},{"n":"更新","v":"update"}]}],
+ "2":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"2"},{"n":"首推","v":"14"},{"n":"国产","v":"15"},{"n":"港台","v":"16"},{"n":"日韩","v":"17"},{"n":"海外","v":"18"}]},{"key":"area","name":"地區","value":[{"n":"全部","v":"0"},{"n":"国产","v":"1"},{"n":"中国香港","v":"3"},{"n":"中国台湾","v":"6"},{"n":"美国","v":"5"},{"n":"韩国","v":"18"},{"n":"日本","v":"2"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":"0"},{"n":"2023","v":"153"},{"n":"2022","v":"101"},{"n":"2021","v":"118"},{"n":"2020","v":"16"},{"n":"2019","v":"7"},{"n":"2018","v":"2"},{"n":"2017","v":"3"},{"n":"2016","v":"22"}]},{"key":"sort","name":"排序","value":[{"n":"热门","v":"hot"},{"n":"评分","v":"rating"},{"n":"更新","v":"update"}]}],
+ "3":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"3"},{"n":"首推","v":"19"},{"n":"海外","v":"20"},{"n":"日本","v":"21"},{"n":"国产","v":"22"}]},{"key":"area","name":"地區","value":[{"n":"全部","v":"0"},{"n":"国产","v":"1"},{"n":"中国香港","v":"3"},{"n":"中国台湾","v":"6"},{"n":"美国","v":"5"},{"n":"韩国","v":"18"},{"n":"日本","v":"2"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":"0"},{"n":"2023","v":"153"},{"n":"2022","v":"101"},{"n":"2021","v":"118"},{"n":"2020","v":"16"},{"n":"2019","v":"7"},{"n":"2018","v":"2"},{"n":"2017","v":"3"},{"n":"2016","v":"22"}]},{"key":"sort","name":"排序","value":[{"n":"热门","v":"hot"},{"n":"评分","v":"rating"},{"n":"更新","v":"update"}]}],
+ "4":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"4"},{"n":"首推","v":"23"},{"n":"国产","v":"24"},{"n":"海外","v":"25"},{"n":"港台","v":"26"}]},{"key":"area","name":"地區","value":[{"n":"全部","v":"0"},{"n":"国产","v":"1"},{"n":"中国香港","v":"3"},{"n":"中国台湾","v":"6"},{"n":"美国","v":"5"},{"n":"韩国","v":"18"},{"n":"日本","v":"2"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":"0"},{"n":"2023","v":"153"},{"n":"2022","v":"101"},{"n":"2021","v":"118"},{"n":"2020","v":"16"},{"n":"2019","v":"7"},{"n":"2018","v":"2"},{"n":"2017","v":"3"},{"n":"2016","v":"22"}]},{"key":"sort","name":"排序","value":[{"n":"热门","v":"hot"},{"n":"评分","v":"rating"},{"n":"更新","v":"update"}]}]
+ },
+ filter_url: 'area={{fl.area or "0"}}&sort={{fl.sort or "update"}}&year={{fl.year or "0"}}&category_id={{fl.cateId}}',
+ filter_def: {
+ 0:{cateId:'0'},
+ 1:{cateId:'1'},
+ 2:{cateId:'2'},
+ 3:{cateId:'3'},
+ 4:{cateId:'4'}
+ },
+ headers: {
+ 'User-Agent': 'jianpian-android/350',
+ 'JPAUTH': 'y261ow7kF2dtzlxh1GS9EB8nbTxNmaK/QQIAjctlKiEv'
+ },
+ timeout: 5000,
+ limit: 8,
+ play_parse: true,
+ play_json: [{
+ re: '*',
+ json: {
+ parse: 0,
+ jx: 0
+ }
+ }],
+ lazy: '',
+ 图片来源: '@Referer=www.jianpianapp.com@User-Agent=jianpian-version353',
+ // 推荐:'json:.video;*;*;*;*',
+ 推荐: `js:
+ var d = [];
+ let html = request(input);
+ html = JSON.parse(html).data[0].video;
+ html.forEach(it => {
+ d.push({
+ title: it.title,
+ img: it.path,
+ desc: it.playlist.title + ' ⭐' + it.score,
+ url: it.id
+ })
+ });
+ setResult(d);
+ `,
+ // 一级:'json:data;title;path;playlist.title;id',
+ 一级: `js:
+ cateObj.tid = cateObj.tid+'';
+ if (cateObj.tid.endsWith('_clicklink')) {
+ cateObj.tid = cateObj.tid.split('_')[0];
+ input = HOST + '/api/video/search?key=' + cateObj.tid + '&page=' + + MY_PAGE;
+ }
+ var d = [];
+ let html = request(input);
+ html = JSON.parse(html).data;
+ html.forEach(it => {
+ d.push({
+ title: it.title,
+ img: it.thumbnail||it.path,
+ desc: (it.mask || it.playlist.title) + ' ⭐' + it.score,
+ url: it.id
+ })
+ });
+ setResult(d);
+ `,
+ 二级: `js:
+ function getLink(data) {
+ let link = data.map(it => {
+ return '[a=cr:' + JSON.stringify({'id':it.name+'_clicklink','name':it.name}) + '/]' + it.name + '[/a]'
+ }).join(', ');
+ return link
+ }
+ try {
+ let html = request(input);
+ html = JSON.parse(html);
+ let node = html.data;
+ VOD = {
+ vod_id: node.id,
+ vod_name: node.title,
+ vod_pic: node.thumbnail,
+ type_name: node.types[0].name,
+ vod_year: node.year.title,
+ vod_area: node.area.title,
+ vod_remarks: node.score,
+ vod_actor: getLink(node.actors),
+ vod_director: getLink(node.directors),
+ vod_content: node.description.strip()
+ };
+ if (typeof play_url === 'undefined') {
+ var play_url = ''
+ }
+ let playMap = {};
+ if (node.have_ftp_ur == 1) {
+ playMap["边下边播,勤去清缓存"] = node.new_ftp_list.map(it => {
+ return it.title + "$" + (/m3u8/.test(it.url) ? play_url + it.url : "tvbox-xg:" + it.url)
+ }).join('#');
+ }
+ if (node.have_m3u8_ur == 1) {
+ playMap["在线点播普清版"] = node.new_m3u8_list.map(it => {
+ return it.title + "$" + (/m3u8/.test(it.url) ? play_url + it.url : "tvbox-xg:" + it.url)
+ }).join('#');
+ }
+ let playFrom = [];
+ let playList = [];
+ Object.keys(playMap).forEach(key => {
+ playFrom.append(key);
+ playList.append(playMap[key])
+ });
+ VOD.vod_play_from = playFrom.join('$$$');
+ VOD.vod_play_url = playList.join('$$$');
+ } catch (e) {
+ log("获取二级详情页发生错误:" + e.message);
+ }
+ `,
+ // 搜索:'json:data;*;thumbnail;mask;*',
+ 搜索: `js:
+ var d = [];
+ let html = request(input);
+ html = JSON.parse(html).data;
+ html.forEach(it => {
+ d.push({
+ title: it.title,
+ img: it.thumbnail,
+ desc: it.mask + ' ⭐' + it.score,
+ url: it.id
+ })
+ });
+ setResult(d);
+ `,
+}
\ No newline at end of file
diff --git a/摸鱼儿/js/jrk.js b/摸鱼儿/js/jrk.js
new file mode 100644
index 0000000..67ab29b
--- /dev/null
+++ b/摸鱼儿/js/jrk.js
@@ -0,0 +1,33 @@
+var rule = {
+ title:'JRKAN直播',
+ host:'http://www.jrkan2022.com/?lan=1',
+ // JRKAN备用域名:www.jrkankan.com / www.jrkan365.com / jrsyyds.com / www.jryyds.com / jrskan.com / jrsbxj.com /Jrkan备用域名1: www.jrkan2022.com 备用域名2: www.jrs23.com 备用域名2: www.jrskk.com 最新网址发布:www.qiumi1314.co
+
+ url:'/fyclass',
+ searchUrl:'/x/search/?q=**',
+ searchable:1,
+ quickSearch:1,
+ class_name:'全部',
+ class_url:'/',
+ //class_url:'?live',
+ headers:{
+ 'User-Agent':'MOBILE_UA'
+ },
+ timeout:5000,
+ play_parse:true,
+ lazy:"",
+ limit:6,
+ double:false,
+ 推荐:'*',
+ // 一级:'.loc_match:eq(2) ul;li:gt(1):lt(4)&&Text;img&&src;li:lt(2)&&Text;a:eq(1)&&href',//play.sportsteam333.com
+ 一级:"js:var items=[];pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;var html=request(input);var tabs=pdfa(html,'body&&.d-touch');tabs.forEach(function(it){var pz=pdfh(it,'.name:eq(1)&&Text');var ps=pdfh(it,'.name:eq(0)&&Text');var pk=pdfh(it,'.name:eq(2)&&Text');var img=pd(it,'img&&src');var url=pd(it,'a.me&&href');var timer=pdfh(it,'.lab_time&&Text');var parts = timer.split(' ');var dateParts = parts[0].split('-');var timeParts = parts[1].split(':');var year = new Date().getFullYear();var date = new Date(year, dateParts[0] - 1, dateParts[1], timeParts[0], timeParts[1]);var now = new Date();var hundredMinutesAgo = new Date(now.getTime() - 100 * 60 * 1000);if (date > hundredMinutesAgo) {timer = timer.split(' ')[1];items.push({desc:timer+ ' '+'🏆'+ps,title:pz+' 🆚 '+pk,pic_url:img,url:url})}});setResult(items);",
+ 二级:{
+ "title":".sub_list li:lt(2)&&Text;.sub_list li:eq(0)&&Text",
+ "img":"img&&src",
+ "desc":";;;.lab_team_home&&Text;.lab_team_away&&Text",
+ "content":".sub_list ul&&Text",
+ "tabs":"js:TABS=['实时直播']",
+ "lists":"js:LISTS=[];pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;let html=request(input);let data=pdfa(html,'.sub_playlist&&a');TABS.forEach(function(tab){let d=data.map(function(it){let name=pdfh(it,'strong&&Text');let url=pd(it,'a&&data-play');return name+'$'+url});LISTS.push(d)});",
+ },
+ 搜索:'js:let d=[];setResult(d);',
+}
\ No newline at end of file
diff --git a/摸鱼儿/js/去看吧.js b/摸鱼儿/js/去看吧.js
new file mode 100644
index 0000000..a8e1393
--- /dev/null
+++ b/摸鱼儿/js/去看吧.js
@@ -0,0 +1,19 @@
+muban.vfed.二级.title = 'h1&&Text;.fed-col-md3--span:eq(0)&&Text';
+muban.vfed.二级.desc = '.fed-col-md3:eq(3)&&Text;;;.fed-col-md6:eq(0)&&Text;.fed-col-md6--span:eq(1)&&Text';
+var rule = {
+ title: '去看吧',
+ 模板:'vfed',
+ host: 'https://www.k9dm.com',
+ // url: '/index.php/vod/show/id/fyclass/page/fypage.html',
+ url: '/index.php/vod/show/id/fyclassfyfilter.html',
+ filterable:1,//是否启用分类筛选,
+ filter_url:'{{fl.area}}{{fl.by}}{{fl.class}}/page/fypage{{fl.year}}',
+ filter:{
+ "33":[{"key":"class","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":"year","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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
+ "21":[{"key":"class","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":"area","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/其它"}]},{"key":"year","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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
+ "50":[{"key":"class","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":"area","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/其它"}]},{"key":"year","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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
+ "24":[{"key":"class","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":"area","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/其它"}]},{"key":"year","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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
+ "22":[{"key":"class","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":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"日本","v":"/area/日本"},{"n":"欧美","v":"/area/欧美"},{"n":"其他","v":"/area/其他"}]},{"key":"year","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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}]
+ },
+ class_parse: '.fed-pops-list:eq(0)&&li:gt(0):lt(6);a&&Text;a&&href;.*/(.*?).html',
+}
\ No newline at end of file
diff --git a/摸鱼儿/json/企鹅直播.json b/摸鱼儿/json/企鹅直播.json
new file mode 100644
index 0000000..e936ee2
--- /dev/null
+++ b/摸鱼儿/json/企鹅直播.json
@@ -0,0 +1,72 @@
+{
+ "author": "率性而活",
+ "ua":"Mozilla/5.0 (Linux; Android 8.1.0; OPPO R11t Build/OPM1.171019.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/11.19 SP-engine/2.15.0 baiduboxapp/11.19.5.10 (Baidu; P1 8.1.0)",
+//125.88.199.34 m.live.qq.com
+
+ //"dcVipFlag": "true",
+ //"dcPlayUrl": "true",
+ "homeUrl": "https://m.live.qq.com/directory/game/Basketball",
+ "cateManual": {
+ "篮球": "@directory/game/Basketball",
+ "足球":"@directory/game/Football",
+ "搏击":"@directory/game/Fight",
+ "网球排球":"@directory/game/Tennis",
+ "英文原声":"@directory/game/English",
+ "台球":"@directory/game/Billiards",
+ "棒球/橄榄球/冰球":"@directory/game/MLB",
+ "NBA":"@directory/game/NBA",
+ "CBA":"@directory/game/CBA",
+ "颜值":"@directory/game/YZ",
+ "棋牌/游戏":"@directory/game/Game"
+
+ },
+ "homeVodNode": "//a[contains(@href,'/10')]","homeVodName": "/div/following-sibling::p[1]/text()","homeVodId": "/@href","homeVodIdR": "/(\\S+)","homeVodImg": "//div[contains(@style,'http')]/@style","homeVodImgR": "(http.*?jpg)","homeVodMark": "",
+
+ "cateUrl2": "https://m.live.qq.com/{cateId}",
+
+ "cateVodNode": "//a[contains(@href,'/10')]",
+
+ "cateVodName": "/div/following-sibling::p[1]/text()",
+
+ "cateVodId": "/@href",
+
+ "cateVodIdR": "/(\\S+)",
+
+ "cateVodImg": "//div[contains(@style,'http')]/@style",
+
+ "cateVodImgR": "(http.*?jpg)",
+
+ "cateVodMark": "",
+
+
+ //
+ "dtUrl": "https://m.live.qq.com/{vid}",
+ "dtNode": "//body",
+ "dtName": "//p[contains(@class,'p-title')]/text()",
+ "dtNameR": "(“.*?”)",
+ "dtImg": "//div[contains(@class,'share-bar')]/@data-pic",
+ "dtImgR": "",
+ "dtCate": "",
+ "dtCateR": "",
+ "dtYear": "",
+ "dtYearR": "",
+ "dtArea": "",
+ "dtAreaR": "",
+ "dtDirector": "",
+ "dtDirectorR": "",
+ "dtActor": "",
+ "dtActorR": "",
+ "dtDesc": "",
+ "dtDescR": "",
+ "dtFromNode": "//p[contains(@class,'p-title')]",
+ "dtFromName": "/text()",
+ "dtFromNameR": "(\\企鹅体育)",
+ "dtUrlNode": "//div[contains(@class,'wenzi')]",
+ "dtUrlSubNode": "/a",
+ "dtUrlId": "/text()",
+ "dtUrlIdR": "m.live.qq.com/(\\S+)",
+ "dtUrlName": "/text()",
+ "dtUrlNameR": "(\\d+)",
+ "playUrl": "https://m.live.qq.com/{playUrl}",
+ "playUa":"{\"User-Agent\":\"okhttp/3.12.11\"}"
+}
\ No newline at end of file
diff --git a/摸鱼儿/txt/2.txt b/摸鱼儿/txt/2.txt
index 36f4aa3..338c4e7 100644
--- a/摸鱼儿/txt/2.txt
+++ b/摸鱼儿/txt/2.txt
@@ -1 +1 @@
-http://160.202.244.9:9788/
\ No newline at end of file
+http://160.202.244.9:2489
\ No newline at end of file
diff --git a/摸鱼儿/txt/89.txt b/摸鱼儿/txt/89.txt
new file mode 100644
index 0000000..fd0a371
--- /dev/null
+++ b/摸鱼儿/txt/89.txt
@@ -0,0 +1 @@
+http://app.555618.xyz:1766
\ No newline at end of file
diff --git a/欧歌/api.json b/欧歌/api.json
index 88d5e00..2fbdcfd 100644
--- a/欧歌/api.json
+++ b/欧歌/api.json
@@ -4,9 +4,9 @@
"spider": "./spider.jar",
"lives": [
{
- "name": "公众号【杰歌软件APP】如有收费,直接找退款!",
+ "name": "公众号【光歌软件分享】严谨用于任何商业用途!",
"type": 0,
- "url": "./lives/公众号【杰歌软件APP】如有收费,直接找退款!.txt",
+ "url": "./lives/公众号【光歌软件分享】严谨用于任何商业用途!.txt",
"epg": "http://cdn.1678520.xyz/epg/?ch={name}&date={date}"
},
{
@@ -19,20 +19,20 @@
"sites": [
{
"key": "豆瓣2",
- "name": "📢公众号【杰歌软件APP】如有收费,直接找退款!",
+ "name": "📢公众号【光歌软件分享】严谨用于任何商业用途!",
"type": 3,
"api": "csp_Douban",
"searchable": 0
},
{
"key": "豆瓣1",
- "name": "📢公众号【杰歌软件APP】如有收费,直接找退款!公告❤更新:7/9❤",
+ "name": "📢公众号【光歌软件分享】严谨用于任何商业用途!公告❤更新:7/11❤",
"type": 3,
"api": "csp_Notice",
"searchable": 0,
"changeable": 0,
"jar": "./jars/豆瓣1.jar",
- "ext": "https://xn--dkw0c.v.nxog.top/m/公告.php?b=公众号【杰歌软件APP】如有收费,直接找退款!"
+ "ext": "https://xn--dkw0c.v.nxog.top/m/公告.php?b=公众号【光歌软件分享】严谨用于任何商业用途!"
},
{
"key": "csp_woog",
@@ -51,7 +51,7 @@
],
"url_key": "woog",
"threadinfo": {
- "chunksize": 271,
+ "chunksize": 293,
"threads": 16
}
}
@@ -80,7 +80,7 @@
],
"url_key": "UC",
"threadinfo": {
- "chunksize": 229,
+ "chunksize": 260,
"threads": 60
}
}
@@ -111,7 +111,7 @@
],
"url_key": "woog2",
"threadinfo": {
- "chunksize": 225,
+ "chunksize": 215,
"threads": 16
}
}
diff --git a/欧歌/jars/csp_woog2.jar b/欧歌/jars/csp_woog2.jar
index e6cb60f..a57cb88 100644
Binary files a/欧歌/jars/csp_woog2.jar and b/欧歌/jars/csp_woog2.jar differ
diff --git a/欧歌/lives/AI直播.txt b/欧歌/lives/AI直播.txt
index bea2a76..5c54329 100644
--- a/欧歌/lives/AI直播.txt
+++ b/欧歌/lives/AI直播.txt
@@ -270,6 +270,7 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
海南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226574/1.m3u8
海南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226922/1.m3u8
河北卫视,http://171.15.18.199:8180/TV00000000000000000035@HHZT
+河北卫视,http://drive.mxmy.net:8888/udp/239.3.1.148:8072
河北卫视,http://php.fjl626.cn/hebei.php?id=hbws
河北卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010101
河北卫视,http://z.b.bkpcp.top/m.php?id=hbws
@@ -278,7 +279,6 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
河北卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8
河北卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010101/1.m3u8
河北卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227014/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErSGjhI3DMaaAASPrbQJYTg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
-河北卫视,http://[2409:8087:1a01:df::4035]:80/TVOD/88888888/224/3221225961/main.m3u8
河南卫视,http://tvpull.dxhmt.cn:9081/tv/11425-1.m3u8
河南卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226480
河南卫视,http://z.b.bkpcp.top/m.php?id=hnws
@@ -483,15 +483,15 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
延边卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8
延边卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227045/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eq0D3NdTUN7FuRzr8eJsbQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
浙江卫视,http://8.138.7.223/tv/zjws.m3u8
-浙江卫视,http://ali-m-l.cztv.com:80/channels/lantian/channel001/1080p.m3u8
+浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8
浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel01/1080p.m3u8
-浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8#mitv://generationnexxxt.com:19806/7bf4b3a65eaf421ab6d71bd8dcc4547a
浙江卫视,http://zwebl02.cztv.com/live/channel011080P.m3u8?auth_key=2524708799-0-0-9a1229d8b9d311024ebea08c3fb1d63f
浙江卫视,http://zhfivel02.cztv.com/channel01/1080p.m3u8?auth_key=2524708799-0-0-adde67b1b344fdd5e512f30a4ae31915
浙江卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010070
浙江卫视,http://z.b.bkpcp.top/m.php?id=zjws
浙江卫视,http://goo.bkpcp.top/mg/zjws
浙江卫视,http://l.cztvcloud.com/channels/lantian/SXpinghu3/720p.m3u8
+浙江卫视,http://[2409:8087:74f0:22::5]:6410/270000001128/9900000531/index.m3u8
安徽频道,#genre#
安徽导视,http://dspdhls.appcoo.com:8888/live/dspd/index.m3u8
@@ -541,6 +541,7 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
重庆频道,#genre#
重庆新闻,https://satellitepull.cnr.cn/live/wxcqxwgb/playlist.m3u8
+重庆汽摩,http://218.89.240.144:59901/tsfile/live/1010_1.m3u8?key=txiptv
重庆汽摩,rtsp://123.147.112.17:8089/04000001/01000000004000000000000000000371?AuthInfo=xxx&userid=gf001&userid=gf001
福建频道,#genre#
@@ -643,6 +644,7 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
湖北频道,#genre#
湖北综合,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072216f7da/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNLx3R3LdIBdA5q61lut1LwZcw4SC2tJubc%2Bq5t%2F61jvWCtjrJL0x%2BHncPgdmcbBW9I
+湖北经视,http://58.19.43.46:9901/tsfile/live/1017_1.m3u8
湖北影视,http://58.19.43.46:9901/tsfile/live/1016_1.m3u8
湖北教育,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072a6cbbf6/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNKTFQuOKNd5i0HMa3ydMWIQ6kJ2fBJGJ77BLTXK72CqUYQsX3ZguYt0954s9hfZTfc
湖北生活,http://satellitepull.cnr.cn/live/wx32hubczshgb/playlist.m3u8
@@ -677,12 +679,14 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
黑龙江少儿,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226304/index.m3u8
哈尔滨新闻综合,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226434
哈尔滨影视,http://111.43.126.240:9003/hls/5/index.m3u8
-哈尔滨影视,https://stream.hrbtv.net/yspd/sd/live.m3u8
哈尔滨影视,http://stream.hrbtv.net/yspd/sd/live.m3u8
+哈尔滨影视,https://stream.hrbtv.net/yspd/sd/live.m3u8
哈尔滨资讯,http://stream.hrbtv.net/zxpd/sd/live.m3u8
哈尔滨生活,http://111.43.126.240:9003/hls/3/index.m3u8
哈尔滨生活,https://stream.hrbtv.net/shpd/sd/live.m3u8
+哈尔滨生活,https://stream.hrbtv.net/shpd/playlist.m3u8
哈尔滨生活,http://stream.hrbtv.net/shpd/sd/live.m3u8
+哈尔滨娱乐,https://stream.hrbtv.net/ylpd/sd/live.m3u8
哈尔滨娱乐,http://stream.hrbtv.net/ylpd/sd/live.m3u8
吉林频道,#genre#
@@ -755,13 +759,13 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
安多卫视,https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd
山东频道,#genre#
+山东齐鲁,http://61.156.228.12:8154/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0
山东齐鲁,http://111.14.181.15:9901/tsfile/live/1000_1.m3u8
山东文旅,http://58.57.40.22:9901/tsfile/live/1023_1.m3u8
-山东综艺,http://111.14.181.15:9901/tsfile/live/1004_1.m3u8
山东综艺,http://123.129.70.178:9901/tsfile/live/1001_1.m3u8
+山东综艺,http://111.14.181.15:9901/tsfile/live/1004_1.m3u8
山东生活,http://ls.qingting.fm/live/60260.m3u8
山东新闻,http://ls.qingting.fm/live/60180.m3u8
-山东少儿,http://111.14.181.15:9901/tsfile/live/1005_1.m3u8
山西频道,#genre#
diff --git a/欧歌/lives/公众号【光歌软件分享】严谨用于任何商业用途!.txt b/欧歌/lives/公众号【光歌软件分享】严谨用于任何商业用途!.txt
new file mode 100644
index 0000000..4ef1132
--- /dev/null
+++ b/欧歌/lives/公众号【光歌软件分享】严谨用于任何商业用途!.txt
@@ -0,0 +1,6265 @@
+#EXTM3U x-tvg-url="https://py.nxog.eu.org/https://raw.githubusercontent.com/fanmingming/live/main/e.xml"
+#EXTINF:-1 group-title="🐲欧歌分享" tvg-name="欧歌免费分享" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AC%A7%E6%AD%8C%E5%85%8D%E8%B4%B9%E5%88%86%E4%BA%AB.png",欧歌免费分享
+https://xn--vusr00g.v.nxog.top/m/tv/xjj.php?id=0
+#EXTINF:-1 group-title="🐲欧歌分享" tvg-name="关注欧歌APP" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%85%B3%E6%B3%A8%E6%AC%A7%E6%AD%8CAPP.png",关注欧歌APP
+https://xn--vusr00g.v.nxog.top/m/tv/xjj.php?id=0&1
+#EXTINF:-1 group-title="🐲欧歌分享" tvg-name="接口软件永远免费" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%8E%A5%E5%8F%A3%E8%BD%AF%E4%BB%B6%E6%B0%B8%E8%BF%9C%E5%85%8D%E8%B4%B9.png",接口软件永远免费
+https://xn--vusr00g.v.nxog.top/m/tv/xjj.php?id=0&2
+#EXTINF:-1 group-title="🐲欧歌分享" tvg-name="长期维护切勿贩卖" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%95%BF%E6%9C%9F%E7%BB%B4%E6%8A%A4%E5%88%87%E5%8B%BF%E8%B4%A9%E5%8D%96.png",长期维护切勿贩卖
+https://xn--vusr00g.v.nxog.top/m/tv/xjj.php?id=0&3
+#EXTINF:-1 group-title="🐲欧歌分享" tvg-name="卡左右可换源" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%A1%E5%B7%A6%E5%8F%B3%E5%8F%AF%E6%8D%A2%E6%BA%90.png",卡左右可换源
+http://wb.xn--dkw.xn--6qq986b3xl:5244/d/%E5%A4%A9/og1.mp4
+#EXTINF:-1 group-title="🐲欧歌分享" tvg-name="网络收集随时失效" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BD%91%E7%BB%9C%E6%94%B6%E9%9B%86%E9%9A%8F%E6%97%B6%E5%A4%B1%E6%95%88.png",网络收集随时失效
+http://wb.xn--dkw.xn--6qq986b3xl:5244/d/%E5%A4%A9/og.mp4
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png",CCTV1
+http://39.134.67.108/PLTV/88888888/224/3221225816/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png",CCTV2
+http://39.134.67.108/PLTV/88888888/224/3221225599/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png",CCTV3
+http://39.134.67.108/PLTV/88888888/224/3221225799/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png",CCTV4
+http://39.134.67.108/PLTV/88888888/224/3221225797/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png",CCTV5
+http://39.134.67.108/PLTV/88888888/224/3221225818/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5%2B.png",CCTV5+
+http://39.134.67.108/PLTV/88888888/224/3221225507/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png",CCTV6
+http://39.134.67.108/PLTV/88888888/224/3221225814/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png",CCTV7
+http://39.134.67.108/PLTV/88888888/224/3221225671/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png",CCTV8
+http://39.134.67.108/PLTV/88888888/224/3221225795/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png",CCTV9
+http://39.134.67.108/PLTV/88888888/224/3221225676/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png",CCTV10
+http://39.134.67.108/PLTV/88888888/224/3221225677/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png",CCTV11
+http://39.134.67.108/PLTV/88888888/224/3221225517/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png",CCTV12
+http://39.134.67.108/PLTV/88888888/224/3221225669/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png",CCTV13
+http://39.134.67.108/PLTV/88888888/224/3221225812/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png",CCTV14
+http://39.134.67.108/PLTV/88888888/224/3221225674/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png",CCTV15
+http://39.134.67.108/PLTV/88888888/224/3221225513/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png",CCTV16
+http://39.134.67.108/PLTV/88888888/224/3221225893/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png",CCTV17
+http://39.134.67.108/PLTV/88888888/224/3221225708/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png",CCTV1
+http://39.134.65.175/PLTV/88888888/224/3221225816/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png",CCTV2
+http://39.134.65.175/PLTV/88888888/224/3221225599/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png",CCTV3
+http://39.134.65.175/PLTV/88888888/224/3221225799/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png",CCTV4
+http://39.134.65.175/PLTV/88888888/224/3221225797/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png",CCTV5
+http://39.134.65.175/PLTV/88888888/224/3221225818/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5%2B.png",CCTV5+
+http://39.134.65.175/PLTV/88888888/224/3221225507/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png",CCTV6
+http://39.134.65.175/PLTV/88888888/224/3221225814/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png",CCTV7
+http://39.134.65.175/PLTV/88888888/224/3221225671/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png",CCTV8
+http://39.134.65.175/PLTV/88888888/224/3221225795/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png",CCTV9
+http://39.134.65.175/PLTV/88888888/224/3221225676/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png",CCTV10
+http://39.134.65.175/PLTV/88888888/224/3221225677/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png",CCTV11
+http://39.134.65.175/PLTV/88888888/224/3221225517/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png",CCTV12
+http://39.134.65.175/PLTV/88888888/224/3221225669/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png",CCTV13
+http://39.134.65.175/PLTV/88888888/224/3221225812/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png",CCTV14
+http://39.134.65.175/PLTV/88888888/224/3221225674/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png",CCTV15
+http://39.134.65.175/PLTV/88888888/224/3221225513/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png",CCTV16
+http://39.134.65.173/PLTV/88888888/224/3221225893/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png",CCTV17
+http://39.134.67.108/PLTV/88888888/224/3221225708/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://39.134.65.173/PLTV/88888888/224/3221225506/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://39.134.65.173/PLTV/88888888/224/3221225977/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://39.134.65.71/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225610/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://39.134.65.173/PLTV/88888888/224/3221225503/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://39.134.65.177/PLTV/88888888/224/3221225938/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://39.134.65.173/PLTV/88888888/224/3221225672/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://39.134.65.173/PLTV/88888888/224/3221225942/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://39.134.65.162/PLTV/88888888/224/3221225931/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://39.134.65.173/PLTV/88888888/224/3221225678/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://39.134.65.173/PLTV/88888888/224/3221225514/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://39.134.65.173/PLTV/88888888/224/3221225959/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://39.134.65.173/PLTV/88888888/224/3221225950/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://39.134.65.77/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225620/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%A4%9A%E5%8D%AB%E8%A7%86.png",安多卫视
+http://39.134.65.78/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://39.134.65.71/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225612/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://39.134.64.87:6610/PLTV/88888888/224/3221226313/index.m3u8?IASHttpSessionId=
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://39.134.65.141/PLTV/88888888/224/3221225925/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
+http://39.134.65.67/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://39.134.65.173/PLTV/88888888/224/3221225966/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+http://39.134.65.141/PLTV/88888888/224/3221226024/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://39.134.65.149/PLTV/88888888/224/3221225974/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://39.134.65.173/PLTV/88888888/224/3221225974/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://39.134.65.79/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225626/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://39.134.65.173/PLTV/88888888/224/3221225978/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://39.134.65.75/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225639/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://39.134.65.173/PLTV/88888888/224/3221225961/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://39.134.65.173/PLTV/88888888/224/3221226060/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://39.134.65.173/PLTV/88888888/224/3221226122/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://39.134.65.173/PLTV/88888888/224/3221225975/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://39.134.65.70/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225627/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://39.134.65.149/PLTV/88888888/224/3221225981/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%B7%E5%B7%B4%E5%8D%AB%E8%A7%86.png",康巴卫视
+http://39.134.65.65/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://39.134.65.173/PLTV/88888888/224/3221225499/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://39.134.65.173/PLTV/88888888/224/3221226089/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://39.134.65.4/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225619/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
+http://39.134.65.78/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E5%8D%AB%E8%A7%86.png",宁夏卫视
+http://39.134.65.7/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225632/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+http://39.134.65.76/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225628/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山东教育卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E6%95%99%E8%82%B2%E5%8D%AB%E8%A7%86.png",山东教育卫视
+http://39.134.65.79/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225655/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://39.134.65.141/PLTV/88888888/224/3221225952/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+http://39.134.65.8/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225624/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+http://39.134.65.2/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225625/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://39.134.65.173/PLTV/88888888/224/3221225970/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://39.134.65.173/PLTV/88888888/224/3221225972/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E8%97%8F%E5%8D%AB%E8%A7%86.png",西藏卫视
+http://39.134.65.72/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225638/index.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
+http://39.134.65.181/PLTV/88888888/224/3221226040/1.m3u8
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png",CCTV1
+http://114.243.111.237:8888/udp/239.3.1.129:8008$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png",CCTV2
+http://114.243.111.237:8888/udp/239.3.1.60:8084$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png",CCTV3
+http://114.243.111.237:8888/udp/239.3.1.172:8001$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png",CCTV4
+http://114.243.111.237:8888/udp/239.3.1.105:8092$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png",CCTV5
+http://114.243.111.237:8888/udp/239.3.1.173:8001$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png",CCTV6
+http://114.243.111.237:8888/udp/239.3.1.174:8001$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png",CCTV7
+http://114.243.111.237:8888/udp/239.3.1.61:8104$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png",CCTV8
+http://114.243.111.237:8888/udp/239.3.1.175:8001$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png",CCTV9
+http://114.243.111.237:8888/udp/239.3.1.62:8112$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png",CCTV10
+http://114.243.111.237:8888/udp/239.3.1.63:8116$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png",CCTV11
+http://114.243.111.237:8888/udp/239.3.1.152:8120$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png",CCTV12
+http://114.243.111.237:8888/udp/239.3.1.64:8124$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png",CCTV13
+http://114.243.111.237:8888/udp/239.3.1.124:8128$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png",CCTV14
+http://114.243.111.237:8888/udp/239.3.1.65:8132$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png",CCTV15
+http://114.243.111.237:8888/udp/239.3.1.153:8136$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png",CCTV16
+http://114.243.111.237:8888/udp/239.3.1.183:8001$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png",CCTV16
+http://114.243.111.237:8888/udp/239.3.1.184:8001$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png",CCTV17
+http://114.243.111.237:8888/udp/239.3.1.151:8144$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5%2B.png",CCTV5+
+http://114.243.111.237:8888/udp/239.3.1.130:8004$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://114.243.111.237:8888/udp/239.3.1.211:8064$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://114.243.111.237:8888/udp/239.3.1.241:8000$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="兵团卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%85%B5%E5%9B%A2%E5%8D%AB%E8%A7%86.png",兵团卫视
+http://114.243.111.237:8888/udp/239.3.1.144:4120$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://114.243.111.237:8888/udp/239.3.1.136:8032$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://114.243.111.237:8888/udp/239.3.1.156:8148$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
+http://114.243.111.237:8888/udp/239.3.1.49:8188$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://114.243.111.237:8888/udp/239.3.1.142:8048$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+http://114.243.111.237:8888/udp/239.3.1.39:8300$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://114.243.111.237:8888/udp/239.3.1.149:8076$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://114.243.111.237:8888/udp/239.3.1.45:8304$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://114.243.111.237:8888/udp/239.3.1.148:8072$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://114.243.111.237:8888/udp/239.3.1.27:8128$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://114.243.111.237:8888/udp/239.3.1.133:8016$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://114.243.111.237:8888/udp/239.3.1.138:8044$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://114.243.111.237:8888/udp/239.3.1.132:8012$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://114.243.111.237:8888/udp/239.3.1.240:8172$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://114.243.111.237:8888/udp/239.3.1.135:8028$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://114.243.111.237:8888/udp/239.3.1.123:8164$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://114.243.111.237:8888/udp/239.3.1.210:8056$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="南方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E6%96%B9%E5%8D%AB%E8%A7%86.png",南方卫视
+http://114.243.111.237:8888/udp/239.3.1.161:8001$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
+http://114.243.111.237:8888/udp/239.3.1.43:8176$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E5%8D%AB%E8%A7%86.png",宁夏卫视
+http://114.243.111.237:8888/udp/239.3.1.46:8124$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+http://114.243.111.237:8888/udp/239.3.1.44:8184$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%89%E6%B2%99%E5%8D%AB%E8%A7%86.png",三沙卫视
+http://114.243.111.237:8888/udp/239.3.1.155:4120$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8E%A6%E9%97%A8%E5%8D%AB%E8%A7%86.png",厦门卫视
+http://114.243.111.237:8888/udp/239.3.1.143:4120$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://114.243.111.237:8888/udp/239.3.1.209:8052$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+http://114.243.111.237:8888/udp/239.3.1.42:8172$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+http://114.243.111.237:8888/udp/239.3.1.41:8140$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://114.243.111.237:8888/udp/239.3.1.134:8020$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://114.243.111.237:8888/udp/239.3.1.29:8288$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://114.243.111.237:8888/udp/239.3.1.141:1234$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E8%97%8F%E5%8D%AB%E8%A7%86.png",西藏卫视
+http://114.243.111.237:8888/udp/239.3.1.47:8164$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://114.243.111.237:8888/udp/239.3.1.48:8160$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
+http://114.243.111.237:8888/udp/239.3.1.26:8108$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://114.243.111.237:8888/udp/239.3.1.137:8036$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://114.243.111.237:8888/udp/239.3.1.122:8160$北京联通
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png",CCTV1
+http://bailudz.top:1236/111/hahahaha.php?id=cctv1$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png",CCTV2
+http://bailudz.top:1236/111/hahahaha.php?id=cctv2$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png",CCTV3
+http://bailudz.top:1236/111/hahahaha.php?id=cctv3$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png",CCTV4
+http://bailudz.top:1236/111/hahahaha.php?id=cctv4$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png",CCTV5
+http://bailudz.top:1236/111/hahahaha.php?id=cctv5$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png",CCTV6
+http://bailudz.top:1236/111/hahahaha.php?id=cctv6$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png",CCTV7
+http://bailudz.top:1236/111/hahahaha.php?id=cctv7$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png",CCTV8
+http://bailudz.top:1236/111/hahahaha.php?id=cctv8$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png",CCTV9
+http://bailudz.top:1236/111/hahahaha.php?id=cctv9$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png",CCTV10
+http://bailudz.top:1236/111/hahahaha.php?id=cctv10$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png",CCTV11
+http://bailudz.top:1236/111/hahahaha.php?id=cctv11$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png",CCTV12
+http://bailudz.top:1236/111/hahahaha.php?id=cctv12$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png",CCTV13
+http://bailudz.top:1236/111/hahahaha.php?id=cctv13$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png",CCTV14
+http://bailudz.top:1236/111/hahahaha.php?id=cctv14$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png",CCTV15
+http://bailudz.top:1236/111/hahahaha.php?id=cctv15$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png",CCTV16
+http://bailudz.top:1236/111/hahahaha.php?id=cctv16$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png",CCTV17
+http://bailudz.top:1236/111/hahahaha.php?id=cctv17$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5%2B.png",CCTV5+
+http://bailudz.top:1236/111/hahahaha.php?id=cctv5p$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A7%E6%B9%BE%E5%8C%BA%E5%8D%AB%E8%A7%86.png",大湾区卫视
+http://bailudz.top:1236/111/hahahaha.php?id=dwqws$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://bailudz.top:1236/111/hahahaha.php?id=dfws$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://bailudz.top:1236/111/hahahaha.php?id=dnws$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://bailudz.top:1236/111/hahahaha.php?id=gdws$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://bailudz.top:1236/111/hahahaha.php?id=hinws$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="海峡卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%B3%A1%E5%8D%AB%E8%A7%86.png",海峡卫视
+http://bailudz.top:1236/111/hahahaha.php?id=hxws$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://bailudz.top:1236/111/hahahaha.php?id=hnws$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://bailudz.top:1236/111/hahahaha.php?id=hubws$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://bailudz.top:1236/111/hahahaha.php?id=jlws$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://bailudz.top:1236/111/hahahaha.php?id=jsws$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://bailudz.top:1236/111/hahahaha.php?id=jxws$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://bailudz.top:1236/111/hahahaha.php?id=lnws$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+http://bailudz.top:1236/111/hahahaha.php?id=qhws$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://bailudz.top:1236/111/hahahaha.php?id=sdws$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+http://bailudz.top:1236/111/hahahaha.php?id=sxws$bailudz
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png",CCTV1
+http://tcpsit.vicp.net:8811/udp/225.1.8.1:8008
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png",CCTV2
+http://tcpsit.vicp.net:8811/udp/225.1.8.2:8084
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png",CCTV3
+http://tcpsit.vicp.net:8811/udp/225.1.8.88:8000
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png",CCTV4
+http://tcpsit.vicp.net:8811/udp/225.1.8.4:8092
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png",CCTV5
+http://tcpsit.vicp.net:8811/udp/225.1.8.89:8000
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png",CCTV6
+http://tcpsit.vicp.net:8811/udp/225.1.8.84:8000
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png",CCTV7
+http://tcpsit.vicp.net:8811/udp/225.1.8.7:8104
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png",CCTV8
+http://tcpsit.vicp.net:8811/udp/225.1.8.85:8000
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png",CCTV9
+http://tcpsit.vicp.net:8811/udp/225.1.8.9:8112
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png",CCTV10
+http://tcpsit.vicp.net:8811/udp/225.1.8.10:8116
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png",CCTV11
+http://tcpsit.vicp.net:8811/udp/225.1.8.73:8120
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png",CCTV12
+http://tcpsit.vicp.net:8811/udp/225.1.8.12:8124
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png",CCTV13
+http://tcpsit.vicp.net:8811/udp/225.1.8.168:8130
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png",CCTV14
+http://tcpsit.vicp.net:8811/udp/225.1.8.14:8132
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png",CCTV15
+http://tcpsit.vicp.net:8811/udp/225.1.8.74:8136
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png",CCTV17
+http://tcpsit.vicp.net:8811/udp/225.1.8.17:8144
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5%2B.png",CCTV5+
+http://tcpsit.vicp.net:8811/udp/225.1.8.20:8004
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.21:8002
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.41:8012
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.42:8016
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.43:8020
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.44:8028
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.45:8032
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.46:8036
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.47:8044
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.48:8044
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.49:8048
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.50:8052
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.51:8056
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.52:8064
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.76:8002
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.77:8076
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.79:8148
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.171:8166
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://tcpsit.vicp.net:8811/udp/225.1.8.172:8162
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png",CCTV1
+http://61.156.228.12:8154/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png",CCTV2
+http://61.156.228.12:8154/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png",CCTV3
+http://61.156.228.12:8154/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png",CCTV4
+http://61.156.228.12:8154/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png",CCTV5
+http://61.156.228.12:8154/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png",CCTV6
+http://61.156.228.12:8154/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png",CCTV7
+http://61.156.228.12:8154/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png",CCTV8
+http://61.156.228.12:8154/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png",CCTV9
+http://61.156.228.12:8154/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png",CCTV10
+http://61.156.228.12:8154/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png",CCTV11
+http://61.156.228.12:8154/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png",CCTV12
+http://61.156.228.12:8154/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png",CCTV13
+http://61.156.228.12:8154/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png",CCTV14
+http://61.156.228.12:8154/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png",CCTV15
+http://61.156.228.12:8154/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5%2B.png",CCTV5+
+http://61.156.228.12:8154/tsfile/live/0016_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png",CCTV17
+http://61.156.228.12:8154/tsfile/live/0019_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://61.156.228.12:8154/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://61.156.228.12:8154/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+http://61.156.228.12:8154/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://61.156.228.12:8154/tsfile/live/0123_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://61.156.228.12:8154/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://61.156.228.12:8154/tsfile/live/0116_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://61.156.228.12:8154/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://61.156.228.12:8154/tsfile/live/0127_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://61.156.228.12:8154/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://61.156.228.12:8154/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://61.156.228.12:8154/tsfile/live/0110_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
+http://61.156.228.12:8154/tsfile/live/0109_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://61.156.228.12:8154/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://61.156.228.12:8154/tsfile/live/0132_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://61.156.228.12:8154/tsfile/live/0121_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://61.156.228.12:8154/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://61.156.228.12:8154/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://61.156.228.12:8154/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+http://61.156.228.12:8154/tsfile/live/0118_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://61.156.228.12:8154/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://61.156.228.12:8154/tsfile/live/0143_1.m3u8?key=txiptv&playlive=1&authid=0$61156
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png",CCTV1
+http://110.80.17.38:9999/tsfile/live/0001_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png",CCTV2
+http://110.80.17.38:9999/tsfile/live/0002_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png",CCTV3
+http://110.80.17.38:9999/tsfile/live/0003_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png",CCTV4
+http://110.80.17.38:9999/tsfile/live/0004_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png",CCTV5
+http://110.80.17.38:9999/tsfile/live/0005_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png",CCTV6
+http://110.80.17.38:9999/tsfile/live/0006_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png",CCTV7
+http://110.80.17.38:9999/tsfile/live/0007_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png",CCTV8
+http://110.80.17.38:9999/tsfile/live/0008_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png",CCTV9
+http://110.80.17.38:9999/tsfile/live/0009_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png",CCTV10
+http://110.80.17.38:9999/tsfile/live/0010_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png",CCTV12
+http://110.80.17.38:9999/tsfile/live/0012_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png",CCTV13
+http://110.80.17.38:9999/tsfile/live/0013_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://110.80.17.38:9999/tsfile/live/0125_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+http://110.80.17.38:9999/tsfile/live/0113_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://110.80.17.38:9999/tsfile/live/0107_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="兵团卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%85%B5%E5%9B%A2%E5%8D%AB%E8%A7%86.png",兵团卫视
+http://110.80.17.38:9999/tsfile/live/0015_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://110.80.17.38:9999/tsfile/live/0122_2.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8E%A6%E9%97%A8%E5%8D%AB%E8%A7%86.png",厦门卫视
+http://110.80.17.38:9999/tsfile/live/0128_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://110.80.17.38:9999/tsfile/live/0123_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://110.80.17.38:9999/tsfile/live/0135_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E5%8D%AB%E8%A7%86.png",宁夏卫视
+http://110.80.17.38:9999/tsfile/live/0016_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://110.80.17.38:9999/tsfile/live/0130_2.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://110.80.17.38:9999/tsfile/live/0131_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+http://110.80.17.38:9999/tsfile/live/0118_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://110.80.17.38:9999/tsfile/live/0018_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://110.80.17.38:9999/tsfile/live/0127_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://110.80.17.38:9999/tsfile/live/0138_2.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://110.80.17.38:9999/tsfile/live/0117_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://110.80.17.38:9999/tsfile/live/0124_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://110.80.17.38:9999/tsfile/live/0132_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
+http://110.80.17.38:9999/tsfile/live/0141_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://110.80.17.38:9999/tsfile/live/0142_1.m3u8$11080
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png",CCTV1
+http://171.15.18.199:8180/TV00000000000000000001@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png",CCTV2
+http://171.15.18.199:8180/TV00000000000000000002@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png",CCTV3
+http://171.15.18.199:8180/TV00000000000000000003@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png",CCTV4
+http://171.15.18.199:8180/TV00000000000000000004@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png",CCTV5
+http://171.15.18.199:8180/TV00000000000000000005@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png",CCTV6
+http://171.15.18.199:8180/TV00000000000000000006@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png",CCTV7
+http://171.15.18.199:8180/TV00000000000000000007@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png",CCTV8
+http://171.15.18.199:8180/TV00000000000000000008@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png",CCTV9
+http://171.15.18.199:8180/TV00000000000000000009@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png",CCTV10
+http://171.15.18.199:8180/TV00000000000000000010@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png",CCTV11
+http://171.15.18.199:8180/TV00000000000000000011@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png",CCTV12
+http://171.15.18.199:8180/TV00000000000000000012@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png",CCTV13
+http://171.15.18.199:8180/TV00000000000000000013@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png",CCTV14
+http://171.15.18.199:8180/TV00000000000000000014@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png",CCTV15
+http://171.15.18.199:8180/TV00000000000000000015@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png",CCTV17
+http://171.15.18.199:8180/TV00000000000000000017@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://171.15.18.199:8180/TV00000000000000000018@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://171.15.18.199:8180/TV00000000000000000020@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://171.15.18.199:8180/TV00000000000000000021@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://171.15.18.199:8180/TV00000000000000000022@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://171.15.18.199:8180/TV00000000000000000024@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://171.15.18.199:8180/TV00000000000000000025@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://171.15.18.199:8180/TV00000000000000000026@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://171.15.18.199:8180/TV00000000000000000030@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://171.15.18.199:8180/TV00000000000000000031@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+http://171.15.18.199:8180/TV00000000000000000032@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://171.15.18.199:8180/TV00000000000000000033@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
+http://171.15.18.199:8180/TV00000000000000000034@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://171.15.18.199:8180/TV00000000000000000035@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://171.15.18.199:8180/TV00000000000000000036@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://171.15.18.199:8180/TV00000000000000000037@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+http://171.15.18.199:8180/TV00000000000000000038@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+http://171.15.18.199:8180/TV00000000000000000039@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://171.15.18.199:8180/TV00000000000000000040@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://171.15.18.199:8180/TV00000000000000000016@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://171.15.18.199:8180/TV00000000000000000027@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://171.15.18.199:8180/TV00000000000000000028@HHZT$17115
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png",CCTV1
+http://61.184.46.85:9901/tsfile/live/0001_1.m3u8$61184
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png",CCTV2
+http://61.184.46.85:9901/tsfile/live/0002_1.m3u8$61184
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png",CCTV3
+http://61.184.46.85:9901/tsfile/live/0003_1.m3u8$61184
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png",CCTV4
+http://61.184.46.85:9901/tsfile/live/0004_1.m3u8$61184
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png",CCTV5
+http://61.184.46.85:9901/tsfile/live/0005_1.m3u8$61184
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png",CCTV6
+http://61.184.46.85:9901/tsfile/live/0006_1.m3u8$61184
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png",CCTV7
+http://61.184.46.85:9901/tsfile/live/0007_1.m3u8$61184
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png",CCTV8
+http://61.184.46.85:9901/tsfile/live/0008_1.m3u8$61184
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png",CCTV9
+http://61.184.46.85:9901/tsfile/live/0009_1.m3u8$61184
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png",CCTV10
+http://61.184.46.85:9901/tsfile/live/0010_1.m3u8$61184
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png",CCTV11
+http://61.184.46.85:9901/tsfile/live/0011_1.m3u8$61184
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png",CCTV12
+http://61.184.46.85:9901/tsfile/live/0012_1.m3u8$61184
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png",CCTV13
+http://61.184.46.85:9901/tsfile/live/0013_1.m3u8$61184
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png",CCTV14
+http://61.184.46.85:9901/tsfile/live/0014_1.m3u8$61184
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png",CCTV15
+http://61.184.46.85:9901/tsfile/live/0015_1.m3u8$61184
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5%2B.png",CCTV5+
+http://61.184.46.85:9901/tsfile/live/0015_1.m3u8$61184
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://61.184.46.85:9901/tsfile/live/1011_1.m3u8?key=txiptv
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://61.184.46.85:9901/tsfile/live/1019_1.m3u8?key=txiptv
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://61.184.46.85:9901/tsfile/live/1018_1.m3u8?key=txiptv
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://61.184.46.85:9901/tsfile/live/1003_1.m3u8?key=txiptv
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://61.184.46.85:9901/tsfile/live/1004_1.m3u8?key=txiptv
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://61.184.46.85:9901/tsfile/live/1002_1.m3u8?key=txiptv
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://61.184.46.85:9901/tsfile/live/0018_1.m3u8?key=txiptv
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://61.184.46.85:9901/tsfile/live/1012_1.m3u8?key=txiptv
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://61.184.46.85:9901/tsfile/live/1013_1.m3u8?key=txiptv
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://61.184.46.85:9901/tsfile/live/1017_1.m3u8?key=txiptv
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://61.184.46.85:9901/tsfile/live/1016_1.m3u8?key=txiptv
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://61.184.46.85:9901/tsfile/live/1015_1.m3u8?key=txiptv
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png",CCTV1
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV1$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png",CCTV2
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV2$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png",CCTV3
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV3$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png",CCTV4
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV4$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png",CCTV5
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV5$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png",CCTV6
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV6$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png",CCTV7
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV7$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png",CCTV8
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV8$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png",CCTV9
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV9$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png",CCTV10
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV10$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png",CCTV11
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV11$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png",CCTV12
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV12$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png",CCTV13
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV13$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png",CCTV14
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV14$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png",CCTV15
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV15$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png",CCTV16
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV16$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png",CCTV17
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV17$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5%2B.png",CCTV5+
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=CCTV5+$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=安徽卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=北京卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=北京卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=东方卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=东方卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=东南卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=甘肃卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=广东卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=广西卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=贵州卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=海南卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=河北卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=河南卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=黑龙江卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=湖北卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=湖南卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=吉林卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=江苏卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=江西卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=辽宁卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=内蒙古卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E5%8D%AB%E8%A7%86.png",宁夏卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=宁夏卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=青海卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=山东卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=山西卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=陕西卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=深圳卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=四川卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=天津卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=浙江卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://cdn6.bkpcp.top/tl/tuiliu.php?id=重庆卫视$cdn6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png",CCTV1
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226559/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png",CCTV2
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226540/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png",CCTV3
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226021/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png",CCTV4
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226428/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png",CCTV5
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226019/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png",CCTV6
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226010/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png",CCTV7
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225733/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png",CCTV8
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226008/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png",CCTV9
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225734/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png",CCTV10
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226473/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png",CCTV11
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226565/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png",CCTV12
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226568/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png",CCTV13
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226537/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png",CCTV14
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226591/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png",CCTV15
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226476/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png",CCTV16
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226100/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png",CCTV17
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5%2B.png",CCTV5+
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225603/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%A4%9A%E5%8D%AB%E8%A7%86.png",安多卫视
+http://[2409:8087:1a0b:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="兵团卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%85%B5%E5%9B%A2%E5%8D%AB%E8%A7%86.png",兵团卫视
+http://[2409:8087:1a0b:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226439/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226549/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225799/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%B7%E5%B7%B4%E5%8D%AB%E8%A7%86.png",康巴卫视
+http://[2409:8087:1a0b:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E5%8D%AB%E8%A7%86.png",宁夏卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225632/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225628/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225624/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225625/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225635/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226444/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8$IPV6
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png",CCTV1
+http://36.36.200.198:44330/tsfile/live/0001_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png",CCTV2
+http://36.36.200.198:44330/tsfile/live/0002_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png",CCTV3
+http://36.36.200.198:44330/tsfile/live/0003_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png",CCTV4
+http://36.36.200.198:44330/tsfile/live/0004_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png",CCTV5
+http://36.36.200.198:44330/tsfile/live/0005_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png",CCTV6
+http://36.36.200.198:44330/tsfile/live/0007_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png",CCTV7
+http://36.36.200.198:44330/tsfile/live/0008_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png",CCTV8
+http://36.36.200.198:44330/tsfile/live/0009_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png",CCTV9
+http://36.36.200.198:44330/tsfile/live/0010_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png",CCTV10
+http://36.36.200.198:44330/tsfile/live/0011_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png",CCTV11
+http://36.36.200.198:44330/tsfile/live/0012_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png",CCTV12
+http://36.36.200.198:44330/tsfile/live/0013_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png",CCTV13
+http://36.36.200.198:44330/tsfile/live/0014_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png",CCTV14
+http://36.36.200.198:44330/tsfile/live/0015_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png",CCTV15
+http://36.36.200.198:44330/tsfile/live/0016_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5%2B.png",CCTV5+
+http://36.36.200.198:44330/tsfile/live/0006_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://36.36.200.198:44330/tsfile/live/0130_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://36.36.200.198:44330/tsfile/live/0122_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A7%E6%B9%BE%E5%8C%BA%E5%8D%AB%E8%A7%86.png",大湾区卫视
+http://36.36.200.198:44330/tsfile/live/1007_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://36.36.200.198:44330/tsfile/live/0139_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://36.36.200.198:44330/tsfile/live/0143_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://36.36.200.198:44330/tsfile/live/0132_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://36.36.200.198:44330/tsfile/live/0128_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://36.36.200.198:44330/tsfile/live/0116_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://36.36.200.198:44330/tsfile/live/0127_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://36.36.200.198:44330/tsfile/live/0138_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://36.36.200.198:44330/tsfile/live/0121_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://36.36.200.198:44330/tsfile/live/0131_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+http://36.36.200.198:44330/tsfile/live/0118_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+http://36.36.200.198:44330/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://36.36.200.198:44330/tsfile/live/0107_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://36.36.200.198:44330/tsfile/live/0018_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://36.36.200.198:44330/tsfile/live/0123_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://36.36.200.198:44330/tsfile/live/0135_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://36.36.200.198:44330/tsfile/live/0124_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://36.36.200.198:44330/tsfile/live/0142_1.m3u8?key=txiptv&playlive=0&authid=0$3636
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png",CCTV1
+webview://https://yangshipin.cn/tv/home?pid=600001859$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png",CCTV2
+webview://https://yangshipin.cn/tv/home?pid=600001800$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png",CCTV3
+http://fjbczqv52.live.bestvcdn.com.cn/SWKLTQFDHCED2WIBXZRZNZ7AEGRU3SUIPS4XJF637MLWKJXS2D2SL57D6ZHKSG7WL3JFZBAYROZMVJ6H3GL6QGYAZN67LFZ44BC4X52TSNYVJN55WY57BGEYX5XYVZJ6BXJFCTJP6VDKCJGVJU62L37XUU======/live/program/live/cctv3hd/4000000/mnf.m3u8$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png",CCTV4
+webview://https://yangshipin.cn/tv/home?pid=600001814$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png",CCTV5
+webview://https://yangshipin.cn/tv/home?pid=600001818$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png",CCTV6
+webview://https://yangshipin.cn/tv/home?pid=600108442$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png",CCTV7
+webview://https://yangshipin.cn/tv/home?pid=600004092$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png",CCTV8
+webview://https://yangshipin.cn/tv/home?pid=600001803$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png",CCTV9
+webview://https://yangshipin.cn/tv/home?pid=600004078$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png",CCTV10
+webview://https://yangshipin.cn/tv/home?pid=600001805$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png",CCTV11
+webview://https://yangshipin.cn/tv/home?pid=600001806$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png",CCTV12
+webview://https://yangshipin.cn/tv/home?pid=600001807$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png",CCTV13
+webview://https://yangshipin.cn/tv/home?pid=600001811$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png",CCTV14
+webview://https://yangshipin.cn/tv/home?pid=600001809$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png",CCTV15
+webview://https://yangshipin.cn/tv/home?pid=600001815$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png",CCTV16
+webview://https://yangshipin.cn/tv/home?pid=600098637$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png",CCTV17
+webview://https://yangshipin.cn/tv/home?pid=600001810$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5%2B.png",CCTV5+
+webview://https://yangshipin.cn/tv/home?pid=600001817$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+webview://https://yangshipin.cn/tv/home?pid=600002532$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+webview://https://yangshipin.cn/tv/home?pid=600002309$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+webview://https://yangshipin.cn/tv/home?pid=600002483$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+webview://https://yangshipin.cn/tv/home?pid=600002484$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
+webview://https://yangshipin.cn/tv/home?pid=600190408$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+webview://https://yangshipin.cn/tv/home?pid=600002485$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+webview://https://yangshipin.cn/tv/home?pid=600002509$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+webview://https://yangshipin.cn/tv/home?pid=600002490$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+webview://https://yangshipin.cn/tv/home?pid=600002506$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+webview://https://yangshipin.cn/tv/home?pid=600002493$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+webview://https://yangshipin.cn/tv/home?pid=600002525$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+webview://https://yangshipin.cn/tv/home?pid=600002498$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+webview://https://yangshipin.cn/tv/home?pid=600002508$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+webview://https://yangshipin.cn/tv/home?pid=600002475$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+webview://https://yangshipin.cn/tv/home?pid=600190405$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+webview://https://yangshipin.cn/tv/home?pid=600002521$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+webview://https://yangshipin.cn/tv/home?pid=600002503$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+webview://https://yangshipin.cn/tv/home?pid=600002505$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
+webview://https://yangshipin.cn/tv/home?pid=600190401$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E5%8D%AB%E8%A7%86.png",宁夏卫视
+webview://https://yangshipin.cn/tv/home?pid=600190737$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+webview://https://yangshipin.cn/tv/home?pid=600190406$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+webview://https://yangshipin.cn/tv/home?pid=600002513$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+webview://https://yangshipin.cn/tv/home?pid=600190407$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+webview://https://yangshipin.cn/tv/home?pid=600190400$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+webview://https://yangshipin.cn/tv/home?pid=600002481$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+webview://https://yangshipin.cn/tv/home?pid=600002516$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+webview://https://yangshipin.cn/tv/home?pid=600152137$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E8%97%8F%E5%8D%AB%E8%A7%86.png",西藏卫视
+webview://https://yangshipin.cn/tv/home?pid=600190403$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
+webview://https://yangshipin.cn/tv/home?pid=600190402$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+webview://https://yangshipin.cn/tv/home?pid=600002520$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+webview://https://yangshipin.cn/tv/home?pid=600002531$央视频
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png",CCTV1
+webview://https://tv.cctv.com/live/cctv1/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png",CCTV2
+webview://https://tv.cctv.com/live/cctv2/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png",CCTV3
+webview://https://tv.cctv.com/live/cctv3/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png",CCTV4
+webview://https://tv.cctv.com/live/cctv4/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png",CCTV5
+webview://https://tv.cctv.com/live/cctv5/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png",CCTV6
+webview://https://tv.cctv.com/live/cctv6/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png",CCTV7
+webview://https://tv.cctv.com/live/cctv7/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png",CCTV8
+webview://https://tv.cctv.com/live/cctv8/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png",CCTV9
+webview://https://tv.cctv.com/live/cctvjilu/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png",CCTV10
+webview://https://tv.cctv.com/live/cctv10/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png",CCTV11
+webview://https://tv.cctv.com/live/cctv11/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png",CCTV12
+webview://https://tv.cctv.com/live/cctv12/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png",CCTV13
+webview://https://tv.cctv.com/live/cctv13/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png",CCTV14
+webview://https://tv.cctv.com/live/cctv14/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png",CCTV15
+webview://https://tv.cctv.com/live/cctv15/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png",CCTV16
+webview://https://tv.cctv.com/live/cctv16/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png",CCTV17
+webview://https://tv.cctv.com/live/cctv17/$央视网
+#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5%2B.png",CCTV5+
+webview://https://tv.cctv.com/live/cctv5plus/$央视网
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
+http://ali-m-l.cztv.com/channels/lantian/channel15/1080p.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
+http://114.238.59.2:4000/rtp/239.49.8.19:9614
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
+http://60.26.181.220:4022/rtp/225.1.1.120:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
+http://111.162.205.201:8686/rtp/225.1.1.120:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
+http://114.238.59.148:4000/rtp/239.49.8.19:9614
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
+http://220.169.100.41:10087/udp/239.76.253.151:9000
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
+http://58.19.180.108:9981/stream/channelid/1198995092?profile=pass
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
+http://111.193.239.245:9999/rtp/239.3.1.129:8008
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
+http://php.jdshipin.com/TVOD/iptv.php?id=rthk33
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
+http://iptv.huuc.edu.cn/hls/cctv1hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://60.26.181.220:4022/rtp/225.1.1.133:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://219.141.44.245:8188/udp/238.255.2.11:5999
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://222.218.122.114:8188/udp/239.81.0.115:4056
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://omnix.cn:4000/udp/225.1.8.2:8084
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://nn.7x9d.cn/xzc2.php?ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA2LjAuMC4wIFNhZmFyaS81MzcuMzY=&hls=aHR0cDovL3d3dy5kc2suY2MvcGhwL3N4Z2QucGhwP2lkPWNjdHYy
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://114.238.59.148:4000/rtp/239.49.8.50:9802
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://27.18.157.225:2701/rtp/239.69.1.102:10250
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221225588
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://goo.bkpcp.top/mg/CCTV2
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://iptv.huuc.edu.cn/hls/cctv2hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
+http://b.zgjok.com:35455/mgtv/624878271.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
+http://60.26.181.220:4022/rtp/225.1.1.158:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
+http://111.162.205.201:8686/rtp/225.1.1.158:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
+http://171.15.18.199:8180/TV00000000000000000003@HHZT
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
+http://111.193.239.245:9999/rtp/239.3.1.172:8001
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
+http://180.165.29.204:4022/rtp/239.45.1.68:5140
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226021
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
+http://iptv.huuc.edu.cn/hls/cctv3hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
+https://smart.pendy.dpdns.org/Smart.php?id=cctv3
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
+http://[2409:8087:1a01:df::4041]/TVOD/88888888/224/3221225799/main.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
+http://60.26.181.220:4022/rtp/225.1.1.150:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
+https://global.cgtn.cicc.media.caton.cloud/master/cgtn-america.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
+http://101.74.30.190:9901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
+http://180.165.29.204:4022/rtp/239.45.0.2:5140
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226428
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
+http://z.b.bkpcp.top/m.php?id=CCTV-4国际
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
+http://iptv.huuc.edu.cn/hls/cctv4hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
+https://www.freetv.top/migu/631780421.m3u8?migutoken=fefc6a44400a0dd448699ae0ce3d6e2c5a0f49b8d48adb36e747c4fbab039337eb3244f9951acbddaf26b7bf51597a7d1b43c8845e67fd5914ece875dcad325bb388200bc0f12fdff727d03e2d
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
+https://smart.pendy.dpdns.org/Smart.php?id=cctv4
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226007/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+https://ldcctvwbcdbd.a.bdydns.com/ldcctvwbcd/cdrmldcctv5plus_1/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://60.26.181.220:4022/rtp/225.1.1.160:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://116.234.0.89:4022/rtp/239.45.1.69:5140
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://116.237.148.215:8881/rtp/239.45.1.69:5140
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://omnix.cn:4000/udp/225.1.8.89:8000
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://111.162.205.201:8686/rtp/225.1.1.160:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://180.165.29.204:4022/rtp/239.45.1.69:5140
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226019
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://iptv.huuc.edu.cn/hls/cctv5hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+https://www.freetv.top/migu/641886683.m3u8?migutoken=3e5c01f93922de8d1c940fe15bb47349b27e8f7a2e624dde1a83dff3b2a80f58b7624151a3a4d00488edee34f202818557340903382fae02bb754084eb942bd50e59061df36fab62fb5b908903
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://60.26.181.220:4022/rtp/225.1.1.121:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://omnix.cn:4000/udp/225.1.8.20:8004
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://114.226.231.231:8787/rtp/239.49.8.18:9610
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://111.162.205.201:8686/rtp/225.1.1.121:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://111.193.239.245:9999/rtp/239.3.1.130:8004
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221225603
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+https://www.freetv.top/migu/641886773.m3u8?migutoken=03a1b82e35e58cd89a95034ecb29e77e50493397000ec2b1e4d1ce59af01e6420d6dbc068c8230ec03be3a35a20eed8714e0959e3570a08713a7a2e8d86085eabf8f1aa85744c80c38343988b2
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225603/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+https://smart.pendy.dpdns.org/Smart.php?id=cctv5plus
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225603/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
+http://nn.7x9d.cn/xzc2.php?ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA2LjAuMC4wIFNhZmFyaS81MzcuMzY=&hls=aHR0cDovL3d3dy5kc2suY2MvcGhwL3N4Z2QucGhwP2lkPWNjdHY2
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
+http://60.26.181.220:4022/rtp/225.1.1.195:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
+http://111.162.205.201:8686/rtp/225.1.1.195:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
+http://219.141.44.245:8188/udp/238.255.2.135:5999
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
+http://111.193.239.245:9999/rtp/239.3.1.174:8001
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
+http://180.165.29.204:4022/rtp/239.45.1.70:5140
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226010
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
+http://iptv.huuc.edu.cn/hls/cctv6hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
+https://smart.pendy.dpdns.org/Smart.php?id=cctv6
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226010/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
+http://60.26.181.220:4022/rtp/225.1.1.138:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
+http://111.162.205.201:8686/rtp/225.1.1.138:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
+http://123.160.232.254:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
+http://219.141.44.245:8188/udp/238.255.2.12:5999
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
+http://omnix.cn:4000/udp/225.1.8.7:8104
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
+http://171.15.18.199:8180/TV00000000000000000007@HHZT
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221225733
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
+http://goo.bkpcp.top/mg/CCTV7
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
+http://iptv.huuc.edu.cn/hls/cctv7hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
+https://smart.pendy.dpdns.org/Smart.php?id=cctv7
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
+http://60.26.181.220:4022/rtp/225.1.1.196:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
+http://219.141.44.245:8188/udp/238.255.2.136:5999
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
+http://171.15.18.199:8180/TV00000000000000000008@HHZT
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
+http://111.193.239.245:9999/rtp/239.3.1.175:8001
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226008
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
+http://goo.bkpcp.top/mg/cctv8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
+http://iptv.huuc.edu.cn/hls/cctv8hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
+https://www.freetv.top/migu/624878356.m3u8?migutoken=170b73b07e0cf0d307afea3545da5b9609d7c15461a2f4ac0f43634101df9baf391a446b91e5f84446b6a3b0934bb4730e2f3c4a32a565f904f22c8ff745a094d45dfd49c54f31b0b78156a080
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
+http://[2409:8087:1a01:df::4051]:80/TVOD/88888888/224/3221225795/main.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
+https://smart.pendy.dpdns.org/Smart.php?id=cctv8hd
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+http://60.26.181.220:4022/rtp/225.1.1.119:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+http://111.162.205.201:8686/rtp/225.1.1.119:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+http://114.226.231.231:8787/rtp/239.49.8.53:9814
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+http://219.141.44.245:8188/udp/238.255.2.155:5999
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221225734
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+http://iptv.huuc.edu.cn/hls/cctv9hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+https://www.freetv.top/migu/673168140.m3u8?migutoken=749c49cdc31bb395e0349adc81010adc8707f80e51e9d3491ad67bfa71388ad768f7b52c8064338a7ef45eb7ddb192fb4937b21681c82499a0c16653ad9a9bec98ff5ce6ab183e4029bbdf269e
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+https://smart.pendy.dpdns.org/Smart.php?id=cctv9hd
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225734/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221225734/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
+http://60.26.181.220:4022/rtp/225.1.1.140:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
+http://171.15.18.199:8180/TV00000000000000000010@HHZT
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
+http://114.226.231.231:8787/rtp/239.49.8.54:9818
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
+http://111.162.205.201:8686/rtp/225.1.1.140:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
+http://z.b.bkpcp.top/m.php?id=CCTV-10科教科教
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
+http://goo.bkpcp.top/mg/cctv10
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
+http://iptv.huuc.edu.cn/hls/cctv10hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
+https://smart.pendy.dpdns.org/Smart.php?id=cctv10hd
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225730/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225730/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
+http://60.26.181.220:4022/rtp/225.1.2.192:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
+http://111.193.239.245:9999/rtp/239.3.1.152:8120
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226565
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
+http://iptv.huuc.edu.cn/hls/cctv11hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
+https://smart.pendy.dpdns.org/Smart.php?id=cctv11
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225597/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225597/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221225597/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225597/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225597/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
+http://114.226.231.231:8787/rtp/239.49.8.55:9822
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
+http://60.26.181.220:4022/rtp/225.1.1.142:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221225731
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
+http://z.b.bkpcp.top/m.php?id=CCTV-12社会与法社会与法
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
+http://iptv.huuc.edu.cn/hls/cctv12hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
+https://www.freetv.top/migu/673168185.m3u8?migutoken=37acadb43b1d7932b0a1e8a4f2d01a06b42a10c31f3ccb417bae200ac3028f30a8110509f2cd6cd130aee4b21c85693aa49817f3381e4d28e140d8db1a20b6fecea22fec17a70ff1341efe6081
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
+https://smart.pendy.dpdns.org/Smart.php?id=cctv12
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
+http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E2knJCFLHz_HqfBZXNGeA1A%7E_eNUb
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225731/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225731/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
+http://60.26.181.220:4022/rtp/225.1.2.193:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
+http://b.zgjok.com:35455/mgtv/608807423.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
+http://111.162.205.201:8686/rtp/225.1.2.193:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
+http://124.162.19.248:4022/udp/225.0.4.219:7980
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
+http://171.15.18.199:8180/TV00000000000000000013@HHZT
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
+http://home.yulei.online:9999/rtp/226.0.2.165:9232
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
+https://event.pull.hebtv.com/jishi/cp1.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
+http://z.b.bkpcp.top/m.php?id=cctv13
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
+http://j.x.bkpcp.top/jx/CCTV13HD
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
+http://ali-m-l.cztv.com/channels/lantian/channel21/1080p.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
+http://116.237.148.215:8881/rtp/239.45.3.23:5140
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
+http://27.18.157.225:2701/rtp/239.69.1.107:10280
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
+http://60.26.181.220:4022/rtp/225.1.1.144:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
+http://171.15.18.199:8180/TV00000000000000000014@HHZT
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
+http://111.193.239.245:9999/rtp/239.3.1.65:8132
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221225732
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
+http://iptv.huuc.edu.cn/hls/cctv14hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
+https://www.freetv.top/migu/624878440.m3u8?migutoken=239edad94ac0bbff14f123c7f8996ed7639110bd6cf64ec8ba8cf85842224956d452ec8b683385cb27f8a7685224a03e3aa4d914b8fe33249da9df699351b105c795452d03f2be0a1f1e39adb0
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
+https://event.pull.hebtv.com/jishi/cp2.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
+https://smart.pendy.dpdns.org/Smart.php?id=cctv14
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://60.26.181.220:4022/rtp/225.1.2.194:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://111.193.239.245:9999/rtp/239.3.1.153:8136
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221225641/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+https://www.freetv.top/migu/673168223.m3u8?migutoken=4e8d5766579c6bef231494cabd07e5b49d965804790214280c9791e4c331fd90311cb62ea43d3a1899229bfa57be4afe5a567b32a6b78153fc9a9801e28a39435e078b48c211e71d6083519be4
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+https://smart.pendy.dpdns.org/Smart.php?id=cctv15
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://[2409:8087:1a01:df::4033]:80/TVOD/88888888/224/3221226127/main.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225601/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225601/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225601/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225601/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
+http://60.26.181.220:4022/rtp/225.1.2.237:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
+http://117.12.149.38:4022/rtp/225.1.2.237:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
+http://27.18.157.225:2701/rtp/239.69.1.247:11124
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
+http://111.162.205.201:8686/rtp/225.1.2.237:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
+http://111.193.239.245:9999/rtp/239.3.1.184:8001
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226100
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
+http://livetv.wqwqwq.sbs/gaoma/cctv4k16.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226100/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226100/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226100/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
+http://60.26.181.220:4022/rtp/225.1.2.52:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
+http://b.zgjok.com:35455/mgtv/673168256.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
+http://111.193.239.245:9999/rtp/239.3.1.151:8144
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
+http://218.1.137.125:4022/rtp/239.45.3.52:5140
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
+http://180.165.29.204:4022/rtp/239.45.3.52:5140
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221225765
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
+http://[2409:8087:1a01:df::4025]:80/TVOD/88888888/224/3221225708/main.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/1.m3u8?icpid=88888888&from=1&hms_devid=1012&vqe=3
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225765/index.m3u8CCTV1
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225765/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CETV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV1.png",CETV1
+http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CETV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV1.png",CETV1
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226494/1.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CETV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV1.png",CETV1
+http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226673/1.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CETV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV1.png",CETV1
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221227021/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ELlgU9sgTT7iMtFgKHFa-dA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CETV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV2.png",CETV2
+http://[2409:8087:1a0b:df::4013]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CETV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV2.png",CETV2
+http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226718/1.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CETV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV2.png",CETV2
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226537/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7AxXs4eTU2oiWrhopr9sHw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNxsM0Bor098BJglrhfEQTl%2CEND
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CETV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV2.png",CETV2
+http://[2409:8087:74d6:22::7]:6410/270000001128/9900000071/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CETV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV4.png",CETV4
+http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CETV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV4.png",CETV4
+http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226724/1.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CETV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV4.png",CETV4
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226997/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EAw_OvjRgJVjtlaOa0dcgzg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CETV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV4.png",CETV4
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221226997/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EAw_OvjRgJVjtlaOa0dcgzg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://satellitepull.cnr.cn/live/wxgdws/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://60.26.181.220:4022/rtp/225.1.1.116:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://171.15.18.199:8180/TV00000000000000000031@HHZT
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://111.193.239.245:9999/rtp/239.3.1.142:8048
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://218.1.137.125:4022/rtp/239.45.3.230:5140
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://z.b.bkpcp.top/m.php?id=gdws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://j.x.bkpcp.top/jx/GUANGDHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://goo.bkpcp.top/mg/gdws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://iptv.huuc.edu.cn/hls/gdhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873459.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="香港卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86.png",香港卫视
+http://cctvtxyh5c.liveplay.myqcloud.com/cstv/xianggangweishi_2/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="香港卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86.png",香港卫视
+https://stream1.freetv.fun/ae7eaf28d8610cdc1651ef6a1f7dbb24b49c5a87627d0d881330afaea37a1616.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="香港卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86.png",香港卫视
+https://stream1.freetv.fun/xiang-gang-wei-shi-7.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="香港卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86.png",香港卫视
+https://stream1.freetv.fun/79e4d77e2f29a2ca7f7cabbbe2ee02d32a4f2f7fb91ae94d0fb9573c9f94b4ab.ctv
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="香港卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86.png",香港卫视
+https://stream1.freetv.fun/xiang-gang-wei-shi-11.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="香港卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86.png",香港卫视
+https://stream1.freetv.fun/xiang-gang-wei-shi-13.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="香港卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86.png",香港卫视
+https://stream1.freetv.fun/xiang-gang-wei-shi-8.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="香港卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86.png",香港卫视
+https://stream1.freetv.fun/c751876ae5ceaa0d82b5cf2badc152342aa92a4b45bf504d12ee45966b2fc644.ctv
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://139.155.142.13:9177/miguHD.php?id=浙江卫视
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://27.18.157.225:2701/rtp/239.254.96.143:8932
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://114.226.231.231:8787/rtp/239.49.8.20:9618
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://60.26.181.220:4022/rtp/225.1.1.112:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://joyznm.i234.me:20000/udp/239.3.1.137:8036
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://171.15.18.199:8180/TV00000000000000000020@HHZT
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://zwebl02.cztv.com/live/channel011080P.m3u8?auth_key=2524708799-0-0-9a1229d8b9d311024ebea08c3fb1d63f
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://zhfivel02.cztv.com/channel01/1080p.m3u8?auth_key=2524708799-0-0-adde67b1b344fdd5e512f30a4ae31915
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010070
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://z.b.bkpcp.top/m.php?id=zjws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://60.26.181.220:4022/rtp/225.1.1.114:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://114.226.231.231:8787/rtp/239.49.8.12:9418
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://171.15.18.199:8180/TV00000000000000000018@HHZT
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010058
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://z.b.bkpcp.top/m.php?id=hunws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://j.x.bkpcp.top/jx/HUNANHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://iptv.huuc.edu.cn/hls/hunanhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873458.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225610/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226493/1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://satellitepull.cnr.cn/live/wxbtv/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://116.237.148.215:8881/rtp/239.45.3.229:5140
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://60.26.181.220:4022/rtp/225.1.1.113:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://zqh2333.top:2222/rtp/239.93.24.180:5140
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010143
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://z.b.bkpcp.top/m.php?id=bjws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://j.x.bkpcp.top/jx/BEIJHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226436/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ElMQ3ov45VmhzipweN5VstQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPg_yZ8DZHTaSU92MIl_o3b%2CEND
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://iptv.huuc.edu.cn/hls/btv1hd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+https://smart.pendy.dpdns.org/Smart.php?id=beijing
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://satellitepull.cnr.cn/live/wx32hubws/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://60.26.181.220:4022/rtp/225.1.1.147:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://joyznm.i234.me:20000/udp/239.3.1.138:8044
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://114.226.231.231:8787/rtp/239.49.8.8:9632
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://111.193.239.245:9999/rtp/239.3.1.138:8044
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://180.165.29.204:4022/rtp/239.45.3.239:5140
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010057
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://z.b.bkpcp.top/m.php?id=hubws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://j.x.bkpcp.top/jx/HUBEIHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://goo.bkpcp.top/mg/hubws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://satellitepull.cnr.cn/live/wx32hljws/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://116.237.148.215:8881/rtp/239.45.3.232:5140
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://114.226.231.231:8787/rtp/239.49.8.14:9426
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://60.26.181.220:4022/rtp/225.1.1.115:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010056
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://j.x.bkpcp.top/jx/HEILJHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://l.cztvcloud.com/channels/lantian/SXyuyao3/720p.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://iptv.huuc.edu.cn/hls/hljhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873470.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://z.b.bkpcp.top/m.php?id=hljws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://203.205.191.53/live.ahsx.ahtv.cn/live/ahwssx.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://satellitepull.cnr.cn/live/wxahws/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://joyznm.i234.me:20000/udp/239.3.1.211:8064
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://60.26.181.220:4022/rtp/225.1.1.127:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://114.226.231.231:8787/rtp/239.49.8.204:6000
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://111.193.239.245:9999/rtp/239.3.1.211:8064
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226391
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://j.x.bkpcp.top/jx/ANHUIHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://iptv.huuc.edu.cn/hls/ahhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873469.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://satellitepull.cnr.cn/live/wxcqws/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://60.26.181.220:4022/rtp/225.1.1.155:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://114.226.231.231:8787/rtp/239.49.8.57:9830
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://123.160.232.254:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://171.15.18.199:8180/TV00000000000000000030@HHZT
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://111.193.239.245:9999/rtp/239.3.1.122:8160
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010053
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://z.b.bkpcp.top/m.php?id=cqws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://j.x.bkpcp.top/jx/CHONGQHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://iptv.huuc.edu.cn/hls/cqhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://60.26.181.220:4022/rtp/225.1.2.31:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://p.ytelc.com/m3u8.html?id=http://cc-ynbit-wszhibo.ifengli.com:2000/live/shdfws-hd/2500.m3u8?innersid=6998114529464369318
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010054
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://z.b.bkpcp.top/m.php?id=dfws#rtsp://115.85.232.19/PLTV/88888910/224/3221225531/10000100000000060000000000107311_0.smil
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://goo.bkpcp.top/mg/dfws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://iptv.huuc.edu.cn/hls/dfhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+https://www.freetv.top/migu/651632648.m3u8?migutoken=67b4219a3e6acdcf288118ed6bf84d3197052966f0bc854079b6038b3fca6437744ca78bb0ea1fad6f61b4c73d0df57bd8b539ec247fd28ce16d1375716bbf774ea19c99e4585bb828fa3851c0
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873462.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+https://bp-cdn-ali.bestv.cn/enhance/bestvdfws_enhance.m3u8?auth_key=1746334807-ddb61092a75249868c8bd1834313f437-0-8a760296d281d86bc4612f5fc4f85247
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+https://live.lalifeier.eu.org/kankanews/dfws.m3u8?t=1746372302&key=04c79ed1fd72dbd3188040c54dc3858b
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://satellitepull.cnr.cn/live/wx32fjws/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://115.171.80.94:1688/udp/225.1.8.79:8148
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://123.160.232.254:9901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://219.141.44.245:8188/udp/238.255.2.103:5999
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://111.193.239.245:9999/rtp/239.3.1.156:8148
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://171.15.18.199:8180/TV00000000000000000033@HHZT
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://180.165.29.204:4022/rtp/239.45.1.121:5140
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010096
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://z.b.bkpcp.top/m.php?id=dnws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://j.x.bkpcp.top/jx/DONGNHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
+http://222.218.122.114:8188/udp/239.81.0.207:4056
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
+http://live.zohi.tv/video/s10001-fztv-3/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010098
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
+http://z.b.bkpcp.top/m.php?id=gsws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
+http://j.x.bkpcp.top/jx/GSWS
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
+http://goo.bkpcp.top/mg/gsws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887450.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226545/1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226913/1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
+http://[2409:8c02:21c:60::2b]/live.rxip.sc96655.com/live/gsws_4000.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+http://60.26.181.220:4022/rtp/225.1.2.81:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+http://123.160.232.254:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+http://180.165.29.204:4022/rtp/239.45.0.5:5140
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+http://218.1.137.125:4022/rtp/239.45.0.5:5140
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226549
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+http://z.b.bkpcp.top/m.php?id=gxws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+https://mobilelive.gxtv.cn/live/gx_live1004/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+http://goo.bkpcp.top/mg/gxws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+http://live.cztv.cc:85/live/ggpd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+https://hlscdn.liangtv.cn/live/de0f97348eb84f62aa6b7d8cf0430770/dd505d87880c478f901f38560ca4d4e6.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://115.171.80.94:1688/udp/225.1.8.77:8076
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://219.141.44.245:8188/udp/238.255.2.1:5999
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://60.26.181.220:4022/rtp/225.1.2.28:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://111.193.239.245:9999/rtp/239.3.1.149:8076
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226474
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://z.b.bkpcp.top/m.php?id=gzws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://j.x.bkpcp.top/jx/GUIZHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://goo.bkpcp.top/mg/gzws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225974/main.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873471.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://satellitepull.cnr.cn/live/wxhainlyws/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://116.237.148.215:8881/rtp/239.45.1.81:5140
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://171.15.18.199:8180/TV00000000000000000028@HHZT
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://218.1.137.125:4022/rtp/239.45.1.81:5140
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010083
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://z.b.bkpcp.top/m.php?id=hinws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://j.x.bkpcp.top/jx/HAINHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://goo.bkpcp.top/mg/hinws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000004796877.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226465/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://satellitepull.cnr.cn/live/wxhebws/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://222.218.122.114:8188/udp/239.81.0.94:4056
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://116.237.148.215:8881/rtp/239.45.1.44:5140
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://27.18.157.225:2701/rtp/239.254.96.113:9616
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://114.226.231.231:8787/rtp/239.49.8.188:6000
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://60.26.181.220:4022/rtp/225.1.2.27:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://111.193.239.245:9999/rtp/239.3.1.148:8072
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010101
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+http://z.b.bkpcp.top/m.php?id=hbws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+https://jwplay.hebyun.com.cn/live/hbwstv/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://satellitepull.cnr.cn/live/wxhnws/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://xxwx.yoesun.com/xxw/河南网.php
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://xxwx.yoesun.com/xxw/河南网.php?id=hnws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://150.158.10.195:80/dxxw.php?id=hnws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://1.94.31.214/php/hntv.php
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://60.26.181.220:4022/rtp/225.1.2.61:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://171.15.18.199:8180/TV00000000000000000016@HHZT
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://tvpull.dxhmt.cn:9081/tv/11425-1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226480
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://z.b.bkpcp.top/m.php?id=hnws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+https://hyf000.eu.org/80947108/JILINWS
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://60.26.181.220:4022/rtp/225.1.2.26:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://171.15.18.199:8180/TV00000000000000000036@HHZT
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010075
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://z.b.bkpcp.top/m.php?id=jlws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://j.x.bkpcp.top/jx/JILHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://goo.bkpcp.top/mg/jlws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000004972569.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226397/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226397/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://114.226.231.231:8787/rtp/239.49.8.16:9602
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://60.26.181.220:4022/rtp/225.1.1.126:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://114.238.59.148:4000/rtp/239.49.8.16:9602
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010059
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://z.b.bkpcp.top/m.php?id=jsws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://goo.bkpcp.top/mg/jsws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://iptv.huuc.edu.cn/hls/jshd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873461.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226310/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226310/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://joyznm.i234.me:20000/udp/239.3.1.123:8164
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://60.26.181.220:4022/rtp/225.1.2.29:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://123.160.232.254:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010060
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://z.b.bkpcp.top/m.php?id=jxws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://goo.bkpcp.top/mg/jxws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://iptv.huuc.edu.cn/hls/jxhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+https://www.freetv.top/migu/783847495.m3u8?migutoken=fddcc05dc0245329d3208607a5b1f5a1980bc31a7ced510e345af6cc68f5b86d2d9178b45706a0b6a0ceddc82ce06e53375cfedbc96fd0b00c12195c7d77b6f23811a67970bcfeb47629aa5aa6
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://[2409:8087:1a01:df::4027]:80/TVOD/88888888/224/3221225935/main.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000004796511.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://60.26.181.220:4022/rtp/225.1.1.154:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226546
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://z.b.bkpcp.top/m.php?id=lnws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://j.x.bkpcp.top/jx/LIAONHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://iptv.huuc.edu.cn/hls/lnhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873468.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226546/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226254/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226327/1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226336/1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
+http://satellitepull.cnr.cn/live/wx32nmgws/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221225634
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
+http://z.b.bkpcp.top/m.php?id=nmws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
+http://j.x.bkpcp.top/jx/NMGWS
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
+http://goo.bkpcp.top/mg/nmws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887427.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
+http://[2409:8087:1a01:df::401a]:80/wh7f454c46tw3029083262_-802204014/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8?icpid=88888888&RTS=1713969858&from=4&hms_devid=128&prioritypopid=4&online=1713969858&vqe=3
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226389/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E5%8D%AB%E8%A7%86.png",宁夏卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010110
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E5%8D%AB%E8%A7%86.png",宁夏卫视
+http://z.b.bkpcp.top/m.php?id=nxws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E5%8D%AB%E8%A7%86.png",宁夏卫视
+http://j.x.bkpcp.top/jx/NXWS
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E5%8D%AB%E8%A7%86.png",宁夏卫视
+http://goo.bkpcp.top/mg/nxws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E5%8D%AB%E8%A7%86.png",宁夏卫视
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/8/3221226454/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E5%8D%AB%E8%A7%86.png",宁夏卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887433.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E5%8D%AB%E8%A7%86.png",宁夏卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/8/3221226454/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E5%8D%AB%E8%A7%86.png",宁夏卫视
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001074/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E5%8D%AB%E8%A7%86.png",宁夏卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227254/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E5%8D%AB%E8%A7%86.png",宁夏卫视
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226454/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+http://satellitepull.cnr.cn/live/wx32qhws/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010111
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+http://z.b.bkpcp.top/m.php?id=qhws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+http://j.x.bkpcp.top/jx/QHWS
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+http://goo.bkpcp.top/mg/qhws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887430.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225628/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226529/1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226916/1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001082/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://nn.7x9d.cn/xzc2.php?ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA2LjAuMC4wIFNhZmFyaS81MzcuMzY=&hls=aHR0cDovL3d3dy5kc2suY2MvcGhwL3N4Z2QucGhwP2lkPXNkd3M=
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://115.171.80.94:1688/udp/225.1.8.50:8052
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://114.226.231.231:8787/rtp/239.49.8.7:9306
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://joyznm.i234.me:20000/udp/239.3.1.209:8052
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://111.193.239.245:9999/rtp/239.3.1.209:8052
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010066
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://z.b.bkpcp.top/m.php?id=sdws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://j.x.bkpcp.top/jx/SHANDHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://l.cztvcloud.com/channels/lantian/SXshengzhou1/720p.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://iptv.huuc.edu.cn/hls/sdhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010114
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+http://j.x.bkpcp.top/jx/SXWS
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226392/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887413.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226392/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226531/1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226920/1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+https://live.lalifeier.eu.org/sxrtv/sxws.m3u8?t=1746292937&key=8097fcc15ecf55c37b8908da7be2be63
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+https://live.lalifeier.eu.org/sxrtv/sxws.m3u8?t=1746307365&key=3eeaa00e3276abf097ceb1bb753ca265
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
+http://m3u8.channel.wsrtv.com.cn/cms/videos/nmip-media/channellive/channel7/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+http://171.15.18.199:8180/TV00000000000000000039@HHZT
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010113
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+http://z.b.bkpcp.top/m.php?id=sxws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+http://gat.bkpcp.top/ymg.php?id=sxws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+http://goo.bkpcp.top/mg/sxws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887404.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226532/1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226926/1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+https://www.freetv.top/migu/738910838.m3u8?migutoken=3899cd1daaa04f812c6d4b13126e3c00ad177635abc5559f1b596e814ff8eb3d745e7bd40b881206a2852a5ed041ca424112cf1d9b385c72ea9de42c8d86f45227af0f51a8b4f4c18a038a8e6d
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%8D%AB%E8%A7%86.png",陕西卫视
+https://www.freetv.top/migu/738910838.m3u8?migutoken=35df06ac83a8fe0b0d98f96b8dbf5821d2a57fbd279c10148f5eb543353c48d828c15e639a63919e023774c69fac3a6f5a2bbfd1ee773d77c0dc154b9acd0c77e84c99627dd15f852e56ab3281
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://222.218.122.114:8188/udp/239.81.0.130:4056
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://60.26.181.220:4022/rtp/225.1.1.123:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://171.15.18.199:8180/TV00000000000000000040@HHZT
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226338
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://z.b.bkpcp.top/m.php?id=scws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://j.x.bkpcp.top/jx/SICHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://iptv.huuc.edu.cn/hls/schd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887274.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226338/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226338/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://satellitepull.cnr.cn/live/wxszws/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://60.26.181.220:4022/rtp/225.1.1.117:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://219.141.44.245:8188/udp/238.255.2.61:5999
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://111.162.205.201:8686/rtp/225.1.1.117:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://114.238.59.148:4000/rtp/239.49.8.15:9430
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010068
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://iptv.huuc.edu.cn/hls/szhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+https://smart.pendy.dpdns.org/Smart.php?id=shenzhen
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873474.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://z.b.bkpcp.top/m.php?id=szws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%89%E6%B2%99%E5%8D%AB%E8%A7%86.png",三沙卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887452.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%89%E6%B2%99%E5%8D%AB%E8%A7%86.png",三沙卫视
+http://[2409:8087:2001:20:2800:0:df6e:eb21]:80/ott.mobaibox.com/PLTV/4/224/3221228626/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%89%E6%B2%99%E5%8D%AB%E8%A7%86.png",三沙卫视
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001185/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%89%E6%B2%99%E5%8D%AB%E8%A7%86.png",三沙卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227172/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%89%E6%B2%99%E5%8D%AB%E8%A7%86.png",三沙卫视
+http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221227172/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%89%E6%B2%99%E5%8D%AB%E8%A7%86.png",三沙卫视
+http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?IAS
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%89%E6%B2%99%E5%8D%AB%E8%A7%86.png",三沙卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226544/1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%89%E6%B2%99%E5%8D%AB%E8%A7%86.png",三沙卫视
+http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%89%E6%B2%99%E5%8D%AB%E8%A7%86.png",三沙卫视
+http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?IASHttpSessionId=OTT
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%89%E6%B2%99%E5%8D%AB%E8%A7%86.png",三沙卫视
+https://stream1.freetv.fun/8bd6b69c423ac31e71c2311ad33f4f291e1314c69005ffb7b3b7defc2944adb2.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://60.26.181.220:4022/rtp/225.1.1.111:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://116.237.148.215:8881/rtp/239.45.1.124:5140
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://114.226.231.231:8787/rtp/239.49.8.35:8620
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://111.162.205.201:8686/rtp/225.1.1.111:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://111.193.239.245:9999/rtp/239.3.1.141:1234
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226459
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://j.x.bkpcp.top/jx/TIANJHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://iptv.huuc.edu.cn/hls/tjhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225972/main.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873466.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E8%97%8F%E5%8D%AB%E8%A7%86.png",西藏卫视
+http://satellitepull.cnr.cn/live/wxxzws/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E8%97%8F%E5%8D%AB%E8%A7%86.png",西藏卫视
+http://z.b.bkpcp.top/m.php?id=xzws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E8%97%8F%E5%8D%AB%E8%A7%86.png",西藏卫视
+http://goo.bkpcp.top/mg/xzws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E8%97%8F%E5%8D%AB%E8%A7%86.png",西藏卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887434.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E8%97%8F%E5%8D%AB%E8%A7%86.png",西藏卫视
+https://tv.vtibet.cn/live/h701F9MpxzPDyE.m3u8?secret=4eca0fb428c7390f0e7cdee6a0044c78&time=6817e4bb
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E8%97%8F%E5%8D%AB%E8%A7%86.png",西藏卫视
+https://tv.vtibet.cn/live/h701F9MpxzPDyE.m3u8?secret=afa6fbb9cc7add965ab98221ae0d8596&time=681691e7
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E8%97%8F%E5%8D%AB%E8%A7%86.png",西藏卫视
+https://tv.vtibet.cn/live/h701F9MpxzPDyE.m3u8?secret=ddde6b45f5065c5066ded53d6559f31c&time=68134627
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E8%97%8F%E5%8D%AB%E8%A7%86.png",西藏卫视
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001072/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E8%97%8F%E5%8D%AB%E8%A7%86.png",西藏卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221226847/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E8%97%8F%E5%8D%AB%E8%A7%86.png",西藏卫视
+http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221226847/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://satellitepull.cnr.cn/live/wxxjws/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221225635
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://z.b.bkpcp.top/m.php?id=xjws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://j.x.bkpcp.top/jx/XJWS
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://goo.bkpcp.top/mg/xjws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887448.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225635/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+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
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226460/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226546/1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
+http://116.237.148.215:8881/rtp/239.45.0.4:5140
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
+http://218.1.137.125:4022/rtp/239.45.0.4:5140
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
+http://180.165.29.204:4022/rtp/239.45.0.4:5140
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226444
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
+http://z.b.bkpcp.top/m.php?id=ynws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
+http://goo.bkpcp.top/mg/ynws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887453.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226444/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226543/1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226928/1.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东珠江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E7%8F%A0%E6%B1%9F.png",广东珠江
+http://baota.guangyuan.site:8188/rtp/239.77.0.114:5146
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东珠江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E7%8F%A0%E6%B1%9F.png",广东珠江
+https://live.ximalaya.com/radio-first-page-app/live/252/64.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东珠江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E7%8F%A0%E6%B1%9F.png",广东珠江
+https://stream1.freetv.fun/yan-dong-zhu-jiang-4.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东珠江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E7%8F%A0%E6%B1%9F.png",广东珠江
+https://stream1.freetv.fun/ipv6-yan-dong-zhu-jiang-14.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东珠江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E7%8F%A0%E6%B1%9F.png",广东珠江
+https://stream1.freetv.fun/yan-dong-zhu-jiang-29.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东珠江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E7%8F%A0%E6%B1%9F.png",广东珠江
+https://stream1.freetv.fun/yan-dong-zhu-jiang-8.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东珠江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E7%8F%A0%E6%B1%9F.png",广东珠江
+https://stream1.freetv.fun/967c330a56e8f2fed10ea053ac29b132d29e323680b5e20a53e3af6bcf7b2f54.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东珠江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E7%8F%A0%E6%B1%9F.png",广东珠江
+http://cdn2.163189.xyz/live/gdzj/stream.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东珠江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E7%8F%A0%E6%B1%9F.png",广东珠江
+https://stream1.freetv.fun/5f12b986a77ebe5440c508c13895b3e7f8767b2a47c79f3f5fe948097e15337d.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东珠江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E7%8F%A0%E6%B1%9F.png",广东珠江
+https://tv.cdn.com.mp/live/gdzj/stream.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+https://epg.pw/stream/7b470f9fc5c305db0c8622117b7b25ca00eb35ba3e93e865cf0ff9df5c736681.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+http://cdn2.163189.xyz/live/gdty/stream.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+http://php.jdshipin.com/PLTV/iptv.php?id=gdty
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+https://stream1.freetv.fun/3864d41a409cbbbd8579e4ec03eb47e6cf65b15f5cae7c3cd44ccd4b9991a017.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+https://stream1.freetv.fun/e05d674500d8dcf73754cb11d4dcd8ef9e88f287888a1b71fd0766e90963db66.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+https://stream1.freetv.fun/1d9901836bfdd83dcc89edf1fb53c3f62393cd672a8d49266af2c8130921b0ee.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+https://stream1.freetv.fun/869475cf6ab5d187816a1b7fbd8649cfc0b41c452e5595eabb2a36e51a61eecf.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+http://php.jdshipin.com/TVOD/iptv.php?id=gdty
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+https://stream1.freetv.fun/yan-dong-ti-yu-10.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+https://stream1.freetv.fun/yan-dong-ti-yu-11.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%96%B0%E9%97%BB.png",广东新闻
+http://satellitepull.cnr.cn/live/wxgdxwgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%96%B0%E9%97%BB.png",广东新闻
+https://satellitepull.cnr.cn/live/wxgdxwgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%96%B0%E9%97%BB.png",广东新闻
+https://stream1.freetv.fun/yan-dong-xin-wen-9.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%96%B0%E9%97%BB.png",广东新闻
+https://stream1.freetv.fun/yan-dong-xin-wen-27.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%96%B0%E9%97%BB.png",广东新闻
+https://stream1.freetv.fun/yan-dong-xin-wen-20.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%96%B0%E9%97%BB.png",广东新闻
+https://stream1.freetv.fun/yan-dong-xin-wen-2.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%96%B0%E9%97%BB.png",广东新闻
+http://php.jdshipin.com:8880/chudian.php?id=gdxw
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%96%B0%E9%97%BB.png",广东新闻
+https://stream1.freetv.fun/yan-dong-xin-wen-19.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%96%B0%E9%97%BB.png",广东新闻
+https://stream1.freetv.fun/yan-dong-xin-wen-24.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%96%B0%E9%97%BB.png",广东新闻
+https://stream1.freetv.fun/yan-dong-xin-wen-11.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://z.b.bkpcp.top/m.php?id=gdws
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://j.x.bkpcp.top/jx/GUANGDHD
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://goo.bkpcp.top/mg/gdws
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://iptv.huuc.edu.cn/hls/gdhd.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873459.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226248/index.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226248/index.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/1.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%B0%91%E7%94%9F.png",广东民生
+http://baota.guangyuan.site:8188/rtp/239.77.0.225:5146
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%B0%91%E7%94%9F.png",广东民生
+https://stream1.freetv.fun/yan-dong-min-sheng-9.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%B0%91%E7%94%9F.png",广东民生
+https://stream1.freetv.fun/yan-dong-min-sheng-15.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%B0%91%E7%94%9F.png",广东民生
+https://stream1.freetv.fun/yan-dong-min-sheng-18.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%B0%91%E7%94%9F.png",广东民生
+https://stream1.freetv.fun/yan-dong-min-sheng-21.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%B0%91%E7%94%9F.png",广东民生
+https://stream1.freetv.fun/yan-dong-min-sheng-24.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%B0%91%E7%94%9F.png",广东民生
+https://stream1.freetv.fun/yan-dong-min-sheng-14.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%B0%91%E7%94%9F.png",广东民生
+https://stream1.freetv.fun/yan-dong-min-sheng-9.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%B0%91%E7%94%9F.png",广东民生
+https://stream1.freetv.fun/yan-dong-min-sheng-3.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广东民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E6%B0%91%E7%94%9F.png",广东民生
+https://stream1.freetv.fun/yan-dong-min-sheng-35.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A7%E6%B9%BE%E5%8C%BA%E5%8D%AB%E8%A7%86.png",大湾区卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010108
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A7%E6%B9%BE%E5%8C%BA%E5%8D%AB%E8%A7%86.png",大湾区卫视
+http://z.b.bkpcp.top/m.php?id=dwqws
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A7%E6%B9%BE%E5%8C%BA%E5%8D%AB%E8%A7%86.png",大湾区卫视
+http://goo.bkpcp.top/mg/dwqws
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A7%E6%B9%BE%E5%8C%BA%E5%8D%AB%E8%A7%86.png",大湾区卫视
+http://jp1.jdiptv.cc/live/nfws.m3u8?kdstime=
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A7%E6%B9%BE%E5%8C%BA%E5%8D%AB%E8%A7%86.png",大湾区卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226540/1.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A7%E6%B9%BE%E5%8C%BA%E5%8D%AB%E8%A7%86.png",大湾区卫视
+https://www.freetv.top/migu/608917627.m3u8?migutoken=913ec7608066b2e139e10a729ed6e0b277096bf7d1577f04dec2f036a15f6db88631747d218643efc7515ff520286e2a56bc4f2231e6d692da49f8d555d3291bbba71e8f2993d5487b41afa6bf
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A7%E6%B9%BE%E5%8C%BA%E5%8D%AB%E8%A7%86.png",大湾区卫视
+https://www.freetv.top/migu/608917627.m3u8?migutoken=bad0a45eea94649f2e7f1b35e1d98d034b874a02984a76abb21e4537dee28f974e6da241dc7705109722be71c8b1302302b51cd4cb06c69ca55fdcf7279d415e0a0fce7c492b6842956ab34fcc
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A7%E6%B9%BE%E5%8C%BA%E5%8D%AB%E8%A7%86.png",大湾区卫视
+https://www.freetv.top/migu/608917627.m3u8?migutoken=22c28ab72744cd3ae1500fcedd9aa645eb0c35326cccb8cc6253c912a2fbdadb109d5f005d7dbbb62dbcb2e1f9a30bfa1935a4a046787bb5ac3e9ac1b5b654c16c2f7753fc37d2d51b2916310b
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A7%E6%B9%BE%E5%8C%BA%E5%8D%AB%E8%A7%86.png",大湾区卫视
+https://www.freetv.top/migu/608917627.m3u8?migutoken=6e23ed23803d2776218fbd5b6931d4dd0d0a20d0269ca0da6b2efaaf101f71c62689ec1d6f73e16a10d1b756f7e23f0de494b881e2bc39c12250715721f84c185577680003f363869dba1b7e90
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A7%E6%B9%BE%E5%8C%BA%E5%8D%AB%E8%A7%86.png",大湾区卫视
+https://stream1.freetv.fun/9e44565ab6186689007a295d8b94b2a970fafde637068b0e3837e5f84689a8f3.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%BB%BC%E5%90%88.png",广州综合
+http://baota.guangyuan.site:8188/rtp/239.253.43.71:5146
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%BB%BC%E5%90%88.png",广州综合
+http://php.jdshipin.com:8880/gztv.php?id=zhonghe
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%BB%BC%E5%90%88.png",广州综合
+https://live.lalifeier.eu.org/gztv/zhonghe.m3u8?t=1746292937&key=20079a0c421e334c8ff6f63f230b8038
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%BB%BC%E5%90%88.png",广州综合
+https://live.lalifeier.eu.org/gztv/zhonghe.m3u8?t=1746393735&key=2b88a832f53237919a3924cdaeda3a0d
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%BB%BC%E5%90%88.png",广州综合
+https://stream1.freetv.fun/yan-zhou-zong-he-9.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%BB%BC%E5%90%88.png",广州综合
+https://stream1.freetv.fun/yan-zhou-zong-he-12.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%BB%BC%E5%90%88.png",广州综合
+https://stream1.freetv.fun/yan-zhou-zong-he-11.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%BB%BC%E5%90%88.png",广州综合
+https://live.lalifeier.eu.org/gztv/zhonghe.m3u8?t=1746289777&key=d60e81860f262e40617e934abf53669b
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%BB%BC%E5%90%88.png",广州综合
+https://stream1.freetv.fun/yan-zhou-zong-he-25.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%BB%BC%E5%90%88.png",广州综合
+https://stream1.freetv.fun/yan-zhou-zong-he-19.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E5%BD%B1%E8%A7%86.png",广州影视
+http://php.jdshipin.com:8880/gztv.php?id=yingshi#https://tencentplay.gztv.com/live/yingshi.m3u8?txSecret=7e9bddad7c8911626ed1d2c09fc605d9&txTime=18d00acf487
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E5%BD%B1%E8%A7%86.png",广州影视
+https://live.lalifeier.eu.org/gztv/yingshi.m3u8?t=1746292937&key=a30a89b429981379ff7c586fdb54ac86
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E5%BD%B1%E8%A7%86.png",广州影视
+https://live.lalifeier.eu.org/gztv/yingshi.m3u8?t=1746393735&key=1c3dbffdc7f539bde2e1cf2100bb4266
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E5%BD%B1%E8%A7%86.png",广州影视
+https://stream1.freetv.fun/yan-zhou-ying-shi-6.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E5%BD%B1%E8%A7%86.png",广州影视
+https://stream1.freetv.fun/yan-zhou-ying-shi-13.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E5%BD%B1%E8%A7%86.png",广州影视
+https://stream1.freetv.fun/yan-zhou-ying-shi-7.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E5%BD%B1%E8%A7%86.png",广州影视
+https://stream1.freetv.fun/yan-zhou-ying-shi-4.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E5%BD%B1%E8%A7%86.png",广州影视
+https://stream1.freetv.fun/yan-zhou-ying-shi-28.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E5%BD%B1%E8%A7%86.png",广州影视
+https://stream1.freetv.fun/yan-zhou-ying-shi-15.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E5%BD%B1%E8%A7%86.png",广州影视
+https://stream1.freetv.fun/yan-zhou-ying-shi-12.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+http://php.jdshipin.com:8880/gztv.php?id=jingsai#https://tencentplay.gztv.com/live/jingsai.m3u8?txSecret=49c8041461997c7a97dbcc3c7fd11b4f&txTime=18d00acf487
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-4.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-27.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-37.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-26.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-35.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-24.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-15.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-12.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-7.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="江门综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E9%97%A8%E7%BB%BC%E5%90%88.png",江门综合
+http://baota.guangyuan.site:8188/rtp/239.77.0.201:5146
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="江门综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E9%97%A8%E7%BB%BC%E5%90%88.png",江门综合
+https://stream1.freetv.fun/jiang-men-zong-he-8.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="江门综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E9%97%A8%E7%BB%BC%E5%90%88.png",江门综合
+https://stream1.freetv.fun/jiang-men-zong-he-6.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="江门综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E9%97%A8%E7%BB%BC%E5%90%88.png",江门综合
+https://stream1.freetv.fun/jiang-men-zong-he-12.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="江门综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E9%97%A8%E7%BB%BC%E5%90%88.png",江门综合
+https://stream1.freetv.fun/jiang-men-zong-he-13.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="江门综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E9%97%A8%E7%BB%BC%E5%90%88.png",江门综合
+http://dslive.grtn.cn/jmzh/sd/live.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="江门综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E9%97%A8%E7%BB%BC%E5%90%88.png",江门综合
+https://stream1.freetv.fun/jiang-men-zong-he-11.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="江门综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E9%97%A8%E7%BB%BC%E5%90%88.png",江门综合
+https://stream1.freetv.fun/jiang-men-zong-he-14.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="江门综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E9%97%A8%E7%BB%BC%E5%90%88.png",江门综合
+https://stream1.freetv.fun/jiang-men-zong-he-4.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="江门综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E9%97%A8%E7%BB%BC%E5%90%88.png",江门综合
+https://stream1.freetv.fun/jiang-men-zong-he-2.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="江门侨乡生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E9%97%A8%E4%BE%A8%E4%B9%A1%E7%94%9F%E6%B4%BB.png",江门侨乡生活
+http://baota.guangyuan.site:8188/rtp/239.77.0.202:5146
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="江门侨乡生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E9%97%A8%E4%BE%A8%E4%B9%A1%E7%94%9F%E6%B4%BB.png",江门侨乡生活
+http://rustdesk.szsun.xyz:8088/rtp/239.77.0.202:5146
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="佛山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%9B%E5%B1%B1%E7%BB%BC%E5%90%88.png",佛山综合
+http://baota.guangyuan.site:8188/rtp/239.253.43.57:5146
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="佛山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%9B%E5%B1%B1%E7%BB%BC%E5%90%88.png",佛山综合
+http://php.jdshipin.com:8880/fstv.php?id=fszh
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="佛山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%9B%E5%B1%B1%E7%BB%BC%E5%90%88.png",佛山综合
+https://stream1.freetv.fun/fo-shan-zong-he-5.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="佛山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%9B%E5%B1%B1%E7%BB%BC%E5%90%88.png",佛山综合
+https://stream1.freetv.fun/fo-shan-zong-he-17.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="佛山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%9B%E5%B1%B1%E7%BB%BC%E5%90%88.png",佛山综合
+https://stream1.freetv.fun/fo-shan-zong-he-7.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="佛山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%9B%E5%B1%B1%E7%BB%BC%E5%90%88.png",佛山综合
+https://live.lalifeier.eu.org/fstv/fszh.m3u8?t=1746307365&key=776c844ec448f3aca62132b212878ee5
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="佛山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%9B%E5%B1%B1%E7%BB%BC%E5%90%88.png",佛山综合
+https://stream1.freetv.fun/fo-shan-zong-he-24.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="佛山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%9B%E5%B1%B1%E7%BB%BC%E5%90%88.png",佛山综合
+https://stream1.freetv.fun/fo-shan-zong-he-9.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="佛山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%9B%E5%B1%B1%E7%BB%BC%E5%90%88.png",佛山综合
+https://stream1.freetv.fun/fo-shan-zong-he-15.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="佛山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%9B%E5%B1%B1%E7%BB%BC%E5%90%88.png",佛山综合
+https://stream1.freetv.fun/fo-shan-zong-he-22.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010068
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://iptv.huuc.edu.cn/hls/szhd.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+https://smart.pendy.dpdns.org/Smart.php?id=shenzhen
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873474.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://z.b.bkpcp.top/m.php?id=szws
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226313/index.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226313/index.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226313/index.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226313/index.m3u8
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%BC%E5%90%88.png",汕头综合
+https://stream1.freetv.fun/shan-tou-zong-he-5.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%BC%E5%90%88.png",汕头综合
+https://stream1.freetv.fun/shan-tou-zong-he-7.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%BC%E5%90%88.png",汕头综合
+https://stream1.freetv.fun/shan-tou-zong-he-18.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%BC%E5%90%88.png",汕头综合
+https://stream1.freetv.fun/shan-tou-zong-he-1.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%BC%E5%90%88.png",汕头综合
+https://stream1.freetv.fun/shan-tou-zong-he-9.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%BC%E5%90%88.png",汕头综合
+https://stream1.freetv.fun/shan-tou-zong-he-12.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%BC%E5%90%88.png",汕头综合
+https://stream1.freetv.fun/shan-tou-zong-he-6.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%BC%E5%90%88.png",汕头综合
+https://stream1.freetv.fun/shan-tou-zong-he-10.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%BC%E5%90%88.png",汕头综合
+https://stream1.freetv.fun/shan-tou-zong-he-2.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%BC%E5%90%88.png",汕头综合
+https://stream1.freetv.fun/shan-tou-zong-he-17.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%8F%E6%B5%8E.png",汕头经济
+https://stream1.freetv.fun/shan-tou-jing-ji-1.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%8F%E6%B5%8E.png",汕头经济
+https://stream1.freetv.fun/shan-tou-jing-ji-4.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%8F%E6%B5%8E.png",汕头经济
+https://stream1.freetv.fun/shan-tou-jing-ji-2.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%8F%E6%B5%8E.png",汕头经济
+https://stream1.freetv.fun/shan-tou-jing-ji-3.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%8F%E6%B5%8E.png",汕头经济
+https://stream1.freetv.fun/shan-tou-jing-ji-5.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%8F%E6%B5%8E.png",汕头经济
+https://stream1.freetv.fun/shan-tou-jing-ji-6.ctv
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="茂名综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8C%82%E5%90%8D%E7%BB%BC%E5%90%88.png",茂名综合
+http://rustdesk.szsun.xyz:8088/rtp/239.77.0.206:5146
+#EXTINF:-1 group-title="☘️广东频道" tvg-name="茂名公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8C%82%E5%90%8D%E5%85%AC%E5%85%B1.png",茂名公共
+http://rustdesk.szsun.xyz:8088/rtp/239.77.0.207:5146
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%92%B1%E6%B1%9F.png",浙江钱江
+https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%92%B1%E6%B1%9F.png",浙江钱江
+http://l.cztvcloud.com/channels/lantian/SXyuyao2/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%92%B1%E6%B1%9F.png",浙江钱江
+http://zhfivel02.cztv.com/channel02/1080p.m3u8?auth_key=2524708799-0-0-2f7bb420bfd1d218b9c7b07c0ac1ba2f
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%92%B1%E6%B1%9F.png",浙江钱江
+http://zwebl02.cztv.com/live/channel021080P.m3u8?auth_key=2524708799-0-0-43f14b8147c890428975655007afb4cc
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%92%B1%E6%B1%9F.png",浙江钱江
+http://ali-m-l.cztv.com/channels/lantian/channel02/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%92%B1%E6%B1%9F.png",浙江钱江
+https://stream1.freetv.fun/zhe-jiang-qian-jiang-du-shi-3.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%92%B1%E6%B1%9F.png",浙江钱江
+https://stream1.freetv.fun/zhe-jiang-qian-jiang-du-shi-5.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%92%B1%E6%B1%9F.png",浙江钱江
+https://stream1.freetv.fun/zhe-jiang-qian-jiang-du-shi-2.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%92%B1%E6%B1%9F.png",浙江钱江
+https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8\r\n
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%92%B1%E6%B1%9F.png",浙江钱江
+https://stream1.freetv.fun/zhe-jiang-qian-jiang-du-shi-4.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江钱江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%92%B1%E6%B1%9F%E9%83%BD%E5%B8%82.png",浙江钱江都市
+http://zwebl02.cztv.com/live/channel021080P.m3u8?auth_key=2524708799-0-0-43f14b8147c890428975655007afb4cc
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江钱江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%92%B1%E6%B1%9F%E9%83%BD%E5%B8%82.png",浙江钱江都市
+http://zhfivel02.cztv.com/channel02/1080p.m3u8?auth_key=2524708799-0-0-2f7bb420bfd1d218b9c7b07c0ac1ba2f
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江钱江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%92%B1%E6%B1%9F%E9%83%BD%E5%B8%82.png",浙江钱江都市
+https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江钱江台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%92%B1%E6%B1%9F%E5%8F%B0.png",浙江钱江台
+https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江钱江台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%92%B1%E6%B1%9F%E5%8F%B0.png",浙江钱江台
+http://l.cztvcloud.com/channels/lantian/SXyuyao2/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%94%9F%E6%B4%BB.png",浙江生活
+https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%94%9F%E6%B4%BB.png",浙江生活
+https://stream1.freetv.fun/zhe-jiang-jing-ji-sheng-huo-1.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%94%9F%E6%B4%BB.png",浙江生活
+https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8\r\n
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%94%9F%E6%B4%BB.png",浙江生活
+https://stream1.freetv.fun/zhe-jiang-jing-ji-sheng-huo-11.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%94%9F%E6%B4%BB.png",浙江生活
+http://zwebl02.cztv.com/live/channel031080P.m3u8?auth_key=2524708799-0-0-cc09266f8e043a6df28eb148cb488d37
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%94%9F%E6%B4%BB.png",浙江生活
+http://ls.qingting.fm/live/1099.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%94%9F%E6%B4%BB.png",浙江生活
+https://stream1.freetv.fun/zhe-jiang-jing-ji-sheng-huo-4.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%94%9F%E6%B4%BB.png",浙江生活
+http://ali-m-l.cztv.com/channels/lantian/channel03/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%94%9F%E6%B4%BB.png",浙江生活
+http://ali-m-l.cztv.com/channels/lantian/channel003/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%94%9F%E6%B4%BB.png",浙江生活
+https://stream1.freetv.fun/zhe-jiang-jing-ji-sheng-huo-3.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",浙江经济生活
+http://zwebl02.cztv.com/live/channel031080P.m3u8?auth_key=2524708799-0-0-cc09266f8e043a6df28eb148cb488d37
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",浙江经济生活
+http://zhfivel02.cztv.com/channel03/1080p.m3u8?auth_key=2524708799-0-0-76c0751e0f656453baf39803124fc08a
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",浙江经济生活
+https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",浙江经济生活
+http://l.cztvcloud.com/channels/lantian/SXxiaoshan2/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",浙江经济生活
+http://ali-vl.cztv.com/channels/lantian/channel003/360p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",浙江经济生活
+http://ls.qingting.fm/live/1099.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",浙江经济生活
+http://ali-m-l.cztv.com/channels/lantian/channel03/1080p.m3u8#https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8#http://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8#http://ali-m-l.cztv.com/channels/lantian/channel03/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%95%99%E8%82%B2.png",浙江教育
+http://ali-m-l.cztv.com/channels/lantian/channel04/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%95%99%E8%82%B2.png",浙江教育
+https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%95%99%E8%82%B2.png",浙江教育
+http://ali-vl.cztv.com/channels/lantian/channel004/360p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%B0%91%E7%94%9F.png",浙江民生
+https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%B0%91%E7%94%9F.png",浙江民生
+http://ali-vl.cztv.com/channels/lantian/channel006/360p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%B0%91%E7%94%9F.png",浙江民生
+http://ali-m-l.cztv.com/channels/lantian/channel06/1080p.m3u8#http://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%96%B0%E9%97%BB.png",浙江新闻
+http://zwebl02.cztv.com/live/channel071080P.m3u8?auth_key=2524708799-0-0-e3b50ca59d2c0883d5386d8bc4cdefbc
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%96%B0%E9%97%BB.png",浙江新闻
+http://zhfivel02.cztv.com/channel07/1080p.m3u8?auth_key=2524708799-0-0-4af48ba83e791a300595dd0b2bb30e6e
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%96%B0%E9%97%BB.png",浙江新闻
+http://ali-vl.cztv.com/channels/lantian/channel007/360p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%96%B0%E9%97%BB.png",浙江新闻
+http://ali-m-l.cztv.com/channels/lantian/channel07/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%96%B0%E9%97%BB.png",浙江新闻
+https://stream1.freetv.fun/zhe-jiang-xin-wen-2.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%96%B0%E9%97%BB.png",浙江新闻
+https://stream1.freetv.fun/zhe-jiang-xin-wen-1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%96%B0%E9%97%BB.png",浙江新闻
+https://stream1.freetv.fun/zhe-jiang-xin-wen-5.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%96%B0%E9%97%BB.png",浙江新闻
+https://stream1.freetv.fun/zhe-jiang-xin-wen-7.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%96%B0%E9%97%BB.png",浙江新闻
+https://stream1.freetv.fun/zhe-jiang-xin-wen-4.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%96%B0%E9%97%BB.png",浙江新闻
+https://stream1.freetv.fun/7fa07158e038a9bae3747a0cb9f8e8ff1aaba32669d28d99a498716f16569c1d.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+https://qiniup-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+https://ct-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+http://ali-vl.cztv.com/channels/lantian/channel008/360p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8?fbl=
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+https://stream1.freetv.fun/zhe-jiang-shao-er-4.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+https://stream1.freetv.fun/zhe-jiang-shao-er-4.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+https://stream1.freetv.fun/zhe-jiang-shao-er-6.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+https://stream1.freetv.fun/zhe-jiang-shao-er-12.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E7%BB%BC%E5%90%88.png",杭州综合
+http://live.xmcdn.com/live/1845/64.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E7%BB%BC%E5%90%88.png",杭州综合
+http://goo.bkpcp.top/mg/hzzh
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E7%BB%BC%E5%90%88.png",杭州综合
+https://stream1.freetv.fun/hang-zhou-zong-he-4.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E7%BB%BC%E5%90%88.png",杭州综合
+https://stream1.freetv.fun/hang-zhou-zong-he-2.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E7%BB%BC%E5%90%88.png",杭州综合
+https://stream1.freetv.fun/hang-zhou-zong-he-3.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州明珠" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E6%98%8E%E7%8F%A0.png",杭州明珠
+http://goo.bkpcp.top/mg/hzmz
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州明珠" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E6%98%8E%E7%8F%A0.png",杭州明珠
+https://stream1.freetv.fun/hang-zhou-ming-zhu-2.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州明珠" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E6%98%8E%E7%8F%A0.png",杭州明珠
+https://stream1.freetv.fun/hang-zhou-ming-zhu-4.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州明珠" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E6%98%8E%E7%8F%A0.png",杭州明珠
+https://stream1.freetv.fun/hang-zhou-ming-zhu-1.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州明珠" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E6%98%8E%E7%8F%A0.png",杭州明珠
+https://stream1.freetv.fun/hang-zhou-ming-zhu-2.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E7%94%9F%E6%B4%BB.png",杭州生活
+http://goo.bkpcp.top/mg/hzsh
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E7%94%9F%E6%B4%BB.png",杭州生活
+https://stream1.freetv.fun/hang-zhou-sheng-huo-2.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E7%94%9F%E6%B4%BB.png",杭州生活
+https://stream1.freetv.fun/hang-zhou-sheng-huo-5.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E7%94%9F%E6%B4%BB.png",杭州生活
+https://stream1.freetv.fun/hang-zhou-sheng-huo-3.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E7%94%9F%E6%B4%BB.png",杭州生活
+https://stream1.freetv.fun/hang-zhou-sheng-huo-4.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E7%94%9F%E6%B4%BB.png",杭州生活
+https://stream1.freetv.fun/hang-zhou-sheng-huo-1.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E5%BD%B1%E8%A7%86.png",杭州影视
+http://goo.bkpcp.top/mg/hzys
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E5%BD%B1%E8%A7%86.png",杭州影视
+https://stream1.freetv.fun/hang-zhou-ying-shi-4.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E5%BD%B1%E8%A7%86.png",杭州影视
+https://stream1.freetv.fun/hang-zhou-ying-shi-2.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州少体" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E5%B0%91%E4%BD%93.png",杭州少体
+http://goo.bkpcp.top/mg/hzse
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州导视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E5%AF%BC%E8%A7%86.png",杭州导视
+http://hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230469/index.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="杭州导视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%AD%E5%B7%9E%E5%AF%BC%E8%A7%86.png",杭州导视
+http://[2409:8087:2801:22:100::41]/wh7f454c46tw1080302122_-1676557960/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230469/index.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="宁波TV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E6%B3%A2TV1.png",宁波TV1
+http://hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221235593/1/index.m3u8?fmt=ts2hls
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="宁波TV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E6%B3%A2TV2.png",宁波TV2
+http://hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221235608/1/index.m3u8?fmt=ts2hls
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="宁波TV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E6%B3%A2TV4.png",宁波TV4
+http://hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221235597/1/index.m3u8?fmt=ts2hls
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江教科" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%95%99%E7%A7%91.png",浙江教科
+https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江教科" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%95%99%E7%A7%91.png",浙江教科
+http://zwebl02.cztv.com/live/channel041080P.m3u8?auth_key=2524708799-0-0-f195b808217db133bfd648edc01e91fa
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%BB%8F%E6%B5%8E.png",浙江经济
+http://zwebl02.cztv.com/live/channel031080P.m3u8?auth_key=2524708799-0-0-cc09266f8e043a6df28eb148cb488d37
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%BB%8F%E6%B5%8E.png",浙江经济
+https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%BB%8F%E6%B5%8E.png",浙江经济
+http://ali-m-l.cztv.com/channels/lantian/channel03/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="之江纪录" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B9%8B%E6%B1%9F%E7%BA%AA%E5%BD%95.png",之江纪录
+http://zwebl02.cztv.com/live/channel121080P.m3u8?auth_key=2524708799-0-0-c33efdd495bcdd2ddc42e7c408405037
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="之江纪录" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B9%8B%E6%B1%9F%E7%BA%AA%E5%BD%95.png",之江纪录
+http://ali-m-l.cztv.com/channels/lantian/channel12/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="之江纪录" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B9%8B%E6%B1%9F%E7%BA%AA%E5%BD%95.png",之江纪录
+http://goo.bkpcp.top/mg/zjjl
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="之江纪录" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B9%8B%E6%B1%9F%E7%BA%AA%E5%BD%95.png",之江纪录
+https://ali-m-l.cztv.com/channels/lantian/channel12/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%9B%BD%E9%99%85.png",浙江国际
+http://zwebl02.cztv.com/live/channel101080P.m3u8?auth_key=2524708799-0-0-c9473fea1da3eff0f29f4c9cf2b36519
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%9B%BD%E9%99%85.png",浙江国际
+http://zhfivel02.cztv.com/channel10/1080p.m3u8?auth_key=2524708799-0-0-646cad31c1d94b002a325cd75475d30f
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%9B%BD%E9%99%85.png",浙江国际
+https://ct-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%9B%BD%E9%99%85.png",浙江国际
+https://qiniup-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%9B%BD%E9%99%85.png",浙江国际
+https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%9B%BD%E9%99%85.png",浙江国际
+https://stream1.freetv.fun/zhe-jiang-guo-ji-3.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%9B%BD%E9%99%85.png",浙江国际
+https://stream1.freetv.fun/zhe-jiang-guo-ji-4.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%9B%BD%E9%99%85.png",浙江国际
+https://stream1.freetv.fun/zhe-jiang-guo-ji-5.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%9B%BD%E9%99%85.png",浙江国际
+https://stream1.freetv.fun/zhe-jiang-guo-ji-10.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%9B%BD%E9%99%85.png",浙江国际
+https://stream1.freetv.fun/zhe-jiang-guo-ji-9.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="嘉兴新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%98%89%E5%85%B4%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",嘉兴新闻综合
+https://live-auth.51kandianshi.com/szgd/csztv1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="嘉兴新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%98%89%E5%85%B4%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",嘉兴新闻综合
+http://live.zohi.tv/video/s10001-fztv-1/index.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="丽水新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%BD%E6%B0%B4%E6%96%B0%E9%97%BB.png",丽水新闻
+http://[2409:8087:2801:20:100::40]/wh7f454c46tw1217818877_228620281/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221235523/1/index.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="湖州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%B7%9E%E5%85%AC%E5%85%B1.png",湖州公共
+https://stream1.freetv.fun/hu-zhou-gong-gong-3.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="湖州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%B7%9E%E5%85%AC%E5%85%B1.png",湖州公共
+https://stream1.freetv.fun/hu-zhou-gong-gong-1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="湖州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%B7%9E%E5%85%AC%E5%85%B1.png",湖州公共
+https://stream1.freetv.fun/hu-zhou-gong-gong-9.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="湖州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%B7%9E%E5%85%AC%E5%85%B1.png",湖州公共
+http://[2409:8087:2801:22:100::37]/wh7f454c46tw1308525120_718771428/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221235526/1/index.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%BB%8F%E8%A7%86.png",浙江经视
+http://ali-m-l.cztv.com/channels/lantian/channel003/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%BB%8F%E8%A7%86.png",浙江经视
+https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江留学" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%95%99%E5%AD%A6.png",浙江留学
+http://ali-vl.cztv.com/channels/lantian/channel009/360p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江留学" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E7%95%99%E5%AD%A6.png",浙江留学
+https://ali-m-l.cztv.com/channels/lantian/channel009/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江民生休闲" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%B0%91%E7%94%9F%E4%BC%91%E9%97%B2.png",浙江民生休闲
+http://zhfivel02.cztv.com/channel06/1080p.m3u8?auth_key=2524708799-0-0-59c4fe94512c59a90316fbf17ae2fbef
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江民生休闲" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%B0%91%E7%94%9F%E4%BC%91%E9%97%B2.png",浙江民生休闲
+https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江民生休闲" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%B0%91%E7%94%9F%E4%BC%91%E9%97%B2.png",浙江民生休闲
+http://ali-vl.cztv.com/channels/lantian/channel006/360p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江民生休闲" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%B0%91%E7%94%9F%E4%BC%91%E9%97%B2.png",浙江民生休闲
+https://stream1.freetv.fun/zhe-jiang-min-sheng-7.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江民生休闲" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%B0%91%E7%94%9F%E4%BC%91%E9%97%B2.png",浙江民生休闲
+https://stream1.freetv.fun/zhe-jiang-min-sheng-5.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江民生休闲" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%B0%91%E7%94%9F%E4%BC%91%E9%97%B2.png",浙江民生休闲
+https://stream1.freetv.fun/zhe-jiang-min-sheng-9.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江民生休闲" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%B0%91%E7%94%9F%E4%BC%91%E9%97%B2.png",浙江民生休闲
+https://stream1.freetv.fun/zhe-jiang-min-sheng-1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江民生休闲" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%B0%91%E7%94%9F%E4%BC%91%E9%97%B2.png",浙江民生休闲
+https://stream1.freetv.fun/zhe-jiang-min-sheng-6.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江民生休闲" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%B0%91%E7%94%9F%E4%BC%91%E9%97%B2.png",浙江民生休闲
+https://stream1.freetv.fun/zhe-jiang-min-sheng-xiu-xian-1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江民生休闲" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%B0%91%E7%94%9F%E4%BC%91%E9%97%B2.png",浙江民生休闲
+https://stream1.freetv.fun/zhe-jiang-min-sheng-9.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江数码时代" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%95%B0%E7%A0%81%E6%97%B6%E4%BB%A3.png",浙江数码时代
+https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8\r\n
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江教科影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%95%99%E7%A7%91%E5%BD%B1%E8%A7%86.png",浙江教科影视
+http://zwebl02.cztv.com/live/channel041080P.m3u8?auth_key=2524708799-0-0-f195b808217db133bfd648edc01e91fa
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江教科影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%95%99%E7%A7%91%E5%BD%B1%E8%A7%86.png",浙江教科影视
+http://zhfivel02.cztv.com/channel04/1080p.m3u8?auth_key=2524708799-0-0-514823d0816d4af94a9f32bd7614ed67
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江教科影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%95%99%E7%A7%91%E5%BD%B1%E8%A7%86.png",浙江教科影视
+http://ali-m-l.cztv.com/channels/lantian/channel04/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江教科影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%95%99%E7%A7%91%E5%BD%B1%E8%A7%86.png",浙江教科影视
+https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江教科影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E6%95%99%E7%A7%91%E5%BD%B1%E8%A7%86.png",浙江教科影视
+http://ali-vl.cztv.com/channels/lantian/channel004/360p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江公共新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%85%AC%E5%85%B1%E6%96%B0%E9%97%BB.png",浙江公共新闻
+http://ali-m-l.cztv.com/channels/lantian/channel07/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江公共新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%85%AC%E5%85%B1%E6%96%B0%E9%97%BB.png",浙江公共新闻
+https://stream1.freetv.fun/zhe-jiang-gong-gong-xin-wen-2.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江公共新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%85%AC%E5%85%B1%E6%96%B0%E9%97%BB.png",浙江公共新闻
+https://stream1.freetv.fun/zhe-jiang-gong-gong-xin-wen-1.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江公共新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%85%AC%E5%85%B1%E6%96%B0%E9%97%BB.png",浙江公共新闻
+https://stream1.freetv.fun/zhe-jiang-gong-gong-xin-wen-1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江休闲台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E4%BC%91%E9%97%B2%E5%8F%B0.png",浙江休闲台
+http://ali-m-l.cztv.com/channels/lantian/channel006/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江青田" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%9D%92%E7%94%B0.png",浙江青田
+http://l.cztvcloud.com/channels/lantian/SXqingtian1/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江遂昌" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%81%82%E6%98%8C.png",浙江遂昌
+http://l.cztvcloud.com/channels/lantian/SXsuichang1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江遂昌" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%81%82%E6%98%8C.png",浙江遂昌
+http://l.cztvcloud.com/channels/lantian/SXsuichang1/720p.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="诸暨新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%AF%B8%E6%9A%A8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",诸暨新闻综合
+http://l.cztvcloud.com/channels/lantian/SXzhuji3/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="诸暨新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%AF%B8%E6%9A%A8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",诸暨新闻综合
+https://l.cztvcloud.com/channels/lantian/SXzhuji3/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="诸暨新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%AF%B8%E6%9A%A8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",诸暨新闻综合
+http://l.cztvcloud.com/channels/lantian/SXzhuji3/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="龙游生活娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BE%99%E6%B8%B8%E7%94%9F%E6%B4%BB%E5%A8%B1%E4%B9%90.png",龙游生活娱乐
+https://l.cztvcloud.com/channels/lantian/SXlongyou2/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="龙游生活娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BE%99%E6%B8%B8%E7%94%9F%E6%B4%BB%E5%A8%B1%E4%B9%90.png",龙游生活娱乐
+http://l.cztvcloud.com/channels/lantian/SXlongyou2/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="龙游新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BE%99%E6%B8%B8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",龙游新闻综合
+https://l.cztvcloud.com/channels/lantian/SXlongyou1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="龙游新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BE%99%E6%B8%B8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",龙游新闻综合
+http://l.cztvcloud.com/channels/lantian/SXlongyou1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="龙泉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BE%99%E6%B3%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",龙泉新闻综合
+http://l.cztvcloud.com/channels/lantian/SXlongquan1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="龙泉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BE%99%E6%B3%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",龙泉新闻综合
+http://l.cztvcloud.com/channels/lantian/SXlongquan1/720p.m3u8?zzhed"
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="青田电视台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E7%94%B0%E7%94%B5%E8%A7%86%E5%8F%B0.png",青田电视台
+http://l.cztvcloud.com/channels/lantian/SXqingtian1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="遂昌综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%81%82%E6%98%8C%E7%BB%BC%E5%90%88.png",遂昌综合
+http://l.cztvcloud.com/channels/lantian/SXsuichang1/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="遂昌新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%81%82%E6%98%8C%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",遂昌新闻综合
+http://l.cztvcloud.com/channels/lantian/SXsuichang1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="象山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B1%A1%E5%B1%B1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",象山新闻综合
+http://l.cztvcloud.com/channels/lantian/SXxiangshan1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="衢江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A1%A2%E6%B1%9F%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",衢江新闻综合
+http://l.cztvcloud.com/channels/lantian/SXqujiang1/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="衢江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A1%A2%E6%B1%9F%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",衢江新闻综合
+https://stream1.freetv.fun/qu-jiang-xin-wen-zong-he-1.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="萧山生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%90%A7%E5%B1%B1%E7%94%9F%E6%B4%BB.png",萧山生活
+https://l.cztvcloud.com/channels/lantian/SXxiaoshan2/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="萧山生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%90%A7%E5%B1%B1%E7%94%9F%E6%B4%BB.png",萧山生活
+http://l.cztvcloud.com/channels/lantian/SXxiaoshan2/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="萧山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%90%A7%E5%B1%B1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",萧山新闻综合
+https://l.cztvcloud.com/channels/lantian/SXxiaoshan1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="萧山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%90%A7%E5%B1%B1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",萧山新闻综合
+https://stream1.freetv.fun/xiao-shan-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="萧山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%90%A7%E5%B1%B1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",萧山新闻综合
+https://stream1.freetv.fun/xiao-shan-xin-wen-zong-he-9.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="萧山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%90%A7%E5%B1%B1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",萧山新闻综合
+https://stream1.freetv.fun/xiao-shan-xin-wen-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="萧山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%90%A7%E5%B1%B1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",萧山新闻综合
+https://stream1.freetv.fun/xiao-shan-xin-wen-zong-he-6.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="萧山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%90%A7%E5%B1%B1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",萧山新闻综合
+https://stream1.freetv.fun/xiao-shan-xin-wen-zong-he-8.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="萧山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%90%A7%E5%B1%B1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",萧山新闻综合
+https://stream1.freetv.fun/xiao-shan-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="萧山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%90%A7%E5%B1%B1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",萧山新闻综合
+https://stream1.freetv.fun/xiao-shan-xin-wen-zong-he-4.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="萧山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%90%A7%E5%B1%B1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",萧山新闻综合
+https://stream1.freetv.fun/xiao-shan-xin-wen-zong-he-7.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="萧山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%90%A7%E5%B1%B1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",萧山新闻综合
+http://l.cztvcloud.com/channels/lantian/SXxiaoshan1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="苍南新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8B%8D%E5%8D%97%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",苍南新闻综合
+http://l.cztvcloud.com/channels/lantian/SXcangnan1/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="苍南新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8B%8D%E5%8D%97%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",苍南新闻综合
+https://l.cztvcloud.com/channels/lantian/SXcangnan1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="苍南新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8B%8D%E5%8D%97%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",苍南新闻综合
+https://stream1.freetv.fun/cang-nan-xin-wen-zong-he-4.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="苍南新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8B%8D%E5%8D%97%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",苍南新闻综合
+https://stream1.freetv.fun/cang-nan-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="苍南新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8B%8D%E5%8D%97%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",苍南新闻综合
+http://l.cztvcloud.com/channels/lantian/SXcangnan1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="缙云综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BC%99%E4%BA%91%E7%BB%BC%E5%90%88.png",缙云综合
+http://l.cztvcloud.com/channels/lantian/SXjinyun1/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="缙云综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BC%99%E4%BA%91%E7%BB%BC%E5%90%88.png",缙云综合
+http://l.cztvcloud.com/channels/lantian/SXjinyun1/720p.m3u8?zzhed"
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="缙云新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BC%99%E4%BA%91%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",缙云新闻综合
+http://l.cztvcloud.com/channels/lantian/SXjinyun1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="绍兴新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8D%E5%85%B4%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",绍兴新闻综合
+https://stream1.freetv.fun/shao-xing-xin-wen-zong-he-4.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="绍兴新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8D%E5%85%B4%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",绍兴新闻综合
+https://stream1.freetv.fun/shao-xing-xin-wen-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="绍兴新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8D%E5%85%B4%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",绍兴新闻综合
+https://stream1.freetv.fun/shao-xing-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="绍兴文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8D%E5%85%B4%E6%96%87%E5%8C%96%E5%BD%B1%E9%99%A2.png",绍兴文化影院
+https://stream1.freetv.fun/shao-xing-wen-hua-ying-yuan-2.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="绍兴文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8D%E5%85%B4%E6%96%87%E5%8C%96%E5%BD%B1%E9%99%A2.png",绍兴文化影院
+https://stream1.freetv.fun/shao-xing-wen-hua-ying-yuan-4.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="绍兴文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8D%E5%85%B4%E6%96%87%E5%8C%96%E5%BD%B1%E9%99%A2.png",绍兴文化影院
+https://stream1.freetv.fun/shao-xing-wen-hua-ying-yuan-1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="绍兴文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8D%E5%85%B4%E6%96%87%E5%8C%96%E5%BD%B1%E9%99%A2.png",绍兴文化影院
+https://stream1.freetv.fun/shao-xing-wen-hua-ying-yuan-3.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="绍兴文化影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8D%E5%85%B4%E6%96%87%E5%8C%96%E5%BD%B1%E8%A7%86.png",绍兴文化影视
+https://stream1.freetv.fun/shao-xing-wen-hua-ying-shi-1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="绍兴公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8D%E5%85%B4%E5%85%AC%E5%85%B1.png",绍兴公共
+https://stream1.freetv.fun/shao-xing-gong-gong-2.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="绍兴公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8D%E5%85%B4%E5%85%AC%E5%85%B1.png",绍兴公共
+https://stream1.freetv.fun/shao-xing-gong-gong-7.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="绍兴公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8D%E5%85%B4%E5%85%AC%E5%85%B1.png",绍兴公共
+https://stream1.freetv.fun/shao-xing-gong-gong-1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="绍兴公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8D%E5%85%B4%E5%85%AC%E5%85%B1.png",绍兴公共
+https://stream1.freetv.fun/shao-xing-gong-gong-3.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="绍兴公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8D%E5%85%B4%E5%85%AC%E5%85%B1.png",绍兴公共
+https://stream1.freetv.fun/shao-xing-gong-gong-8.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="洞头综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B4%9E%E5%A4%B4%E7%BB%BC%E5%90%88.png",洞头综合
+http://l.cztvcloud.com/channels/lantian/SXdongtou1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="永嘉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B0%B8%E5%98%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",永嘉新闻综合
+http://l.cztvcloud.com/channels/lantian/SXyongjia1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="永嘉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B0%B8%E5%98%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",永嘉新闻综合
+https://stream1.freetv.fun/yong-jia-xin-wen-zong-he-3.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="永嘉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B0%B8%E5%98%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",永嘉新闻综合
+https://stream1.freetv.fun/yong-jia-xin-wen-zong-he-4.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="永嘉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B0%B8%E5%98%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",永嘉新闻综合
+http://l.cztvcloud.com/channels/lantian/SXyongjia1/720p.m3u8?zzhed"
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="永嘉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B0%B8%E5%98%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",永嘉新闻综合
+https://stream1.freetv.fun/yong-jia-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="永嘉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B0%B8%E5%98%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",永嘉新闻综合
+http://l.cztvcloud.com/channels/lantian/SXyongjia1/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="永嘉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B0%B8%E5%98%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",永嘉新闻综合
+https://stream1.freetv.fun/yong-jia-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="武义新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E4%B9%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",武义新闻综合
+https://stream1.freetv.fun/wu-yi-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="武义新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E4%B9%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",武义新闻综合
+https://stream1.freetv.fun/wu-yi-xin-wen-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="武义新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E4%B9%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",武义新闻综合
+http://l.cztvcloud.com/channels/lantian/SXwuyi1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="武义新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E4%B9%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",武义新闻综合
+http://l.cztvcloud.com/channels/lantian/SXwuyi1/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="松阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%BE%E9%98%B3%E7%BB%BC%E5%90%88.png",松阳综合
+http://l.cztvcloud.com/channels/lantian/SXsongyang1/720p.m3u8?zzhed;http://l.cztvcloud.com/channels/lantian/SXsongyang1/720p.m3u8zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="松阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%BE%E9%98%B3%E7%BB%BC%E5%90%88.png",松阳综合
+http://l.cztvcloud.com/channels/lantian/SXsongyang1/720p.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="松阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%BE%E9%98%B3%E7%BB%BC%E5%90%88.png",松阳综合
+http://l.cztvcloud.com/channels/lantian/SXsongyang1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="松阳新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%BE%E9%98%B3%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",松阳新闻综合
+http://l.cztvcloud.com/channels/lantian/SXsongyang1/720p.m3u8?fbl=
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="普陀电视台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%99%AE%E9%99%80%E7%94%B5%E8%A7%86%E5%8F%B0.png",普陀电视台
+http://l.cztvcloud.com/channels/lantian/SXputuo1/720p.m3u8?zzhed#http://l.cztvcloud.com/channels/lantian/SXputuo1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="普陀电视台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%99%AE%E9%99%80%E7%94%B5%E8%A7%86%E5%8F%B0.png",普陀电视台
+https://l.cztvcloud.com/channels/lantian/SXputuo1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="普陀新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%99%AE%E9%99%80%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",普陀新闻综合
+http://l.cztvcloud.com/channels/lantian/SXputuo1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="普陀新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%99%AE%E9%99%80%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",普陀新闻综合
+http://l.cztvcloud.com/channels/lantian/SXputuo1/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="新昌生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E6%98%8C%E7%94%9F%E6%B4%BB.png",新昌生活
+http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="新昌新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E6%98%8C%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新昌新闻综合
+https://l.cztvcloud.com/channels/lantian/SXxinchang1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="新昌新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E6%98%8C%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新昌新闻综合
+http://l.cztvcloud.com/channels/lantian/SXxinchang1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="新昌新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E6%98%8C%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新昌新闻综合
+https://stream1.freetv.fun/xin-chang-xin-wen-zong-he-6.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="新昌新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E6%98%8C%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新昌新闻综合
+https://stream1.freetv.fun/xin-chang-xin-wen-zong-he-5.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="新昌新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E6%98%8C%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新昌新闻综合
+https://stream1.freetv.fun/xin-chang-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="新昌新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E6%98%8C%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新昌新闻综合
+https://stream1.freetv.fun/xin-chang-xin-wen-zong-he-4.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="文成综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%87%E6%88%90%E7%BB%BC%E5%90%88.png",文成综合
+http://l.cztvcloud.com/channels/lantian/SXwencheng1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="文成综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%87%E6%88%90%E7%BB%BC%E5%90%88.png",文成综合
+http://l.cztvcloud.com/channels/lantian/SXwencheng1/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="文成新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%87%E6%88%90%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",文成新闻综合
+http://l.cztvcloud.com/channels/lantian/SXwencheng1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="开化新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%8C%96%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",开化新闻综合
+https://stream1.freetv.fun/kai-hua-xin-wen-zong-he-2.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="开化新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%8C%96%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",开化新闻综合
+http://l.cztvcloud.com/channels/lantian/SXkaihua1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="开化国家公园" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%8C%96%E5%9B%BD%E5%AE%B6%E5%85%AC%E5%9B%AD.png",开化国家公园
+http://l.cztvcloud.com/channels/lantian/SXkaihua2/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="庆元综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%86%E5%85%83%E7%BB%BC%E5%90%88.png",庆元综合
+http://l.cztvcloud.com/channels/lantian/SXqingyuan1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="庆元综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%86%E5%85%83%E7%BB%BC%E5%90%88.png",庆元综合
+http://l.cztvcloud.com/channels/lantian/SXqingyuan1/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="庆元综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%86%E5%85%83%E7%BB%BC%E5%90%88.png",庆元综合
+http://l.cztvcloud.com/channels/lantian/SXqingyuan1/720p.m3u8?fbl=
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="庆元综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%86%E5%85%83%E7%BB%BC%E5%90%88.png",庆元综合
+http://l.cztvcloud.com/channels/lantian/SXqingyuan1/720p.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="庆元新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%86%E5%85%83%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",庆元新闻综合
+http://l.cztvcloud.com/channels/lantian/SXqingyuan1/720p.m3u8?fbl=
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="平湖民生休闲" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%B3%E6%B9%96%E6%B0%91%E7%94%9F%E4%BC%91%E9%97%B2.png",平湖民生休闲
+http://l.cztvcloud.com/channels/lantian/SXpinghu2/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="平湖新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%B3%E6%B9%96%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",平湖新闻综合
+https://stream1.freetv.fun/ping-hu-xin-wen-zong-he-5.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="平湖新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%B3%E6%B9%96%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",平湖新闻综合
+https://stream1.freetv.fun/ping-hu-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="平湖新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%B3%E6%B9%96%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",平湖新闻综合
+https://stream1.freetv.fun/ping-hu-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="平湖新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%B3%E6%B9%96%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",平湖新闻综合
+https://stream1.freetv.fun/ping-hu-xin-wen-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="平湖新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%B3%E6%B9%96%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",平湖新闻综合
+http://l.cztvcloud.com/channels/lantian/SXpinghu1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="嵊泗综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B5%8A%E6%B3%97%E7%BB%BC%E5%90%88.png",嵊泗综合
+http://goo.bkpcp.top/mg/ssxwzh
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="嵊泗综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B5%8A%E6%B3%97%E7%BB%BC%E5%90%88.png",嵊泗综合
+http://l.cztvcloud.com/channels/lantian/SXshengsi1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="嵊泗综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B5%8A%E6%B3%97%E7%BB%BC%E5%90%88.png",嵊泗综合
+https://stream1.freetv.fun/sheng-zhou-xin-wen-zong-he-2.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="嵊泗综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B5%8A%E6%B3%97%E7%BB%BC%E5%90%88.png",嵊泗综合
+https://stream1.freetv.fun/sheng-zhou-xin-wen-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="嵊泗综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B5%8A%E6%B3%97%E7%BB%BC%E5%90%88.png",嵊泗综合
+http://l.cztvcloud.com/channels/lantian/SXshengzhou1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="嵊泗新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B5%8A%E6%B3%97%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",嵊泗新闻综合
+http://l.cztvcloud.com/channels/lantian/SXshengsi1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="兰溪新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%85%B0%E6%BA%AA%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",兰溪新闻综合
+https://stream1.freetv.fun/lan-xi-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="兰溪新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%85%B0%E6%BA%AA%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",兰溪新闻综合
+https://stream1.freetv.fun/lan-xi-xin-wen-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="兰溪新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%85%B0%E6%BA%AA%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",兰溪新闻综合
+http://l.cztvcloud.com/channels/lantian/SXlanxi1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="兰溪新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%85%B0%E6%BA%AA%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",兰溪新闻综合
+http://l.cztvcloud.com/channels/lantian/SXlanxi1/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余杭综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E6%9D%AD%E7%BB%BC%E5%90%88.png",余杭综合
+http://l.cztvcloud.com/channels/lantian/SXyuhang1/720p.m3u8?cWlkPSZzPTg3OWMwYmMyZDMzYTFhZGY3NDQxMjgyYTg1MmUzNTY0JmVzPTE3MDY2Nzc4NzMmdXVpZD0yMjdiY2MzNGNiNGY0MThlYjRiY2IxYzcwNmZjODNkMS02NzQ3NDY2NyZ2PTImYXM9MCZjZG5leF9pZD10eF9waG9uZV9saXZl
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余杭综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E6%9D%AD%E7%BB%BC%E5%90%88.png",余杭综合
+http://l.cztvcloud.com/channels/lantian/SXyuhang1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余杭未来E" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E6%9D%AD%E6%9C%AA%E6%9D%A5E.png",余杭未来E
+http://l.cztvcloud.com/channels/lantian/SXyuhang3/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E7%BB%BC%E5%90%88.png",余姚综合
+http://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E7%BB%BC%E5%90%88.png",余姚综合
+https://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E7%BB%BC%E5%90%88.png",余姚综合
+http://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8?cWlkPSZzPTg3OWMwYmMyZDMzYTFhZGY3NDQxMjgyYTg1MmUzNTY0JmVzPTE3MDY2Nzc4NzMmdXVpZD0yMjdiY2MzNGNiNGY0MThlYjRiY2IxYzcwNmZjODNkMS02NzQ3NDY2NyZ2PTImYXM9MCZjZG5leF9pZD10eF9waG9uZV9saXZl
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E7%BB%BC%E5%90%88.png",余姚综合
+http://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",余姚新闻综合
+https://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",余姚新闻综合
+http://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚姚江文化" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E5%A7%9A%E6%B1%9F%E6%96%87%E5%8C%96.png",余姚姚江文化
+https://l.cztvcloud.com/channels/lantian/SXyuyao3/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚姚江文化" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E5%A7%9A%E6%B1%9F%E6%96%87%E5%8C%96.png",余姚姚江文化
+http://l.cztvcloud.com/channels/lantian/SXyuyao3/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚姚江文化" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E5%A7%9A%E6%B1%9F%E6%96%87%E5%8C%96.png",余姚姚江文化
+https://l.cztvcloud.com/channels/lantian/SXyuyao2/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚姚江文化" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E5%A7%9A%E6%B1%9F%E6%96%87%E5%8C%96.png",余姚姚江文化
+http://l.cztvcloud.com/channels/lantian/SXyuyao3/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚姚江文化" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E5%A7%9A%E6%B1%9F%E6%96%87%E5%8C%96.png",余姚姚江文化
+http://l.cztvcloud.com/channels/lantian/SXyuyao3/720p.m3u8zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="云和新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%92%8C%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",云和新闻综合
+http://l.cztvcloud.com/channels/lantian/SXyunhe1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="中国蓝新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%AD%E5%9B%BD%E8%93%9D%E6%96%B0%E9%97%BB.png",中国蓝新闻
+http://ali-m-l.cztv.com/channels/lantian/channel009/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="中国蓝新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%AD%E5%9B%BD%E8%93%9D%E6%96%B0%E9%97%BB.png",中国蓝新闻
+https://ali-m-l.cztv.com/channels/lantian/channel009/1080p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="东阳影视生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E9%98%B3%E5%BD%B1%E8%A7%86%E7%94%9F%E6%B4%BB.png",东阳影视生活
+http://l.cztvcloud.com/channels/lantian/SXdongyang1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",上虞新闻综合
+http://l.cztvcloud.com/channels/lantian/SXshangyu1/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",上虞新闻综合
+http://l.cztvcloud.com/channels/lantian/SXshangyu1/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞新商都" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%B0%E5%95%86%E9%83%BD.png",上虞新商都
+http://l.cztvcloud.com/channels/lantian/SXshangyu3/720p.m3u8?zzhed\r\n
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞新商都" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%B0%E5%95%86%E9%83%BD.png",上虞新商都
+https://stream1.freetv.fun/shang-yu-xin-shang-du-1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞新商都" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%B0%E5%95%86%E9%83%BD.png",上虞新商都
+https://stream1.freetv.fun/shang-yu-xin-shang-du-5.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞新商都" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%B0%E5%95%86%E9%83%BD.png",上虞新商都
+https://stream1.freetv.fun/shang-yu-xin-shang-du-3.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞新商都" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%B0%E5%95%86%E9%83%BD.png",上虞新商都
+https://stream1.freetv.fun/shang-yu-xin-shang-du-6.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞新商都" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%B0%E5%95%86%E9%83%BD.png",上虞新商都
+http://l.cztvcloud.com/channels/lantian/SXshangyu3/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞新商都" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%B0%E5%95%86%E9%83%BD.png",上虞新商都
+https://stream1.freetv.fun/shang-yu-xin-shang-du-2.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞新商都" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%B0%E5%95%86%E9%83%BD.png",上虞新商都
+https://stream1.freetv.fun/shang-yu-xin-shang-du-4.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%87%E5%8C%96%E5%BD%B1%E9%99%A2.png",上虞文化影院
+http://l.cztvcloud.com/channels/lantian/SXshangyu2/720p.m3u8?zzhed;http://l.cztvcloud.com/channels/lantian/SXshangyu2/720p.m3u8zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%87%E5%8C%96%E5%BD%B1%E9%99%A2.png",上虞文化影院
+http://l.cztvcloud.com/channels/lantian/SXshangyu2/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%87%E5%8C%96%E5%BD%B1%E9%99%A2.png",上虞文化影院
+https://stream1.freetv.fun/shang-yu-wen-hua-ying-yuan-3.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%87%E5%8C%96%E5%BD%B1%E9%99%A2.png",上虞文化影院
+https://stream1.freetv.fun/shang-yu-wen-hua-ying-yuan-4.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%87%E5%8C%96%E5%BD%B1%E9%99%A2.png",上虞文化影院
+http://l.cztvcloud.com/channels/lantian/SXshangyu2/720p.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%87%E5%8C%96%E5%BD%B1%E9%99%A2.png",上虞文化影院
+https://stream1.freetv.fun/shang-yu-wen-hua-ying-yuan-2.ctv
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%87%E5%8C%96%E5%BD%B1%E9%99%A2.png",上虞文化影院
+https://stream1.freetv.fun/shang-yu-wen-hua-ying-yuan-1.m3u8
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞文化影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%87%E5%8C%96%E5%BD%B1%E8%A7%86.png",上虞文化影视
+http://l.cztvcloud.com/channels/lantian/SXshangyu2/720p.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京卡酷少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%A1%E9%85%B7%E5%B0%91%E5%84%BF.png",北京卡酷少儿
+http://111.193.239.245:9999/rtp/239.3.1.189:8000
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京卡酷少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%A1%E9%85%B7%E5%B0%91%E5%84%BF.png",北京卡酷少儿
+http://yc.myds.me:35455/itv/5000000011000265008.m3u8?cdn=bestzb
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京卡酷少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%A1%E9%85%B7%E5%B0%91%E5%84%BF.png",北京卡酷少儿
+http://[2409:8087:3c02:0021:0000:0001:0000:100a]:6410/shandong_cabletv.live.zte.com////CHANNEL00000661/index.m3u8?IASHttpSessionId=
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京卡酷少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%A1%E9%85%B7%E5%B0%91%E5%84%BF.png",北京卡酷少儿
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225654/index.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京卡酷少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%A1%E9%85%B7%E5%B0%91%E5%84%BF.png",北京卡酷少儿
+http://judy.livednow.dpdns.org/beijing/55skfjq618b9kcq9tfjr5qllb7r.m3u8?auth=
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京卡酷少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%A1%E9%85%B7%E5%B0%91%E5%84%BF.png",北京卡酷少儿
+http://brtv.chinamm.cn/?id=bjkk
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京卡酷少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%A1%E9%85%B7%E5%B0%91%E5%84%BF.png",北京卡酷少儿
+http://iptv.huuc.edu.cn/hls/btv10hd.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京卡酷少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%A1%E9%85%B7%E5%B0%91%E5%84%BF.png",北京卡酷少儿
+https://iptv.mydiver.eu.org/live/encrypted/YTk0ZGY4NDllYjkzY2JjMTc4NzE0ZmRkNDUyMDIyNWI6NmVlN2NjM2U4MTAzYWZmOWI3OTViZjViOTMwOTkxZDVlYWU0MWEyYmVjMjdjNGVjYmZiMTEwM2E5ODllOTljMGRkMWI5MjIzYzRkMDA1ZTllYTQ2ZmRlZDk0ZTA0MmI2YmMyZDgyNzgwNjA0ODVhZjQ2MTRlZTg5ZTIwY2M2NDE1MTVlZGQ3OTM4Njc3OWZmZjZkNWVjMWY1ZWY3NGUyMmIyZmFkOGRjMGZhOTkzNDViYzE1M2M5YTFiZDIxZmMxNzAwNjRkNmQxYTBiZWYzYTczZDc3ODc3NzA3NjYzYWZlNDljOTNkODA2M2VhZDc3NjBjNDQwMzNjNTU1MzU5Y2FmYzFjMjU0ODIyNDgwNTI2NjY3ZDZmZjg1YzJmYzE1ZDBhZmQwMTMxNWUxZjg1ZmI1NTc4NDg3ZDU4ZTc2NzM2OWI4NzQ4NGJkNzYxODg5NGQyOTdkZTk4ZjVjMzA2Nzk5YjA5OGJiNGQ5NDU5N2E4YjRjYmYyYzM3ZDU1ZDQwYWQwMjdjOTUxNzcyMjFkYWMxOTZiZGM5YmQ2YWY0OWE?username=tg_vnpu89z4
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京卡酷少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%A1%E9%85%B7%E5%B0%91%E5%84%BF.png",北京卡酷少儿
+https://iptv.mydiver.eu.org/live/encrypted/YzQ3YjNmZTAyYjE1YjVkYzJhMWY3Y2MxOGNmZTA5Y2U6YzU3MDYxYTQ1MzE0M2QzMjViMjU1MzVhNDcxZjA5OGIwNmZhOGI5ZDY1NGY2OWNkMTgyOGFjOGUxNzdmYzMxMmVjOTM2ZjQ1N2Q4ZTdhOWYxNmViMGFjZjg1ZjBiNWRlZTY4NmJjNDg1ZTUyNmMzMWFhNDI4NWNjYTVmYTllM2EzYzUzMzBhNTg1MDZhOGI5YjAwZDI3ZWJjMjNhM2FmMzA0ZGEwZDI1MmJkOGQ4MzhkOTBiNmFmNDRlZDFiMmUyMjFiZWZkMTExOTdhNGM2ZjBmYzhjMTI0NWRlNjdiNzVkMzJjYWJjYWVjMTJhMDZkMGZiNWI4MjRjMjg2ZWE2NTJjZmM1ZDBiOWZhNDcwM2E2M2Y2MjE1ZDAwODFiZTJkZjk0ZmM3YjBiM2E4NjFjYWMxMjkwMDBhZmNiNjZkMjZkNGE3ZTdhOWNjZjQyMzI2YTkxZWExOTU4M2JlOGM5NzU0ZmI4MzczMjhhNGEzNzg2MTQ5Y2Q1YWZhNDI4ZmE2NzQ0YzkwYzhmYzNiZTE4OTA5NWYxOTc1NWYzNjJkMDU?username=tg_vnpu89z4
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E6%96%B0%E9%97%BB.png",北京新闻
+http://satellitepull.cnr.cn/live/wxbjxwgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E6%96%B0%E9%97%BB.png",北京新闻
+https://satellitepull.cnr.cn/live/wxbjxwgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E6%96%B0%E9%97%BB.png",北京新闻
+http://live.xmcdn.com/live/91/64.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E6%96%B0%E9%97%BB.png",北京新闻
+https://ls.qingting.fm/live/339/64k.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E6%96%B0%E9%97%BB.png",北京新闻
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226437/1.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E6%96%B0%E9%97%BB.png",北京新闻
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226512/1.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E6%96%B0%E9%97%BB.png",北京新闻
+http://dsj.motem.top:8880/bptv/10000100000000050000000003870780.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E6%96%B0%E9%97%BB.png",北京新闻
+http://iptv.huuc.edu.cn/hls/btv9hd.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E6%96%B0%E9%97%BB.png",北京新闻
+http://nas.suntao.online:35455/bptv/10000100000000050000000003870780.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E6%96%B0%E9%97%BB.png",北京新闻
+http://yc.myds.me:35455/bptv/10000100000000050000000003870780.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",北京生活
+https://wstvcpudali.v.myalicdn.com/wstvcpud/udrmbtv7_1/index.m3u8?adapt=0&BR=audio
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",北京生活
+http://111.193.239.245:9999/rtp/239.3.1.117:8000
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",北京生活
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226514/1.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",北京生活
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226561/1.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",北京生活
+http://ikuai.zlsip.top:4022/rtp/239.3.1.117:8000
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",北京生活
+http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226514/1.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",北京生活
+https://migu1.188766.xyz/?migutoken=5b46917ef0b3247921d45b3b63f4c873&id=%E5%8C%97%E4%BA%ACi%E7%94%9F%E6%B4%BB&type=bj
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",北京生活
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221226514/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Es-PVNcPJsjr_oBdcXGT40g%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMWvZ0r6eMXcXJOGrCpJiq1%2CEND
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",北京生活
+https://migu1.188766.xyz/?migutoken=c673ebc1f27b25b0bfd098ea854722bf&id=%E5%8C%97%E4%BA%ACi%E7%94%9F%E6%B4%BB&type=bj
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",北京生活
+https://migu1.188766.xyz/?migutoken=2a838e272a0ca0393b5b8d6e69fc36bb&id=%E5%8C%97%E4%BA%ACi%E7%94%9F%E6%B4%BB&type=bj
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%A7%91%E6%95%99.png",北京科教
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225729/index.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F.png",北京财经
+https://wstvcpudali.v.myalicdn.com/wstvcpud/udrmbtv5_1/index.m3u8?adapt=0&BR=audio
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F.png",北京财经
+http://111.193.239.245:9999/rtp/239.3.1.116:8000
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F.png",北京财经
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226516/1.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F.png",北京财经
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226560/1.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F.png",北京财经
+http://ikuai.zlsip.top:4022/rtp/239.3.1.116:8000
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F.png",北京财经
+http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226516/1.m3u8
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F.png",北京财经
+https://migu1.188766.xyz/?migutoken=43f393c66cb7544bab69d98781194e23&id=%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F&type=bj
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F.png",北京财经
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221226516/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eh9_SEkmWeMdS1TMnIILZgg%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPIiicEW7OIvk1s-X-PXHqO%2CEND
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F.png",北京财经
+https://migu1.188766.xyz/?migutoken=aad5c94ec1bcf6133572eeafb01a7876&id=%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F&type=bj
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F.png",北京财经
+https://migu1.188766.xyz/?migutoken=dcfce020971b750a63915a321f5af985&id=%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F&type=bj
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="七彩戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%83%E5%BD%A9%E6%88%8F%E5%89%A7.png",七彩戏剧
+http://php.jdshipin.com/itv6s.php?cid=bestzb&id=5000000011000031116
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="七彩戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%83%E5%BD%A9%E6%88%8F%E5%89%A7.png",七彩戏剧
+http://z.b.bkpcp.top/m.php?id=qcxj
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="七彩戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%83%E5%BD%A9%E6%88%8F%E5%89%A7.png",七彩戏剧
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000002000000010/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000010&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="七彩戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%83%E5%BD%A9%E6%88%8F%E5%89%A7.png",七彩戏剧
+http://tv.scjyhd.com:4022/udp/239.10.0.128:5140
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海外语" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E5%A4%96%E8%AF%AD.png",上海外语
+http://z.b.bkpcp.top/m.php?id=shics
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海外语" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E5%A4%96%E8%AF%AD.png",上海外语
+http://[2409:8087:5e00:24::029]:6610/000000001000/2000000002000000001/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000001&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海外语" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E5%A4%96%E8%AF%AD.png",上海外语
+https://live.lalifeier.eu.org/kankanews/shics.m3u8?t=1746307365&key=5923d8473fb7e7c254f421fd5c26ed51
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海外语" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E5%A4%96%E8%AF%AD.png",上海外语
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000002000000001/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000001&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海外语" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E5%A4%96%E8%AF%AD.png",上海外语
+https://live.lalifeier.eu.org/kankanews/shics.m3u8?t=1746739480&key=e124ae7dcf72c2192fa201c4f288958c
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海外语" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E5%A4%96%E8%AF%AD.png",上海外语
+https://live.lalifeier.eu.org/kankanews/shics.m3u8?t=1746782860&key=3b035b12fc8ce4fff802fcca5d93d8cd
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海外语" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E5%A4%96%E8%AF%AD.png",上海外语
+https://live.lalifeier.eu.org/kankanews/shics.m3u8?t=1746825793&key=5e4720b3ea650a8d6d89c069af22a19e
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海外语" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E5%A4%96%E8%AF%AD.png",上海外语
+https://live.lalifeier.eu.org/kankanews/shics.m3u8?t=1746894586&key=d9d473cd056dbb0da2147f8f7fed61bf
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海外语" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E5%A4%96%E8%AF%AD.png",上海外语
+https://live.lalifeier.eu.org/kankanews/shics.m3u8?t=1746912103&key=016d350423a6334a70d36c8fa5443889
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海外语" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E5%A4%96%E8%AF%AD.png",上海外语
+https://live.lalifeier.eu.org/kankanews/shics.m3u8?t=1746955518&key=22a2fbe89a1054a678c1579b1fdb66ed
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%95%99%E8%82%B2.png",上海教育
+http://sh.tonytuya.xyz:4022/udp/239.45.0.13:5140
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%95%99%E8%82%B2.png",上海教育
+http://[2409:8087:1e03:21::42]:6610/cms001/ch00000090990000001268/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%95%99%E8%82%B2.png",上海教育
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001268/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%95%99%E8%82%B2.png",上海教育
+http://[2409:8087:1e04:21::102]:6060/cms001/ch00000090990000001268/1.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%95%99%E8%82%B2.png",上海教育
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001268/index.m3u8#http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001268/index.m3u8?#http://[2409:8087:1e03:21::42]:6610/cms001/ch00000090990000001268/index.m3u8?#http://[2409:8087:1e04:21::102]:6060/cms001/ch00000090990000001268/1.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%95%99%E8%82%B2.png",上海教育
+https://live.metshop.top/bestv.php?id=setvhd/8000000
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%95%99%E8%82%B2.png",上海教育
+http://miqlin.cyou:8888/udp/233.18.204.63:5140
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",上海新闻综合
+https://live.lalifeier.eu.org/kankanews/shxwzh.m3u8?t=1746725062&key=56643e3700766a075fb5c6cc622391f2
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",上海新闻综合
+https://live.lalifeier.eu.org/kankanews/shxwzh.m3u8?t=1746739480&key=e002358e34faf2e79bd313551cc3b9ba
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",上海新闻综合
+https://live.lalifeier.eu.org/kankanews/shxwzh.m3u8?t=1746775525&key=9a01d673793cd11f5e165d354b388c0c
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",上海新闻综合
+https://live.lalifeier.eu.org/kankanews/shxwzh.m3u8?t=1746782860&key=bf2f8d4b44860f34e30d0687e7036008
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",上海新闻综合
+https://live.lalifeier.eu.org/kankanews/shxwzh.m3u8?t=1746811400&key=2de3909b0ec5beb97c700068f3deb787
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",上海新闻综合
+https://live.lalifeier.eu.org/kankanews/shxwzh.m3u8?t=1746825793&key=0fa7c4b14305d6d41cf880b8adcd9158
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",上海新闻综合
+https://live.lalifeier.eu.org/kankanews/shxwzh.m3u8?t=1746861745&key=27cc899461ee8ecaf8423306b7769d82
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",上海新闻综合
+https://live.lalifeier.eu.org/kankanews/shxwzh.m3u8?t=1746894586&key=a9245cbcf9c2737a3db655cab58a2a90
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",上海新闻综合
+https://live.lalifeier.eu.org/kankanews/shxwzh.m3u8?t=1746897711&key=8022ffd50b555f38737f1cc3f873a270
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",上海新闻综合
+https://live.lalifeier.eu.org/kankanews/shxwzh.m3u8?t=1746912103&key=b857d2311d516ee48214c550ac1abced
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海第一财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E7%AC%AC%E4%B8%80%E8%B4%A2%E7%BB%8F.png",上海第一财经
+https://satellitepull.cnr.cn/live/wx32dycjgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E7%BA%AA%E5%AE%9E.png",上海纪实
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010067
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E7%BA%AA%E5%AE%9E.png",上海纪实
+http://iptv.huuc.edu.cn/hls/docuchina.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E7%BA%AA%E5%AE%9E.png",上海纪实
+https://stream1.freetv.fun/shang-hai-ji-shi-ren-wen-1.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E7%BA%AA%E5%AE%9E.png",上海纪实
+https://stream1.freetv.fun/ipv6-shang-hai-ji-shi-ren-wen-2.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E7%BA%AA%E5%AE%9E.png",上海纪实
+https://stream1.freetv.fun/ipv6-shang-hai-ji-shi-ren-wen-3.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E7%BA%AA%E5%AE%9E.png",上海纪实
+https://stream1.freetv.fun/ipv6-shang-hai-ji-shi-ren-wen-1.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E7%BA%AA%E5%AE%9E.png",上海纪实
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225655/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E9%83%BD%E5%B8%82.png",上海都市
+https://live.lalifeier.eu.org/kankanews/shds.m3u8?t=1746292937&key=3725d08baa89daf1e05599a00bdac978
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E9%83%BD%E5%B8%82.png",上海都市
+https://live.lalifeier.eu.org/kankanews/shds.m3u8?t=1746307365&key=635dd803224a560866c81f72aae510a0
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E9%83%BD%E5%B8%82.png",上海都市
+https://stream1.freetv.fun/shang-hai-du-shi-1.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E9%83%BD%E5%B8%82.png",上海都市
+https://stream1.freetv.fun/ipv6-shang-hai-du-shi-10.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E9%83%BD%E5%B8%82.png",上海都市
+https://stream1.freetv.fun/ipv6-shang-hai-du-shi-6.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E9%83%BD%E5%B8%82.png",上海都市
+https://stream1.freetv.fun/ipv6-shang-hai-du-shi-1.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E9%83%BD%E5%B8%82.png",上海都市
+https://stream1.freetv.fun/shang-hai-du-shi-7.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E9%83%BD%E5%B8%82.png",上海都市
+https://stream1.freetv.fun/ipv6-shang-hai-du-shi-7.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E9%83%BD%E5%B8%82.png",上海都市
+https://stream1.freetv.fun/ipv6-shang-hai-du-shi-8.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="上海都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E6%B5%B7%E9%83%BD%E5%B8%82.png",上海都市
+https://stream1.freetv.fun/ipv6-shang-hai-du-shi-3.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%BD%B1%E8%A7%86.png",东方影视
+http://php.jdshipin.com:8880/itv6.php?cid=bestzb&id=5000000010000032212
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%BD%B1%E8%A7%86.png",东方影视
+http://z.b.bkpcp.top/m.php?id=shys
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%BD%B1%E8%A7%86.png",东方影视
+http://z.b.bkpcp.top/m.php?id=dfys
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%BD%B1%E8%A7%86.png",东方影视
+https://www.freetv.top/migu/617290047.m3u8?migutoken=86c02ad0875d5cc49d77bcc8bdb628f2c9d508ffc323b964a03c8f92dde4afafa0345cf5a8fefbdf915c748e3d11c6c18e27ae1e21a609cec31a45e6c437db26a7a243625f9cf35c271171a22c
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%BD%B1%E8%A7%86.png",东方影视
+https://stream1.freetv.fun/dong-fang-ying-shi-6.ctv
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%BD%B1%E8%A7%86.png",东方影视
+https://stream1.freetv.fun/dong-fang-ying-shi-4.ctv
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%BD%B1%E8%A7%86.png",东方影视
+https://stream1.freetv.fun/ipv6-dong-fang-ying-shi-3.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%BD%B1%E8%A7%86.png",东方影视
+https://stream1.freetv.fun/ipv6-dong-fang-ying-shi-5.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%BD%B1%E8%A7%86.png",东方影视
+https://stream1.freetv.fun/dong-fang-ying-shi-13.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%BD%B1%E8%A7%86.png",东方影视
+http://gat.bkpcp.top/ymg.php
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E8%B4%A2%E7%BB%8F.png",东方财经
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000007000010003/index.m3u8?channel-id=bestzb&Contentid=5000000007000010003&livemode=1&stbId=3
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E8%B4%A2%E7%BB%8F.png",东方财经
+http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226583/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E8%B4%A2%E7%BB%8F.png",东方财经
+http://tv.scjyhd.com:4022/udp/239.93.0.249:5140
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E8%B4%A2%E7%BB%8F.png",东方财经
+http://[2409:8087:5e00:24::29]:6610/000000001000/2000000002000000090/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000090&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E8%B4%A2%E7%BB%8F.png",东方财经
+http://yc.myds.me:35455/itv/5000000007000010003.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E8%B4%A2%E7%BB%8F.png",东方财经
+http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226602/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E8%B4%A2%E7%BB%8F.png",东方财经
+http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000007000010003/1.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E8%B4%A2%E7%BB%8F.png",东方财经
+http://[2409:8087:74d9:21::6]:80/000000001000PLTV/88888888/224/3221226602/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E8%B4%A2%E7%BB%8F.png",东方财经
+http://miqlin.cyou:8888/udp/233.18.204.65:5140
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E8%B4%A2%E7%BB%8F.png",东方财经
+http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8?icpid=88888888&servicetype=1
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+http://116.237.148.215:8881/rtp/239.45.3.134:5140
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+http://180.165.29.204:4022/rtp/239.45.3.134:5140
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+http://218.1.137.125:4022/rtp/239.45.3.134:5140
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031113
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226197/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+https://stream1.freetv.fun/dong-man-xiu-chang-21.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+https://stream1.freetv.fun/ipv6-dong-man-xiu-chang-1.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+https://stream1.freetv.fun/dong-man-xiu-chang-11.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+https://stream1.freetv.fun/dong-man-xiu-chang-24.ctv
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+https://stream1.freetv.fun/ipv6-dong-man-xiu-chang-11.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%93%88%E7%82%AB%E5%8A%A8.png",哈哈炫动
+http://116.237.148.215:8881/rtp/239.45.1.55:5140
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%93%88%E7%82%AB%E5%8A%A8.png",哈哈炫动
+http://218.1.137.125:4022/rtp/239.45.1.55:5140
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%93%88%E7%82%AB%E5%8A%A8.png",哈哈炫动
+http://180.165.29.204:4022/rtp/239.45.1.55:5140
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%93%88%E7%82%AB%E5%8A%A8.png",哈哈炫动
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010117
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%93%88%E7%82%AB%E5%8A%A8.png",哈哈炫动
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225657/2.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%93%88%E7%82%AB%E5%8A%A8.png",哈哈炫动
+http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226618/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%93%88%E7%82%AB%E5%8A%A8.png",哈哈炫动
+https://live.lalifeier.eu.org/kankanews/hhxd.m3u8?t=1746292937&key=b5431ae4fa8b2429332dae8604165c95
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%93%88%E7%82%AB%E5%8A%A8.png",哈哈炫动
+https://stream1.freetv.fun/ha-ha-xuan-dong-31.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%93%88%E7%82%AB%E5%8A%A8.png",哈哈炫动
+https://live.lalifeier.eu.org/kankanews/hhxd.m3u8?t=1746307365&key=611cf4efea7a3dd2fe1b6a28541bed06
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%93%88%E7%82%AB%E5%8A%A8.png",哈哈炫动
+https://stream1.freetv.fun/ha-ha-xuan-dong-25.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新闻综合
+http://p2.vzan.com/slowlive/596867413819827251/live.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新闻综合
+http://z.b.bkpcp.top/m.php?id=shxw
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新闻综合
+https://www.freetv.top/migu/651632657.m3u8?migutoken=b4a3e55048f55ec1c8fc5b509fbdf32f2dc5d255f5f218e79e84ca9a87fb9f2239927cb11b448f18285b50b81b4cd50a1354e9be5a3283375e85372798c3f3eb3ad60adf45eb5615f68eb4825f
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新闻综合
+https://live.lalifeier.eu.org/kankanews/shxwzh.m3u8?t=1746379256&key=0f50abfb27cedee7672bcf626d21f83b
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新闻综合
+https://live.lalifeier.eu.org/kankanews/shxwzh.m3u8?t=1746393735&key=647ef0ee7c08241a915702c9b6f16960
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新闻综合
+https://live.lalifeier.eu.org/kankanews/shxwzh.m3u8?t=1746292937&key=2c0730250b4adabbdab89ad23f78c053
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新闻综合
+https://live.lalifeier.eu.org/kankanews/shxwzh.m3u8?t=1746307365&key=934041caefb0bfa77af7ffc44707320c
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新闻综合
+https://www.freetv.top/migu/651632657.m3u8?migutoken=5ae42e8fda034ab7bf5171dafa0043e70cd12bcd716940c4572fde52ea92b0785f16f1bdbce4c83f5e075b250fe95668f19f8527dda57c27db24f95d412614d99c86a3a2d9341d88b5224b7068
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新闻综合
+https://stream1.freetv.fun/xin-wen-zong-he-1.ctv
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新闻综合
+https://stream1.freetv.fun/xin-wen-zong-he-14.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="欢笑剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AC%A2%E7%AC%91%E5%89%A7%E5%9C%BA.png",欢笑剧场
+http://gat.bkpcp.top/ymg.php?id=hxjc
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="欢笑剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AC%A2%E7%AC%91%E5%89%A7%E5%9C%BA.png",欢笑剧场
+http://goo.bkpcp.top/mg/hxjc
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="欢笑剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AC%A2%E7%AC%91%E5%89%A7%E5%9C%BA.png",欢笑剧场
+http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226704/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="欢笑剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AC%A2%E7%AC%91%E5%89%A7%E5%9C%BA.png",欢笑剧场
+http://[2409:8087:2001:20:2800:0:df6e:eb1a]/wh7f454c46tw1868232_1764604972/ott.mobaibox.com/PLTV/3/224/3221227715/index.m3u8?icpid=3&RTS=1661190272&from=40&popid=40&hms_devid=2116&prioritypopid=40&vqe=3
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="欢笑剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AC%A2%E7%AC%91%E5%89%A7%E5%9C%BA.png",欢笑剧场
+http://[2409:8087:5e08:24::17]:6610/000000001000/5000000007000010001/index.m3u8?channel-id=bestzb&Contentid=5000000007000010001&livemode=1&stbId=3
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="欢笑剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AC%A2%E7%AC%91%E5%89%A7%E5%9C%BA.png",欢笑剧场
+http://vod.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226882/10000100000000060000000008192604_0.smil/index.m3u8?fmt=ts2hls&servicetype=1
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="欢笑剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AC%A2%E7%AC%91%E5%89%A7%E5%9C%BA.png",欢笑剧场
+http://z.b.bkpcp.top/m.php
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="欢笑剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AC%A2%E7%AC%91%E5%89%A7%E5%9C%BA.png",欢笑剧场
+http://[2409:8087:5e08:24::17]:6610/000000001000/2000000002000000016/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000016&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="欢笑剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AC%A2%E7%AC%91%E5%89%A7%E5%9C%BA.png",欢笑剧场
+http://[2409:8087:5e08:24::17]:6610/000000001000/5000000007000010001/index.m3u8?channel-id=bestzb&Contentid=5000000007000010001&livemode=1&stbId=YanG-1989
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="欢笑剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AC%A2%E7%AC%91%E5%89%A7%E5%9C%BA.png",欢笑剧场
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001193/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="法治天地" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%95%E6%B2%BB%E5%A4%A9%E5%9C%B0.png",法治天地
+http://php.jdshipin.com/itv6.php?cid=bestzb&id=9001547084732463424
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="法治天地" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%95%E6%B2%BB%E5%A4%A9%E5%9C%B0.png",法治天地
+http://z.b.bkpcp.top/m.php?id=fztd
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="法治天地" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%95%E6%B2%BB%E5%A4%A9%E5%9C%B0.png",法治天地
+http://[2409:8087:5e00:24::29]:6610/000000001000/2000000002000000014/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000014&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="法治天地" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%95%E6%B2%BB%E5%A4%A9%E5%9C%B0.png",法治天地
+http://[2409:8087:5e08:24::17]:6610/000000001000/2000000002000000014/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000014&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="法治天地" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%95%E6%B2%BB%E5%A4%A9%E5%9C%B0.png",法治天地
+http://[2409:8087:5e01:24::8]:6610/000000001000/2000000002000000014/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000014&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="法治天地" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%95%E6%B2%BB%E5%A4%A9%E5%9C%B0.png",法治天地
+http://[2409:8087:7001:20:1000::88]:6610/000000001000/9001547084732463424/index.m3u8?channel-id=bestzb&Contentid=9001547084732463424&livemode=1&stbId=3
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="法治天地" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%95%E6%B2%BB%E5%A4%A9%E5%9C%B0.png",法治天地
+http://php.666230.xyz/公众号【睡眼迷离的猫】/proxy/p26.php?id=162
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="法治天地" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%95%E6%B2%BB%E5%A4%A9%E5%9C%B0.png",法治天地
+http://miqlin.cyou:8888/udp/233.18.204.49:5140
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="法治天地" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%95%E6%B2%BB%E5%A4%A9%E5%9C%B0.png",法治天地
+http://[2409:8087:5e01:24::16]:6610/000000001000/2000000002000000014/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000014&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="法治天地" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%95%E6%B2%BB%E5%A4%A9%E5%9C%B0.png",法治天地
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001195/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="生活时尚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%9F%E6%B4%BB%E6%97%B6%E5%B0%9A.png",生活时尚
+https://stream1.freetv.fun/sheng-huo-shi-shang-9.ctv
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="生活时尚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%9F%E6%B4%BB%E6%97%B6%E5%B0%9A.png",生活时尚
+https://stream1.freetv.fun/ipv6-sheng-huo-shi-shang-5.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="生活时尚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%9F%E6%B4%BB%E6%97%B6%E5%B0%9A.png",生活时尚
+https://stream1.freetv.fun/sheng-huo-shi-shang-18.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="生活时尚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%9F%E6%B4%BB%E6%97%B6%E5%B0%9A.png",生活时尚
+https://stream1.freetv.fun/sheng-huo-shi-shang-12.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="生活时尚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%9F%E6%B4%BB%E6%97%B6%E5%B0%9A.png",生活时尚
+https://stream1.freetv.fun/sheng-huo-shi-shang-27.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="生活时尚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%9F%E6%B4%BB%E6%97%B6%E5%B0%9A.png",生活时尚
+https://stream1.freetv.fun/sheng-huo-shi-shang-25.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="生活时尚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%9F%E6%B4%BB%E6%97%B6%E5%B0%9A.png",生活时尚
+https://stream1.freetv.fun/sheng-huo-shi-shang-11.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="生活时尚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%9F%E6%B4%BB%E6%97%B6%E5%B0%9A.png",生活时尚
+https://stream1.freetv.fun/ipv6-sheng-huo-shi-shang-2.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="生活时尚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%9F%E6%B4%BB%E6%97%B6%E5%B0%9A.png",生活时尚
+https://stream1.freetv.fun/ipv6-sheng-huo-shi-shang-7.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="生活时尚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%9F%E6%B4%BB%E6%97%B6%E5%B0%9A.png",生活时尚
+https://stream1.freetv.fun/sheng-huo-shi-shang-13.ctv
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="第一财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%AC%AC%E4%B8%80%E8%B4%A2%E7%BB%8F.png",第一财经
+http://satellitepull.cnr.cn/live/wx32dycjgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="第一财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%AC%AC%E4%B8%80%E8%B4%A2%E7%BB%8F.png",第一财经
+http://a1live.livecdn.yicai.com/live/radio_tv.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="第一财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%AC%AC%E4%B8%80%E8%B4%A2%E7%BB%8F.png",第一财经
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000010000027146/index.m3u8?channel-id=bestzb&Contentid=5000000010000027146&livemode=1&stbId=3
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="第一财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%AC%AC%E4%B8%80%E8%B4%A2%E7%BB%8F.png",第一财经
+http://ls.qingting.fm/live/276.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="第一财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%AC%AC%E4%B8%80%E8%B4%A2%E7%BB%8F.png",第一财经
+https://live.lalifeier.eu.org/kankanews/dycj.m3u8?t=1746393735&key=7b164ddded8a7d9ea3ba4a8d86999077
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="第一财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%AC%AC%E4%B8%80%E8%B4%A2%E7%BB%8F.png",第一财经
+https://live.lalifeier.eu.org/kankanews/dycj.m3u8?t=1746379256&key=e6deaa8fc1e0662447be8f3b7c649f70
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="第一财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%AC%AC%E4%B8%80%E8%B4%A2%E7%BB%8F.png",第一财经
+https://live.lalifeier.eu.org/kankanews/dycj.m3u8?t=1746292937&key=8dbd6113ce0541e6b92e8f47782ef1f6
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="第一财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%AC%AC%E4%B8%80%E8%B4%A2%E7%BB%8F.png",第一财经
+https://live.lalifeier.eu.org/kankanews/dycj.m3u8?t=1746307365&key=7477fec974c356ed2cf91be43a1dc893
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="第一财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%AC%AC%E4%B8%80%E8%B4%A2%E7%BB%8F.png",第一财经
+https://stream1.freetv.fun/di-yi-cai-jing-6.ctv
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="第一财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%AC%AC%E4%B8%80%E8%B4%A2%E7%BB%8F.png",第一财经
+https://stream1.freetv.fun/di-yi-cai-jing-3.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="纪实人文" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AA%E5%AE%9E%E4%BA%BA%E6%96%87.png",纪实人文
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225738/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="纪实人文" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AA%E5%AE%9E%E4%BA%BA%E6%96%87.png",纪实人文
+http://[2409:8087:5e08:24::2]:6610/000000001000/5000000004000010282/index.m3u8?channel-id=bestzb&Contentid=5000000004000010282&livemode=1&stbId=3
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="纪实人文" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AA%E5%AE%9E%E4%BA%BA%E6%96%87.png",纪实人文
+http://[2409:8087:1a09:df::401d]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225738/1.m3u8?icpid=88888888&from=5&hms_devid=980&online=1720054946&vqe=3
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="纪实人文" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AA%E5%AE%9E%E4%BA%BA%E6%96%87.png",纪实人文
+http://[2409:8087:74d9:21::6]/270000001128/9900000528/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="纪实人文" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AA%E5%AE%9E%E4%BA%BA%E6%96%87.png",纪实人文
+http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000365/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="纪实人文" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AA%E5%AE%9E%E4%BA%BA%E6%96%87.png",纪实人文
+http://[2409:8087:5e00:24::10]:6060/200000001898/460000089800010067/
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="纪实人文" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AA%E5%AE%9E%E4%BA%BA%E6%96%87.png",纪实人文
+http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010067/
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="纪实人文" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AA%E5%AE%9E%E4%BA%BA%E6%96%87.png",纪实人文
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225738/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="纪实人文" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AA%E5%AE%9E%E4%BA%BA%E6%96%87.png",纪实人文
+http://[2409:8087:5e08:24::2]:6610/000000001000/5000000004000010282/index.m3u8?channel-id=bestzb&Contentid=5000000004000010282&livemode=1&stbId=3
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="纪实人文" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AA%E5%AE%9E%E4%BA%BA%E6%96%87.png",纪实人文
+http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010067/1.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="都市剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%83%BD%E5%B8%82%E5%89%A7%E5%9C%BA.png",都市剧场
+https://satellitepull.cnr.cn/live/wxcqxwgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="都市剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%83%BD%E5%B8%82%E5%89%A7%E5%9C%BA.png",都市剧场
+http://[2409:8087:5e08:24::17]:6610/000000001000/2000000002000000015/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000015&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="都市剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%83%BD%E5%B8%82%E5%89%A7%E5%9C%BA.png",都市剧场
+http://[2409:8087:5e08:24::2]:6610/000000001000/5000000011000031111/index.m3u8?channel-id=bestzb&Contentid=5000000011000031111&livemode=1&stbId=3
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="都市剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%83%BD%E5%B8%82%E5%89%A7%E5%9C%BA.png",都市剧场
+http://miqlin.cyou:8888/udp/233.18.204.48:5140
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="都市剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%83%BD%E5%B8%82%E5%89%A7%E5%9C%BA.png",都市剧场
+http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000011000031111/1.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="都市剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%83%BD%E5%B8%82%E5%89%A7%E5%9C%BA.png",都市剧场
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001203/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="都市剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%83%BD%E5%B8%82%E5%89%A7%E5%9C%BA.png",都市剧场
+http://[2409:8087:2801:22:100::6d]/wh7f454c46tw225448578_554191943/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221229280/1/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="都市剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%83%BD%E5%B8%82%E5%89%A7%E5%9C%BA.png",都市剧场
+http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000015/index.m3u8
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="都市剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%83%BD%E5%B8%82%E5%89%A7%E5%9C%BA.png",都市剧场
+http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226694/1.m3u8
+#EXTINF:-1 group-title="☘️重庆频道" tvg-name="重庆汽摩" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E6%B1%BD%E6%91%A9.png",重庆汽摩
+https://cc06.tv12.xyz/33.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010118
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+http://z.b.bkpcp.top/m.php?id=ymkt
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225656/2.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+https://live.lalifeier.eu.org/jstv/ymkt.m3u8?t=1745796321&key=a52fbb40a8c25dfa0feef5a1b4b5910d
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+https://live.lalifeier.eu.org/jstv/ymkt.m3u8?t=1746307365&key=c18c5077358ab692ad43005bbc7b32bd
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+https://www.freetv.top/migu/626064703.m3u8?migutoken=deac6c5275081b54ad412a195e499b7c0cb8f04446b6c80aaa9d3eb1063d620261c68202d59aea05060007b58a62d5d208f16379d861d6f1627c10c9dd894f0bf7e3ca97b04696255e193e871c
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+https://www.freetv.top/migu/626064703.m3u8?migutoken=7f7c4b909389a0cd5172701768041a0f3887534c4534a68bf1dc85550389e9ab156655484be16e89604513fde9da2f036ebae28d31515b0be32eb12462f5de9d9cab8f00c44671241d5c6e1356
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+https://stream1.freetv.fun/you-man-qia-tong-11.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226932/1.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+https://stream1.freetv.fun/4073fb5ec1ec48f010e1db882aeb63ddc7104c56c5c729c4d08e932d585591a8.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京信息" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E4%BF%A1%E6%81%AF.png",南京信息
+http://live.nbs.cn/channels/njtv/xxpd/500k.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京信息" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E4%BF%A1%E6%81%AF.png",南京信息
+https://live.nbs.cn/channels/njtv/xxpd/m3u8:500k/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京信息" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E4%BF%A1%E6%81%AF.png",南京信息
+http://[2409:8087:2001:20:2800:0:df6e:eb10]/wh7f454c46tw3029680014_-204362700/ott.mobaibox.com/PLTV/3/224/3221227730/index.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京信息" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E4%BF%A1%E6%81%AF.png",南京信息
+http://[2409:8087:2001:20:2800:0:df6e:eb10]:80/wh7f454c46tw471420022_-144346351/ott.mobaibox.com/PLTV/3/224/3221227730/index.m3u8?icpid=3&RTS=1674380586&from=40&popid=40&hms_devid=2110&prioritypopid=40&vqe=3
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京十八" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%8D%81%E5%85%AB.png",南京十八
+http://z.b.bkpcp.top/m.php?id=njsb
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京十八" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%8D%81%E5%85%AB.png",南京十八
+http://live.nbs.cn/channels/njtv/sbpd/500k.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京十八" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%8D%81%E5%85%AB.png",南京十八
+http://live.nbs.cn/channels/njtv/sbpd/500k.m3u8?zjiangsd
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京十八" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%8D%81%E5%85%AB.png",南京十八
+http://live.nbs.cn/channels/njtv/sbpd/m3u8:500k/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京十八" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%8D%81%E5%85%AB.png",南京十八
+https://live.nbs.cn/channels/njtv/sbpd/m3u8:500k/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京十八" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%8D%81%E5%85%AB.png",南京十八
+https://www.freetv.top/migu/838151753.m3u8?migutoken=8d26f1ff3a7322649e82c96f1a66d55d677c626a8ee62463a8c2625094b8270bd4345b1d0806f71840b81eac2b68f3a2aeabe6407feb4ee2f36580799b57c48c1418a87aee8ca513ec1544ca7a
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京十八" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%8D%81%E5%85%AB.png",南京十八
+http://[2409:8087:2001:20:2800:0:df6e:eb04]/wh7f454c46tw3568749588_-1882152959/ott.mobaibox.com/PLTV/4/224/3221227178/index.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%A8%B1%E4%B9%90.png",南京娱乐
+http://live.nbs.cn/channels/njtv/ylpd/500k.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%A8%B1%E4%B9%90.png",南京娱乐
+https://live.nbs.cn/channels/njtv/ylpd/m3u8:500k/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%A8%B1%E4%B9%90.png",南京娱乐
+http://[2409:8087:2001:20:2800:0:df6e:eb10]/wh7f454c46tw3055198838_-954191684/ott.mobaibox.com/PLTV/3/224/3221227722/index.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%A8%B1%E4%B9%90.png",南京娱乐
+http://[2409:8087:2001:20:2800:0:df6e:eb10]:80/wh7f454c46tw1756933853_327829486/ott.mobaibox.com/PLTV/3/224/3221227722/index.m3u8?icpid=3&RTS=1674386167&from=40&popid=40&hms_devid=2110&prioritypopid=40&vqe=3
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%B0%91%E5%84%BF.png",南京少儿
+https://live.nbs.cn/channels/njtv/sepd/nbs23.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%B0%91%E5%84%BF.png",南京少儿
+http://live.nbs.cn/channels/njtv/sepd/500k.m3u8?zjiangsd
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%B0%91%E5%84%BF.png",南京少儿
+https://live.nbs.cn/channels/njtv/sepd/m3u8:500k/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%B0%91%E5%84%BF.png",南京少儿
+http://[2409:8087:2001:20:2800:0:df6e:eb10]/wh7f454c46tw3425352611_209642410/ott.mobaibox.com/PLTV/4/224/3221227733/index.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%B0%91%E5%84%BF.png",南京少儿
+http://[2409:8087:2001:20:2800:0:df6e:eb10]/wh7f454c46tw3425352611_209642410/ott.mobaibox.com/PLTV/4/224/3221227733/index.m3u8?icpid=4&RTS=1663233805&from=40&popid=40&hms_devid=2110&prioritypopid=40&vqe=3
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%B0%91%E5%84%BF.png",南京少儿
+http://live.nbs.cn/channels/njtv/sepd/500k.m3u8#http://live.nbs.cn/channels/njtv/sepd/m3u8:500k/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%B0%91%E5%84%BF.png",南京少儿
+http://live.nbs.cn/channels/njtv/sepd/500k.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%B0%91%E5%84%BF.png",南京少儿
+http://live.nbs.cn/channels/njtv/sepd/m3u8:500k/live.m3u8#http://live.nbs.cn/channels/njtv/sepd/500k.m3u8?zjiangsd
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京教科" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E6%95%99%E7%A7%91.png",南京教科
+http://live.nbs.cn/channels/njtv/jkpd/nbs06.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京教科" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E6%95%99%E7%A7%91.png",南京教科
+http://z.b.bkpcp.top/m.php?id=njkj
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京教科" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E6%95%99%E7%A7%91.png",南京教科
+https://live.nbs.cn/channels/njtv/jkpd/nbs06.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京教科" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E6%95%99%E7%A7%91.png",南京教科
+https://www.freetv.top/migu/838153729.m3u8?migutoken=68341b05540f514ec344fce1684f8a66005aec759b66a516681cab444a9ba187b5fe8f24736f20a63bce950472d823cb104a3f9b1e3d92a9aaca7c063902981bf22e9689666398fd6a3f36c311
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京教科" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E6%95%99%E7%A7%91.png",南京教科
+https://live.nbs.cn/channels/njtv/jkpd/m3u8:500k/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京教科" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E6%95%99%E7%A7%91.png",南京教科
+http://[2409:8087:2001:20:2800:0:df6e:eb04]/wh7f454c46tw3484211223_471033633/ott.mobaibox.com/PLTV/4/224/3221227194/index.m3u8?icpid=4&RTS=1663233864&from=40&popid=40&hms_devid=2041&prioritypopid=40&vqe=3
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京教科" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E6%95%99%E7%A7%91.png",南京教科
+http://live.nbs.cn/channels/njtv/jkpd/500k.m3u8?zjiangsd
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",南京新闻综合
+http://z.b.bkpcp.top/m.php?id=njxwzh
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",南京新闻综合
+http://live.nbs.cn/channels/njtv/xwzh/nbs06.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",南京新闻综合
+https://live.nbs.cn/channels/njtv/xwzh/nbs06.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",南京新闻综合
+https://www.freetv.top/migu/838109047.m3u8?migutoken=74a123656ffd42bf35e581516bd59c04fe4bcfe92f39e16931582e1b674ff2fc4d90da5f9b3dc796b8700456682cfb198f958ef81602312978e5168c1b35bb475fe775bf234a1c7965f918691c
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",南京新闻综合
+https://live.nbs.cn/channels/njtv/xwzh/m3u8:500k/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",南京生活
+https://live.nbs.cn/channels/njtv/shpd/m3u8:500k/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",南京生活
+http://[2409:8087:2001:20:2800:0:df6e:eb11]/wh7f454c46tw3530023629_201686832/ott.mobaibox.com/PLTV/4/224/3221227786/index.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",南京生活
+http://live.nbs.cn/channels/njtv/shpd/500k.m3u8?zjiangsd
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="常州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B8%B8%E5%B7%9E%E5%85%AC%E5%85%B1.png",常州公共
+http://[2409:8087:2001:20:2800:0:df6e:eb12]/wh7f454c46tw4212693148_669088627/ott.mobaibox.com/PLTV/3/224/3221227905/index.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="常州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B8%B8%E5%B7%9E%E5%85%AC%E5%85%B1.png",常州公共
+http://[2409:8087:2001:20:2800:0:df6e:eb12]/wh7f454c46tw4212693148_669088627/ott.mobaibox.com/PLTV/3/224/3221227905/index.m3u8?icpid=3&RTS=1663019844&from=40&popid=40&hms_devid=2112&prioritypopid=40&vqe=3
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="常州生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B8%B8%E5%B7%9E%E7%94%9F%E6%B4%BB.png",常州生活
+http://[2409:8087:2001:20:2800:0:df6e:eb12]/wh7f454c46tw3951544714_750576923/ott.mobaibox.com/PLTV/3/224/3221227902/index.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="常州生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B8%B8%E5%B7%9E%E7%94%9F%E6%B4%BB.png",常州生活
+http://[2409:8087:2001:20:2800:0:df6e:eb12]/wh7f454c46tw3951544714_750576923/ott.mobaibox.com/PLTV/3/224/3221227902/index.m3u8?icpid=3&RTS=1663019583&from=40&popid=40&hms_devid=2112&prioritypopid=40&vqe=3
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="常州都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B8%B8%E5%B7%9E%E9%83%BD%E5%B8%82.png",常州都市
+http://[2409:8087:2001:20:2800:0:df6e:eb12]/wh7f454c46tw4002153568_939060722/ott.mobaibox.com/PLTV/3/224/3221227955/index.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="常州都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B8%B8%E5%B7%9E%E9%83%BD%E5%B8%82.png",常州都市
+http://[2409:8087:2001:20:2800:0:df6e:eb12]/wh7f454c46tw4002153568_939060722/ott.mobaibox.com/PLTV/3/224/3221227955/index.m3u8?icpid=3&RTS=1663019634&from=40&popid=40&hms_devid=2112&prioritypopid=40&vqe=3
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="徐州新聞綜合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BE%90%E5%B7%9E%E6%96%B0%E8%81%9E%E7%B6%9C%E5%90%88.png",徐州新聞綜合
+http://z.b.bkpcp.top/m.php?id=xzxwzh
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="新沂新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E6%B2%82%E6%96%B0%E9%97%BB.png",新沂新闻
+http://live.xysrmt.cn/xwzh/sd/live.m3u8?zjiangsd"
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="新沂生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E6%B2%82%E7%94%9F%E6%B4%BB.png",新沂生活
+http://live.xysrmt.cn/shpd/sd/live.m3u8?zjiangsd
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E5%A8%B1%E4%B9%90.png",无锡娱乐
+https://stream.thmz.com/wxtv2/playlist.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E5%A8%B1%E4%B9%90.png",无锡娱乐
+http://stream.thmz.com/wxtv2/sd/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E5%A8%B1%E4%B9%90.png",无锡娱乐
+http://stream.thmz.com/wxtv2/sd/live.m3u8?_upt=978cd8731706199708
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E5%A8%B1%E4%B9%90.png",无锡娱乐
+http://stream.thmz.com/wxtv2/sd/live.m3u8?_upt=acffe97a1704940314
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E5%A8%B1%E4%B9%90.png",无锡娱乐
+http://stream.thmz.com/wxtv2/playlist.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",无锡新闻综合
+http://m.m3u8.wifiwx.com/live/wifiwx-239.m3u8?zjiangsd
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",无锡新闻综合
+http://stream.thmz.com/wxtv1/playlist.m3u8?_upt=156143371706166361
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",无锡新闻综合
+http://stream.thmz.com/wxtv1/sd/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",无锡新闻综合
+http://stream.thmz.com/wxtv1/sd/live.m3u8?_upt=4ba3ab191698644028
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",无锡新闻综合
+http://stream.thmz.com/wxtv1/playlist.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E7%94%9F%E6%B4%BB.png",无锡生活
+https://stream.thmz.com/wxtv4/playlist.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E7%94%9F%E6%B4%BB.png",无锡生活
+http://m.m3u8.wifiwx.com/live/wifiwx-244.m3u8?zjiangsd
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E7%94%9F%E6%B4%BB.png",无锡生活
+http://stream.thmz.com/wxtv4/sd/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E7%94%9F%E6%B4%BB.png",无锡生活
+http://stream.thmz.com/wxtv4/sd/live.m3u8?_upt=978cd8731706199708
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E7%94%9F%E6%B4%BB.png",无锡生活
+http://stream.thmz.com/wxtv4/playlist.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E7%BB%8F%E6%B5%8E.png",无锡经济
+https://stream.thmz.com/wxtv5/playlist.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E7%BB%8F%E6%B5%8E.png",无锡经济
+http://stream.thmz.com/wxtv5/sd/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E7%BB%8F%E6%B5%8E.png",无锡经济
+http://stream.thmz.com/wxtv5/playlist.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡都市资讯" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E9%83%BD%E5%B8%82%E8%B5%84%E8%AE%AF.png",无锡都市资讯
+http://stream.thmz.com/wxtv3/playlist.m3u8?_upt=1758133b1706166861
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡都市资讯" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E9%83%BD%E5%B8%82%E8%B5%84%E8%AE%AF.png",无锡都市资讯
+http://stream.thmz.com/wxtv3/sd/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡都市资讯" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E9%83%BD%E5%B8%82%E8%B5%84%E8%AE%AF.png",无锡都市资讯
+http://stream.thmz.com/wxtv3/sd/live.m3u8?_upt=978cd8731706199708
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡都市资讯" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E9%83%BD%E5%B8%82%E8%B5%84%E8%AE%AF.png",无锡都市资讯
+http://stream.thmz.com/wxtv3/playlist.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746725062&key=0472e68b6d6133153804a3943cfdca96
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746739480&key=6f468215466d6daf15f5239fa2c164d6
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746775525&key=4573d423f55d4f3c1b70698e0046e086
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746782860&key=242483d6da1c67c17a454ee431e41b24
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746739480&key=6f468215466d6daf15f5239fa2c164d6
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746811400&key=4867c9569d3be7173b932d82cac7adb2
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746825793&key=7db9095368ec4160797186b0972ce60e
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746861745&key=51e661097bab1305a852b8befcfee768
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746894586&key=11abeed3c4c1657927919a946bcde3d4
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746775525&key=4573d423f55d4f3c1b70698e0046e086
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏城市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%9F%8E%E5%B8%82.png",江苏城市
+http://z.b.bkpcp.top/m.php?id=jscs
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏城市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%9F%8E%E5%B8%82.png",江苏城市
+https://stream1.freetv.fun/675206b8446ce719bfb293b5a5296db3aa26521c9810de7c996838247cc56964.ctv
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏城市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%9F%8E%E5%B8%82.png",江苏城市
+https://live.lalifeier.eu.org/jstv/jscs.m3u8?t=1746725062&key=e57cf54e37873e637818478262c5e325
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏城市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%9F%8E%E5%B8%82.png",江苏城市
+https://live.lalifeier.eu.org/jstv/jscs.m3u8?t=1746739480&key=cf6114e517839815a35a1b2178a4b0a8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏城市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%9F%8E%E5%B8%82.png",江苏城市
+https://live.lalifeier.eu.org/jstv/jscs.m3u8?t=1746775525&key=3479c2ea7851f393c6eda126cf7e7a4b
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏城市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%9F%8E%E5%B8%82.png",江苏城市
+https://live.lalifeier.eu.org/jstv/jscs.m3u8?t=1746782860&key=54751c5146cf1b2e5f00c2e60406f94a
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏城市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%9F%8E%E5%B8%82.png",江苏城市
+https://live.lalifeier.eu.org/jstv/jscs.m3u8?t=1746811400&key=20191f2a864add9396b2dd61be5ae0cb
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏城市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%9F%8E%E5%B8%82.png",江苏城市
+https://live.lalifeier.eu.org/jstv/jscs.m3u8?t=1746825793&key=aad2ef4a4cbbfa1733ca1dc829f6b657
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏城市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%9F%8E%E5%B8%82.png",江苏城市
+https://live.lalifeier.eu.org/jstv/jscs.m3u8?t=1746861745&key=81bb0577aef93ca5ce69e317aa2f8d20
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏城市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%9F%8E%E5%B8%82.png",江苏城市
+https://live.lalifeier.eu.org/jstv/jscs.m3u8?t=1746894586&key=23d8b85e9e9262a3ff7a986bcb1cc6ad
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%BD%B1%E8%A7%86.png",江苏影视
+http://z.b.bkpcp.top/m.php?id=jsys
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%BD%B1%E8%A7%86.png",江苏影视
+https://stream1.freetv.fun/a89dd489fa013bc4f36bcc4afe388f1783e2251c276e2566a9359d68a61c6d91.ctv
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%BD%B1%E8%A7%86.png",江苏影视
+https://live.lalifeier.eu.org/jstv/jsys.m3u8?t=1746725062&key=671d97cef383f3e9e04cda80c217820d
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%BD%B1%E8%A7%86.png",江苏影视
+https://live.lalifeier.eu.org/jstv/jsys.m3u8?t=1746739480&key=c34e89e435ead53afa0771a9e400d58f
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%BD%B1%E8%A7%86.png",江苏影视
+https://live.lalifeier.eu.org/jstv/jsys.m3u8?t=1746775525&key=a9aca05b56b7f7bbd79419a5d12fa1b9
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%BD%B1%E8%A7%86.png",江苏影视
+https://live.lalifeier.eu.org/jstv/jsys.m3u8?t=1746782860&key=ef5b072ba1c8441907607b8fc026abc9
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%BD%B1%E8%A7%86.png",江苏影视
+https://live.lalifeier.eu.org/jstv/jsys.m3u8?t=1746811400&key=dd4cd4980493b1b2d2b28ad1ec3d9825
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%BD%B1%E8%A7%86.png",江苏影视
+https://live.lalifeier.eu.org/jstv/jsys.m3u8?t=1746825793&key=b8b1b6007fd431b47d8a1c003ee15044
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%BD%B1%E8%A7%86.png",江苏影视
+https://live.lalifeier.eu.org/jstv/jsys.m3u8?t=1746861745&key=2e69b07e44956963021eb180448ed2a7
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%BD%B1%E8%A7%86.png",江苏影视
+https://live.lalifeier.eu.org/jstv/jsys.m3u8?t=1746894586&key=0ac2fffa87c226d17c6a2ba1a7eac681
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E6%95%99%E8%82%B2.png",江苏教育
+http://z.b.bkpcp.top/m.php?id=jsjy
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E6%95%99%E8%82%B2.png",江苏教育
+http://goo.bkpcp.top/mg/jsjy
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E6%95%99%E8%82%B2.png",江苏教育
+https://stream1.freetv.fun/7174b4fd66ddb2a7456b7040105dc27a1e57c166593870bb773cb5f6b4546c54.ctv
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E6%95%99%E8%82%B2.png",江苏教育
+https://live.lalifeier.eu.org/jstv/jsjy.m3u8?t=1746725062&key=f7b56e094c6bf53dd8344ed149869fe6
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E6%95%99%E8%82%B2.png",江苏教育
+https://live.lalifeier.eu.org/jstv/jsjy.m3u8?t=1746739480&key=3ba5927a5b06e0f3169ecb5ffef590ef
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E6%95%99%E8%82%B2.png",江苏教育
+https://live.lalifeier.eu.org/jstv/jsjy.m3u8?t=1746775525&key=f8bf0b20dd0f0c846a7ff46e4588f3fd
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E6%95%99%E8%82%B2.png",江苏教育
+https://live.lalifeier.eu.org/jstv/jsjy.m3u8?t=1746782860&key=0d1358d152d9ee14863da875c7e261a5
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E6%95%99%E8%82%B2.png",江苏教育
+https://live.lalifeier.eu.org/jstv/jsjy.m3u8?t=1746811400&key=18bfa4a2b6ec3c5b0d62e0f8fdbfb5ee
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E6%95%99%E8%82%B2.png",江苏教育
+https://live.lalifeier.eu.org/jstv/jsjy.m3u8?t=1746825793&key=90c98ab037191bf8ad71a250918599aa
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="江苏教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E6%95%99%E8%82%B2.png",江苏教育
+https://live.lalifeier.eu.org/jstv/jsjy.m3u8?t=1746861745&key=9d854cb007730cef4dcddfae5cc67025
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="泗洪新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%97%E6%B4%AA%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",泗洪新闻综合
+http://live1.habctv.com/ggpdsl/sd/live.m3u8?zjiangsd#http://live1.habctv.com/ggpdsl/sd/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="涟水电视台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B6%9F%E6%B0%B4%E7%94%B5%E8%A7%86%E5%8F%B0%E7%BB%BC%E5%90%88.png",涟水电视台综合
+http://live1.habctv.com/ggpdsl/sd/live.m3u8?zjiangsd#http://live1.habctv.com/ggpdsl/sd/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="淮安公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%AE%E5%AE%89%E5%85%AC%E5%85%B1.png",淮安公共
+http://live1.habctv.com/ggpdsl/sd/live.m3u8?zjiangsd#http://live1.habctv.com/ggpdsl/sd/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="淮安影院娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%AE%E5%AE%89%E5%BD%B1%E9%99%A2%E5%A8%B1%E4%B9%90.png",淮安影院娱乐
+http://live1.habctv.com/ysylsl/sd/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="淮安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%AE%E5%AE%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",淮安新闻综合
+http://z.b.bkpcp.top/m.php?id=haxwzh
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="淮安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%AE%E5%AE%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",淮安新闻综合
+http://live1.habctv.com/zhpdsl/sd/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="淮安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%AE%E5%AE%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",淮安新闻综合
+http://live1.habctv.com/zhpdsl/sd/live.m3u8?zjiangsd
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="淮阴综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%AE%E9%98%B4%E7%BB%BC%E5%90%88.png",淮阴综合
+https://huaiyin-tv-replay.cm.jstv.com/huaiyin-tv/huaiyinf.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="苏州文化生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8B%8F%E5%B7%9E%E6%96%87%E5%8C%96%E7%94%9F%E6%B4%BB.png",苏州文化生活
+https://stream1.freetv.fun/su-zhou-wen-hua-sheng-huo-2.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="苏州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8B%8F%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",苏州新闻综合
+http://z.b.bkpcp.top/m.php?id=szxwzh
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="苏州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8B%8F%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",苏州新闻综合
+https://stream1.freetv.fun/su-zhou-xin-wen-zong-he-13.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="苏州生活资讯" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8B%8F%E5%B7%9E%E7%94%9F%E6%B4%BB%E8%B5%84%E8%AE%AF.png",苏州生活资讯
+https://stream1.freetv.fun/su-zhou-sheng-huo-zi-xun-1.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="苏州社会经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8B%8F%E5%B7%9E%E7%A4%BE%E4%BC%9A%E7%BB%8F%E6%B5%8E.png",苏州社会经济
+https://live-auth.51kandianshi.com/szgd/csztv2.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="苏州社会经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8B%8F%E5%B7%9E%E7%A4%BE%E4%BC%9A%E7%BB%8F%E6%B5%8E.png",苏州社会经济
+https://stream1.freetv.fun/su-zhou-she-hui-jing-ji-2.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="连云港公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BF%9E%E4%BA%91%E6%B8%AF%E5%85%AC%E5%85%B1.png",连云港公共
+http://live.lyg1.com/ggpd/sd/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="连云港新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BF%9E%E4%BA%91%E6%B8%AF%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",连云港新闻综合
+http://z.b.bkpcp.top/m.php?id=lygxwzh
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="连云港新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BF%9E%E4%BA%91%E6%B8%AF%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",连云港新闻综合
+http://live.lyg1.com/zhpd/sd/live.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="镇江二套社会民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%95%87%E6%B1%9F%E4%BA%8C%E5%A5%97%E7%A4%BE%E4%BC%9A%E6%B0%91%E7%94%9F.png",镇江二套社会民生
+http://zjtv-wshls.homecdn.com/live/2aa16.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="镇江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%95%87%E6%B1%9F%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",镇江新闻综合
+http://cm-wshls.homecdn.com/live/2aa50.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="镇江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%95%87%E6%B1%9F%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",镇江新闻综合
+http://zjtv-wshls.homecdn.com/live/2aa50.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="靖江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E6%B1%9F%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",靖江新闻综合
+http://ls.qingting.fm/live/23797.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="靖江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E6%B1%9F%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",靖江新闻综合
+https://stream1.freetv.fun/jing-jiang-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️江苏频道" tvg-name="靖江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E6%B1%9F%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",靖江新闻综合
+https://stream1.freetv.fun/jing-jiang-xin-wen-zong-he-7.m3u8
+#EXTINF:-1 group-title="☘️辽宁频道" tvg-name="辽宁北方" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8C%97%E6%96%B9.png",辽宁北方
+https://stream1.freetv.fun/liao-zhu-bei-fang-3.m3u8
+#EXTINF:-1 group-title="☘️辽宁频道" tvg-name="辽宁影视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%BD%B1%E8%A7%86%E5%89%A7.png",辽宁影视剧
+https://stream1.freetv.fun/liao-zhu-ying-shi-ju-1.m3u8
+#EXTINF:-1 group-title="☘️辽宁频道" tvg-name="辽宁影视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%BD%B1%E8%A7%86%E5%89%A7.png",辽宁影视剧
+https://stream1.freetv.fun/liao-zhu-ying-shi-ju-2.m3u8
+#EXTINF:-1 group-title="☘️辽宁频道" tvg-name="辽宁影视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%BD%B1%E8%A7%86%E5%89%A7.png",辽宁影视剧
+https://stream1.freetv.fun/liao-zhu-ying-shi-ju-3.m3u8
+#EXTINF:-1 group-title="☘️辽宁频道" tvg-name="辽宁教育青少" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E6%95%99%E8%82%B2%E9%9D%92%E5%B0%91.png",辽宁教育青少
+https://stream1.freetv.fun/liao-zhu-jiao-yu-qing-shao-1.m3u8
+#EXTINF:-1 group-title="☘️辽宁频道" tvg-name="辽宁生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E7%94%9F%E6%B4%BB.png",辽宁生活
+https://stream1.freetv.fun/liao-zhu-sheng-huo-1.m3u8
+#EXTINF:-1 group-title="☘️辽宁频道" tvg-name="辽宁经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E7%BB%8F%E6%B5%8E.png",辽宁经济
+http://ls.qingting.fm/live/23797.m3u8
+#EXTINF:-1 group-title="☘️辽宁频道" tvg-name="辽宁经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E7%BB%8F%E6%B5%8E.png",辽宁经济
+https://stream1.freetv.fun/liao-zhu-jing-ji-2.m3u8
+#EXTINF:-1 group-title="☘️辽宁频道" tvg-name="辽宁都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E9%83%BD%E5%B8%82.png",辽宁都市
+https://ls.qingting.fm/live/1099/64k.m3u8
+#EXTINF:-1 group-title="☘️辽宁频道" tvg-name="辽宁都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E9%83%BD%E5%B8%82.png",辽宁都市
+https://stream1.freetv.fun/liao-zhu-du-shi-4.m3u8
+#EXTINF:-1 group-title="☘️辽宁频道" tvg-name="辽宁都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E9%83%BD%E5%B8%82.png",辽宁都市
+https://stream1.freetv.fun/liao-zhu-du-shi-5.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E9%83%BD%E5%B8%82.png",湖南都市
+http://php.jdshipin.com:8880/iptv.php
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E9%83%BD%E5%B8%82.png",湖南都市
+http://php.jdshipin.com:8880/iptv.php?id=hnds
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E9%83%BD%E5%B8%82.png",湖南都市
+https://stream1.freetv.fun/hu-nan-du-shi-6.ctv
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E9%83%BD%E5%B8%82.png",湖南都市
+https://stream1.freetv.fun/hu-nan-du-shi-8.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E9%83%BD%E5%B8%82.png",湖南都市
+https://stream1.freetv.fun/hu-nan-du-shi-14.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E9%83%BD%E5%B8%82.png",湖南都市
+https://stream1.freetv.fun/hu-nan-du-shi-12.ctv
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E9%83%BD%E5%B8%82.png",湖南都市
+https://stream1.freetv.fun/hu-nan-du-shi-1.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E9%83%BD%E5%B8%82.png",湖南都市
+https://stream1.freetv.fun/hu-nan-du-shi-3.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E9%83%BD%E5%B8%82.png",湖南都市
+http://pili-live-snapshot.tv.hntvcloud.com/mg-tv/channel-6.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%BB%8F%E8%A7%86.png",湖南经视
+https://stream1.freetv.fun/hu-nan-jing-shi-10.ctv
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%BB%8F%E8%A7%86.png",湖南经视
+https://stream1.freetv.fun/hu-nan-jing-shi-4.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%BB%8F%E8%A7%86.png",湖南经视
+https://stream1.freetv.fun/hu-nan-jing-shi-14.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%BB%8F%E8%A7%86.png",湖南经视
+https://stream1.freetv.fun/hu-nan-jing-shi-gao-qing-2.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%BB%8F%E8%A7%86.png",湖南经视
+https://stream1.freetv.fun/hu-nan-jing-shi-2.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%BB%8F%E8%A7%86.png",湖南经视
+https://stream1.freetv.fun/hu-nan-jing-shi-13.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%BB%8F%E8%A7%86.png",湖南经视
+https://stream1.freetv.fun/hu-nan-jing-shi-10.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%BB%8F%E8%A7%86.png",湖南经视
+https://stream1.freetv.fun/hu-nan-jing-shi-9.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%BB%8F%E8%A7%86.png",湖南经视
+https://stream1.freetv.fun/hu-nan-jing-shi-1.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%BB%8F%E8%A7%86.png",湖南经视
+https://stream1.freetv.fun/hu-nan-jing-shi-12.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E8%A7%86%E5%89%A7.png",湖南电视剧
+https://stream1.freetv.fun/hu-nan-dian-shi-ju-3.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E8%A7%86%E5%89%A7.png",湖南电视剧
+https://stream1.freetv.fun/hu-nan-dian-shi-ju-gao-qing-1.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E8%A7%86%E5%89%A7.png",湖南电视剧
+https://stream1.freetv.fun/hu-nan-dian-shi-ju-14.ctv
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E8%A7%86%E5%89%A7.png",湖南电视剧
+https://stream1.freetv.fun/hu-nan-dian-shi-ju-11.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E8%A7%86%E5%89%A7.png",湖南电视剧
+https://stream1.freetv.fun/hu-nan-dian-shi-ju-2.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E8%A7%86%E5%89%A7.png",湖南电视剧
+https://stream1.freetv.fun/hu-nan-dian-shi-ju-7.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E8%A7%86%E5%89%A7.png",湖南电视剧
+https://stream1.freetv.fun/hu-nan-dian-shi-ju-1.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E8%A7%86%E5%89%A7.png",湖南电视剧
+https://stream1.freetv.fun/hu-nan-dian-shi-ju-10.ctv
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E8%A7%86%E5%89%A7.png",湖南电视剧
+https://stream1.freetv.fun/hu-nan-dian-shi-ju-12.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E8%A7%86%E5%89%A7.png",湖南电视剧
+https://stream1.freetv.fun/hu-nan-dian-shi-ju-8.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E5%BD%B1.png",湖南电影
+https://stream1.freetv.fun/hu-nan-dian-ying-2.ctv
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E5%BD%B1.png",湖南电影
+https://stream1.freetv.fun/hu-nan-dian-ying-11.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E5%BD%B1.png",湖南电影
+https://stream1.freetv.fun/hu-nan-dian-ying-12.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E5%BD%B1.png",湖南电影
+https://stream1.freetv.fun/hu-nan-dian-ying-8.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E5%BD%B1.png",湖南电影
+https://stream1.freetv.fun/hu-nan-dian-ying-15.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E5%BD%B1.png",湖南电影
+https://stream1.freetv.fun/hu-nan-dian-ying-10.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E5%BD%B1.png",湖南电影
+https://stream1.freetv.fun/hu-nan-dian-ying-7.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E5%BD%B1.png",湖南电影
+https://stream1.freetv.fun/hu-nan-dian-ying-13.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E5%BD%B1.png",湖南电影
+https://stream1.freetv.fun/hu-nan-dian-ying-6.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%94%B5%E5%BD%B1.png",湖南电影
+https://stream1.freetv.fun/hu-nan-dian-ying-2.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南爱晚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%88%B1%E6%99%9A.png",湖南爱晚
+http://p2.vzan.com/527645544/149039617847513156/live.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南爱晚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%88%B1%E6%99%9A.png",湖南爱晚
+http://php.jdshipin.com:8880/iptv.php
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南爱晚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%88%B1%E6%99%9A.png",湖南爱晚
+http://pili-live-snapshot.tv.hntvcloud.com/mg-tv/channel-9.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E6%95%99%E8%82%B2.png",湖南教育
+https://stream1.freetv.fun/hu-nan-jiao-yu-6.ctv
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E6%95%99%E8%82%B2.png",湖南教育
+https://stream1.freetv.fun/hu-nan-jiao-yu-4.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E6%95%99%E8%82%B2.png",湖南教育
+https://stream1.freetv.fun/hu-nan-jiao-yu-5.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E6%95%99%E8%82%B2.png",湖南教育
+http://php.jdshipin.com:8880/iptv.php
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%A8%B1%E4%B9%90.png",湖南娱乐
+https://stream1.freetv.fun/hu-nan-yu-le-9.ctv
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%A8%B1%E4%B9%90.png",湖南娱乐
+https://stream1.freetv.fun/hu-nan-yu-le-13.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%A8%B1%E4%B9%90.png",湖南娱乐
+https://stream1.freetv.fun/hu-nan-yu-le-16.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%A8%B1%E4%B9%90.png",湖南娱乐
+https://stream1.freetv.fun/hu-nan-yu-le-16.ctv
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%A8%B1%E4%B9%90.png",湖南娱乐
+https://stream1.freetv.fun/hu-nan-yu-le-8.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%A8%B1%E4%B9%90.png",湖南娱乐
+https://stream1.freetv.fun/hu-nan-yu-le-9.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%A8%B1%E4%B9%90.png",湖南娱乐
+https://stream1.freetv.fun/hu-nan-yu-le-gao-qing-3.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%A8%B1%E4%B9%90.png",湖南娱乐
+https://stream1.freetv.fun/hu-nan-yu-le-2.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%A8%B1%E4%B9%90.png",湖南娱乐
+https://stream1.freetv.fun/hu-nan-yu-le-7.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%A8%B1%E4%B9%90.png",湖南娱乐
+http://php.jdshipin.com:8880/iptv.php
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%9B%BD%E9%99%85.png",湖南国际
+https://stream1.freetv.fun/hu-nan-guo-ji-4.ctv
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%9B%BD%E9%99%85.png",湖南国际
+https://stream1.freetv.fun/hu-nan-guo-ji-13.ctv
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%9B%BD%E9%99%85.png",湖南国际
+https://stream1.freetv.fun/hu-nan-guo-ji-2.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%9B%BD%E9%99%85.png",湖南国际
+https://stream1.freetv.fun/hu-nan-guo-ji-9.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%9B%BD%E9%99%85.png",湖南国际
+https://stream1.freetv.fun/hu-nan-guo-ji-7.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%9B%BD%E9%99%85.png",湖南国际
+https://stream1.freetv.fun/hu-nan-guo-ji-2.ctv
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%9B%BD%E9%99%85.png",湖南国际
+https://stream1.freetv.fun/hu-nan-guo-ji-3.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%9B%BD%E9%99%85.png",湖南国际
+http://php.jdshipin.com:8880/iptv.php
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%9B%BD%E9%99%85.png",湖南国际
+http://pili-live-snapshot.tv.hntvcloud.com/mg-tv/channel-4.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%85%AC%E5%85%B1.png",湖南公共
+https://stream1.freetv.fun/hu-nan-gong-gong-5.ctv
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%85%AC%E5%85%B1.png",湖南公共
+https://stream1.freetv.fun/hu-nan-gong-gong-1.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%85%AC%E5%85%B1.png",湖南公共
+https://stream1.freetv.fun/hu-nan-gong-gong-4.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%85%AC%E5%85%B1.png",湖南公共
+https://stream1.freetv.fun/hu-nan-gong-gong-7.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%85%AC%E5%85%B1.png",湖南公共
+https://stream1.freetv.fun/hu-nan-gong-gong-gao-qing-1.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%85%AC%E5%85%B1.png",湖南公共
+https://stream1.freetv.fun/hu-nan-gong-gong-6.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%85%AC%E5%85%B1.png",湖南公共
+https://stream1.freetv.fun/hu-nan-gong-gong-2.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%85%AC%E5%85%B1.png",湖南公共
+https://stream1.freetv.fun/hu-nan-gong-gong-5.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%85%AC%E5%85%B1.png",湖南公共
+https://stream1.freetv.fun/hu-nan-gong-gong-3.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%85%AC%E5%85%B1.png",湖南公共
+https://stream1.freetv.fun/hu-nan-gong-gong-7.ctv
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="金鹰纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E7%BA%AA%E5%AE%9E.png",金鹰纪实
+http://iptv.huuc.edu.cn/hls/gedocu.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="金鹰纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E7%BA%AA%E5%AE%9E.png",金鹰纪实
+https://stream1.freetv.fun/jin-ying-ji-shi-1.ctv
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="金鹰纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E7%BA%AA%E5%AE%9E.png",金鹰纪实
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226572/1.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="金鹰纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E7%BA%AA%E5%AE%9E.png",金鹰纪实
+https://stream1.freetv.fun/jin-ying-ji-shi-14.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="金鹰纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E7%BA%AA%E5%AE%9E.png",金鹰纪实
+https://stream1.freetv.fun/jin-ying-ji-shi-gao-qing-2.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="金鹰纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E7%BA%AA%E5%AE%9E.png",金鹰纪实
+https://stream1.freetv.fun/jin-ying-ji-shi-22.ctv
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="金鹰纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E7%BA%AA%E5%AE%9E.png",金鹰纪实
+https://stream1.freetv.fun/jin-ying-ji-shi-15.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="金鹰纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E7%BA%AA%E5%AE%9E.png",金鹰纪实
+https://stream1.freetv.fun/jin-ying-ji-shi-37.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="金鹰纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E7%BA%AA%E5%AE%9E.png",金鹰纪实
+https://stream1.freetv.fun/jin-ying-ji-shi-18.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="金鹰纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E7%BA%AA%E5%AE%9E.png",金鹰纪实
+https://stream1.freetv.fun/jin-ying-ji-shi-gao-qing-3.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南金鹰纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E9%87%91%E9%B9%B0%E7%BA%AA%E5%AE%9E.png",湖南金鹰纪实
+http://yc.myds.me:35455/itv/5000000011000031203.m3u8?cdn=bestzb
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南金鹰纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E9%87%91%E9%B9%B0%E7%BA%AA%E5%AE%9E.png",湖南金鹰纪实
+http://nas.suntao.online:35455/itv/5000000011000031203.m3u8?cdn=bestzb
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="长沙新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%95%BF%E6%B2%99%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",长沙新闻综合
+http://ls.qingting.fm/live/4877.m3u8
+#EXTINF:-1 group-title="☘️湖南频道" tvg-name="益阳新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9B%8A%E9%98%B3%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",益阳新闻综合
+http://220.169.100.41:10087/udp/239.76.255.15:9000
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%BC%E5%90%88.png",湖北综合
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072216f7da/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNLx3R3LdIBdA5q61lut1LwZcw4SC2tJubc%2Bq5t%2F61jvWCtjrJL0x%2BHncPgdmcbBW9I
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%BC%E5%90%88.png",湖北综合
+https://stream1.freetv.fun/hu-bei-zong-he-4.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%BC%E5%90%88.png",湖北综合
+https://stream1.freetv.fun/hu-bei-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%BC%E5%90%88.png",湖北综合
+https://stream1.freetv.fun/hu-bei-zong-he-10.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%BC%E5%90%88.png",湖北综合
+https://stream1.freetv.fun/hu-bei-zong-he-13.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%BC%E5%90%88.png",湖北综合
+https://stream1.freetv.fun/hu-bei-zong-he-7.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%BC%E5%90%88.png",湖北综合
+https://stream1.freetv.fun/hu-bei-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%BC%E5%90%88.png",湖北综合
+https://stream1.freetv.fun/hu-bei-zong-he-12.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%BC%E5%90%88.png",湖北综合
+https://stream1.freetv.fun/hu-bei-zong-he-8.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%BC%E5%90%88.png",湖北综合
+https://stream1.freetv.fun/hu-bei-zong-he-9.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%8F%E8%A7%86.png",湖北经视
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807203543e3/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNLVCQ3pDe4nBySab%2B3xPL123aTSCRugzF2ABe36IIJw2evZbYdWUo0ffUw53bflDgU
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%8F%E8%A7%86.png",湖北经视
+https://stream1.freetv.fun/hu-bei-jing-shi-2.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%8F%E8%A7%86.png",湖北经视
+https://stream1.freetv.fun/hu-bei-jing-shi-11.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%8F%E8%A7%86.png",湖北经视
+https://stream1.freetv.fun/hu-bei-jing-shi-8.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%8F%E8%A7%86.png",湖北经视
+https://stream1.freetv.fun/hu-bei-jing-shi-16.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%8F%E8%A7%86.png",湖北经视
+https://stream1.freetv.fun/hu-bei-jing-shi-18.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%8F%E8%A7%86.png",湖北经视
+https://stream1.freetv.fun/hu-bei-jing-shi-14.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%8F%E8%A7%86.png",湖北经视
+https://stream1.freetv.fun/hu-bei-jing-shi-6.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%8F%E8%A7%86.png",湖北经视
+https://stream1.freetv.fun/hu-bei-jing-shi-19.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%BB%8F%E8%A7%86.png",湖北经视
+https://stream1.freetv.fun/hu-bei-jing-shi-3.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%94%9F%E6%B4%BB.png",湖北生活
+http://satellitepull.cnr.cn/live/wx32hubczshgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%94%9F%E6%B4%BB.png",湖北生活
+https://satellitepull.cnr.cn/live/wx32hubczshgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%94%9F%E6%B4%BB.png",湖北生活
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072c62e405/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNKJPodw5BcDirSOw7egztI5bUvJjqPzSNAhrA37GrbRBIAjGQpzP0QmgsmuHnQyd2c
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%94%9F%E6%B4%BB.png",湖北生活
+https://stream1.freetv.fun/hu-bei-sheng-huo-3.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%94%9F%E6%B4%BB.png",湖北生活
+https://stream1.freetv.fun/hu-bei-sheng-huo-12.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%94%9F%E6%B4%BB.png",湖北生活
+https://stream1.freetv.fun/hu-bei-sheng-huo-8.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%94%9F%E6%B4%BB.png",湖北生活
+https://stream1.freetv.fun/hu-bei-sheng-huo-11.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%94%9F%E6%B4%BB.png",湖北生活
+https://stream1.freetv.fun/hu-bei-sheng-huo-12.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%94%9F%E6%B4%BB.png",湖北生活
+https://stream1.freetv.fun/hu-bei-sheng-huo-1.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E7%94%9F%E6%B4%BB.png",湖北生活
+https://stream1.freetv.fun/hu-bei-sheng-huo-5.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E6%95%99%E8%82%B2.png",湖北教育
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072a6cbbf6/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNKTFQuOKNd5i0HMa3ydMWIQ6kJ2fBJGJ77BLTXK72CqUYQsX3ZguYt0954s9hfZTfc
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E6%95%99%E8%82%B2.png",湖北教育
+https://stream1.freetv.fun/hu-bei-jiao-yu-4.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E6%95%99%E8%82%B2.png",湖北教育
+https://stream1.freetv.fun/hu-bei-jiao-yu-14.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E6%95%99%E8%82%B2.png",湖北教育
+https://stream1.freetv.fun/hu-bei-jiao-yu-1.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E6%95%99%E8%82%B2.png",湖北教育
+http://www.422425.xyz:4022/udp/239.69.1.206:10878
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%BD%B1%E8%A7%86.png",湖北影视
+https://stream1.freetv.fun/hu-bei-ying-shi-1.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%BD%B1%E8%A7%86.png",湖北影视
+https://stream1.freetv.fun/hu-bei-ying-shi-1.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%BD%B1%E8%A7%86.png",湖北影视
+https://stream1.freetv.fun/hu-bei-ying-shi-15.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%BD%B1%E8%A7%86.png",湖北影视
+https://stream1.freetv.fun/hu-bei-ying-shi-10.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%BD%B1%E8%A7%86.png",湖北影视
+https://stream1.freetv.fun/hu-bei-ying-shi-9.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%BD%B1%E8%A7%86.png",湖北影视
+https://stream1.freetv.fun/hu-bei-ying-shi-2.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%BD%B1%E8%A7%86.png",湖北影视
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380728abccd2/index.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%85%AC%E5%85%B1.png",湖北公共
+https://stream1.freetv.fun/hu-bei-gong-gong-5.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%85%AC%E5%85%B1.png",湖北公共
+https://stream1.freetv.fun/hu-bei-gong-gong-xin-wen-3.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%85%AC%E5%85%B1.png",湖北公共
+https://stream1.freetv.fun/hu-bei-gong-gong-2.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%85%AC%E5%85%B1.png",湖北公共
+https://stream1.freetv.fun/hu-bei-gong-gong-9.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%85%AC%E5%85%B1.png",湖北公共
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380726d0ee3b/index.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北垄上" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%9E%84%E4%B8%8A.png",湖北垄上
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072463c333/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNL%2Be1h4FfA5QqwJ7IPOz3p2qIS7djSxm17Htd%2FckZkm%2FVqsKHEJFJt26ju9iibzMEo
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北垄上" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%9E%84%E4%B8%8A.png",湖北垄上
+https://stream1.freetv.fun/hu-bei-long-shang-9.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北垄上" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%9E%84%E4%B8%8A.png",湖北垄上
+https://stream1.freetv.fun/hu-bei-long-shang-16.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北垄上" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%9E%84%E4%B8%8A.png",湖北垄上
+https://stream1.freetv.fun/hu-bei-long-shang-7.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北垄上" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%9E%84%E4%B8%8A.png",湖北垄上
+https://stream1.freetv.fun/hu-bei-long-shang-13.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北垄上" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%9E%84%E4%B8%8A.png",湖北垄上
+https://stream1.freetv.fun/hu-bei-long-shang-1.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北垄上" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%9E%84%E4%B8%8A.png",湖北垄上
+https://stream1.freetv.fun/hu-bei-long-shang-4.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北垄上" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%9E%84%E4%B8%8A.png",湖北垄上
+https://stream1.freetv.fun/hu-bei-long-shang-17.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北垄上" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%9E%84%E4%B8%8A.png",湖北垄上
+https://stream1.freetv.fun/hu-bei-long-shang-13.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="湖北垄上" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%9E%84%E4%B8%8A.png",湖北垄上
+https://stream1.freetv.fun/hu-bei-long-shang-14.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉一台新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E4%B8%80%E5%8F%B0%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",武汉一台新闻综合
+https://ls.qingting.fm/live/20198/64k.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉一台新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E4%B8%80%E5%8F%B0%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",武汉一台新闻综合
+https://stream1.freetv.fun/wu-yi-xin-wen-zong-he-7.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉一台新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E4%B8%80%E5%8F%B0%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",武汉一台新闻综合
+https://stream1.freetv.fun/wu-yi-1xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉一台新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E4%B8%80%E5%8F%B0%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",武汉一台新闻综合
+https://stream1.freetv.fun/wu-yi-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉一台新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E4%B8%80%E5%8F%B0%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",武汉一台新闻综合
+https://stream1.freetv.fun/wu-yi-yi-tai-xin-wen-zong-he-4.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉一台新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E4%B8%80%E5%8F%B0%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",武汉一台新闻综合
+https://stream1.freetv.fun/wu-yi-yi-tai-xin-wen-zong-he-5.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉二台电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E4%BA%8C%E5%8F%B0%E7%94%B5%E8%A7%86%E5%89%A7.png",武汉二台电视剧
+https://stream1.freetv.fun/wu-yi-2dian-shi-ju-1.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉二台电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E4%BA%8C%E5%8F%B0%E7%94%B5%E8%A7%86%E5%89%A7.png",武汉二台电视剧
+https://stream1.freetv.fun/wu-yi-er-tai-dian-shi-ju-3.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉二台电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E4%BA%8C%E5%8F%B0%E7%94%B5%E8%A7%86%E5%89%A7.png",武汉二台电视剧
+https://stream1.freetv.fun/wu-yi-er-tai-dian-shi-ju-1.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉四台经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E5%9B%9B%E5%8F%B0%E7%BB%8F%E6%B5%8E.png",武汉四台经济
+https://stream1.freetv.fun/wu-yi-jing-ji-1.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E6%95%99%E8%82%B2.png",武汉教育
+https://stream1.freetv.fun/wu-yi-jiao-yu-7.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E6%95%99%E8%82%B2.png",武汉教育
+https://stream1.freetv.fun/wu-yi-jiao-yu-5.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E6%95%99%E8%82%B2.png",武汉教育
+https://stream1.freetv.fun/wu-yi-jiao-yu-12.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E6%95%99%E8%82%B2.png",武汉教育
+https://stream1.freetv.fun/wu-yi-jiao-yu-8.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E6%95%99%E8%82%B2.png",武汉教育
+https://stream1.freetv.fun/wu-yi-jiao-yu-1.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E6%95%99%E8%82%B2.png",武汉教育
+https://stream1.freetv.fun/wu-yi-jiao-yu-18.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E6%95%99%E8%82%B2.png",武汉教育
+https://stream1.freetv.fun/wu-yi-jiao-yu-17.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E6%95%99%E8%82%B2.png",武汉教育
+https://stream1.freetv.fun/wu-yi-jiao-yu-13.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E6%95%99%E8%82%B2.png",武汉教育
+https://stream1.freetv.fun/wu-yi-jiao-yu-11.ctv
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="武汉教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E6%B1%89%E6%95%99%E8%82%B2.png",武汉教育
+https://stream1.freetv.fun/wu-yi-jiao-yu-15.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="江夏新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E5%A4%8F%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",江夏新闻综合
+https://stream1.freetv.fun/jiang-xia-xin-wen-zong-he-5.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="十堰新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%81%E5%A0%B0%E6%96%B0%E9%97%BB.png",十堰新闻
+https://stream1.freetv.fun/shi-yan-xin-wen-1.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="十堰新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%81%E5%A0%B0%E6%96%B0%E9%97%BB.png",十堰新闻
+https://stream1.freetv.fun/shi-yan-xin-wen-3.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="十堰新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%81%E5%A0%B0%E6%96%B0%E9%97%BB.png",十堰新闻
+https://stream1.freetv.fun/shi-yan-xin-wen-2.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="十堰新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%81%E5%A0%B0%E6%96%B0%E9%97%BB.png",十堰新闻
+https://stream1.freetv.fun/shi-yan-xin-wen-4.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="荆门新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%86%E9%97%A8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",荆门新闻综合
+https://stream.jmtv.com.cn/xwzh/playlist.m3u8?_upt=3e28e7271664278691
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="荆门新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%86%E9%97%A8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",荆门新闻综合
+https://stream1.freetv.fun/jing-men-xin-wen-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="荆门新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%86%E9%97%A8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",荆门新闻综合
+https://stream1.freetv.fun/jing-men-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="荆门新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%86%E9%97%A8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",荆门新闻综合
+https://stream1.freetv.fun/jing-men-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="荆门新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%86%E9%97%A8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",荆门新闻综合
+https://stream1.freetv.fun/jing-men-xin-wen-zong-he-6.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="荆门新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%86%E9%97%A8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",荆门新闻综合
+https://stream1.freetv.fun/jing-men-xin-wen-zong-he-5.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="荆门新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%86%E9%97%A8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",荆门新闻综合
+https://stream1.freetv.fun/jing-men-xin-wen-zong-he-4.m3u8
+#EXTINF:-1 group-title="☘️湖北频道" tvg-name="荆门新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%86%E9%97%A8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",荆门新闻综合
+http://stream.jmtv.com.cn/xwzh/sd/live.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="北海经济科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E6%B5%B7%E7%BB%8F%E6%B5%8E%E7%A7%91%E6%95%99.png",北海经济科教
+https://play-a2.quklive.com:443/live/1727311690820146.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E5%85%AC%E5%85%B1.png",南宁公共
+http://jzlive.jztvnews.com:90/live/jzgg.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E5%85%AC%E5%85%B1.png",南宁公共
+http://688b7cbf9b7a8d911a085372b6c70ab5.livehwc3.cn/hls.nntv.cn/nnlive/XWZH_24.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=d1391be1fc200f8e4700c5d82b44edae
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E5%85%AC%E5%85%B1.png",南宁公共
+https://stream1.freetv.fun/nan-zhu-gong-gong-1.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E5%85%AC%E5%85%B1.png",南宁公共
+https://stream1.freetv.fun/nan-zhu-gong-gong-5.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E5%85%AC%E5%85%B1.png",南宁公共
+https://stream1.freetv.fun/nan-zhu-gong-gong-6.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E5%85%AC%E5%85%B1.png",南宁公共
+https://stream1.freetv.fun/nan-zhu-gong-gong-7.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E5%85%AC%E5%85%B1.png",南宁公共
+https://stream1.freetv.fun/nan-zhu-gong-gong-9.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",南宁新闻综合
+http://688b7cbf9b7a8d911a085372b6c70ab5.livehwc3.cn/hls.nntv.cn/nnlive/XWZH_24.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=d1391be1fc200f8e4700c5d82b44edae
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",南宁新闻综合
+https://stream1.freetv.fun/nan-zhu-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",南宁新闻综合
+https://stream1.freetv.fun/nan-zhu-xin-wen-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",南宁新闻综合
+https://stream1.freetv.fun/nan-zhu-xin-wen-zong-he-4.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",南宁新闻综合
+http://615bbf179ba53515dccad7b1da5d1ad9.livehwc3.cn/hls.nntv.cn/nnlive/WLSH_24.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=2598844eaee8a4265e706fc14b3fc11d
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁都市生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E9%83%BD%E5%B8%82%E7%94%9F%E6%B4%BB.png",南宁都市生活
+http://615bbf179ba53515dccad7b1da5d1ad9.livehwc3.cn/hls.nntv.cn/nnlive/WLSH_24.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=2598844eaee8a4265e706fc14b3fc11d
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁都市生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E9%83%BD%E5%B8%82%E7%94%9F%E6%B4%BB.png",南宁都市生活
+https://stream1.freetv.fun/nan-zhu-du-shi-sheng-huo-1.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁都市生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E9%83%BD%E5%B8%82%E7%94%9F%E6%B4%BB.png",南宁都市生活
+https://stream1.freetv.fun/nan-zhu-du-shi-sheng-huo-2.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁都市生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E9%83%BD%E5%B8%82%E7%94%9F%E6%B4%BB.png",南宁都市生活
+https://stream1.freetv.fun/nan-zhu-du-shi-sheng-huo-3.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="宾阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%BE%E9%98%B3%E7%BB%BC%E5%90%88.png",宾阳综合
+http://pulls.myun.tv/live/0dkp33j5.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="灌阳新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%81%8C%E9%98%B3%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",灌阳新闻综合
+https://ls.qingting.fm/live/5043/64k.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="灌阳新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%81%8C%E9%98%B3%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",灌阳新闻综合
+https://mobilelive.gxtv.cn/live/gx_live1007/playlist.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="广西新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E6%96%B0%E9%97%BB.png",广西新闻
+https://mobilelive.gxtv.cn/live/gx_live1007/playlist.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="广西国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%9B%BD%E9%99%85.png",广西国际
+https://hlscdn.liangtv.cn/live/0234c48e0bc24fe1b41b9999a253e581/1075ee38e04f490690f6a36a16e09c79.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="广西国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%9B%BD%E9%99%85.png",广西国际
+http://hlscdn.liangtv.cn/live/0234c48e0bc24fe1b41b9999a253e581/1075ee38e04f490690f6a36a16e09c79.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="广西国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%9B%BD%E9%99%85.png",广西国际
+https://mobilelive.gxtv.cn/live/nn_live1009/playlist.m3u8
+#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁影视娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E5%BD%B1%E8%A7%86%E5%A8%B1%E4%B9%90.png",南宁影视娱乐
+http://688b7cbf9b7a8d911a085372b6c70ab5.livehwc3.cn/hls.nntv.cn/nnlive/YSYL_244.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=e7eb508555e76e08cc1b198d04f41fb5
+#EXTINF:-1 group-title="☘️天津频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226459
+#EXTINF:-1 group-title="☘️天津频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://j.x.bkpcp.top/jx/TIANJHD
+#EXTINF:-1 group-title="☘️天津频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://iptv.huuc.edu.cn/hls/tjhd.m3u8
+#EXTINF:-1 group-title="☘️天津频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225972/main.m3u8
+#EXTINF:-1 group-title="☘️天津频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873466.m3u8
+#EXTINF:-1 group-title="☘️天津频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226459/index.m3u8
+#EXTINF:-1 group-title="☘️天津频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226459/index.m3u8
+#EXTINF:-1 group-title="☘️天津频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226246/1.m3u8
+#EXTINF:-1 group-title="☘️天津频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226489/1.m3u8
+#EXTINF:-1 group-title="☘️天津频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226502/1.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="乐山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B9%90%E5%B1%B1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",乐山新闻综合
+https://stream1.freetv.fun/le-shan-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="乐山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B9%90%E5%B1%B1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",乐山新闻综合
+https://stream1.freetv.fun/le-shan-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="仁寿综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BB%81%E5%AF%BF%E7%BB%BC%E5%90%88.png",仁寿综合
+https://play.scrstv.com.cn/DT/live.m3u8?auth_key=60001724663204-0-0-c1cc4ded9841ac34f63cdbd3aec647ef
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="叙州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8F%99%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",叙州新闻综合
+https://stream1.freetv.fun/xu-zhou-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="叙州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8F%99%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",叙州新闻综合
+https://stream1.freetv.fun/xu-zhou-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="叙州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8F%99%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",叙州新闻综合
+https://stream1.freetv.fun/xu-zhou-xin-wen-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="叙州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8F%99%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",叙州新闻综合
+https://stream1.freetv.fun/xu-zhou-xin-wen-zong-he-6.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="叙州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8F%99%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",叙州新闻综合
+https://stream1.freetv.fun/xu-zhou-xin-wen-zong-he-7.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="叙永综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8F%99%E6%B0%B8%E7%BB%BC%E5%90%88.png",叙永综合
+rtmp://luzhi.xuyongrongmei.com:1935/live/xyxw?zsicd
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="叙永综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8F%99%E6%B0%B8%E7%BB%BC%E5%90%88.png",叙永综合
+http://luzhi.xuyongrongmei.com:1935/live/_definst_/xyxw/playlist.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="叙永综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8F%99%E6%B0%B8%E7%BB%BC%E5%90%88.png",叙永综合
+http://luzhi.xuyongrongmei.com:1935/live/_definst_/xyxw/playlist.m3u8?zsicd
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="名山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%8D%E5%B1%B1%E7%BB%BC%E5%90%88.png",名山综合
+https://m3u8channel-bx.yunxya.com/nmip-media/channellive/channel104666/playlist.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="名山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%8D%E5%B1%B1%E7%BB%BC%E5%90%88.png",名山综合
+https://m3u8channel-ms.yunxya.com:443/nmip-media/audiolive/audio100580/playlist.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="四川科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E7%A7%91%E6%95%99.png",四川科教
+https://stream1.freetv.fun/si-chuan-ke-jiao-3.ctv
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="四川科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E7%A7%91%E6%95%99.png",四川科教
+https://stream1.freetv.fun/si-chuan-ke-jiao-4.ctv
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="四川科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E7%A7%91%E6%95%99.png",四川科教
+https://stream1.freetv.fun/si-chuan-ke-jiao-5.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="四川科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E7%A7%91%E6%95%99.png",四川科教
+http://tv.scjyhd.com:4022/udp/239.11.0.194:5140
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="广元综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%85%83%E7%BB%BC%E5%90%88.png",广元综合
+https://stream1.freetv.fun/yan-yuan-zong-he-2.ctv
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%B7%E5%B7%B4%E5%8D%AB%E8%A7%86.png",康巴卫视
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221225660
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%B7%E5%B7%B4%E5%8D%AB%E8%A7%86.png",康巴卫视
+http://[2409:8087:2001:20:2800:0:df6e:eb10]:80/wh7f454c46tw3423902933_-437655574/ott.mobaibox.com/PLTV/3/224/3221227645/index.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%B7%E5%B7%B4%E5%8D%AB%E8%A7%86.png",康巴卫视
+https://stream1.freetv.fun/b3baba1d904b40b2d929ec8cbdfa40800abc7cb6d1c18efed0d6d91d97bce5b3.ctv
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%B7%E5%B7%B4%E5%8D%AB%E8%A7%86.png",康巴卫视
+https://stream1.freetv.fun/0de2ac9a0e7c3146b44c21f35ce10496eff2b9f67f7b9a106ba8493bf2d9cbee.ctv
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%B7%E5%B7%B4%E5%8D%AB%E8%A7%86.png",康巴卫视
+https://stream1.freetv.fun/7acb1025eb98d411fe5dc519902069dda51b621f55c7b1fce3acdd50f55d6ad5.ctv
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%B7%E5%B7%B4%E5%8D%AB%E8%A7%86.png",康巴卫视
+https://stream1.freetv.fun/e1854d983296da1d0804b07dcd259f5aafc1d7f17f59b6e0001d2a0741b5c608.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%B7%E5%B7%B4%E5%8D%AB%E8%A7%86.png",康巴卫视
+http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%B7%E5%B7%B4%E5%8D%AB%E8%A7%86.png",康巴卫视
+http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225660/index.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%B7%E5%B7%B4%E5%8D%AB%E8%A7%86.png",康巴卫视
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221227027/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkHMvBpWz4rccMxNvSRekpQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%B7%E5%B7%B4%E5%8D%AB%E8%A7%86.png",康巴卫视
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="德阳新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BE%B7%E9%98%B3%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",德阳新闻综合
+https://stream1.freetv.fun/de-yang-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="德阳新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BE%B7%E9%98%B3%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",德阳新闻综合
+https://stream1.freetv.fun/de-yang-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="德阳新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BE%B7%E9%98%B3%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",德阳新闻综合
+https://stream1.freetv.fun/de-yang-xin-wen-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="旺苍新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%BA%E8%8B%8D%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",旺苍新闻综合
+http://live.spccmc.com:90/live/spxwzh.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="松潘新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%BE%E6%BD%98%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",松潘新闻综合
+http://live.spccmc.com:90/live/spxwzh.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="松潘新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%BE%E6%BD%98%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",松潘新闻综合
+http://live.spccmc.com:90/live/spxwzh.m3u8?zsicd
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="汉源综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%89%E6%BA%90%E7%BB%BC%E5%90%88.png",汉源综合
+http://live.hyxrmt.com:85/live/xwpd.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="汶川新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%B6%E5%B7%9D%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",汶川新闻综合
+rtmp://live.iwcmt.cn:1936/live/zhxw
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="汶川新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%B6%E5%B7%9D%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",汶川新闻综合
+http://live.iwcmt.cn:90/live/zhxw.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="汶川新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%B6%E5%B7%9D%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",汶川新闻综合
+http://live.iwcmt.cn:90/live/zhxw.m3u8?zsicd
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="沐川综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%90%E5%B7%9D%E7%BB%BC%E5%90%88.png",沐川综合
+http://file.ysxtv.cn/cms/videos/nmip-media/channellive/channel4/playlist.m3u8?zsicd
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="泸县新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%B8%E5%8E%BF%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",泸县新闻综合
+http://lxfile.lxxcb.cn/nmip-media/channellive/channel103799/playlist.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="泸县新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%B8%E5%8E%BF%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",泸县新闻综合
+http://lxfile.lxxcb.cn/nmip-media/channellive/channel103799/playlist.m3u8?zsicd
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="泸县新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%B8%E5%8E%BF%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",泸县新闻综合
+http://lxfile.lxxcb.cn:80/nmip-media/channellive/channel103799/playlist.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="泸县新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%B8%E5%8E%BF%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",泸县新闻综合
+https://m3u8channel.ganzitv.com/nmip-media/channellive/channel1/playlist.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="甘孜综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E5%AD%9C%E7%BB%BC%E5%90%88.png",甘孜综合
+https://m3u8channel.ganzitv.com/nmip-media/channellive/channel1/playlist.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="石棉综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E6%A3%89%E7%BB%BC%E5%90%88.png",石棉综合
+http://live.hyxrmt.com:85/live/xwpd.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="筠连综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%AD%A0%E8%BF%9E%E7%BB%BC%E5%90%88.png",筠连综合
+http://live.dameijunlian.cn/live1/live1.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="筠连综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%AD%A0%E8%BF%9E%E7%BB%BC%E5%90%88.png",筠连综合
+http://live.dameijunlian.cn:80/live1/live1.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="绵阳科技" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%B5%E9%98%B3%E7%A7%91%E6%8A%80.png",绵阳科技
+https://stream1.freetv.fun/mian-yang-ke-ji-2.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="荥经综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%A5%E7%BB%8F%E7%BB%BC%E5%90%88.png",荥经综合
+http://file.ysxtv.cn/cms/videos/nmip-media/channellive/channel4/playlist.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="荥经综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%A5%E7%BB%8F%E7%BB%BC%E5%90%88.png",荥经综合
+https://file.ysxtv.cn/nmip-media/channellive/channel101492/playlist.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="营山电视台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%90%A5%E5%B1%B1%E7%94%B5%E8%A7%86%E5%8F%B0.png",营山电视台
+https://file.ysxtv.cn/nmip-media/channellive/channel101492/playlist.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="营山电视台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%90%A5%E5%B1%B1%E7%94%B5%E8%A7%86%E5%8F%B0.png",营山电视台
+http://file.ysxtv.cn/cms/videos/nmip-media/channellive/channel4/playlist.m3u8?zsicd#http://file.ysxtv.cn/cms/videos/nmip-media/channellive/channel4/playlist.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="蓬安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%93%AC%E5%AE%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",蓬安新闻综合
+https://stream1.freetv.fun/peng-an-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="蓬安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%93%AC%E5%AE%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",蓬安新闻综合
+https://stream1.freetv.fun/peng-an-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="金川新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E5%B7%9D%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",金川新闻综合
+https://stream1.freetv.fun/jin-chuan-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="金川新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E5%B7%9D%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",金川新闻综合
+https://stream1.freetv.fun/jin-chuan-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="金川新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E5%B7%9D%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",金川新闻综合
+https://stream1.freetv.fun/jin-chuan-xin-wen-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️四川频道" tvg-name="金川新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E5%B7%9D%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",金川新闻综合
+https://stream1.freetv.fun/jin-chuan-xin-wen-zong-he-4.m3u8
+#EXTINF:-1 group-title="☘️陕西频道" tvg-name="陕西新闻资讯" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E6%96%B0%E9%97%BB%E8%B5%84%E8%AE%AF.png",陕西新闻资讯
+http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226357/index.m3u8
+#EXTINF:-1 group-title="☘️陕西频道" tvg-name="陕西都市青春" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E9%83%BD%E5%B8%82%E9%9D%92%E6%98%A5.png",陕西都市青春
+http://[2409:8087:7001:20:3::6]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226358/index.m3u8
+#EXTINF:-1 group-title="☘️陕西频道" tvg-name="陕西生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E7%94%9F%E6%B4%BB.png",陕西生活
+http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226359/index.m3u8
+#EXTINF:-1 group-title="☘️陕西频道" tvg-name="陕西公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%85%AC%E5%85%B1.png",陕西公共
+http://ls.qingting.fm/live/1222.m3u8
+#EXTINF:-1 group-title="☘️陕西频道" tvg-name="陕西公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%85%AC%E5%85%B1.png",陕西公共
+http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226361/index.m3u8
+#EXTINF:-1 group-title="☘️陕西频道" tvg-name="陕西体育休闲" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E4%BD%93%E8%82%B2%E4%BC%91%E9%97%B2.png",陕西体育休闲
+http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226363/index.m3u8
+#EXTINF:-1 group-title="☘️陕西频道" tvg-name="陕西影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%BD%B1%E8%A7%86.png",陕西影视
+http://[2409:8087:7000:20::4]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226360/index.m3u8
+#EXTINF:-1 group-title="☘️陕西频道" tvg-name="陕西影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%99%95%E8%A5%BF%E5%BD%B1%E8%A7%86.png",陕西影视
+http://php.jdshipin.com:8880/qly.php?id=6329
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="三明新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%89%E6%98%8E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",三明新闻综合
+http://ls.qingting.fm/live/4885.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="三明新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%89%E6%98%8E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",三明新闻综合
+https://ls.qingting.fm/live/5022100/64k.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="云霄综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E9%9C%84%E7%BB%BC%E5%90%88.png",云霄综合
+https://live.zzyxxw.com:2443/live/xwzh.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="云霄综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E9%9C%84%E7%BB%BC%E5%90%88.png",云霄综合
+http://live.zzyxxw.com:85/live/xwzh.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="云霄综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E9%9C%84%E7%BB%BC%E5%90%88.png",云霄综合
+http://live.zzyxxw.com:85/live/xwzh.m3u8?fujian
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8E%A6%E9%97%A8%E5%8D%AB%E8%A7%86.png",厦门卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887454.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8E%A6%E9%97%A8%E5%8D%AB%E8%A7%86.png",厦门卫视
+http://goo.bkpcp.top/mg/xmws
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8E%A6%E9%97%A8%E5%8D%AB%E8%A7%86.png",厦门卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226542/1.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8E%A6%E9%97%A8%E5%8D%AB%E8%A7%86.png",厦门卫视
+http://[2409:8087:74F1:0021::0008]/270000001128/9900000058/index.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8E%A6%E9%97%A8%E5%8D%AB%E8%A7%86.png",厦门卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221226964/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8E%A6%E9%97%A8%E5%8D%AB%E8%A7%86.png",厦门卫视
+http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221226964/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8E%A6%E9%97%A8%E5%8D%AB%E8%A7%86.png",厦门卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221226781/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8E%A6%E9%97%A8%E5%8D%AB%E8%A7%86.png",厦门卫视
+http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221226781/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8E%A6%E9%97%A8%E5%8D%AB%E8%A7%86.png",厦门卫视
+http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000193/index.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8E%A6%E9%97%A8%E5%8D%AB%E8%A7%86.png",厦门卫视
+https://stream1.freetv.fun/cc2a1fdd054d0069e308a8c5358596fe1ba08562b102d8223a3b02e620082f96.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="漳州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BC%B3%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",漳州新闻综合
+https://stream1.freetv.fun/zhang-zhou-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="漳州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BC%B3%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",漳州新闻综合
+https://stream1.freetv.fun/zhang-zhou-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="漳州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BC%B3%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",漳州新闻综合
+https://stream1.freetv.fun/zhang-zhou-xin-wen-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福州少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%B7%9E%E5%B0%91%E5%84%BF.png",福州少儿
+http://live.zohi.tv/video/s10001-fztv-4/index.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福州生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%B7%9E%E7%94%9F%E6%B4%BB.png",福州生活
+http://live.zohi.tv/video/s10001-fztv-3/index.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%B7%9E%E7%BB%BC%E5%90%88.png",福州综合
+http://live.zohi.tv/video/s10001-fztv-1/index.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E6%96%B0%E9%97%BB.png",福建新闻
+http://satellitepull.cnr.cn/live/wx32fjxwgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E6%96%B0%E9%97%BB.png",福建新闻
+https://satellitepull.cnr.cn/live/wx32fjxwgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E6%96%B0%E9%97%BB.png",福建新闻
+http://live.xmcdn.com/live/792/64.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E6%96%B0%E9%97%BB.png",福建新闻
+https://stream1.freetv.fun/fu-jian-xin-wen-1.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E6%96%B0%E9%97%BB.png",福建新闻
+https://stream1.freetv.fun/fu-jian-xin-wen-2.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E6%96%B0%E9%97%BB.png",福建新闻
+https://stream1.freetv.fun/fu-jian-xin-wen-3.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E6%96%B0%E9%97%BB.png",福建新闻
+https://stream1.freetv.fun/fu-jian-xin-wen-4.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E6%96%B0%E9%97%BB.png",福建新闻
+https://stream1.freetv.fun/fu-jian-xin-wen-5.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E6%96%B0%E9%97%BB.png",福建新闻
+https://stream1.freetv.fun/fu-jian-xin-wen-6.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E6%96%B0%E9%97%BB.png",福建新闻
+https://stream1.freetv.fun/fu-jian-xin-wen-8.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%94%B5%E8%A7%86%E5%89%A7.png",福建电视剧
+https://stream1.freetv.fun/fu-jian-dian-shi-ju-1.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%94%B5%E8%A7%86%E5%89%A7.png",福建电视剧
+https://stream1.freetv.fun/fu-jian-dian-shi-ju-2.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%94%B5%E8%A7%86%E5%89%A7.png",福建电视剧
+https://stream1.freetv.fun/fu-jian-dian-shi-ju-3.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%94%B5%E8%A7%86%E5%89%A7.png",福建电视剧
+https://stream1.freetv.fun/fu-jian-dian-shi-ju-4.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%94%B5%E8%A7%86%E5%89%A7.png",福建电视剧
+https://stream1.freetv.fun/fu-jian-dian-shi-ju-5.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建电视剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%94%B5%E8%A7%86%E5%89%A7.png",福建电视剧
+https://stream1.freetv.fun/fu-jian-dian-shi-ju-6.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%BB%8F%E6%B5%8E.png",福建经济
+http://satellitepull.cnr.cn/live/wx32fjdnjjgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%BB%8F%E6%B5%8E.png",福建经济
+https://stream1.freetv.fun/fu-jian-jing-ji-1.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%BB%8F%E6%B5%8E.png",福建经济
+https://stream1.freetv.fun/fu-jian-jing-ji-2.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%BB%8F%E6%B5%8E.png",福建经济
+https://stream1.freetv.fun/fu-jian-jing-ji-4.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%BB%8F%E6%B5%8E.png",福建经济
+https://stream1.freetv.fun/fu-jian-jing-ji-5.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%BB%8F%E6%B5%8E.png",福建经济
+https://stream1.freetv.fun/fu-jian-jing-ji-6.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%BB%BC%E5%90%88.png",福建综合
+https://stream1.freetv.fun/fu-jian-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%BB%BC%E5%90%88.png",福建综合
+https://stream1.freetv.fun/fu-jian-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%BB%BC%E5%90%88.png",福建综合
+https://stream1.freetv.fun/fu-jian-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%BB%BC%E5%90%88.png",福建综合
+https://stream1.freetv.fun/fu-jian-zong-he-4.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%BB%BC%E5%90%88.png",福建综合
+https://stream1.freetv.fun/fu-jian-zong-he-5.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E7%BB%BC%E5%90%88.png",福建综合
+https://stream1.freetv.fun/fu-jian-zong-he-6.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E5%B0%91%E5%84%BF.png",福建少儿
+https://stream1.freetv.fun/fu-jian-shao-er-1.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E5%B0%91%E5%84%BF.png",福建少儿
+https://stream1.freetv.fun/fu-jian-shao-er-2.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E5%B0%91%E5%84%BF.png",福建少儿
+https://stream1.freetv.fun/fu-jian-shao-er-3.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E5%B0%91%E5%84%BF.png",福建少儿
+https://stream1.freetv.fun/fu-jian-shao-er-4.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E5%B0%91%E5%84%BF.png",福建少儿
+https://stream1.freetv.fun/fu-jian-shao-er-6.m3u8
+#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E5%B0%91%E5%84%BF.png",福建少儿
+https://stream1.freetv.fun/fu-jian-shao-er-7.m3u8
+#EXTINF:-1 group-title="☘️海南频道" tvg-name="海南新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E6%96%B0%E9%97%BB.png",海南新闻
+http://satellitepull.cnr.cn/live/wxhainxwgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️海南频道" tvg-name="海南新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E6%96%B0%E9%97%BB.png",海南新闻
+https://satellitepull.cnr.cn/live/wxhainxwgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️海南频道" tvg-name="海南新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E6%96%B0%E9%97%BB.png",海南新闻
+http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000111/1.m3u8
+#EXTINF:-1 group-title="☘️海南频道" tvg-name="海南新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E6%96%B0%E9%97%BB.png",海南新闻
+http://ls.qingting.fm/live/1861.m3u8
+#EXTINF:-1 group-title="☘️海南频道" tvg-name="海南新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E6%96%B0%E9%97%BB.png",海南新闻
+https://stream1.freetv.fun/ipv6-hai-nan-xin-wen-6.m3u8
+#EXTINF:-1 group-title="☘️海南频道" tvg-name="海南自贸" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E8%87%AA%E8%B4%B8.png",海南自贸
+http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000116/1.m3u8
+#EXTINF:-1 group-title="☘️海南频道" tvg-name="海南文旅" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E6%96%87%E6%97%85.png",海南文旅
+http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000113/1.m3u8
+#EXTINF:-1 group-title="☘️海南频道" tvg-name="海南文旅" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E6%96%87%E6%97%85.png",海南文旅
+https://stream1.freetv.fun/ipv6-hai-nan-wen-lu-7.m3u8
+#EXTINF:-1 group-title="☘️海南频道" tvg-name="海南文旅" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E6%96%87%E6%97%85.png",海南文旅
+https://stream1.freetv.fun/ipv6-hai-nan-wen-lu-9.m3u8
+#EXTINF:-1 group-title="☘️海南频道" tvg-name="海南少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%B0%91%E5%84%BF.png",海南少儿
+http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000112/1.m3u8
+#EXTINF:-1 group-title="☘️海南频道" tvg-name="海南公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%85%AC%E5%85%B1.png",海南公共
+http://[2409:8087:5e00:24::1e]:6060/000000001000/460000100000000057/1.m3u8
+#EXTINF:-1 group-title="☘️海南频道" tvg-name="海南公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%85%AC%E5%85%B1.png",海南公共
+https://stream1.freetv.fun/ipv6-hai-nan-gong-gong-8.m3u8
+#EXTINF:-1 group-title="☘️海南频道" tvg-name="海南公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%85%AC%E5%85%B1.png",海南公共
+https://stream1.freetv.fun/ipv6-hai-nan-gong-gong-9.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="梨园" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%A2%A8%E5%9B%AD.png",梨园
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225581/2/index.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="临颍综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%B4%E9%A2%8D%E7%BB%BC%E5%90%88.png",临颍综合
+http://tvpull.dxhmt.cn:9081/tv/11122-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="义马新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B9%89%E9%A9%AC%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",义马新闻综合
+http://tvpull.dxhmt.cn:9081/tv/11281-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="光山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%85%89%E5%B1%B1%E7%BB%BC%E5%90%88.png",光山综合
+http://tvpull.dxhmt.cn:9081/tv/11522-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="兰考新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%85%B0%E8%80%83%E6%96%B0%E9%97%BB.png",兰考新闻
+http://tvpull.dxhmt.cn:9081/tv/10225-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="卫辉综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%AB%E8%BE%89%E7%BB%BC%E5%90%88.png",卫辉综合
+http://tvpull.dxhmt.cn:9081/tv/10781-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="叶县" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8F%B6%E5%8E%BF.png",叶县
+http://tvpull.dxhmt.cn:9081/tv/10422-1.m3u8#
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="唐河一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%94%90%E6%B2%B3%E4%B8%80%E5%A5%97.png",唐河一套
+http://tvpull.dxhmt.cn:9081/tv/11328-1.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="固始综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%BA%E5%A7%8B%E7%BB%BC%E5%90%88.png",固始综合
+http://tvpull.dxhmt.cn:9081/tv/11525-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="宝丰综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%9D%E4%B8%B0%E7%BB%BC%E5%90%88.png",宝丰综合
+http://tvpull.dxhmt.cn:9081/tv/10421-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="巩义新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B7%A9%E4%B9%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",巩义新闻综合
+http://tvpull.dxhmt.cn:9081/tv/10181-1.m3u8?zhend
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="扶沟综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%89%B6%E6%B2%9F%E7%BB%BC%E5%90%88.png",扶沟综合
+http://tvpull.dxhmt.cn:9081/tv/11621-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="新乡县电视台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E4%B9%A1%E5%8E%BF%E7%94%B5%E8%A7%86%E5%8F%B0.png",新乡县电视台
+http://tvpull.dxhmt.cn:9081/tv/10721-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="新县综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E5%8E%BF%E7%BB%BC%E5%90%88.png",新县综合
+http://tvpull.dxhmt.cn:9081/tv/11523-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="新蔡综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E8%94%A1%E7%BB%BC%E5%90%88.png",新蔡综合
+http://tvpull.dxhmt.cn:9081/tv/11729-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="桐柏新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%A1%90%E6%9F%8F%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",桐柏新闻综合
+http://tvpull.dxhmt.cn:9081/tv/11330-1.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="桐柏新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%A1%90%E6%9F%8F%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",桐柏新闻综合
+http://tvpull.dxhmt.cn:9081/tv/11330-1.m3u8?zhend
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="泌阳新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%8C%E9%98%B3%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",泌阳新闻综合
+http://tvpull.dxhmt.cn:9081/tv/11726-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="渑池新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B8%91%E6%B1%A0%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",渑池新闻综合
+http://tvpull.dxhmt.cn:9081/tv/11221-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="温县综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B8%A9%E5%8E%BF%E7%BB%BC%E5%90%88.png",温县综合
+http://tvpull.dxhmt.cn:9081/tv/10825-1.m3u8?zhend
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="潢川综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BD%A2%E5%B7%9D%E7%BB%BC%E5%90%88.png",潢川综合
+http://tvpull.dxhmt.cn:9081/tv/11526-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="登封综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%99%BB%E5%B0%81%E7%BB%BC%E5%90%88.png",登封综合
+http://tvpull.dxhmt.cn:9081/tv/10185-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="禹州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%B9%E5%B7%9E%E7%BB%BC%E5%90%88.png",禹州综合
+http://tvpull.dxhmt.cn:9081/tv/11081-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="西华综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%8D%8E%E7%BB%BC%E5%90%88.png",西华综合
+http://tvpull.dxhmt.cn:9081/tv/11622-1.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="郏县综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%83%8F%E5%8E%BF%E7%BB%BC%E5%90%88.png",郏县综合
+http://tvpull.dxhmt.cn:9081/tv/10425-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="郸城新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%83%B8%E5%9F%8E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",郸城新闻综合
+http://tvpull.dxhmt.cn:9081/tv/11625-1.m3u8?wsSecret=df15530a0abec41b14bca00fc96270d1&wsTime=1654956569
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="鄢陵综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%84%A2%E9%99%B5%E7%BB%BC%E5%90%88.png",鄢陵综合
+http://tvpull.dxhmt.cn:9081/tv/11024-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="项城新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A1%B9%E5%9F%8E%E6%96%B0%E9%97%BB.png",项城新闻
+http://tvpull.dxhmt.cn:9081/tv/11681-1.m3u8#@http://live.dxhmt.cn:9081/tv/11681-1.m3u8#@http://p2.weizan.cn/978354/131995006225520039/live.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="邓州新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%93%E5%B7%9E%E6%96%B0%E9%97%BB.png",邓州新闻
+http://tvpull.dxhmt.cn:9081/tv/11381-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="荥阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%A5%E9%98%B3%E7%BB%BC%E5%90%88.png",荥阳综合
+http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226673/index.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="荥阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%A5%E9%98%B3%E7%BB%BC%E5%90%88.png",荥阳综合
+http://tvpull.dxhmt.cn:9081/tv/10182-1.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="荥阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%A5%E9%98%B3%E7%BB%BC%E5%90%88.png",荥阳综合
+http://tvpull.dxhmt.cn:9081/tv/10182-1.m3u8?zhend
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="禹州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%B9%E5%B7%9E%E5%85%AC%E5%85%B1.png",禹州公共
+http://tvpull.dxhmt.cn:9081/tv/11081-2.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="灵宝新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%81%B5%E5%AE%9D%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",灵宝新闻综合
+http://tvpull.dxhmt.cn:9081/tv/11282-1.m3u8?zhend
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="滑县新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%91%E5%8E%BF%E6%96%B0%E9%97%BB.png",滑县新闻
+http://tvpull.dxhmt.cn:9081/tv/10526-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="济源电视一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%8E%E6%BA%90%E7%94%B5%E8%A7%86%E4%B8%80%E5%A5%97.png",济源电视一套
+http://tvpull.dxhmt.cn:9081/tv/19001-1.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="洛阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B4%9B%E9%98%B3%E7%BB%BC%E5%90%88.png",洛阳综合
+https://wshlslive.migucloud.com/live/6AL7GTQX_C0/playlist.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="洛阳科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B4%9B%E9%98%B3%E7%A7%91%E6%95%99.png",洛阳科教
+https://wshlslive.migucloud.com/live/RJ0EYBCZ_C0/playlist.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="洛阳文旅" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B4%9B%E9%98%B3%E6%96%87%E6%97%85.png",洛阳文旅
+https://wshlslive.migucloud.com/live/CVN934JS_C0/playlist.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E9%83%BD%E5%B8%82.png",河南都市
+http://1.94.31.214/php/hntv.php?id=hnds
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E9%83%BD%E5%B8%82.png",河南都市
+http://www.lwfz.fun:8800/rtp/239.16.20.164:11640
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E9%83%BD%E5%B8%82.png",河南都市
+http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227241/index.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E9%83%BD%E5%B8%82.png",河南都市
+https://live.lalifeier.eu.org/hntv/hnds.m3u8?t=1745796321&key=fe18400b0aeee777efcd1e3282435d28
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E9%83%BD%E5%B8%82.png",河南都市
+https://live.lalifeier.eu.org/hntv/hnds.m3u8?t=1746307365&key=d2cc347e46058bc7b0e9200005d7f1ca
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E9%83%BD%E5%B8%82.png",河南都市
+https://live.lalifeier.eu.org/hntv/hnds.m3u8?t=1746393735&key=15d3cc47dac12d622b6ca5af30779f06
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E9%83%BD%E5%B8%82.png",河南都市
+https://stream1.freetv.fun/he-nan-du-shi-1.ctv
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E9%83%BD%E5%B8%82.png",河南都市
+https://stream1.freetv.fun/he-nan-du-shi-1.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E9%83%BD%E5%B8%82.png",河南都市
+https://stream1.freetv.fun/he-nan-du-shi-10.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E9%83%BD%E5%B8%82.png",河南都市
+https://stream1.freetv.fun/he-nan-du-shi-11.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E6%B0%91%E7%94%9F.png",河南民生
+http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227268/index.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E6%B0%91%E7%94%9F.png",河南民生
+https://live.lalifeier.eu.org/hntv/hnms.m3u8?t=1745796321&key=5f28534538b48cf3d6dc58909f8897f3
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E6%B0%91%E7%94%9F.png",河南民生
+https://live.lalifeier.eu.org/hntv/hnms.m3u8?t=1746307365&key=4ca269e387096c8e47a0ee8ffd77e387
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E6%B0%91%E7%94%9F.png",河南民生
+https://live.lalifeier.eu.org/hntv/hnms.m3u8?t=1746393735&key=b741672d258ca54d259ed1c846cb637f
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E6%B0%91%E7%94%9F.png",河南民生
+https://stream1.freetv.fun/he-nan-min-sheng-3.ctv
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E6%B0%91%E7%94%9F.png",河南民生
+https://stream1.freetv.fun/he-nan-min-sheng-4.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E6%B0%91%E7%94%9F.png",河南民生
+https://stream1.freetv.fun/he-nan-min-sheng-5.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E6%B0%91%E7%94%9F.png",河南民生
+https://stream1.freetv.fun/he-nan-min-sheng-6.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E6%B0%91%E7%94%9F.png",河南民生
+https://stream1.freetv.fun/he-nan-min-sheng-7.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="河南民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E6%B0%91%E7%94%9F.png",河南民生
+https://stream1.freetv.fun/he-nan-min-sheng-8.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="沁阳新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%81%E9%98%B3%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",沁阳新闻综合
+http://tvpull.dxhmt.cn:9081/tv/10882-1.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="沁阳新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%81%E9%98%B3%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",沁阳新闻综合
+https://stream1.freetv.fun/qin-yang-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="永城综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B0%B8%E5%9F%8E%E7%BB%BC%E5%90%88.png",永城综合
+http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227057/index.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="永城综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B0%B8%E5%9F%8E%E7%BB%BC%E5%90%88.png",永城综合
+http://tvpull.dxhmt.cn:9081/tv/11481-1.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="方城一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B9%E5%9F%8E%E4%B8%80%E5%A5%97.png",方城一套
+http://tvpull.dxhmt.cn:9081/tv/11322-1.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="新野综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E9%87%8E%E7%BB%BC%E5%90%88.png",新野综合
+http://tvpull.dxhmt.cn:9081/tv/11329-1.m3u8?zhend
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="新安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E5%AE%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新安新闻综合
+http://tvpull.dxhmt.cn:9081/tv/10323-1.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="新安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E5%AE%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新安新闻综合
+http://tvpull.dxhmt.cn:9081/tv/10323-1.m3u8?zhend
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="开封新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%B0%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",开封新闻综合
+http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226689/index.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="开封新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%B0%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",开封新闻综合
+https://stream1.freetv.fun/kai-feng-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="开封新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%B0%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",开封新闻综合
+http://tvpull.dxhmt.cn:9081/tv/10200-2.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="开封新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%B0%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",开封新闻综合
+http://tvpull.dxhmt.cn:9081/tv/10200-2.m3u8?zhend
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="开封文化旅游" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%B0%81%E6%96%87%E5%8C%96%E6%97%85%E6%B8%B8.png",开封文化旅游
+http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226515/index.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="开封文化旅游" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%B0%81%E6%96%87%E5%8C%96%E6%97%85%E6%B8%B8.png",开封文化旅游
+http://tvpull.dxhmt.cn:9081/tv/10200-3.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="开封文化旅游" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%B0%81%E6%96%87%E5%8C%96%E6%97%85%E6%B8%B8.png",开封文化旅游
+http://tvpull.dxhmt.cn:9081/tv/10200-3.m3u8?zhend
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="嵩县综合新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B5%A9%E5%8E%BF%E7%BB%BC%E5%90%88%E6%96%B0%E9%97%BB.png",嵩县综合新闻
+http://tvpull.dxhmt.cn:9081/tv/10325-1.m3u8?zhendhttp://wshls.live.migucloud.com/live/MZCYG799_C0/playlist.m3u8?zhend
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="嵩县综合新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B5%A9%E5%8E%BF%E7%BB%BC%E5%90%88%E6%96%B0%E9%97%BB.png",嵩县综合新闻
+http://wshls.live.migucloud.com/live/MZCYG799_C0/playlist.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="嵩县综合新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B5%A9%E5%8E%BF%E7%BB%BC%E5%90%88%E6%96%B0%E9%97%BB.png",嵩县综合新闻
+http://wshls.live.migucloud.com/live/MZCYG799_C0/playlist.m3u8?zhend
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="宜阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%9C%E9%98%B3%E7%BB%BC%E5%90%88.png",宜阳综合
+http://tvpull.dxhmt.cn:9081/tv/10327-1.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="周口新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%91%A8%E5%8F%A3%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",周口新闻综合
+https://stream1.freetv.fun/zhou-kou-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="周口新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%91%A8%E5%8F%A3%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",周口新闻综合
+https://stream1.freetv.fun/zhou-kou-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="内黄综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E9%BB%84%E7%BB%BC%E5%90%88.png",内黄综合
+http://tvpull.dxhmt.cn:9081/tv/10527-1.m3u8?wsSecret=df15530a0abec41b14bca00fc96270d1&wsTime=1654956569
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="内乡综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E4%B9%A1%E7%BB%BC%E5%90%88.png",内乡综合
+http://tvpull.dxhmt.cn:9081/tv/11325-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="偃师新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%81%83%E5%B8%88%E6%96%B0%E9%97%BB.png",偃师新闻
+http://tvpull.dxhmt.cn:9081/tv/10381-1.m3u8?wsSecret=df15530a0abec41b14bca00fc96270d1&wsTime=1654956569
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="鹿泉一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%B9%BF%E6%B3%89%E4%B8%80%E5%A5%97.png",鹿泉一套
+https://jwcdnqx.hebyun.com.cn/zb/luquanyi/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="邯郸科技教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%AF%E9%83%B8%E7%A7%91%E6%8A%80%E6%95%99%E8%82%B2.png",邯郸科技教育
+http://live.hd.hdbs.cn/video/s10001-2021hdkjjy/index.m3u8?zhebd
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="邯郸科技教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%AF%E9%83%B8%E7%A7%91%E6%8A%80%E6%95%99%E8%82%B2.png",邯郸科技教育
+https://jwcdnqx.hebyun.com.cn/live/hdkj/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="邯郸公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%AF%E9%83%B8%E5%85%AC%E5%85%B1.png",邯郸公共
+http://live.hd.hdbs.cn/video/s10001-2021hdgg/index.m3u8?zhebd
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="邯郸公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%AF%E9%83%B8%E5%85%AC%E5%85%B1.png",邯郸公共
+https://jwcdnqx.hebyun.com.cn/zb/hdgg/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="邯郸科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%AF%E9%83%B8%E7%A7%91%E6%95%99.png",邯郸科教
+https://jwcdnqx.hebyun.com.cn/zb/hdkj/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="邢台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%A2%E5%8F%B0%E7%BB%BC%E5%90%88.png",邢台综合
+http://jwplay.hebyun.com.cn/live/xtsrmtzs/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="邢台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%A2%E5%8F%B0%E7%BB%BC%E5%90%88.png",邢台综合
+https://jwplay.hebyun.com.cn/live/xttv/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="邢台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%A2%E5%8F%B0%E7%BB%BC%E5%90%88.png",邢台综合
+https://jwplay.hebyun.com.cn/live/xttv/1500k/tzwj_video.m3u8?zhebd
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="邢台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%A2%E5%8F%B0%E7%BB%BC%E5%90%88.png",邢台综合
+https://jwplay.hebyun.com.cn:443/live/xtsrmtzs/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="邢台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%A2%E5%8F%B0%E7%BB%BC%E5%90%88.png",邢台综合
+https://stream1.freetv.fun/xing-tai-zong-he-7.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="邢台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%A2%E5%8F%B0%E7%BB%BC%E5%90%88.png",邢台综合
+https://stream1.freetv.fun/xing-tai-zong-he-8.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="邢台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%A2%E5%8F%B0%E7%BB%BC%E5%90%88.png",邢台综合
+https://stream1.freetv.fun/xing-tai-zong-he-8.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="邢台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%A2%E5%8F%B0%E7%BB%BC%E5%90%88.png",邢台综合
+https://stream1.freetv.fun/xing-tai-zong-he-9.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="衡水公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A1%A1%E6%B0%B4%E5%85%AC%E5%85%B1.png",衡水公共
+http://ls.qingting.fm/live/2810.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E9%83%BD%E5%B8%82.png",石家庄都市
+https://stream1.freetv.fun/shi-jia-zhuang-du-shi-1.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E9%83%BD%E5%B8%82.png",石家庄都市
+https://stream1.freetv.fun/shi-jia-zhuang-du-shi-11.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E9%83%BD%E5%B8%82.png",石家庄都市
+https://stream1.freetv.fun/shi-jia-zhuang-du-shi-12.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E9%83%BD%E5%B8%82.png",石家庄都市
+https://stream1.freetv.fun/shi-jia-zhuang-du-shi-17.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E9%83%BD%E5%B8%82.png",石家庄都市
+https://stream1.freetv.fun/shi-jia-zhuang-du-shi-4.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E9%83%BD%E5%B8%82.png",石家庄都市
+https://stream1.freetv.fun/shi-jia-zhuang-du-shi-5.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E9%83%BD%E5%B8%82.png",石家庄都市
+https://stream1.freetv.fun/shi-jia-zhuang-du-shi-6.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E9%83%BD%E5%B8%82.png",石家庄都市
+https://stream1.freetv.fun/shi-jia-zhuang-du-shi-8.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E9%83%BD%E5%B8%82.png",石家庄都市
+https://stream1.freetv.fun/shi-jia-zhuang-du-shi-9.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E7%94%9F%E6%B4%BB.png",石家庄生活
+https://stream1.freetv.fun/shi-jia-zhuang-sheng-huo-1.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E7%94%9F%E6%B4%BB.png",石家庄生活
+https://stream1.freetv.fun/shi-jia-zhuang-sheng-huo-10.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E7%94%9F%E6%B4%BB.png",石家庄生活
+https://stream1.freetv.fun/shi-jia-zhuang-sheng-huo-11.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E7%94%9F%E6%B4%BB.png",石家庄生活
+https://stream1.freetv.fun/shi-jia-zhuang-sheng-huo-15.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E7%94%9F%E6%B4%BB.png",石家庄生活
+https://stream1.freetv.fun/shi-jia-zhuang-sheng-huo-2.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E7%94%9F%E6%B4%BB.png",石家庄生活
+https://stream1.freetv.fun/shi-jia-zhuang-sheng-huo-5.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E7%94%9F%E6%B4%BB.png",石家庄生活
+https://stream1.freetv.fun/shi-jia-zhuang-sheng-huo-7.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",石家庄新闻综合
+https://stream1.freetv.fun/shi-jia-zhuang-xin-wen-zong-he-2.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",石家庄新闻综合
+https://stream1.freetv.fun/shi-jia-zhuang-xin-wen-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",石家庄新闻综合
+https://stream1.freetv.fun/shi-jia-zhuang-xin-wen-zong-he-4.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",石家庄新闻综合
+https://stream1.freetv.fun/shi-jia-zhuang-xin-wen-zong-he-5.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",石家庄新闻综合
+https://stream1.freetv.fun/shi-jia-zhuang-xin-wen-zong-he-6.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",石家庄新闻综合
+https://stream1.freetv.fun/shi-jia-zhuang-xin-wen-zong-he-7.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",石家庄新闻综合
+https://stream1.freetv.fun/shi-jia-zhuang-xin-wen-zong-he-8.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",石家庄新闻综合
+https://stream1.freetv.fun/shi-jia-zhuang-xin-wen-zong-he-8.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",石家庄新闻综合
+https://stream1.freetv.fun/shi-jia-zhuang-xin-wen-zong-he-9.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E5%A8%B1%E4%B9%90.png",石家庄娱乐
+https://stream1.freetv.fun/shi-jia-zhuang-yu-le-1.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E5%A8%B1%E4%B9%90.png",石家庄娱乐
+https://stream1.freetv.fun/shi-jia-zhuang-yu-le-10.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E5%A8%B1%E4%B9%90.png",石家庄娱乐
+https://stream1.freetv.fun/shi-jia-zhuang-yu-le-11.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E5%A8%B1%E4%B9%90.png",石家庄娱乐
+https://stream1.freetv.fun/shi-jia-zhuang-yu-le-12.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E5%A8%B1%E4%B9%90.png",石家庄娱乐
+https://stream1.freetv.fun/shi-jia-zhuang-yu-le-3.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E5%A8%B1%E4%B9%90.png",石家庄娱乐
+https://stream1.freetv.fun/shi-jia-zhuang-yu-le-4.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E5%A8%B1%E4%B9%90.png",石家庄娱乐
+https://stream1.freetv.fun/shi-jia-zhuang-yu-le-6.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E5%A8%B1%E4%B9%90.png",石家庄娱乐
+https://stream1.freetv.fun/shi-jia-zhuang-yu-le-7.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E5%A8%B1%E4%B9%90.png",石家庄娱乐
+https://stream1.freetv.fun/shi-jia-zhuang-yu-le-8.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E5%A8%B1%E4%B9%90.png",石家庄娱乐
+https://stream1.freetv.fun/shi-jia-zhuang-yu-le-9.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="滦平新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%A6%E5%B9%B3%E6%96%B0%E9%97%BB.png",滦平新闻
+http://jwplay.hebyun.com.cn/live/LPTV001/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E9%83%BD%E5%B8%82.png",河北都市
+http://jwplay.hebyun.com.cn/live/hbnmtv/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E9%83%BD%E5%B8%82.png",河北都市
+https://event.pull.hebtv.com/jishi/dushipindao.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E9%83%BD%E5%B8%82.png",河北都市
+https://live.lalifeier.eu.org/hebtv/hbds.m3u8?t=1745774515&key=ce739e0d0528ad5a5e6434e48c963ced
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E9%83%BD%E5%B8%82.png",河北都市
+https://live.lalifeier.eu.org/hebtv/hbds.m3u8?t=1746292937&key=31037b0f5b409589966488a8534d4f77
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E9%83%BD%E5%B8%82.png",河北都市
+https://live.lalifeier.eu.org/hebtv/hbds.m3u8?t=1746307365&key=ac1ef10a10a447846c16428759df6b95
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E9%83%BD%E5%B8%82.png",河北都市
+https://live.lalifeier.eu.org/hebtv/hbds.m3u8?t=1746379256&key=4da081270bc85d02099091b47a9ee5dd
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E9%83%BD%E5%B8%82.png",河北都市
+https://live.lalifeier.eu.org/hebtv/hbds.m3u8?t=1746393735&key=c6af04dacacc8befbdb92a0fec4c60ee
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E9%83%BD%E5%B8%82.png",河北都市
+https://stream1.freetv.fun/he-bei-du-shi-13.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E9%83%BD%E5%B8%82.png",河北都市
+https://stream1.freetv.fun/he-bei-du-shi-14.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E9%83%BD%E5%B8%82.png",河北都市
+https://stream1.freetv.fun/he-bei-du-shi-16.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北农民" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%86%9C%E6%B0%91.png",河北农民
+https://ls.qingting.fm/live/1650/64k.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北农民" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%86%9C%E6%B0%91.png",河北农民
+http://ls.qingting.fm/live/1650.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北农民" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%86%9C%E6%B0%91.png",河北农民
+https://event.pull.hebtv.com/jishi/nongminpindao.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北农民" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%86%9C%E6%B0%91.png",河北农民
+https://live.lalifeier.eu.org/hebtv/hbnm.m3u8?t=1745774515&key=fec9ea387b470ccb0dc8e6e0e5b36bec
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北农民" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%86%9C%E6%B0%91.png",河北农民
+https://live.lalifeier.eu.org/hebtv/hbnm.m3u8?t=1746292937&key=9dc8fc082e1d72b74063dfc2bc945e16
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北农民" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%86%9C%E6%B0%91.png",河北农民
+https://live.lalifeier.eu.org/hebtv/hbnm.m3u8?t=1746307365&key=f8b778466518d5f6d89b1a38fcbea28d
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北农民" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%86%9C%E6%B0%91.png",河北农民
+https://live.lalifeier.eu.org/hebtv/hbnm.m3u8?t=1746379256&key=3505bde88f415af4e966dafa916ad8ae
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北农民" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%86%9C%E6%B0%91.png",河北农民
+https://live.lalifeier.eu.org/hebtv/hbnm.m3u8?t=1746393735&key=34100a9736334c36296dd0d2a32def60
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北农民" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%86%9C%E6%B0%91.png",河北农民
+https://stream1.freetv.fun/he-bei-nong-min-3.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="河北农民" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%86%9C%E6%B0%91.png",河北农民
+https://stream1.freetv.fun/he-bei-nong-min-7.ctv
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="昌黎综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%98%8C%E9%BB%8E%E7%BB%BC%E5%90%88.png",昌黎综合
+https://jwcdnqx.hebyun.com.cn/live/clzhpd/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="任丘文娱" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BB%BB%E4%B8%98%E6%96%87%E5%A8%B1.png",任丘文娱
+https://jwcdnqx.hebyun.com.cn/live/rqtv2/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="任丘综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BB%BB%E4%B8%98%E7%BB%BC%E5%90%88.png",任丘综合
+https://jwcdnqx.hebyun.com.cn/live/rqtv1/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="兴隆综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%85%B4%E9%9A%86%E7%BB%BC%E5%90%88.png",兴隆综合
+https://jwcdnqx.hebyun.com.cn/live/xlzh/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="平泉影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%B3%E6%B3%89%E5%BD%B1%E8%A7%86.png",平泉影视
+https://jwcdnqx.hebyun.com.cn/live/pqys/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="平泉综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%B3%E6%B3%89%E7%BB%BC%E5%90%88.png",平泉综合
+https://jwcdnqx.hebyun.com.cn/live/pqzh/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="昌黎" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%98%8C%E9%BB%8E.png",昌黎
+https://jwcdnqx.hebyun.com.cn/live/clzhpd/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="清河新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B8%85%E6%B2%B3%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",清河新闻综合
+https://jwcdnqx.hebyun.com.cn/live/qinghe/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️河北频道" tvg-name="清河经济综艺" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B8%85%E6%B2%B3%E7%BB%8F%E6%B5%8E%E7%BB%BC%E8%89%BA.png",清河经济综艺
+https://jwcdnqx.hebyun.com.cn/live/qinghe1/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="☘️贵州频道" tvg-name="安顺新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E9%A1%BA%E6%96%B0%E9%97%BB.png",安顺新闻
+http://hplayer1.juyun.tv/camera/154379194.m3u8
+#EXTINF:-1 group-title="☘️贵州频道" tvg-name="安顺新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E9%A1%BA%E6%96%B0%E9%97%BB.png",安顺新闻
+https://ls.qingting.fm/live/5022203/64k.m3u8
+#EXTINF:-1 group-title="☘️甘肃频道" tvg-name="甘肃经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E7%BB%8F%E6%B5%8E.png",甘肃经济
+https://hls.gstv.com.cn/49048r/10iv1j.m3u8
+#EXTINF:-1 group-title="☘️甘肃频道" tvg-name="甘肃公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%85%AC%E5%85%B1.png",甘肃公共
+https://hls.gstv.com.cn/49048r/3t5xyc.m3u8
+#EXTINF:-1 group-title="☘️甘肃频道" tvg-name="甘肃都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E9%83%BD%E5%B8%82.png",甘肃都市
+https://hls.gstv.com.cn/49048r/l54391.m3u8
+#EXTINF:-1 group-title="☘️甘肃频道" tvg-name="嘉峪关综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%98%89%E5%B3%AA%E5%85%B3%E7%BB%BC%E5%90%88.png",嘉峪关综合
+http://play.kankanlive.com/live/1720583434627241.m3u8
+#EXTINF:-1 group-title="☘️甘肃频道" tvg-name="张掖新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%A0%E6%8E%96%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",张掖新闻综合
+https://play.kankanlive.com/live/1720583434627241.m3u8
+#EXTINF:-1 group-title="☘️甘肃频道" tvg-name="成县综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%88%90%E5%8E%BF%E7%BB%BC%E5%90%88.png",成县综合
+https://play.kankanlive.com/live/1702454377323961.m3u8
+#EXTINF:-1 group-title="☘️甘肃频道" tvg-name="渭源新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B8%AD%E6%BA%90%E6%96%B0%E9%97%BB.png",渭源新闻
+http://play.kankanlive.com/live/1720408280309109.m3u8
+#EXTINF:-1 group-title="☘️甘肃频道" tvg-name="甘肃少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%B0%91%E5%84%BF.png",甘肃少儿
+https://hls.gstv.com.cn/49048r/922k96.m3u8
+#EXTINF:-1 group-title="☘️甘肃频道" tvg-name="甘肃少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%B0%91%E5%84%BF.png",甘肃少儿
+https://3ee63cd9178a070a2db29f77915c49d4.livehwc3.cn/play.kankanlive.com/live/1702033926169975.m3u8
+#EXTINF:-1 group-title="☘️甘肃频道" tvg-name="白银综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%99%BD%E9%93%B6%E7%BB%BC%E5%90%88.png",白银综合
+http://play.kankanlive.com/live/1720408089419110.m3u8
+#EXTINF:-1 group-title="☘️甘肃频道" tvg-name="白银综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%99%BD%E9%93%B6%E7%BB%BC%E5%90%88.png",白银综合
+https://play.kankanlive.com/live/1720408089419110.m3u8
+#EXTINF:-1 group-title="☘️甘肃频道" tvg-name="西和综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%92%8C%E7%BB%BC%E5%90%88.png",西和综合
+https://play.kankanlive.com/live/1659926941626981.m3u8
+#EXTINF:-1 group-title="☘️甘肃频道" tvg-name="酒泉综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%85%92%E6%B3%89%E7%BB%BC%E5%90%88.png",酒泉综合
+https://3ee63cd9178a070a2db29f77915c49d4.livehwc3.cn/play.kankanlive.com/live/1702033926169975.m3u8
+#EXTINF:-1 group-title="☘️新疆频道" tvg-name="哈密一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%AF%86%E4%B8%80%E5%A5%97.png",哈密一套
+https://tvpull.hmgbtv.com/hmtv/channel9cd66b3d5d258b2b.flv
+#EXTINF:-1 group-title="☘️新疆频道" tvg-name="哈密二套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%AF%86%E4%BA%8C%E5%A5%97.png",哈密二套
+https://tvpull.hmgbtv.com/hmtv/channel108259412c6a6711/playlist.m3u8
+#EXTINF:-1 group-title="☘️新疆频道" tvg-name="哈密三套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%AF%86%E4%B8%89%E5%A5%97.png",哈密三套
+https://tvpull.hmgbtv.com/hmtv/channelfb0e5c505477aa44/playlist.m3u8
+#EXTINF:-1 group-title="☘️新疆频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221225635
+#EXTINF:-1 group-title="☘️新疆频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://z.b.bkpcp.top/m.php?id=xjws
+#EXTINF:-1 group-title="☘️新疆频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://j.x.bkpcp.top/jx/XJWS
+#EXTINF:-1 group-title="☘️新疆频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://goo.bkpcp.top/mg/xjws
+#EXTINF:-1 group-title="☘️新疆频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887448.m3u8
+#EXTINF:-1 group-title="☘️新疆频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225635/index.m3u8
+#EXTINF:-1 group-title="☘️新疆频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+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
+#EXTINF:-1 group-title="☘️新疆频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226460/index.m3u8
+#EXTINF:-1 group-title="☘️新疆频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226546/1.m3u8
+#EXTINF:-1 group-title="☘️新疆频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226923/1.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%B0%91%E5%84%BF.png",山东少儿
+https://stream1.freetv.fun/shan-dong-shao-er-6.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%B0%91%E5%84%BF.png",山东少儿
+https://stream1.freetv.fun/shan-dong-shao-er-2.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%B0%91%E5%84%BF.png",山东少儿
+https://stream1.freetv.fun/shan-dong-shao-er-9.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%B0%91%E5%84%BF.png",山东少儿
+http://livealone302.iqilu.com/iqilu/sepd.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%B0%91%E5%84%BF.png",山东少儿
+https://stream1.freetv.fun/shan-dong-shao-er-1.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%B0%91%E5%84%BF.png",山东少儿
+https://stream1.freetv.fun/shan-dong-shao-er-4.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%B0%91%E5%84%BF.png",山东少儿
+https://stream1.freetv.fun/shan-dong-shao-er-8.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%B0%91%E5%84%BF.png",山东少儿
+https://stream1.freetv.fun/shan-dong-shao-er-10.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%B0%91%E5%84%BF.png",山东少儿
+https://stream1.freetv.fun/shan-dong-shao-er-5.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%B0%91%E5%84%BF.png",山东少儿
+https://stream1.freetv.fun/shan-dong-shao-er-7.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E6%96%B0%E9%97%BB.png",山东新闻
+http://live.xmcdn.com/live/1440/64.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E6%96%B0%E9%97%BB.png",山东新闻
+https://stream1.freetv.fun/shan-dong-xin-wen-8.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E6%96%B0%E9%97%BB.png",山东新闻
+https://stream1.freetv.fun/shan-dong-xin-wen-1.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E6%96%B0%E9%97%BB.png",山东新闻
+https://stream1.freetv.fun/shan-dong-xin-wen-4.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E6%96%B0%E9%97%BB.png",山东新闻
+https://stream1.freetv.fun/shan-dong-xin-wen-6.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E6%96%B0%E9%97%BB.png",山东新闻
+https://stream1.freetv.fun/shan-dong-xin-wen-10.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E6%96%B0%E9%97%BB.png",山东新闻
+https://stream1.freetv.fun/shan-dong-xin-wen-2.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E6%96%B0%E9%97%BB.png",山东新闻
+http://ls.qingting.fm/live/60180.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E6%96%B0%E9%97%BB.png",山东新闻
+http://livealone302.iqilu.com/iqilu/ggpd.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E6%96%B0%E9%97%BB.png",山东新闻
+https://stream1.freetv.fun/shan-dong-xin-wen-7.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E6%95%99%E8%82%B2.png",山东教育
+http://z.b.bkpcp.top/m.php?id=sdjy
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E6%95%99%E8%82%B2.png",山东教育
+http://goo.bkpcp.top/mg/sdjy
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E6%95%99%E8%82%B2.png",山东教育
+http://iptv.huuc.edu.cn/hls/sdetv.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E6%95%99%E8%82%B2.png",山东教育
+http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226701/1.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东居家购物" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%B1%85%E5%AE%B6%E8%B4%AD%E7%89%A9.png",山东居家购物
+http://livealone302.iqilu.com/iqilu/gwpd.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东农科" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%86%9C%E7%A7%91.png",山东农科
+http://livealone302.iqilu.com/iqilu/nkpd.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东齐鲁" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E9%BD%90%E9%B2%81.png",山东齐鲁
+http://livealone302.iqilu.com/iqilu/qlpd.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E7%94%9F%E6%B4%BB.png",山东生活
+http://ls.qingting.fm/live/60260.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E7%94%9F%E6%B4%BB.png",山东生活
+http://livealone302.iqilu.com/iqilu/shpd.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+http://satellitepull.cnr.cn/live/wxsdtyxxgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://satellitepull.cnr.cn/live/wxsdtyxxgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-8.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-18.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-19.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-4.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-23.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-15.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+http://livealone302.iqilu.com/iqilu/typd.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-7.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东综艺" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E7%BB%BC%E8%89%BA.png",山东综艺
+http://livealone302.iqilu.com/iqilu/zypd.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="济南综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%8E%E5%8D%97%E7%BB%BC%E5%90%88.png",济南综合
+https://stream1.freetv.fun/ji-nan-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="济南综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%8E%E5%8D%97%E7%BB%BC%E5%90%88.png",济南综合
+https://stream1.freetv.fun/ji-nan-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="济南综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%8E%E5%8D%97%E7%BB%BC%E5%90%88.png",济南综合
+https://stream1.freetv.fun/ji-nan-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="济南新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%8E%E5%8D%97%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",济南新闻综合
+https://stream1.freetv.fun/ji-nan-xin-wen-zong-he-7.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="济南新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%8E%E5%8D%97%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",济南新闻综合
+https://stream1.freetv.fun/ipv6-ji-nan-xin-wen-zong-he-8.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="济南教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%8E%E5%8D%97%E6%95%99%E8%82%B2.png",济南教育
+https://stream1.freetv.fun/ji-nan-jiao-yu-1.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="日照公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A5%E7%85%A7%E5%85%AC%E5%85%B1.png",日照公共
+http://live.rzw.com.cn/kzpd/sd/live.m3u8?shandd
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="日照新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A5%E7%85%A7%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",日照新闻综合
+http://live.rzw.com.cn/xwzh/sd/live.m3u8?shandd
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="日照科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A5%E7%85%A7%E7%A7%91%E6%95%99.png",日照科教
+http://live.rzw.com.cn/ggpd/sd/live.m3u8?shandd
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="潍坊新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BD%8D%E5%9D%8A%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",潍坊新闻综合
+https://stream1.freetv.fun/ipv6-wei-fang-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="潍坊新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BD%8D%E5%9D%8A%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",潍坊新闻综合
+https://stream1.freetv.fun/ipv6-wei-fang-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="五台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%94%E5%8F%B0%E7%BB%BC%E5%90%88.png",五台综合
+https://568slnjf.live.sxmty.com/live/hls/90c8b2efeb164cc0a6c2409eed668d6b/f77cbb89ec57435b9ba4c47589c16e4f-1.m3u8
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="五台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%94%E5%8F%B0%E7%BB%BC%E5%90%88.png",五台综合
+https://568slnjf.live.sxmty.com/live/hls/90c8b2efeb164cc0a6c2409eed668d6b/f77cbb89ec57435b9ba4c47589c16e4f-1.m3u8?zshanxd
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="五台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%94%E5%8F%B0%E7%BB%BC%E5%90%88.png",五台综合
+https://568slnjf.live.sxmty.com/live/hls/90c8b2efeb164cc0a6c2409eed668d6b/f77cbb89ec57435b9ba4c47589c16e4f-1.m3u8?zshanxd&quot;
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="古县综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8F%A4%E5%8E%BF%E7%BB%BC%E5%90%88.png",古县综合
+https://l2fpdktp.live.sxmty.com/live/hls/e4c3b363cc4549788e2d983f403e07db/d99ce1eb686e41b9afc888110bd95aa7.m3u8?zshanxd
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="太谷新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%AA%E8%B0%B7%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",太谷新闻综合
+https://p2.vzan.com/slowlive/596867413819827251/live.m3u8?zbid=1725814272&tpid=1516989100&type=0
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="太谷新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%AA%E8%B0%B7%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",太谷新闻综合
+https://p2.vzan.com/slowlive/596867413819827251/live.m3u8?zbid=1725814272&tpid=1516989100&type=0
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="定襄综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%9A%E8%A5%84%E7%BB%BC%E5%90%88.png",定襄综合
+http://lbyzztfe.live.sxmty.com/live/hls/645ff4c60e0a49f0a203abbd73dd8be9/0720e665f10f48e98c9639f4f492fb4a-1.m3u8?zshanxd
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%BD%B1%E8%A7%86.png",山西影视
+https://live.lalifeier.eu.org/sxrtv/sxys.m3u8?t=1745796321&key=0721c661fb4b291613b070d85d8af084
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%BD%B1%E8%A7%86.png",山西影视
+https://live.lalifeier.eu.org/sxrtv/sxys.m3u8?t=1746307365&key=a8b9568fc8b9a14d097cb74c31fed7ed
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%BD%B1%E8%A7%86.png",山西影视
+https://live.lalifeier.eu.org/sxrtv/sxys.m3u8?t=1746739480&key=fd1183aefcdce4619903e0d10d8de72a
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%BD%B1%E8%A7%86.png",山西影视
+https://live.lalifeier.eu.org/sxrtv/sxys.m3u8?t=1746782860&key=a8f0d638d8a684e085af26c8c4eb6145
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%BD%B1%E8%A7%86.png",山西影视
+https://live.lalifeier.eu.org/sxrtv/sxys.m3u8?t=1746825793&key=450ea9eaa1453bb67aa01073a994648f
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%BD%B1%E8%A7%86.png",山西影视
+https://live.lalifeier.eu.org/sxrtv/sxys.m3u8?t=1746894586&key=73695eb2df46d11e20cb1fc6ee223620
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%BD%B1%E8%A7%86.png",山西影视
+https://live.lalifeier.eu.org/sxrtv/sxys.m3u8?t=1746912103&key=e238171d14680bceaeb7ef24ec9006c4
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%BD%B1%E8%A7%86.png",山西影视
+https://live.lalifeier.eu.org/sxrtv/sxys.m3u8?t=1746955518&key=fda6ad2e5256fd40de740c612cc2a25d
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%BD%B1%E8%A7%86.png",山西影视
+https://live.lalifeier.eu.org/sxrtv/sxys.m3u8?t=1746998549&key=679b4a1f9fcaf36339d523717ec01d0c
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%BD%B1%E8%A7%86.png",山西影视
+https://live.lalifeier.eu.org/sxrtv/sxys.m3u8?t=1747085050&key=13cb75cc4308da5f219dfc577747c9d1
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西文体生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E6%96%87%E4%BD%93%E7%94%9F%E6%B4%BB.png",山西文体生活
+https://live.lalifeier.eu.org/sxrtv/sxwtsh.m3u8?t=1745796321&key=5d07585f428e3bbbe66ef7a534c8db1e
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西文体生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E6%96%87%E4%BD%93%E7%94%9F%E6%B4%BB.png",山西文体生活
+https://live.lalifeier.eu.org/sxrtv/sxwtsh.m3u8?t=1746307365&key=1cf53f641a43923de396153d3e9e40b6
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西文体生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E6%96%87%E4%BD%93%E7%94%9F%E6%B4%BB.png",山西文体生活
+https://live.lalifeier.eu.org/sxrtv/sxwtsh.m3u8?t=1746393735&key=ef71ca0281e5b344d896cad03a642087
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西文体生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E6%96%87%E4%BD%93%E7%94%9F%E6%B4%BB.png",山西文体生活
+https://live.lalifeier.eu.org/sxrtv/sxwtsh.m3u8?t=1746739480&key=1e99e4e3afb45f5b37b9628c02a67e9c
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西文体生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E6%96%87%E4%BD%93%E7%94%9F%E6%B4%BB.png",山西文体生活
+https://live.lalifeier.eu.org/sxrtv/sxwtsh.m3u8?t=1746782860&key=71ef64431d275eb633b8f941bc634f72
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西文体生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E6%96%87%E4%BD%93%E7%94%9F%E6%B4%BB.png",山西文体生活
+https://live.lalifeier.eu.org/sxrtv/sxwtsh.m3u8?t=1746825793&key=5142858c802757f04dcc637cb4d85f30
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西文体生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E6%96%87%E4%BD%93%E7%94%9F%E6%B4%BB.png",山西文体生活
+https://live.lalifeier.eu.org/sxrtv/sxwtsh.m3u8?t=1746894586&key=c6a5f1f5f996b2aabb55a5cdf52e4d2a
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西文体生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E6%96%87%E4%BD%93%E7%94%9F%E6%B4%BB.png",山西文体生活
+https://live.lalifeier.eu.org/sxrtv/sxwtsh.m3u8?t=1746912103&key=5c65e72df2b709f053313a6b2cbc9527
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西文体生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E6%96%87%E4%BD%93%E7%94%9F%E6%B4%BB.png",山西文体生活
+https://live.lalifeier.eu.org/sxrtv/sxwtsh.m3u8?t=1746955518&key=a6c711577151ae68c81ba837b68d3c85
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西文体生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E6%96%87%E4%BD%93%E7%94%9F%E6%B4%BB.png",山西文体生活
+https://live.lalifeier.eu.org/sxrtv/sxwtsh.m3u8?t=1746998549&key=493ed7e4e9490eec3f2395bf390e8ff5
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西社会与法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%A4%BE%E4%BC%9A%E4%B8%8E%E6%B3%95%E6%B2%BB.png",山西社会与法治
+https://live.lalifeier.eu.org/sxrtv/sxshfz.m3u8?t=1745796321&key=71bbd0d7dc1eb84139ebea659e164651
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西社会与法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%A4%BE%E4%BC%9A%E4%B8%8E%E6%B3%95%E6%B2%BB.png",山西社会与法治
+https://live.lalifeier.eu.org/sxrtv/sxshfz.m3u8?t=1746307365&key=9694e5e21a889c83c54bbf66c0e524a0
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西社会与法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%A4%BE%E4%BC%9A%E4%B8%8E%E6%B3%95%E6%B2%BB.png",山西社会与法治
+https://live.lalifeier.eu.org/sxrtv/sxshfz.m3u8?t=1746393735&key=cf4f8ab07efd070291584465074e9386
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西社会与法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%A4%BE%E4%BC%9A%E4%B8%8E%E6%B3%95%E6%B2%BB.png",山西社会与法治
+https://live.lalifeier.eu.org/sxrtv/sxshfz.m3u8?t=1746739480&key=130acdaaceca0cb4c1908e9c62f198f6
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西社会与法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%A4%BE%E4%BC%9A%E4%B8%8E%E6%B3%95%E6%B2%BB.png",山西社会与法治
+https://live.lalifeier.eu.org/sxrtv/sxshfz.m3u8?t=1746782860&key=ebef35c2611b5fa53739dd5a43ff56a2
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西社会与法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%A4%BE%E4%BC%9A%E4%B8%8E%E6%B3%95%E6%B2%BB.png",山西社会与法治
+https://live.lalifeier.eu.org/sxrtv/sxshfz.m3u8?t=1746825793&key=ef2ea843ce172cf34ec4babdac487a02
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西社会与法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%A4%BE%E4%BC%9A%E4%B8%8E%E6%B3%95%E6%B2%BB.png",山西社会与法治
+https://live.lalifeier.eu.org/sxrtv/sxshfz.m3u8?t=1746894586&key=5b2f72e7f8d290e267468ea0edf545f5
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西社会与法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%A4%BE%E4%BC%9A%E4%B8%8E%E6%B3%95%E6%B2%BB.png",山西社会与法治
+https://live.lalifeier.eu.org/sxrtv/sxshfz.m3u8?t=1746912103&key=d065d576a4cdaceb01c54b906f00b1aa
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西社会与法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%A4%BE%E4%BC%9A%E4%B8%8E%E6%B3%95%E6%B2%BB.png",山西社会与法治
+https://live.lalifeier.eu.org/sxrtv/sxshfz.m3u8?t=1746955518&key=68f1cf509d7e9ac18257b8961fa1d137
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西社会与法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%A4%BE%E4%BC%9A%E4%B8%8E%E6%B3%95%E6%B2%BB.png",山西社会与法治
+https://live.lalifeier.eu.org/sxrtv/sxshfz.m3u8?t=1746998549&key=eeacb192b8da97be8afc5170199c63b3
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%BB%8F%E6%B5%8E.png",山西经济
+https://live.lalifeier.eu.org/sxrtv/sxjj.m3u8?t=1745796321&key=f20ee9d210e6bb63a4a7d65e67bdec2b
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%BB%8F%E6%B5%8E.png",山西经济
+https://live.lalifeier.eu.org/sxrtv/sxjj.m3u8?t=1746307365&key=9efd994033ee8bd840c01f930811f94a
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%BB%8F%E6%B5%8E.png",山西经济
+https://live.lalifeier.eu.org/sxrtv/sxjj.m3u8?t=1746739480&key=b9cddd868005403a67c2222c55e276ec
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%BB%8F%E6%B5%8E.png",山西经济
+https://live.lalifeier.eu.org/sxrtv/sxjj.m3u8?t=1746782860&key=299077551840c4371caa9029cbf5c09b
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%BB%8F%E6%B5%8E.png",山西经济
+https://live.lalifeier.eu.org/sxrtv/sxjj.m3u8?t=1746825793&key=75d19f84d6471c5d0be786cc9cbf3a69
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%BB%8F%E6%B5%8E.png",山西经济
+https://live.lalifeier.eu.org/sxrtv/sxjj.m3u8?t=1746894586&key=ddac6d4d99eb13dbaa5f3abd96089612
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%BB%8F%E6%B5%8E.png",山西经济
+https://live.lalifeier.eu.org/sxrtv/sxjj.m3u8?t=1746912103&key=017e66ad91ac046adbab917d141af774
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%BB%8F%E6%B5%8E.png",山西经济
+https://live.lalifeier.eu.org/sxrtv/sxjj.m3u8?t=1746955518&key=7402757d1e9dfdea97791b731d81c50f
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%BB%8F%E6%B5%8E.png",山西经济
+https://live.lalifeier.eu.org/sxrtv/sxjj.m3u8?t=1746998549&key=b8bdf3ad88f1851832a4f068e3494cd5
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="山西经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E7%BB%8F%E6%B5%8E.png",山西经济
+https://live.lalifeier.eu.org/sxrtv/sxjj.m3u8?t=1747085050&key=2ad6b4b00575498ce63ec10cbe48374f
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="平遥新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%B3%E9%81%A5%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",平遥新闻综合
+https://tntgjhjb.live.sxmty.com/live/hls/3a4585ac11ec4e1bb07b419101b370c3/baf63e2b313440c2a25d7859f9b73b05-1.m3u8?zshanxd
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="怀仁综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%80%80%E4%BB%81%E7%BB%BC%E5%90%88.png",怀仁综合
+https://1yp7hc5p.live.sxmty.com/live/hls/bff8529922344209985b6e49baa9555a/efa2543628fc4a7ea93d3d6c975f77dc-1.m3u8
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="怀仁综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%80%80%E4%BB%81%E7%BB%BC%E5%90%88.png",怀仁综合
+http://1yp7hc5p.live.sxmty.com/live/hls/bff8529922344209985b6e49baa9555a/efa2543628fc4a7ea93d3d6c975f77dc.m3u8?zshanxd
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="武乡新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E4%B9%A1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",武乡新闻综合
+http://uzoiczhh.live.sxmty.com/live/hls/0d41f1480c4042d49927858f01fde707/53130407737b417b9a6259b57246bae3.m3u8?zshanxd
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="武乡新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E4%B9%A1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",武乡新闻综合
+https://stream1.freetv.fun/wu-xiang-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="武乡新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E4%B9%A1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",武乡新闻综合
+https://stream1.freetv.fun/wu-xiang-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="武乡新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E4%B9%A1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",武乡新闻综合
+https://stream1.freetv.fun/wu-xiang-xin-wen-zong-he-4.m3u8
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="武乡新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E4%B9%A1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",武乡新闻综合
+https://stream1.freetv.fun/wu-xiang-xin-wen-zong-he-5.m3u8
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="汾西综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%BE%E8%A5%BF%E7%BB%BC%E5%90%88.png",汾西综合
+https://qmmqvzoz.live.sxmty.com/live/hls/f24f8a390c084386a564074c9260100c/be3fdf07606145739ab2c4b80fe0136a.m3u8?zshanxd
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="祁县新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A5%81%E5%8E%BF%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",祁县新闻综合
+http://ggpagerl.live.sxmty.com/live/hls/b350dc1ac5da45c2b2233f6eb122ddf4/49d3766c7f204685a2a8f027b234c33d.m3u8?zshanxd
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="运城科技教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BF%90%E5%9F%8E%E7%A7%91%E6%8A%80%E6%95%99%E8%82%B2.png",运城科技教育
+https://stream1.freetv.fun/yun-cheng-ke-ji-jiao-yu-1.m3u8
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="运城科技教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BF%90%E5%9F%8E%E7%A7%91%E6%8A%80%E6%95%99%E8%82%B2.png",运城科技教育
+https://stream1.freetv.fun/yun-cheng-ke-ji-jiao-yu-2.m3u8
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="长子综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%95%BF%E5%AD%90%E7%BB%BC%E5%90%88.png",长子综合
+https://83awgyp5.live.sxmty.com/live/hls/6f6f4b36f9bd42628b718b595ba507ed/724b7e8907a8414d873eb2a2f69bfa18.m3u8?zshanxd
+#EXTINF:-1 group-title="☘️山西频道" tvg-name="阳曲综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%98%B3%E6%9B%B2%E7%BB%BC%E5%90%88.png",阳曲综合
+https://83awgyp5.live.sxmty.com/live/hls/6f6f4b36f9bd42628b718b595ba507ed/724b7e8907a8414d873eb2a2f69bfa18.m3u8?zshanxd
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%9B%BD%E9%99%85.png",安徽国际
+https://live.lalifeier.eu.org/ahtv/ahgj.m3u8?t=1746739480&key=a8bd0a3629825fcf4f5968abb0808239
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%9B%BD%E9%99%85.png",安徽国际
+https://live.lalifeier.eu.org/ahtv/ahgj.m3u8?t=1746782860&key=518c9df6090a21278c4b976880a247fe
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%9B%BD%E9%99%85.png",安徽国际
+https://live.lalifeier.eu.org/ahtv/ahgj.m3u8?t=1746825793&key=5b1e13b046f517a4ab04f24b4073e258
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%9B%BD%E9%99%85.png",安徽国际
+https://live.lalifeier.eu.org/ahtv/ahgj.m3u8?t=1746894586&key=4ef5d193911199b414e30195e5da4121
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%9B%BD%E9%99%85.png",安徽国际
+https://live.lalifeier.eu.org/ahtv/ahgj.m3u8?t=1746912103&key=2241fb9cdf9ddcaa8bc8ff4aa8fcfdc2
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%9B%BD%E9%99%85.png",安徽国际
+https://live.lalifeier.eu.org/ahtv/ahgj.m3u8?t=1746955518&key=a021e39e7339f6c32c7a786114bb52f8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%9B%BD%E9%99%85.png",安徽国际
+https://live.lalifeier.eu.org/ahtv/ahgj.m3u8?t=1746998549&key=387f347b5b9aa53781d58834350a991a
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%9B%BD%E9%99%85.png",安徽国际
+https://live.lalifeier.eu.org/ahtv/ahgj.m3u8?t=1747085050&key=56296ccf36d519e2f1a3c9348cd31630
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%9B%BD%E9%99%85.png",安徽国际
+https://live.lalifeier.eu.org/ahtv/ahgj.m3u8?t=1747128617&key=b1892d85e0c2c48e75623f760c0ab6a0
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%9B%BD%E9%99%85.png",安徽国际
+https://live.lalifeier.eu.org/ahtv/ahgj.m3u8?t=1747171448&key=ddb960c0f81c29194c7db244b8db91a2
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%BD%B1%E8%A7%86.png",安徽影视
+https://live.lalifeier.eu.org/ahtv/ahys.m3u8?t=1746739480&key=f93acc4b6fcda2b8c77343bc915ed39e
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%BD%B1%E8%A7%86.png",安徽影视
+https://live.lalifeier.eu.org/ahtv/ahys.m3u8?t=1746782860&key=a71a2d77ca1bea4f110035ccf7d28e16
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%BD%B1%E8%A7%86.png",安徽影视
+https://live.lalifeier.eu.org/ahtv/ahys.m3u8?t=1746825793&key=4e12022989ce7d4fbe07d37f6f01ffbc
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%BD%B1%E8%A7%86.png",安徽影视
+https://live.lalifeier.eu.org/ahtv/ahys.m3u8?t=1746894586&key=a180911b43d2e4ff4029cf1a8d718922
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%BD%B1%E8%A7%86.png",安徽影视
+https://live.lalifeier.eu.org/ahtv/ahys.m3u8?t=1746912103&key=d67b3e2f0a3f7e96095d7bea1f6554ed
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%BD%B1%E8%A7%86.png",安徽影视
+https://live.lalifeier.eu.org/ahtv/ahys.m3u8?t=1746955518&key=e01b3d9e6e21cf83cdc5401205caf273
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%BD%B1%E8%A7%86.png",安徽影视
+https://live.lalifeier.eu.org/ahtv/ahys.m3u8?t=1746998549&key=e75f1668feed4cfcb724ad03d2781a28
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%BD%B1%E8%A7%86.png",安徽影视
+https://live.lalifeier.eu.org/ahtv/ahys.m3u8?t=1747085050&key=1073807cd29002a75933c55623db0809
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%BD%B1%E8%A7%86.png",安徽影视
+https://live.lalifeier.eu.org/ahtv/ahys.m3u8?t=1747128617&key=f31f92dd5848444ac373c35c1ff7123c
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%BD%B1%E8%A7%86.png",安徽影视
+https://live.lalifeier.eu.org/ahtv/ahys.m3u8?t=1747171448&key=0bde84c76e29f7582e944565fcdf8439
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",安徽经济生活
+https://live.lalifeier.eu.org/ahtv/ahjjsh.m3u8?t=1745774515&key=a93a5e1794618b8f0038e5d4206cb748
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",安徽经济生活
+https://live.lalifeier.eu.org/ahtv/ahjjsh.m3u8?t=1746292937&key=79ac954604c0abc146445a9603966f0a
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",安徽经济生活
+https://live.lalifeier.eu.org/ahtv/ahjjsh.m3u8?t=1746307365&key=eacbd8c7b284760ddec25b1dc3992bad
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",安徽经济生活
+https://stream1.freetv.fun/an-hui-jing-ji-sheng-huo-4.ctv
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",安徽经济生活
+https://stream1.freetv.fun/an-hui-jing-ji-sheng-huo-5.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",安徽经济生活
+https://stream1.freetv.fun/an-hui-jing-ji-sheng-huo-6.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",安徽经济生活
+https://stream1.freetv.fun/an-hui-jing-ji-sheng-huo-9.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",安徽经济生活
+https://live.lalifeier.eu.org/ahtv/ahjjsh.m3u8?t=1746725062&key=1feff62b20e13453e2d3e2f78f5cb279
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",安徽经济生活
+https://live.lalifeier.eu.org/ahtv/ahjjsh.m3u8?t=1746739480&key=a3dfd5296cbaa4fc4a0e457c4610edf6
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",安徽经济生活
+https://live.lalifeier.eu.org/ahtv/ahjjsh.m3u8?t=1746775525&key=46485d13b58cc203aefa31f141d35395
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://live.lalifeier.eu.org/ahtv/ahzyty.m3u8?t=1745774515&key=27009aec794adc785b22478c5aa2ae16
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://live.lalifeier.eu.org/ahtv/ahzyty.m3u8?t=1746292937&key=940b0f98a121c28884c74971efaac4de
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://live.lalifeier.eu.org/ahtv/ahzyty.m3u8?t=1746307365&key=6b104d1fc66c5b34b63d0e19c627e0f9
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://stream1.freetv.fun/an-hui-zong-yi-ti-yu-4.ctv
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://stream1.freetv.fun/an-hui-zong-yi-ti-yu-5.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://stream1.freetv.fun/an-hui-zong-yi-ti-yu-6.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://stream1.freetv.fun/an-hui-zong-yi-ti-yu-8.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://live.lalifeier.eu.org/ahtv/ahzyty.m3u8?t=1746725062&key=4fd742e193737a1cfe3c3dfa3973e299
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://live.lalifeier.eu.org/ahtv/ahzyty.m3u8?t=1746739480&key=d9527b9d7ce3a70d8e81d3f27965213f
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://live.lalifeier.eu.org/ahtv/ahzyty.m3u8?t=1746775525&key=fab8cb8fa94cd29ea294c635fb944f88
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="黄山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%84%E5%B1%B1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",黄山新闻综合
+http://hslive.hsnewsnet.com/lsdream/hve9Wjs/1000/live.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="黄山公共生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%84%E5%B1%B1%E5%85%AC%E5%85%B1%E7%94%9F%E6%B4%BB.png",黄山公共生活
+http://hslive.hsnewsnet.com/lsdream/iY92ady/1000/live.m3u8?zanhd
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="铜陵新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%93%9C%E9%99%B5%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",铜陵新闻综合
+https://ls.qingting.fm/live/21303/64k.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="祁门综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A5%81%E9%97%A8%E7%BB%BC%E5%90%88.png",祁门综合
+http://live.cztv.cc:85/live/sjpd.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E7%A7%91%E6%95%99.png",滁州科教
+http://live.cztv.cc:85/live/sjpd.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E7%A7%91%E6%95%99.png",滁州科教
+http://live.cztv.cc:85/live/sjpd.m3u8?zanhd
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",滁州新闻综合
+http://live.cztv.cc:85/live/xwpd.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",滁州新闻综合
+http://live.cztv.cc:85/live/xwpd.m3u8?zanhd
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",滁州新闻综合
+http://live.cztv.cc:85/live/xwpd.m3u8#http://live.cztv.cc:85/live/xwpd.m3u8?zanhd
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州市广播电视台 新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E5%B8%82%E5%B9%BF%E6%92%AD%E7%94%B5%E8%A7%86%E5%8F%B0+%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",滁州市广播电视台 新闻综合
+http://live.cztv.cc:85/live/xwpd.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E5%85%AC%E5%85%B1.png",滁州公共
+http://live.cztv.cc:85/live/ggpd.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E5%85%AC%E5%85%B1.png",滁州公共
+http://live.cztv.cc:85/live/ggpd.m3u8?zanhd
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="宿州科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%BF%E5%B7%9E%E7%A7%91%E6%95%99.png",宿州科教
+rtmp://live.ahsz.tv/video/s10001-kxjy
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="宿州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%BF%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",宿州新闻综合
+rtmp://live.ahsz.tv/video?token=5ee5b1c3db702657f412ed18d270cdb7/s10001-szzh
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="宿州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%BF%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",宿州新闻综合
+http://live.ahsz.tv/video/s10001-szzh/index.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="宿州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%BF%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",宿州新闻综合
+http://live.ahsz.tv/video/s10001-szzh/index.m3u8?zanhd
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="宿州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%BF%E5%B7%9E%E5%85%AC%E5%85%B1.png",宿州公共
+http://live.ahsz.tv/video/s10001-ggpd/index.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="六安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%85%AD%E5%AE%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",六安新闻综合
+http://ls.qingting.fm/live/267.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="六安公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%85%AD%E5%AE%89%E5%85%AC%E5%85%B1.png",六安公共
+http://ls.qingting.fm/live/1794199.m3u8
+#EXTINF:-1 group-title="☘️安徽频道" tvg-name="亳州农村" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%B3%E5%B7%9E%E5%86%9C%E6%9D%91.png",亳州农村
+http://zbbf2.ahbztv.com/live/418.m3u8?zanhd
+#EXTINF:-1 group-title="☘️宁夏频道" tvg-name="宁夏经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%81%E5%A4%8F%E7%BB%8F%E6%B5%8E.png",宁夏经济
+https://ls.qingting.fm/live/1841/64k.m3u8
+#EXTINF:-1 group-title="☘️宁夏频道" tvg-name="银川生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%93%B6%E5%B7%9D%E7%94%9F%E6%B4%BB.png",银川生活
+http://play-a2.quklive.com/live/1667883987087179.m3u8
+#EXTINF:-1 group-title="☘️宁夏频道" tvg-name="银川公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%93%B6%E5%B7%9D%E5%85%AC%E5%85%B1.png",银川公共
+http://play-a2.quklive.com/live/1667883943560053.m3u8
+#EXTINF:-1 group-title="☘️宁夏频道" tvg-name="银川文体" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%93%B6%E5%B7%9D%E6%96%87%E4%BD%93.png",银川文体
+http://play-a2.quklive.com/live/1667884025738071.m3u8
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
+http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001470/index.m3u8
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
+https://stream1.freetv.fun/d2ea3a364fa453b29060ebccb5a06a1941755859c0182ab0f071473c08738fc2.m3u8
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
+https://stream1.freetv.fun/yan-bian-wei-shi-16.m3u8
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
+https://stream1.freetv.fun/yan-bian-wei-shi-15.m3u8
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
+http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
+http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226516/index.m3u8
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221227045/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eq0D3NdTUN7FuRzr8eJsbQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
+http://tvbox6.com/tv/bfgd.php?id=117
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E9%83%BD%E5%B8%82.png",吉林都市
+https://live.lalifeier.eu.org/jlntv/jlds.m3u8?t=1745796321&key=ba85da6410cdc8b830d46c3182ad7775
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E9%83%BD%E5%B8%82.png",吉林都市
+https://live.lalifeier.eu.org/jlntv/jlds.m3u8?t=1746307365&key=85abbfb19768c29f883db499d3c1114f
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E9%83%BD%E5%B8%82.png",吉林都市
+https://live.lalifeier.eu.org/jlntv/jlds.m3u8?t=1746739480&key=6c2f26f5202f61d90bc0d9b23b01c137
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E9%83%BD%E5%B8%82.png",吉林都市
+https://live.lalifeier.eu.org/jlntv/jlds.m3u8?t=1746782860&key=68f36448bb1bd917e81d003fdbadd326
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E9%83%BD%E5%B8%82.png",吉林都市
+https://live.lalifeier.eu.org/jlntv/jlds.m3u8?t=1746825793&key=579bae88e1e81efd086c785ebc559e2e
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E9%83%BD%E5%B8%82.png",吉林都市
+https://live.lalifeier.eu.org/jlntv/jlds.m3u8?t=1746894586&key=11fd4a191abce8eeb0c6aef33de8142b
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E9%83%BD%E5%B8%82.png",吉林都市
+https://live.lalifeier.eu.org/jlntv/jlds.m3u8?t=1746912103&key=b364f0a7c24ece821aac79d7f267d4c7
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E9%83%BD%E5%B8%82.png",吉林都市
+https://live.lalifeier.eu.org/jlntv/jlds.m3u8?t=1746955518&key=22090c7101a00bc9835acf289ce67983
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E9%83%BD%E5%B8%82.png",吉林都市
+https://live.lalifeier.eu.org/jlntv/jlds.m3u8?t=1746998549&key=4ba2db565491549914a1a8d3a216027c
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E9%83%BD%E5%B8%82.png",吉林都市
+https://live.lalifeier.eu.org/jlntv/jlds.m3u8?t=1747085050&key=86d50257584917b9b85e6620e5993f01
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E7%94%9F%E6%B4%BB.png",吉林生活
+https://live.lalifeier.eu.org/jlntv/jlsh.m3u8?t=1745796321&key=8386cb03e732cd707a483bb89f1216af
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E7%94%9F%E6%B4%BB.png",吉林生活
+https://live.lalifeier.eu.org/jlntv/jlsh.m3u8?t=1746307365&key=3501231d172e510eec2f039a508df51d
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E7%94%9F%E6%B4%BB.png",吉林生活
+https://live.lalifeier.eu.org/jlntv/jlsh.m3u8?t=1746739480&key=6041b0053a9baed6657e727b4ea8f0ce
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E7%94%9F%E6%B4%BB.png",吉林生活
+https://live.lalifeier.eu.org/jlntv/jlsh.m3u8?t=1746782860&key=20d9af367e2dfe2afe8b07a3a654aac4
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E7%94%9F%E6%B4%BB.png",吉林生活
+https://live.lalifeier.eu.org/jlntv/jlsh.m3u8?t=1746825793&key=baa7272850339fdb4248475b7dceed19
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E7%94%9F%E6%B4%BB.png",吉林生活
+https://live.lalifeier.eu.org/jlntv/jlsh.m3u8?t=1746894586&key=5a74eabf30c3b491e51338cee71492b7
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E7%94%9F%E6%B4%BB.png",吉林生活
+https://live.lalifeier.eu.org/jlntv/jlsh.m3u8?t=1746912103&key=4b81312c374b1ccc0004f09a6f6832ce
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E7%94%9F%E6%B4%BB.png",吉林生活
+https://live.lalifeier.eu.org/jlntv/jlsh.m3u8?t=1746955518&key=2c2822bdc85be81c1b8c3e99c663c322
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E7%94%9F%E6%B4%BB.png",吉林生活
+https://live.lalifeier.eu.org/jlntv/jlsh.m3u8?t=1746998549&key=676c1325b233dccba376c6e765951699
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E7%94%9F%E6%B4%BB.png",吉林生活
+https://live.lalifeier.eu.org/jlntv/jlsh.m3u8?t=1747085050&key=555e5d035fe227c21444eb312ea0ca51
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林乡村" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E4%B9%A1%E6%9D%91.png",吉林乡村
+https://live.lalifeier.eu.org/jlntv/jlxc.m3u8?t=1745796321&key=b26baf2d67026a93e41fcbbd3f132bc3
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林乡村" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E4%B9%A1%E6%9D%91.png",吉林乡村
+https://live.lalifeier.eu.org/jlntv/jlxc.m3u8?t=1746307365&key=c561c31cdce71c6e8e33914bfc43027f
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林乡村" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E4%B9%A1%E6%9D%91.png",吉林乡村
+https://live.lalifeier.eu.org/jlntv/jlxc.m3u8?t=1746393735&key=9d6ca0a9c59b1876be2ef4320b7283d8
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林乡村" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E4%B9%A1%E6%9D%91.png",吉林乡村
+https://live.lalifeier.eu.org/jlntv/jlxc.m3u8?t=1746739480&key=dde7142825cdd8737e3e2bebfff0e616
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林乡村" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E4%B9%A1%E6%9D%91.png",吉林乡村
+https://live.lalifeier.eu.org/jlntv/jlxc.m3u8?t=1746782860&key=90ce4160416c837f611b772a32abfa17
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林乡村" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E4%B9%A1%E6%9D%91.png",吉林乡村
+https://live.lalifeier.eu.org/jlntv/jlxc.m3u8?t=1746825793&key=42d3e386e1d1adba85935e9fcb4d4555
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林乡村" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E4%B9%A1%E6%9D%91.png",吉林乡村
+https://live.lalifeier.eu.org/jlntv/jlxc.m3u8?t=1746894586&key=936b430f303a32e1e3e30555d0a07a3c
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林乡村" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E4%B9%A1%E6%9D%91.png",吉林乡村
+https://live.lalifeier.eu.org/jlntv/jlxc.m3u8?t=1746912103&key=194bf6275950f70026e790f77a66635f
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林乡村" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E4%B9%A1%E6%9D%91.png",吉林乡村
+https://live.lalifeier.eu.org/jlntv/jlxc.m3u8?t=1746955518&key=97cf498922784627e655d0f4c4ae80da
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林乡村" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E4%B9%A1%E6%9D%91.png",吉林乡村
+https://live.lalifeier.eu.org/jlntv/jlxc.m3u8?t=1746998549&key=c95f2d6525e5462cf50af0169297ab5f
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="长白朝语" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%95%BF%E7%99%BD%E6%9C%9D%E8%AF%AD.png",长白朝语
+http://hplayer1.juyun.tv:80/camera/11344136.m3u8
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="珲春新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%8F%B2%E6%98%A5%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",珲春新闻综合
+https://stream1.freetv.fun/hun-chun-xin-wen-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️内蒙古频道" tvg-name="内蒙经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E7%BB%8F%E6%B5%8E.png",内蒙经济
+https://satellitepull.cnr.cn/live/wx32nmgjjgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️内蒙古频道" tvg-name="内蒙经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E7%BB%8F%E6%B5%8E.png",内蒙经济
+https://ls.qingting.fm/live/1885/64k.m3u8
+#EXTINF:-1 group-title="☘️内蒙古频道" tvg-name="内蒙古经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E7%BB%8F%E6%B5%8E%E7%94%9F%E6%B4%BB.png",内蒙古经济生活
+https://ls.qingting.fm/live/1885/64k.m3u8
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="文山州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%87%E5%B1%B1%E5%B7%9E%E5%85%AC%E5%85%B1.png",文山州公共
+http://m3u8.channel.wsrtv.com.cn/cms/videos/nmip-media/channellive/channel8/playlist.m3u8
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="文山州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%87%E5%B1%B1%E5%B7%9E%E5%85%AC%E5%85%B1.png",文山州公共
+http://m3u8.channel.wsrtv.com.cn/cms/videos/nmip-media/channellive/channel8/playlist.m3u8?zyund
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="文山州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%87%E5%B1%B1%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",文山州新闻综合
+http://m3u8.channel.wsrtv.com.cn/cms/videos/nmip-media/channellive/channel7/playlist.m3u8?zyund
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="昆明公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%98%86%E6%98%8E%E5%85%AC%E5%85%B1.png",昆明公共
+http://wshls.live.migucloud.com/live/UD0YLY2G_C0_3/playlist.m3u8
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="昆明科学教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%98%86%E6%98%8E%E7%A7%91%E5%AD%A6%E6%95%99%E8%82%B2.png",昆明科学教育
+http://wshls.live.migucloud.com/live/ZBXWIMTD_C0_2/playlist.m3u8
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E9%83%BD%E5%B8%82.png",云南都市
+https://live.lalifeier.eu.org/yntv/ynds.m3u8?t=1746739480&key=453c0884a7b501a80d7ccb044637999a
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E9%83%BD%E5%B8%82.png",云南都市
+https://live.lalifeier.eu.org/yntv/ynds.m3u8?t=1746782860&key=6724d02d49e0f76cd5bd6d37981fe7ef
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E9%83%BD%E5%B8%82.png",云南都市
+https://live.lalifeier.eu.org/yntv/ynds.m3u8?t=1746825793&key=4e01176586d57257d23e9e6596713524
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E9%83%BD%E5%B8%82.png",云南都市
+https://live.lalifeier.eu.org/yntv/ynds.m3u8?t=1746894586&key=79a16c43bcca8f095cff6159011e9a3c
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E9%83%BD%E5%B8%82.png",云南都市
+https://live.lalifeier.eu.org/yntv/ynds.m3u8?t=1746912103&key=d6dbca3b4cc026a2e9f1cffea3792565
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E9%83%BD%E5%B8%82.png",云南都市
+https://live.lalifeier.eu.org/yntv/ynds.m3u8?t=1746955518&key=e8c20d3634b8dbc93ec5ea419fa76901
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E9%83%BD%E5%B8%82.png",云南都市
+https://live.lalifeier.eu.org/yntv/ynds.m3u8?t=1746998549&key=5631c2e374f54d9735579094bbe8296b
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E9%83%BD%E5%B8%82.png",云南都市
+https://live.lalifeier.eu.org/yntv/ynds.m3u8?t=1747085050&key=b5d06790a277b5d1fc202752d411012b
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E9%83%BD%E5%B8%82.png",云南都市
+https://live.lalifeier.eu.org/yntv/ynds.m3u8?t=1747128617&key=29bb5b2a04ddc8e754b88e6ed824b7c8
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E9%83%BD%E5%B8%82.png",云南都市
+https://live.lalifeier.eu.org/yntv/ynds.m3u8?t=1747171448&key=ce20ab3a18f219814a07c95d2e96e3f8
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%A8%B1%E4%B9%90.png",云南娱乐
+https://live.lalifeier.eu.org/yntv/ynyl.m3u8?t=1746739480&key=05deb98788413ff6dd5b513d8bd20a05
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%A8%B1%E4%B9%90.png",云南娱乐
+https://live.lalifeier.eu.org/yntv/ynyl.m3u8?t=1746782860&key=f2d3ae2c22d99c526c12e6b8663b2c74
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%A8%B1%E4%B9%90.png",云南娱乐
+https://live.lalifeier.eu.org/yntv/ynyl.m3u8?t=1746825793&key=fd0e345f87728132870d38344dd76d4e
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%A8%B1%E4%B9%90.png",云南娱乐
+https://live.lalifeier.eu.org/yntv/ynyl.m3u8?t=1746894586&key=74e743110e6681acdf99d6fb101510a2
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%A8%B1%E4%B9%90.png",云南娱乐
+https://live.lalifeier.eu.org/yntv/ynyl.m3u8?t=1746912103&key=50a4b15a9f469555da47e102b91d5e79
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%A8%B1%E4%B9%90.png",云南娱乐
+https://live.lalifeier.eu.org/yntv/ynyl.m3u8?t=1746955518&key=31ab5cd732a777243459aa511d41ee1d
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%A8%B1%E4%B9%90.png",云南娱乐
+https://live.lalifeier.eu.org/yntv/ynyl.m3u8?t=1746998549&key=bfe87bcedd7443b1a3337f0de882548e
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%A8%B1%E4%B9%90.png",云南娱乐
+https://live.lalifeier.eu.org/yntv/ynyl.m3u8?t=1747085050&key=8ea6bbc94cdbd5bc8f17e661752cc518
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%A8%B1%E4%B9%90.png",云南娱乐
+https://live.lalifeier.eu.org/yntv/ynyl.m3u8?t=1747128617&key=1991c63d886e787a123d6d7be6bd1bc2
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%A8%B1%E4%B9%90.png",云南娱乐
+https://live.lalifeier.eu.org/yntv/ynyl.m3u8?t=1747171448&key=6cc0c308736314205c8df6cd3319f288
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%B0%91%E5%84%BF.png",云南少儿
+https://live.lalifeier.eu.org/yntv/ynse.m3u8?t=1746739480&key=bc165c1854372a20a8018ad4929d1cdb
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%B0%91%E5%84%BF.png",云南少儿
+https://live.lalifeier.eu.org/yntv/ynse.m3u8?t=1746782860&key=07a964f850f80508947fb617e9264f6c
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%B0%91%E5%84%BF.png",云南少儿
+https://live.lalifeier.eu.org/yntv/ynse.m3u8?t=1746825793&key=90b1f7e8bc9047191d87b22ea1bfe31e
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%B0%91%E5%84%BF.png",云南少儿
+https://live.lalifeier.eu.org/yntv/ynse.m3u8?t=1746894586&key=b95e880fe526bec5bc10658e1bf9b5bb
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%B0%91%E5%84%BF.png",云南少儿
+https://live.lalifeier.eu.org/yntv/ynse.m3u8?t=1746912103&key=3dfc82a0cd777e2c61ad87e8eeffed10
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%B0%91%E5%84%BF.png",云南少儿
+https://live.lalifeier.eu.org/yntv/ynse.m3u8?t=1746955518&key=1913c6f419105d02f2335a33d4719dde
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%B0%91%E5%84%BF.png",云南少儿
+https://live.lalifeier.eu.org/yntv/ynse.m3u8?t=1746998549&key=a4abd32d1df7daa64c9c2bd1a57f5f65
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%B0%91%E5%84%BF.png",云南少儿
+https://live.lalifeier.eu.org/yntv/ynse.m3u8?t=1747085050&key=e37b0d97e68104cb26be1d2c7b1b9f4d
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%B0%91%E5%84%BF.png",云南少儿
+https://live.lalifeier.eu.org/yntv/ynse.m3u8?t=1747128617&key=dabe27b8c637ef7ce4bebf3070118eb9
+#EXTINF:-1 group-title="☘️云南频道" tvg-name="云南少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%B0%91%E5%84%BF.png",云南少儿
+https://live.lalifeier.eu.org/yntv/ynse.m3u8?t=1747171448&key=fc89e947c392985f6820045a974ebc0b
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%A4%9A%E5%8D%AB%E8%A7%86.png",安多卫视
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221225659
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%A4%9A%E5%8D%AB%E8%A7%86.png",安多卫视
+https://liveout.xntv.tv/a65jur/96iln2.m3u8
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%A4%9A%E5%8D%AB%E8%A7%86.png",安多卫视
+https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%A4%9A%E5%8D%AB%E8%A7%86.png",安多卫视
+rtmp://liveout.xntv.tv/a65jur/96iln2
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%A4%9A%E5%8D%AB%E8%A7%86.png",安多卫视
+https://stream1.freetv.fun/52d0df257c5c3cec42f2ae19268dbbc261256ff391b27bd83553bea941d0c186.m3u8
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%A4%9A%E5%8D%AB%E8%A7%86.png",安多卫视
+http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%A4%9A%E5%8D%AB%E8%A7%86.png",安多卫视
+http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225659/index.m3u8
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%A4%9A%E5%8D%AB%E8%A7%86.png",安多卫视
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%A4%9A%E5%8D%AB%E8%A7%86.png",安多卫视
+https://liveout.xntv.tv/a65jur/96iln2.m3u8#@http://cm-wshls.homecdn.com/live/5a296.dlv#@http://dtrmlive.qhdtrm.cn/xnds/sd/live.m3u8#@http://cm-wshls.homecdn.com/live/5a296.m3u8#rtmp://liveout.xntv.tv/a65jur/96iln2
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%A4%9A%E5%8D%AB%E8%A7%86.png",安多卫视
+http://tv.scjyhd.com:4022/udp/239.11.0.124:5140
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",西宁新闻综合
+https://liveout.xntv.tv/a65jur/96iln2.m3u8
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",西宁新闻综合
+https://liveout.xntv.tv/a65jur/96iln2.m3u8?zqinghd
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",西宁新闻综合
+https://stream1.freetv.fun/xi-zhu-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",西宁新闻综合
+https://stream1.freetv.fun/xi-zhu-xin-wen-zong-he-2.m3u8
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",西宁新闻综合
+https://stream1.freetv.fun/xi-zhu-xin-wen-zong-he-3.m3u8
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",西宁新闻综合
+https://stream1.freetv.fun/zhu-xia--xi-zhu-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",西宁新闻综合
+rtmp://liveout.xntv.tv/a65jur/96iln2
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",西宁新闻综合
+https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd#https://liveout.xntv.tv/a65jur/90p2i1.m3u8#http://dtrmlive.qhdtrm.cn/xnds/sd/live.m3u8
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",西宁新闻综合
+https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁生活服务" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E7%94%9F%E6%B4%BB%E6%9C%8D%E5%8A%A1.png",西宁生活服务
+https://liveout.xntv.tv/a65jur/90p2i1.m3u8
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁生活服务" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E7%94%9F%E6%B4%BB%E6%9C%8D%E5%8A%A1.png",西宁生活服务
+https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁生活服务" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E7%94%9F%E6%B4%BB%E6%9C%8D%E5%8A%A1.png",西宁生活服务
+https://stream1.freetv.fun/xi-zhu-sheng-huo-fu-wu-1.m3u8
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁生活服务" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E7%94%9F%E6%B4%BB%E6%9C%8D%E5%8A%A1.png",西宁生活服务
+https://stream1.freetv.fun/xi-zhu-sheng-huo-fu-wu-2.m3u8
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁生活服务" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E7%94%9F%E6%B4%BB%E6%9C%8D%E5%8A%A1.png",西宁生活服务
+https://stream1.freetv.fun/xi-zhu-sheng-huo-fu-wu-3.m3u8
+#EXTINF:-1 group-title="☘️青海频道" tvg-name="青海综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E7%BB%BC%E5%90%88.png",青海综合
+http://lmt.scqstv.com/live1/live1.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江文体" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%87%E4%BD%93.png",黑龙江文体
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226239
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江文体" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%87%E4%BD%93.png",黑龙江文体
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226239/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江文体" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%87%E4%BD%93.png",黑龙江文体
+http://[2409:8087:1a01:df::4025]:80/TVOD/88888888/224/3221225965/main.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江文体" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%87%E4%BD%93.png",黑龙江文体
+http://[2409:8087:1a01:df::4025]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226239/1.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江文体" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%87%E4%BD%93.png",黑龙江文体
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226239/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江文体" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%87%E4%BD%93.png",黑龙江文体
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226239/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江文体" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%87%E4%BD%93.png",黑龙江文体
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226239/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江文体" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%87%E4%BD%93.png",黑龙江文体
+https://stream1.freetv.fun/hei-long-jiang-wen-ti-1.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江文体" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%87%E4%BD%93.png",黑龙江文体
+https://stream1.freetv.fun/hei-long-jiang-wen-ti-18.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江文体" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%87%E4%BD%93.png",黑龙江文体
+https://stream1.freetv.fun/hei-long-jiang-wen-ti-7.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江新闻法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%B0%E9%97%BB%E6%B3%95%E6%B2%BB.png",黑龙江新闻法治
+http://satellitepull.cnr.cn/live/wx32hljxwgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江新闻法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%B0%E9%97%BB%E6%B3%95%E6%B2%BB.png",黑龙江新闻法治
+https://satellitepull.cnr.cn/live/wx32hljxwgb/playlist.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江新闻法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%B0%E9%97%BB%E6%B3%95%E6%B2%BB.png",黑龙江新闻法治
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226330
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江新闻法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%B0%E9%97%BB%E6%B3%95%E6%B2%BB.png",黑龙江新闻法治
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226330/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江新闻法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%B0%E9%97%BB%E6%B3%95%E6%B2%BB.png",黑龙江新闻法治
+http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225967/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江新闻法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%B0%E9%97%BB%E6%B3%95%E6%B2%BB.png",黑龙江新闻法治
+https://ls.qingting.fm/live/4974/64k.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江新闻法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%B0%E9%97%BB%E6%B3%95%E6%B2%BB.png",黑龙江新闻法治
+https://stream1.freetv.fun/hei-long-jiang-xin-wen-fa-zhi-4.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江新闻法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%B0%E9%97%BB%E6%B3%95%E6%B2%BB.png",黑龙江新闻法治
+https://stream1.freetv.fun/hei-long-jiang-xin-wen-fa-zhi-5.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江新闻法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%B0%E9%97%BB%E6%B3%95%E6%B2%BB.png",黑龙江新闻法治
+https://stream1.freetv.fun/hei-long-jiang-xin-wen-fa-zhi-6.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江新闻法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%B0%E9%97%BB%E6%B3%95%E6%B2%BB.png",黑龙江新闻法治
+https://stream1.freetv.fun/hei-long-jiang-xin-wen-fa-zhi-7.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%BD%B1%E8%A7%86.png",黑龙江影视
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226298
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%BD%B1%E8%A7%86.png",黑龙江影视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226298/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%BD%B1%E8%A7%86.png",黑龙江影视
+http://[2409:8087:1a01:df::4035]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226298/1.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%BD%B1%E8%A7%86.png",黑龙江影视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226298/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%BD%B1%E8%A7%86.png",黑龙江影视
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226298/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%BD%B1%E8%A7%86.png",黑龙江影视
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226298/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%BD%B1%E8%A7%86.png",黑龙江影视
+https://stream1.freetv.fun/hei-long-jiang-ying-shi-1.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%BD%B1%E8%A7%86.png",黑龙江影视
+https://stream1.freetv.fun/hei-long-jiang-ying-shi-17.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%BD%B1%E8%A7%86.png",黑龙江影视
+https://stream1.freetv.fun/hei-long-jiang-ying-shi-7.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%BD%B1%E8%A7%86.png",黑龙江影视
+https://stream1.freetv.fun/hei-long-jiang-ying-shi-8.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E9%83%BD%E5%B8%82.png",黑龙江都市
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226301
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E9%83%BD%E5%B8%82.png",黑龙江都市
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226301/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E9%83%BD%E5%B8%82.png",黑龙江都市
+http://[2409:8087:1a01:df::4025]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226301/1.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E9%83%BD%E5%B8%82.png",黑龙江都市
+http://[2409:8087:1a01:df::4055]:80/TVOD/88888888/224/3221225969/main.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E9%83%BD%E5%B8%82.png",黑龙江都市
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226301/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E9%83%BD%E5%B8%82.png",黑龙江都市
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226301/1.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E9%83%BD%E5%B8%82.png",黑龙江都市
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226301/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E9%83%BD%E5%B8%82.png",黑龙江都市
+https://stream1.freetv.fun/hei-long-jiang-du-shi-1.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E9%83%BD%E5%B8%82.png",黑龙江都市
+https://stream1.freetv.fun/hei-long-jiang-du-shi-12.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E9%83%BD%E5%B8%82.png",黑龙江都市
+https://stream1.freetv.fun/hei-long-jiang-du-shi-7.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",黑龙江少儿
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226304
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",黑龙江少儿
+https://ls.qingting.fm/live/4972/64k.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",黑龙江少儿
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226304/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",黑龙江少儿
+http://[2409:8087:1a01:df::4035]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226304/1.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",黑龙江少儿
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226304/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",黑龙江少儿
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226304/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",黑龙江少儿
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226304/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",黑龙江少儿
+https://stream1.freetv.fun/hei-long-jiang-shao-er-2.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",黑龙江少儿
+https://stream1.freetv.fun/hei-long-jiang-shao-er-8.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",黑龙江少儿
+https://stream1.freetv.fun/ipv6-hei-long-jiang-shao-er-1.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%B0%E9%97%BB.png",黑龙江新闻
+https://ls.qingting.fm/live/4974/64k.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E7%A7%91%E6%95%99.png",黑龙江科教
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226242/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="哈尔滨新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%B0%94%E6%BB%A8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",哈尔滨新闻综合
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226434
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="哈尔滨新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%B0%94%E6%BB%A8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",哈尔滨新闻综合
+https://stream1.freetv.fun/ha-er-bin-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="哈尔滨新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%B0%94%E6%BB%A8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",哈尔滨新闻综合
+https://stream1.freetv.fun/ha-er-bin-xin-wen-zong-he-4.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="大庆新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A7%E5%BA%86%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",大庆新闻综合
+https://stream1.freetv.fun/da-qing-xin-wen-zong-he-1.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="鹤岗新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%B9%A4%E5%B2%97%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",鹤岗新闻综合
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226534
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="鹤岗新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%B9%A4%E5%B2%97%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",鹤岗新闻综合
+http://[2409:8087:1a01:df::4059]:80/TVOD/88888888/224/3221226073/main.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="鹤岗新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%B9%A4%E5%B2%97%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",鹤岗新闻综合
+http://[2409:8087:1a01:df::4060]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226534/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="佳木斯新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%B3%E6%9C%A8%E6%96%AF%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",佳木斯新闻综合
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226451
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="佳木斯新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%B3%E6%9C%A8%E6%96%AF%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",佳木斯新闻综合
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226451/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="齐齐哈尔新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BD%90%E9%BD%90%E5%93%88%E5%B0%94%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",齐齐哈尔新闻综合
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226437
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="齐齐哈尔新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BD%90%E9%BD%90%E5%93%88%E5%B0%94%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",齐齐哈尔新闻综合
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226437/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="齐齐哈尔经济法制" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BD%90%E9%BD%90%E5%93%88%E5%B0%94%E7%BB%8F%E6%B5%8E%E6%B3%95%E5%88%B6.png",齐齐哈尔经济法制
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226555/index.m3u8
+#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="双鸭山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8F%8C%E9%B8%AD%E5%B1%B1%E7%BB%BC%E5%90%88.png",双鸭山综合
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226529/index.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
+http://117.12.149.38:4022/rtp/225.1.1.213:5002
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
+http://111.162.205.201:8686/rtp/225.1.1.213:5002
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
+http://60.26.181.220:4022/rtp/225.1.1.213:5002
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
+http://gat.bkpcp.top/ymg.php?id=jtyy
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
+http://goo.bkpcp.top/mg/jtyy
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
+http://z.b.bkpcp.top/m.php?id=jtyy
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807601b19dd/index.m3u8?m3u8_level=2
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
+http://eastscreen.tv/ooooo.php
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
+https://www.freetv.top/migu/644368373.m3u8?migutoken=b9d9d0ba0208e949cf0736455b86290b2d1d2ff4727f523b7117dde6eb883cb4582c5ce1519685e57d54bfb562057c10a00dde58bb674d8600fd2d918b8cb440294e083e7b8f19e0dbcc9250d8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
+https://stream1.freetv.fun/chcjia-ting-ying-yuan-1.ctv
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
+http://60.26.181.220:4022/rtp/225.1.1.215:5002
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
+http://z.b.bkpcp.top/m.php
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
+http://goo.bkpcp.top/mg/dzdy
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
+http://z.b.bkpcp.top/m.php?id=dzdy
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226329/1.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
+http://[2409:8087:1a01:df::4021]:80/TVOD/88888888/224/3221225555/main.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380763222d00/index.m3u8?m3u8_level=2
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
+http://[2409:8087:3c02:0021:0000:0001:0000:100a]:6410/shandong_cabletv.live.zte.com////CHANNEL00002030/index.m3u8?IASHttpSessionId=
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
+http://data.3g.yy.com/live/hls/1382735573/1382735573
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
+https://www.freetv.top/migu/644368714.m3u8?migutoken=2e48d18419793654f347e8ca29e0028ce9f3eaaa7a108b006304178b8f790f34908f8a09bbb8f4b8b8abcf36e2341f1043dde8719cf4927fcd0dcde4667f8b91e68e820314791d9b70452862c9
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC高清电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E9%AB%98%E6%B8%85%E7%94%B5%E5%BD%B1.png",CHC高清电影
+http://[2409:8087:7001:20:2::3]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226463/index.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC高清电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E9%AB%98%E6%B8%85%E7%94%B5%E5%BD%B1.png",CHC高清电影
+http://[2409:8087:4c0d:22:2::157]:6610/170000001115/UmaiCHAN6380764b172c9/1.m3u8?m3u8_level=2
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC高清电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E9%AB%98%E6%B8%85%E7%94%B5%E5%BD%B1.png",CHC高清电影
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380764b172c9/index.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC高清电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E9%AB%98%E6%B8%85%E7%94%B5%E5%BD%B1.png",CHC高清电影
+http://dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226463/1.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="淘剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%98%E5%89%A7%E5%9C%BA.png",淘剧场
+http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226553/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EQaJ92NID2SpQlY6_VJVogg%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNOuQYJeiYEeFWTkFfE86Vq-%2CEND
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="淘剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%98%E5%89%A7%E5%9C%BA.png",淘剧场
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887497.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="淘娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%98%E5%A8%B1%E4%B9%90.png",淘娱乐
+http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226551/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ex0efg9fpenP8E8lWJUb5Lg%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNg3bzRax0E9tLmO9xgXVx8%2CEND
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="淘娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%98%E5%A8%B1%E4%B9%90.png",淘娱乐
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887499.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="淘电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%98%E7%94%B5%E5%BD%B1.png",淘电影
+http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226552/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EXOsrWMA-UCdUl1hQSR9EKw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNg3bzRax0E9tLmO9xgXVx8%2CEND
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="淘电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%98%E7%94%B5%E5%BD%B1.png",淘电影
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887498.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="淘电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%98%E7%94%B5%E5%BD%B1.png",淘电影
+http://yc.myds.me:35455/bptv/10000100000000050000000003887498.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="淘电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%98%E7%94%B5%E5%BD%B1.png",淘电影
+https://stream1.freetv.fun/tao-dian-ying-3.ctv
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="淘电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%98%E7%94%B5%E5%BD%B1.png",淘电影
+https://stream1.freetv.fun/tao-dian-ying-8.ctv
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="淘电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%98%E7%94%B5%E5%BD%B1.png",淘电影
+https://stream1.freetv.fun/tao-dian-ying-15.ctv
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="淘电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%98%E7%94%B5%E5%BD%B1.png",淘电影
+https://stream1.freetv.fun/tao-dian-ying-7.ctv
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="淘电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%98%E7%94%B5%E5%BD%B1.png",淘电影
+https://stream1.freetv.fun/tao-dian-ying-7.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="淘电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%98%E7%94%B5%E5%BD%B1.png",淘电影
+https://stream1.freetv.fun/ipv6-tao-dian-ying-5.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="淘电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%98%E7%94%B5%E5%BD%B1.png",淘电影
+https://stream1.freetv.fun/tao-dian-ying-6.ctv
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="NewTV惊悚悬疑" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/NewTV%E6%83%8A%E6%82%9A%E6%82%AC%E7%96%91.png",NewTV惊悚悬疑
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010077
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="NewTV惊悚悬疑" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/NewTV%E6%83%8A%E6%82%9A%E6%82%AC%E7%96%91.png",NewTV惊悚悬疑
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="NewTV动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/NewTV%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",NewTV动作电影
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010003
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E7%94%B5%E5%BD%B1.png",黑莓电影
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010073
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E7%94%B5%E5%BD%B1.png",黑莓电影
+https://epg.pw/stream/ffcb6572863f0745a7369fbd9d901f1dfd0ab8fab8bad8bebb4e01c90b303c47.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E7%94%B5%E5%BD%B1.png",黑莓电影
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E7%94%B5%E5%BD%B1.png",黑莓电影
+http://[2409:8087:1a01:df::4001]:80/TVOD/88888888/224/3221225681/main.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E7%94%B5%E5%BD%B1.png",黑莓电影
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E7%94%B5%E5%BD%B1.png",黑莓电影
+http://[2409:8087:2001:20:2800:0:df6e:eb08]/ott.mobaibox.com/PLTV/3/224/3221227520/index.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E7%94%B5%E5%BD%B1.png",黑莓电影
+http://[2409:8087:1:20:20::27]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E7%94%B5%E5%BD%B1.png",黑莓电影
+http://[2409:8087:1:20:20::27]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E7%94%B5%E5%BD%B1.png",黑莓电影
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225764/2/index.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E7%94%B5%E5%BD%B1.png",黑莓电影
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225769/2/index.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天映画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%98%A0%E7%94%BB.png",靖天映画
+https://cdn.iptv8k.top/dl/jrys.php?id=320&amp;time=20240926215313&amp;ip=111.229.253.40
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天映画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%98%A0%E7%94%BB.png",靖天映画
+https://cdn.iptv8k.top/dl/jrys.php?id=320&time=20240926215313&ip=111.229.253.40
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天映画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%98%A0%E7%94%BB.png",靖天映画
+https://cdn.iptv8k.top/dl/jrys.php?id=320&amp;amp;time=20240926215313&amp;amp;ip=111.229.253.40
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天映画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%98%A0%E7%94%BB.png",靖天映画
+https://tv.iill.top/litv/4gtv-4gtv055
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%88%8F%E5%89%A7.png",靖天戏剧
+https://cdn.iptv8k.top/dl/jrys.php?id=318&time=20240926215313&ip=111.229.253.40
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%88%8F%E5%89%A7.png",靖天戏剧
+https://cdn.iptv8k.top/dl/jrys.php?id=318&amp;time=20240926215313&amp;ip=111.229.253.40
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%88%8F%E5%89%A7.png",靖天戏剧
+https://cdn.iptv8k.top/dl/jrys.php?id=318&time=20240926215313&ip=111.229.253.40
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%88%8F%E5%89%A7.png",靖天戏剧
+http://serv00.bkpcp.top/litv3.php?id=4gtv-4gtv058
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%88%8F%E5%89%A7.png",靖天戏剧
+https://tv.iill.top/litv/4gtv-4gtv058
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="经典电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8F%E5%85%B8%E7%94%B5%E5%BD%B1.png",经典电影
+https://cdn.iptv8k.top/dl/jrys.php?id=396&time=20240926215313&ip=111.229.253.40
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="经典电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8F%E5%85%B8%E7%94%B5%E5%BD%B1.png",经典电影
+http://goo.bkpcp.top/mg/jdxgdy
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="经典电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8F%E5%85%B8%E7%94%B5%E5%BD%B1.png",经典电影
+https://tv.iill.top/4gtv/201
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="经典电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8F%E5%85%B8%E7%94%B5%E5%BD%B1.png",经典电影
+https://stream1.freetv.fun/jing-dian-dian-ying-2.ctv
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="经典电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8F%E5%85%B8%E7%94%B5%E5%BD%B1.png",经典电影
+https://stream1.freetv.fun/jing-dian-dian-ying-7.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="经典电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8F%E5%85%B8%E7%94%B5%E5%BD%B1.png",经典电影
+https://stream1.freetv.fun/jing-dian-dian-ying-8.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="经典电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8F%E5%85%B8%E7%94%B5%E5%BD%B1.png",经典电影
+https://stream1.freetv.fun/jing-dian-dian-ying-9.ctv
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="经典电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8F%E5%85%B8%E7%94%B5%E5%BD%B1.png",经典电影
+https://stream1.freetv.fun/jing-dian-dian-ying-3.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="经典电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8F%E5%85%B8%E7%94%B5%E5%BD%B1.png",经典电影
+https://stream1.freetv.fun/jing-dian-dian-ying-6.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="经典电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8F%E5%85%B8%E7%94%B5%E5%BD%B1.png",经典电影
+https://stream1.freetv.fun/jing-dian-dian-ying-8.ctv
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="天映经典" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%98%A0%E7%BB%8F%E5%85%B8.png",天映经典
+https://cdn.iptv8k.top/dl/jrys.php?id=71&time=20240926215313&ip=111.229.253.40
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="天映经典" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%98%A0%E7%BB%8F%E5%85%B8.png",天映经典
+https://cdn.iptv8k.top/dl/jrys.php?id=71&time=20240926215313&ip=111.229.253.40
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="天映经典" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%98%A0%E7%BB%8F%E5%85%B8.png",天映经典
+http://php.jdshipin.com/smt.php
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="天映经典" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%98%A0%E7%BB%8F%E5%85%B8.png",天映经典
+http://j.s.bkpcp.top/jj/tyjd
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="天映经典" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%98%A0%E7%BB%8F%E5%85%B8.png",天映经典
+http://j.s.bkpcp.top/js/tyjd5
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="天映经典" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%98%A0%E7%BB%8F%E5%85%B8.png",天映经典
+http://j.s.bkpcp.top/js/tyjd
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="天映经典" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%98%A0%E7%BB%8F%E5%85%B8.png",天映经典
+http://j.s.bkpcp.top/js/tyjd1
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="天映经典" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%98%A0%E7%BB%8F%E5%85%B8.png",天映经典
+http://tl.061833.xyz/tl/null-1
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="天映经典" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%98%A0%E7%BB%8F%E5%85%B8.png",天映经典
+http://j.s.bkpcp.top/js/tyjd2
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="天映经典" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%98%A0%E7%BB%8F%E5%85%B8.png",天映经典
+https://live.tvfix.org/live/tyjd/index.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="无线星河" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E7%BA%BF%E6%98%9F%E6%B2%B3.png",无线星河
+http://php.jdshipin.com/smt.php?id=Xinhe
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="星空卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%98%9F%E7%A9%BA%E5%8D%AB%E8%A7%86.png",星空卫视
+https://cdn.iptv8k.top/dl/jrys.php?id=21&time=20240926215313&ip=111.229.253.40
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="星空卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%98%9F%E7%A9%BA%E5%8D%AB%E8%A7%86.png",星空卫视
+https://stream1.freetv.fun/xing-kong-wei-shi-4.ctv
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="星空卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%98%9F%E7%A9%BA%E5%8D%AB%E8%A7%86.png",星空卫视
+https://stream1.freetv.fun/xing-kong-wei-shi-14.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="星空卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%98%9F%E7%A9%BA%E5%8D%AB%E8%A7%86.png",星空卫视
+https://stream1.freetv.fun/xing-kong-wei-shi-11.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="星空卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%98%9F%E7%A9%BA%E5%8D%AB%E8%A7%86.png",星空卫视
+https://stream1.freetv.fun/xing-kong-wei-shi-10.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E7%94%B5%E5%BD%B1.png",东森电影
+https://cdn.iptv8k.top/dl/jrys.php?id=231&time=20240926215313&ip=111.229.253.40
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E7%94%B5%E5%BD%B1.png",东森电影
+http://mytv.cdn.com.mp/live/dsdy/stream.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E7%94%B5%E5%BD%B1.png",东森电影
+https://smart.pendy.dpdns.org/Smart.php?id=ettvmovie
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E7%94%B5%E5%BD%B1.png",东森电影
+https://stream1.freetv.fun/dong-sen-dian-ying-6.ctv
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E7%94%B5%E5%BD%B1.png",东森电影
+https://stream1.freetv.fun/7e7daf1aca2b5fc6ab5365c3d5201b91e3b538cd4a947fd5bdb0256900d3f638.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E7%94%B5%E5%BD%B1.png",东森电影
+https://stream1.freetv.fun/dong-sen-dian-ying-7.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E7%94%B5%E5%BD%B1.png",东森电影
+https://stream1.freetv.fun/dong-sen-dian-ying-8.ctv
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E7%94%B5%E5%BD%B1.png",东森电影
+https://stream1.freetv.fun/dong-sen-dian-ying-2.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E7%94%B5%E5%BD%B1.png",东森电影
+https://stream1.freetv.fun/dong-sen-dian-ying-5.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E7%94%B5%E5%BD%B1.png",东森电影
+https://stream1.freetv.fun/dong-sen-dian-ying-1.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="龙祥电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BE%99%E7%A5%A5%E7%94%B5%E5%BD%B1.png",龙祥电影
+http://j.s.bkpcp.top/js/lxdy
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="龙祥电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BE%99%E7%A5%A5%E7%94%B5%E5%BD%B1.png",龙祥电影
+https://smart.pendy.dpdns.org/Smart.php
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森洋片" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E6%B4%8B%E7%89%87.png",东森洋片
+https://cdn.iptv8k.top/dl/jrys.php?id=232&time=20240926215313&ip=111.229.253.40
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
+https://cdn.iptv8k.top/dl/jrys.php?id=216&time=20240926215313&ip=111.229.253.40
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
+https://cdn.iptv8k.top/dl/jrys.php?id=217&time=20240926215313&ip=111.229.253.40
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
+http://38.64.72.148:80/hls/modn/list/2013/chunklist1.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
+https://smart.pendy.dpdns.org/Smart.php?id=ettvsuper
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
+https://stream1.freetv.fun/dong-sen-chao-shi-7.ctv
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
+https://stream1.freetv.fun/dong-sen-chao-shi-8.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
+https://stream1.freetv.fun/dong-sen-chao-shi-9.m3u8
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
+https://stream1.freetv.fun/dong-sen-chao-shi-8.ctv
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
+https://stream1.freetv.fun/dong-sen-chao-shi-2.ctv
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
+https://stream1.freetv.fun/dong-sen-chao-shi-6.ctv
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226019
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://iptv.huuc.edu.cn/hls/cctv5hd.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+https://www.freetv.top/migu/641886683.m3u8?migutoken=3e5c01f93922de8d1c940fe15bb47349b27e8f7a2e624dde1a83dff3b2a80f58b7624151a3a4d00488edee34f202818557340903382fae02bb754084eb942bd50e59061df36fab62fb5b908903
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+https://smart.pendy.dpdns.org/Smart.php?id=cctv5
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+https://ldcctvwbcdks.v.kcdnvip.com/ldcctvwbcd/cdrmldcctv5plus_1/index.m3u8?b=200-2100
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+https://ldcctvwbcdks.v.kcdnvip.com/ldcctvwbcd/cdrmldcctv5plus_1/index.m3u8?BR=td®ion=shanghai
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226019/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226019/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226019/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226019/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221225603
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+https://www.freetv.top/migu/641886773.m3u8?migutoken=03a1b82e35e58cd89a95034ecb29e77e50493397000ec2b1e4d1ce59af01e6420d6dbc068c8230ec03be3a35a20eed8714e0959e3570a08713a7a2e8d86085eabf8f1aa85744c80c38343988b2
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225603/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+https://smart.pendy.dpdns.org/Smart.php?id=cctv5plus
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225603/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221225603/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225603/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225603/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225603/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221225603/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+https://epg.pw/stream/7b470f9fc5c305db0c8622117b7b25ca00eb35ba3e93e865cf0ff9df5c736681.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+http://cdn2.163189.xyz/live/gdty/stream.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+http://php.jdshipin.com/PLTV/iptv.php?id=gdty
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+https://stream1.freetv.fun/3864d41a409cbbbd8579e4ec03eb47e6cf65b15f5cae7c3cd44ccd4b9991a017.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+https://stream1.freetv.fun/e05d674500d8dcf73754cb11d4dcd8ef9e88f287888a1b71fd0766e90963db66.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+https://stream1.freetv.fun/1d9901836bfdd83dcc89edf1fb53c3f62393cd672a8d49266af2c8130921b0ee.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+https://stream1.freetv.fun/869475cf6ab5d187816a1b7fbd8649cfc0b41c452e5595eabb2a36e51a61eecf.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+http://php.jdshipin.com/TVOD/iptv.php?id=gdty
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+https://stream1.freetv.fun/yan-dong-ti-yu-10.ctv
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E4%BD%93%E8%82%B2.png",广东体育
+https://stream1.freetv.fun/yan-dong-ti-yu-11.ctv
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
+https://cdn.iptv8k.top/dl/jrys.php?id=291&time=20240926215313&ip=111.229.253.40
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
+https://cdn.iptv8k.top/dl/jrys.php?id=292&amp;amp;time=20240926215313&amp;amp;ip=111.229.253.40
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
+https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
+https://cdn.iptv8k.top/dl/jrys.php?id=292&amp;time=20240926215313&amp;ip=111.229.253.40
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
+https://stream1.freetv.fun/wei-lai-ti-yu-9.ctv
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
+https://epg.pw/stream/8855a9936e37e608a0ec8a014cce1673dee9c5d68d560da376cc92e5edef2b25.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
+https://epg.pw/stream/ab6df63b64d0cc44a1f4f029ed847a26fa54a7aebd455578fb05a63f02c22f4b.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
+https://epg.pw/stream/4f18dfe0593db5c686eb64ae8edaf2a9202d4d46bdc9bbde2cee27708e12ea01.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
+https://stream1.freetv.fun/wei-lai-ti-yu-7.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
+https://stream1.freetv.fun/wei-lai-ti-yu-3.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="五星体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%94%E6%98%9F%E4%BD%93%E8%82%B2.png",五星体育
+http://[2409:8087:1e03:21::42]:6610/cms001/ch00000090990000001018/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="五星体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%94%E6%98%9F%E4%BD%93%E8%82%B2.png",五星体育
+https://stream1.freetv.fun/wu-xing-ti-yu-3.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="五星体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%94%E6%98%9F%E4%BD%93%E8%82%B2.png",五星体育
+https://stream1.freetv.fun/wu-xing-ti-yu-7.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="五星体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%94%E6%98%9F%E4%BD%93%E8%82%B2.png",五星体育
+https://stream1.freetv.fun/wu-xing-ti-yu-2.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="五星体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%94%E6%98%9F%E4%BD%93%E8%82%B2.png",五星体育
+https://stream1.freetv.fun/wu-xing-ti-yu-10.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="五星体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%94%E6%98%9F%E4%BD%93%E8%82%B2.png",五星体育
+https://stream1.freetv.fun/ipv6-wu-xing-ti-yu-2.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="五星体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%94%E6%98%9F%E4%BD%93%E8%82%B2.png",五星体育
+https://stream1.freetv.fun/wu-xing-ti-yu-9.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="五星体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%94%E6%98%9F%E4%BD%93%E8%82%B2.png",五星体育
+https://stream1.freetv.fun/wu-xing-ti-yu-4.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="五星体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%94%E6%98%9F%E4%BD%93%E8%82%B2.png",五星体育
+https://stream1.freetv.fun/wu-xing-ti-yu-13.ctv
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="五星体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%94%E6%98%9F%E4%BD%93%E8%82%B2.png",五星体育
+https://stream1.freetv.fun/ipv6-wu-xing-ti-yu-6.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="劲爆体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%B2%E7%88%86%E4%BD%93%E8%82%B2.png",劲爆体育
+http://php.jdshipin.com/itv6s.php?cid=hnbblive&id=2000000002000000008
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="劲爆体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%B2%E7%88%86%E4%BD%93%E8%82%B2.png",劲爆体育
+http://z.b.bkpcp.top/m.php?id=jbty
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="劲爆体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%B2%E7%88%86%E4%BD%93%E8%82%B2.png",劲爆体育
+http://goo.bkpcp.top/mg/jbty
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="劲爆体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%B2%E7%88%86%E4%BD%93%E8%82%B2.png",劲爆体育
+https://www.freetv.top/migu/796071336.m3u8?migutoken=1cc947d86cb584c31c31c88c005d55965238dbfff7ed75fca8451aed0b564786fde7e4b327e93b92dc96ef57e64e3bb56e8a9e921338080cdae817cb6125d8450b687659ecfee06be9c5d53ac6
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="劲爆体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%B2%E7%88%86%E4%BD%93%E8%82%B2.png",劲爆体育
+https://www.freetv.top/migu/796071336.m3u8?migutoken=05144ee4526abc2f6a8d44a41f9e078ef10c1a9f8930d51d7f453315d3577b613eac76898b1e0965789f7010cd3f8a1bca3167ef6e625cb77fc2c575eec35c8d07aaff61dc4b79f75fc67ef667
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="劲爆体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%B2%E7%88%86%E4%BD%93%E8%82%B2.png",劲爆体育
+https://live.goodiptv.club/api/yqgd.php?id=jbtyhd
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="劲爆体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%B2%E7%88%86%E4%BD%93%E8%82%B2.png",劲爆体育
+https://live.v1.mk/api/ghyx.php?id=JinBaoTiYuHD_6000
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="劲爆体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%B2%E7%88%86%E4%BD%93%E8%82%B2.png",劲爆体育
+https://live.v1.mk/api/bestv.php?id=jbtyhd8m/8000000
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="劲爆体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%B2%E7%88%86%E4%BD%93%E8%82%B2.png",劲爆体育
+http://[2409:8087:5e01:24::8]:6610/000000001000/2000000002000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000008&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="劲爆体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%B2%E7%88%86%E4%BD%93%E8%82%B2.png",劲爆体育
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000002000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000008&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="爱体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%88%B1%E4%BD%93%E8%82%B2.png",爱体育
+http://php.jdshipin.com:8880/itv6s.php?cid=wasusyt&id=6000000006000290630
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="爱体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%88%B1%E4%BD%93%E8%82%B2.png",爱体育
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000004000000060/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="爱体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%88%B1%E4%BD%93%E8%82%B2.png",爱体育
+http://[2409:8087:5e08:24::17]:6610/000000001000/2000000004000000060/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="爱体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%88%B1%E4%BD%93%E8%82%B2.png",爱体育
+http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000000/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="爱体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%88%B1%E4%BD%93%E8%82%B2.png",爱体育
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000004000000060/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000060&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B6%85%E7%BA%A7%E4%BD%93%E8%82%B2.png",超级体育
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226232/1.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B6%85%E7%BA%A7%E4%BD%93%E8%82%B2.png",超级体育
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226348/1.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B6%85%E7%BA%A7%E4%BD%93%E8%82%B2.png",超级体育
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225622/2/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B6%85%E7%BA%A7%E4%BD%93%E8%82%B2.png",超级体育
+http://[2409:8087:74d9:21::6]:80/270000001128/9900000020/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B6%85%E7%BA%A7%E4%BD%93%E8%82%B2.png",超级体育
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B6%85%E7%BA%A7%E4%BD%93%E8%82%B2.png",超级体育
+http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225715/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B6%85%E7%BA%A7%E4%BD%93%E8%82%B2.png",超级体育
+http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010063/
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B6%85%E7%BA%A7%E4%BD%93%E8%82%B2.png",超级体育
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B6%85%E7%BA%A7%E4%BD%93%E8%82%B2.png",超级体育
+http://[2409:8087:5e00:24::1e]:6060/000000001000/1000000001000009204/1.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B6%85%E7%BA%A7%E4%BD%93%E8%82%B2.png",超级体育
+http://[2409:8087:5e08:24::17]:6610/000000001000/1000000004000007755/index.m3u8?channel-id=bestzb&Contentid=1000000004000007755&livemode=1&stbId=3
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="精品体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%B2%BE%E5%93%81%E4%BD%93%E8%82%B2.png",精品体育
+https://epg.pw/stream/f7556eccd4ae06b0c2991fdc7a4f8388496559f728cc82459a8e50346040e226.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="精品体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%B2%BE%E5%93%81%E4%BD%93%E8%82%B2.png",精品体育
+https://epg.pw/stream/94ed0232b61ce8d89883160a4cdfbfc8f3225cae70ef8e17d93eec249a3c8ad6.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="精品体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%B2%BE%E5%93%81%E4%BD%93%E8%82%B2.png",精品体育
+https://epg.pw/stream/866a097a0907c9832440f8df38272dd555abf05200dfbafcc137e214c9b30ca7.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="精品体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%B2%BE%E5%93%81%E4%BD%93%E8%82%B2.png",精品体育
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226328/1.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="精品体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%B2%BE%E5%93%81%E4%BD%93%E8%82%B2.png",精品体育
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225709/2/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="精品体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%B2%BE%E5%93%81%E4%BD%93%E8%82%B2.png",精品体育
+http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010078/1.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="精品体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%B2%BE%E5%93%81%E4%BD%93%E8%82%B2.png",精品体育
+http://[2409:8087:5e00:24::1e]:6060/000000001000/1000000004000014634/1.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="精品体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%B2%BE%E5%93%81%E4%BD%93%E8%82%B2.png",精品体育
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="精品体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%B2%BE%E5%93%81%E4%BD%93%E8%82%B2.png",精品体育
+http://[2409:8087:1a0b:df::4004]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="精品体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%B2%BE%E5%93%81%E4%BD%93%E8%82%B2.png",精品体育
+http://[2409:8087:74d6:22::7]:6410/270000001128/9900000102/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+http://php.jdshipin.com:8880/gztv.php?id=jingsai#https://tencentplay.gztv.com/live/jingsai.m3u8?txSecret=49c8041461997c7a97dbcc3c7fd11b4f&txTime=18d00acf487
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-4.ctv
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-27.ctv
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-37.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-26.ctv
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-35.ctv
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-24.ctv
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-15.ctv
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-12.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="广州竞赛" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E5%B7%9E%E7%AB%9E%E8%B5%9B.png",广州竞赛
+https://stream1.freetv.fun/yan-zhou-jing-sai-7.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="辽宁体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E4%BD%93%E8%82%B2.png",辽宁体育
+https://stream1.freetv.fun/liao-zhu-ti-yu-5.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="辽宁体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E4%BD%93%E8%82%B2.png",辽宁体育
+https://stream1.freetv.fun/liao-zhu-ti-yu-3.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-8.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-18.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-19.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-4.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-23.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-15.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+http://livealone302.iqilu.com/iqilu/typd.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-7.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-22.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-6.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746725062&key=0472e68b6d6133153804a3943cfdca96
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746739480&key=6f468215466d6daf15f5239fa2c164d6
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746775525&key=4573d423f55d4f3c1b70698e0046e086
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746782860&key=242483d6da1c67c17a454ee431e41b24
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746739480&key=6f468215466d6daf15f5239fa2c164d6
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746811400&key=4867c9569d3be7173b932d82cac7adb2
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746825793&key=7db9095368ec4160797186b0972ce60e
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746861745&key=51e661097bab1305a852b8befcfee768
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746894586&key=11abeed3c4c1657927919a946bcde3d4
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="江苏体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E4%BD%93%E8%82%B2.png",江苏体育
+https://live.lalifeier.eu.org/jstv/jsty.m3u8?t=1746775525&key=4573d423f55d4f3c1b70698e0046e086
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://live.lalifeier.eu.org/ahtv/ahzyty.m3u8?t=1745774515&key=27009aec794adc785b22478c5aa2ae16
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://live.lalifeier.eu.org/ahtv/ahzyty.m3u8?t=1746292937&key=940b0f98a121c28884c74971efaac4de
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://live.lalifeier.eu.org/ahtv/ahzyty.m3u8?t=1746307365&key=6b104d1fc66c5b34b63d0e19c627e0f9
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://stream1.freetv.fun/an-hui-zong-yi-ti-yu-4.ctv
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://stream1.freetv.fun/an-hui-zong-yi-ti-yu-5.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://stream1.freetv.fun/an-hui-zong-yi-ti-yu-6.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://stream1.freetv.fun/an-hui-zong-yi-ti-yu-8.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://live.lalifeier.eu.org/ahtv/ahzyty.m3u8?t=1746725062&key=4fd742e193737a1cfe3c3dfa3973e299
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://live.lalifeier.eu.org/ahtv/ahzyty.m3u8?t=1746739480&key=d9527b9d7ce3a70d8e81d3f27965213f
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="安徽综艺体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E7%BB%BC%E8%89%BA%E4%BD%93%E8%82%B2.png",安徽综艺体育
+https://live.lalifeier.eu.org/ahtv/ahzyty.m3u8?t=1746775525&key=fab8cb8fa94cd29ea294c635fb944f88
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩篮球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E7%AF%AE%E7%90%83.png",睛彩篮球
+http://thhomes.cn:4000/rtp/239.3.1.126:8001
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩篮球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E7%AF%AE%E7%90%83.png",睛彩篮球
+http://[2409:8087:1a01:df::4055]:80/TVOD/88888888/224/3221225901/main.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩篮球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E7%AF%AE%E7%90%83.png",睛彩篮球
+http://congtou.top:9292/rtp/239.77.1.21:5146
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩篮球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E7%AF%AE%E7%90%83.png",睛彩篮球
+http://[2409:8087:5e00:24::1e]:6060/000000001000/1000000006000270006/1.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩篮球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E7%AF%AE%E7%90%83.png",睛彩篮球
+http://www.1328099.xyz:9001/rtp/239.77.1.21:5146
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩篮球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E7%AF%AE%E7%90%83.png",睛彩篮球
+http://[2409:8087:1a0a:df::404b]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226147/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩篮球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E7%AF%AE%E7%90%83.png",睛彩篮球
+http://[2409:8087:5e00:24::20]:6610/000000001000/1/3000000020000011529/index.m3u8?channel-id=FifastbLive&Contentid=3000000020000011529&livemode=1&stbId=YanG-1989
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩篮球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E7%AF%AE%E7%90%83.png",睛彩篮球
+http://[2409:8087:1a01:df::7005]/TVOD/88888888/224/3221225895/main.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩篮球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E7%AF%AE%E7%90%83.png",睛彩篮球
+http://[2409:8087:5e00:24::1e]:6060/000000001000/1000000006000270002/1.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩篮球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E7%AF%AE%E7%90%83.png",睛彩篮球
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226147/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩羽毛球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E7%BE%BD%E6%AF%9B%E7%90%83.png",睛彩羽毛球
+http://thhomes.cn:4000/rtp/239.3.1.127:8001
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩羽毛球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E7%BE%BD%E6%AF%9B%E7%90%83.png",睛彩羽毛球
+http://111.193.239.245:9999/rtp/239.3.1.127:8001
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩广场舞" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E5%B9%BF%E5%9C%BA%E8%88%9E.png",睛彩广场舞
+http://thhomes.cn:4000/rtp/239.3.1.128:8001
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩广场舞" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E5%B9%BF%E5%9C%BA%E8%88%9E.png",睛彩广场舞
+http://111.193.239.245:9999/rtp/239.3.1.128:8001
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩广场舞" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E5%B9%BF%E5%9C%BA%E8%88%9E.png",睛彩广场舞
+http://[2409:8087:1a0a:df::4038]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226472/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩广场舞" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E5%B9%BF%E5%9C%BA%E8%88%9E.png",睛彩广场舞
+http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226472/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩广场舞" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E5%B9%BF%E5%9C%BA%E8%88%9E.png",睛彩广场舞
+http://[2409:8087:8:21::02]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226567/1.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩广场舞" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E5%B9%BF%E5%9C%BA%E8%88%9E.png",睛彩广场舞
+http://[2409:8087:8:21::02]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227040/1.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩广场舞" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E5%B9%BF%E5%9C%BA%E8%88%9E.png",睛彩广场舞
+http://cdn6.bkpcp.top/itv/yditv.php
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩广场舞" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E5%B9%BF%E5%9C%BA%E8%88%9E.png",睛彩广场舞
+http://[2409:8087:74d4:21::36]/270000001128/9900000532/1.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩广场舞" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E5%B9%BF%E5%9C%BA%E8%88%9E.png",睛彩广场舞
+http://[2409:8087:1a0a:df::4038]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226472/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="睛彩广场舞" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9D%9B%E5%BD%A9%E5%B9%BF%E5%9C%BA%E8%88%9E.png",睛彩广场舞
+http://hwottcdn.ln.chinamobile.com/PLTV/11/224/3221227423/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="风云足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A3%8E%E4%BA%91%E8%B6%B3%E7%90%83.png",风云足球
+https://epg.pw/stream/6d7bf281e3d739806a73f5373acaa6e01988ec9739f5ac1355ce54b47a928472.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="风云足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A3%8E%E4%BA%91%E8%B6%B3%E7%90%83.png",风云足球
+https://epg.pw/stream/ac8062ec9484078061d3bef507c15a423ac57ae4144e3fcc4b0a198dd420f911.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="风云足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A3%8E%E4%BA%91%E8%B6%B3%E7%90%83.png",风云足球
+http://[2409:8087:7001:20:2::3]/dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226984/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="风云足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A3%8E%E4%BA%91%E8%B6%B3%E7%90%83.png",风云足球
+https://live.goodiptv.club/api/yqgd.php?id=fyzq
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="魅力足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%AD%85%E5%8A%9B%E8%B6%B3%E7%90%83.png",魅力足球
+http://z.b.bkpcp.top/m.php?id=mlzq
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="魅力足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%AD%85%E5%8A%9B%E8%B6%B3%E7%90%83.png",魅力足球
+http://gat.bkpcp.top/ymg.php?id=mlzq
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="魅力足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%AD%85%E5%8A%9B%E8%B6%B3%E7%90%83.png",魅力足球
+http://goo.bkpcp.top/mg/mlzq
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="魅力足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%AD%85%E5%8A%9B%E8%B6%B3%E7%90%83.png",魅力足球
+https://tv.fanmingming.com/api/v6?id=mlyy
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="魅力足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%AD%85%E5%8A%9B%E8%B6%B3%E7%90%83.png",魅力足球
+https://www.freetv.top/migu/796070308.m3u8?migutoken=0a72668399c6f96d928c0bf0adbe330bbae95b55cfc10f2da9e830e2e06051b89a0e1db847eaa61f6b897e3efcb05ecc6160c2ce3c8073fb2d90c8ed191845e1ca16f6bcd3aaa13f6538d2074d
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="魅力足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%AD%85%E5%8A%9B%E8%B6%B3%E7%90%83.png",魅力足球
+https://www.freetv.top/migu/796070308.m3u8?migutoken=f4f71100ed3cd756f336e1f3b6d522c1338ee1ffd14316eea89e461d4e31e29395a265a9f1ec26b947fb0e7dc16296db47ae3bfea73caaee6901d17bfede63775878c0ab44c872939ba5b53baf
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="魅力足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%AD%85%E5%8A%9B%E8%B6%B3%E7%90%83.png",魅力足球
+https://www.freetv.top/migu/796070308.m3u8?migutoken=aef1ffa947e5328dd4ec2bb318b58b674fe32113222c6c9eab78bcdc2a9f31cf142a1d60536ea5a5ee039d3753e6bd98bef238d0ba7e3af9153e765e8b77e2a8c28451355b4a426d11c5c304f8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="魅力足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%AD%85%E5%8A%9B%E8%B6%B3%E7%90%83.png",魅力足球
+https://stream1.freetv.fun/mei-li-zu-qiu-4.ctv
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="魅力足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%AD%85%E5%8A%9B%E8%B6%B3%E7%90%83.png",魅力足球
+https://stream1.freetv.fun/mei-li-zu-qiu-2.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="魅力足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%AD%85%E5%8A%9B%E8%B6%B3%E7%90%83.png",魅力足球
+https://stream1.freetv.fun/mei-li-zu-qiu-5.ctv
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="快乐垂钓" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BF%AB%E4%B9%90%E5%9E%82%E9%92%93.png",快乐垂钓
+http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031206
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="快乐垂钓" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BF%AB%E4%B9%90%E5%9E%82%E9%92%93.png",快乐垂钓
+http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226670/index.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="快乐垂钓" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BF%AB%E4%B9%90%E5%9E%82%E9%92%93.png",快乐垂钓
+http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226549/1.m3u8
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="快乐垂钓" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BF%AB%E4%B9%90%E5%9E%82%E9%92%93.png",快乐垂钓
+http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226549/1.m3u8?GuardEncType=2&accountinfo=~~V2.0~RHz0NOpqUZZN1Iz6lVLkkg~_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNSiF8rKF1Pn2LepKMJ2cEG%2CEND
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="快乐垂钓" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BF%AB%E4%B9%90%E5%9E%82%E9%92%93.png",快乐垂钓
+http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226549/1.m3u8?GuardEncType=2&accountinfo=~~V2.0RHz0NOpqUZZN1Iz6lVLkkg_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNSiF8rKF1Pn2LepKMJ2cEG%2CEND
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="快乐垂钓" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BF%AB%E4%B9%90%E5%9E%82%E9%92%93.png",快乐垂钓
+http://congtou.top:9292/rtp/239.77.0.145:5146
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="快乐垂钓" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BF%AB%E4%B9%90%E5%9E%82%E9%92%93.png",快乐垂钓
+http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226549/1.m3u8?GuardEncType=2&accountinfo=~~V2.0~RHz0NOpqUZZN1Iz6lVLkkg~_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNSiF8rKF1Pn2LepKMJ2cEG%2CEND
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="快乐垂钓" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BF%AB%E4%B9%90%E5%9E%82%E9%92%93.png",快乐垂钓
+http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226549/1.m3u8?GuardEncType=2&amp;accountinfo=~~V2.0RHz0NOpqUZZN1Iz6lVLkkg_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNSiF8rKF1Pn2LepKMJ2cEG%2CEND
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="快乐垂钓" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BF%AB%E4%B9%90%E5%9E%82%E9%92%93.png",快乐垂钓
+http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226549/1.m3u8?GuardEncType=2&amp;accountinfo=~~V2.0~RHz0NOpqUZZN1Iz6lVLkkg~_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNSiF8rKF1Pn2LepKMJ2cEG%2CEND
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="快乐垂钓" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BF%AB%E4%B9%90%E5%9E%82%E9%92%93.png",快乐垂钓
+http://www.1328099.xyz:9001/rtp/239.77.0.145:5146
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="JJ斗地主" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/JJ%E6%96%97%E5%9C%B0%E4%B8%BB.png",JJ斗地主
+http://zzy789.xyz/douyu1.php?id=488743
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="JJ斗地主" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/JJ%E6%96%97%E5%9C%B0%E4%B8%BB.png",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
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="JJ斗地主" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/JJ%E6%96%97%E5%9C%B0%E4%B8%BB.png",JJ斗地主
+http://huanqiuzhibo.cn/manifest/douyu.php?id=488743
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="JJ斗地主" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/JJ%E6%96%97%E5%9C%B0%E4%B8%BB.png",JJ斗地主
+http://www.52sw.top:678/play/huya.php?id=14079954
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="JJ斗地主" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/JJ%E6%96%97%E5%9C%B0%E4%B8%BB.png",JJ斗地主
+https://www.goodiptv.club/douyin/685317364746
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="JJ斗地主" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/JJ%E6%96%97%E5%9C%B0%E4%B8%BB.png",JJ斗地主
+https://live.laobaitv.net/huya/jjworld
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="JJ斗地主" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/JJ%E6%96%97%E5%9C%B0%E4%B8%BB.png",JJ斗地主
+https://live.iill.top/huya/14079954
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="JJ斗地主" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/JJ%E6%96%97%E5%9C%B0%E4%B8%BB.png",JJ斗地主
+https://live.iill.top/douyin/685317364746
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="JJ斗地主" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/JJ%E6%96%97%E5%9C%B0%E4%B8%BB.png",JJ斗地主
+https://live.iill.top/douyin/jjworld
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031113
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226197/index.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+https://stream1.freetv.fun/dong-man-xiu-chang-21.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+https://stream1.freetv.fun/ipv6-dong-man-xiu-chang-1.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+https://stream1.freetv.fun/dong-man-xiu-chang-11.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+https://stream1.freetv.fun/dong-man-xiu-chang-24.ctv
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+https://stream1.freetv.fun/ipv6-dong-man-xiu-chang-11.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+https://stream1.freetv.fun/dong-man-xiu-chang-22.ctv
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+https://stream1.freetv.fun/dong-man-xiu-chang-9.ctv
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+https://stream1.freetv.fun/7e65432fb94551c8a7abf4afa8996c11471807bf9cf6ec1a3e49a2c25b2c1f58.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="青春动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%98%A5%E5%8A%A8%E6%BC%AB.png",青春动漫
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000011000288008/index.m3u8?channel-id=bestzb&Contentid=5000000011000288008&livemode=1&stbId=YanG-1989
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="青春动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%98%A5%E5%8A%A8%E6%BC%AB.png",青春动漫
+https://live.v1.mk/api/bestv.php?id=qcdm8m/8000000
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="爱动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%88%B1%E5%8A%A8%E6%BC%AB.png",爱动漫
+http://php.jdshipin.com:8880/itv6s.php?cid=wasusyt&id=6000000006000280630
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="爱动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%88%B1%E5%8A%A8%E6%BC%AB.png",爱动漫
+http://[2409:8087:5e08:24::17]:6610/000000001000/2000000004000000059/index.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="爱动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%88%B1%E5%8A%A8%E6%BC%AB.png",爱动漫
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000004000000059/index.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="爱动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%88%B1%E5%8A%A8%E6%BC%AB.png",爱动漫
+http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000000/index.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="爱动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%88%B1%E5%8A%A8%E6%BC%AB.png",爱动漫
+http://[2409:8087:5e08:24::17]:6610/000000001000/2000000004000000059/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000059&IASHttpSessionId=OTT19019320240419154124000281&yang-1989
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="爱动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%88%B1%E5%8A%A8%E6%BC%AB.png",爱动漫
+http://[2409:8087:5e08:24::17]:6610/000000001000/2000000004000000059/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000059&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="爱动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%88%B1%E5%8A%A8%E6%BC%AB.png",爱动漫
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000004000000059/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000059&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="爱动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%88%B1%E5%8A%A8%E6%BC%AB.png",爱动漫
+http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000000/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000059
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="爱动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%88%B1%E5%8A%A8%E6%BC%AB.png",爱动漫
+http://[2409:8087:5e00:24::029]:6610/000000001000/2000000004000000059/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000059&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="爱动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%88%B1%E5%8A%A8%E6%BC%AB.png",爱动漫
+http://[2409:8087:2801:22:100::58]/wh7f454c46tw4217776971_-290814739/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221235628/1/index.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="宝宝动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%9D%E5%AE%9D%E5%8A%A8%E7%94%BB.png",宝宝动画
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000011000288002/index.m3u8?channel-id=bestzb&Contentid=5000000011000288002&livemode=1&stbId=YanG-1989
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="CN卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CN%E5%8D%A1%E9%80%9A.png",CN卡通
+https://cdn.iptv8k.top/dl/jrys.php?id=364&time=20240926215313&ip=111.229.253.40
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="CN卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CN%E5%8D%A1%E9%80%9A.png",CN卡通
+http://125.227.210.55:8167/VideoInput/play.ts
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="CN卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CN%E5%8D%A1%E9%80%9A.png",CN卡通
+https://stream1.freetv.fun/cnqia-tong-1.ctv
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="CN卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CN%E5%8D%A1%E9%80%9A.png",CN卡通
+https://stream1.freetv.fun/cnqia-tong-1.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="CN卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CN%E5%8D%A1%E9%80%9A.png",CN卡通
+https://stream1.freetv.fun/cnqia-tong-3.ctv
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="CN卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CN%E5%8D%A1%E9%80%9A.png",CN卡通
+https://stream1.freetv.fun/cnqia-tong-2.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010118
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+http://z.b.bkpcp.top/m.php?id=ymkt
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225656/2.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+https://live.lalifeier.eu.org/jstv/ymkt.m3u8?t=1745796321&key=a52fbb40a8c25dfa0feef5a1b4b5910d
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+https://live.lalifeier.eu.org/jstv/ymkt.m3u8?t=1746307365&key=c18c5077358ab692ad43005bbc7b32bd
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+https://www.freetv.top/migu/626064703.m3u8?migutoken=deac6c5275081b54ad412a195e499b7c0cb8f04446b6c80aaa9d3eb1063d620261c68202d59aea05060007b58a62d5d208f16379d861d6f1627c10c9dd894f0bf7e3ca97b04696255e193e871c
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+https://www.freetv.top/migu/626064703.m3u8?migutoken=7f7c4b909389a0cd5172701768041a0f3887534c4534a68bf1dc85550389e9ab156655484be16e89604513fde9da2f036ebae28d31515b0be32eb12462f5de9d9cab8f00c44671241d5c6e1356
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+https://stream1.freetv.fun/you-man-qia-tong-11.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226932/1.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
+https://stream1.freetv.fun/4073fb5ec1ec48f010e1db882aeb63ddc7104c56c5c729c4d08e932d585591a8.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225653/2.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
+https://stream1.freetv.fun/jin-ying-qia-tong-38.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
+https://stream1.freetv.fun/jin-ying-qia-tong-32.ctv
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
+https://stream1.freetv.fun/jin-ying-qia-tong-3.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
+https://stream1.freetv.fun/jin-ying-qia-tong-22.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
+https://stream1.freetv.fun/aec603fdb1ae19a081a7ca50498e3c9429447092a2208a2d383ae2bc812009b5.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
+https://stream1.freetv.fun/321f73ad28440de1629cd54e028c9355b2cb709eb8b30b90e4d0f3d5b41b0c4e.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
+https://stream1.freetv.fun/jin-ying-qia-tong-19.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
+https://stream1.freetv.fun/1b907bbf4760e673ec9ab89e2327cd1d9e5df04ca6ef35a6fb07f5b6757f4791.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
+https://stream1.freetv.fun/jin-ying-qia-tong-29.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E5%8A%A8%E7%94%BB.png",黑莓动画
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010002
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E5%8A%A8%E7%94%BB.png",黑莓动画
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226935/1.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E5%8A%A8%E7%94%BB.png",黑莓动画
+http://[2409:8087:1a01:df::4007]:80/TVOD/88888888/224/3221225529/main.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E5%8A%A8%E7%94%BB.png",黑莓动画
+http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E5%8A%A8%E7%94%BB.png",黑莓动画
+http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225662/index.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E5%8A%A8%E7%94%BB.png",黑莓动画
+http://[2409:8087:74d9:21::6]/270000001128/9900000096/index.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E5%8A%A8%E7%94%BB.png",黑莓动画
+http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010002/1.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E5%8A%A8%E7%94%BB.png",黑莓动画
+http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225662/1.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E5%8A%A8%E7%94%BB.png",黑莓动画
+http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010002/index.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E5%8A%A8%E7%94%BB.png",黑莓动画
+http://[2409:8087:74d9:21::6]:80/270000001128/9900000096/index.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="24H国漫热播" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/24H%E5%9B%BD%E6%BC%AB%E7%83%AD%E6%92%AD.png",24H国漫热播
+https://www.goodiptv.club/yy/1353937086
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+https://qiniup-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+https://ct-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+http://ali-vl.cztv.com/channels/lantian/channel008/360p.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8?fbl=
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+https://stream1.freetv.fun/zhe-jiang-shao-er-4.ctv
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+https://stream1.freetv.fun/zhe-jiang-shao-er-4.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+https://stream1.freetv.fun/zhe-jiang-shao-er-6.ctv
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%B0%91%E5%84%BF.png",浙江少儿
+https://stream1.freetv.fun/zhe-jiang-shao-er-12.ctv
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="河北少儿科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%B0%91%E5%84%BF%E7%A7%91%E6%95%99.png",河北少儿科教
+https://stream1.freetv.fun/he-bei-shao-er-ke-jiao-6.ctv
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="河北少儿科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%B0%91%E5%84%BF%E7%A7%91%E6%95%99.png",河北少儿科教
+https://event.pull.hebtv.com/jishi/shaoerkejiao.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="河北少儿科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%B0%91%E5%84%BF%E7%A7%91%E6%95%99.png",河北少儿科教
+https://stream1.freetv.fun/he-bei-shao-er-ke-jiao-2.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="河北少儿科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%B0%91%E5%84%BF%E7%A7%91%E6%95%99.png",河北少儿科教
+https://stream1.freetv.fun/he-bei-shao-er-ke-jiao-12.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="河北少儿科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%B0%91%E5%84%BF%E7%A7%91%E6%95%99.png",河北少儿科教
+https://stream1.freetv.fun/he-bei-shao-er-ke-jiao-7.ctv
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="河北少儿科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%B0%91%E5%84%BF%E7%A7%91%E6%95%99.png",河北少儿科教
+https://stream1.freetv.fun/he-bei-shao-er-ke-jiao-9.ctv
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="河北少儿科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%B0%91%E5%84%BF%E7%A7%91%E6%95%99.png",河北少儿科教
+https://stream1.freetv.fun/he-bei-shao-er-ke-jiao-8.ctv
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="河北少儿科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%B0%91%E5%84%BF%E7%A7%91%E6%95%99.png",河北少儿科教
+https://stream1.freetv.fun/he-bei-shao-er-ke-jiao-17.ctv
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="河北少儿科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%B0%91%E5%84%BF%E7%A7%91%E6%95%99.png",河北少儿科教
+https://stream1.freetv.fun/he-bei-shao-er-ke-jiao-3.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="河北少儿科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%B0%91%E5%84%BF%E7%A7%91%E6%95%99.png",河北少儿科教
+rtmp://tv.pull.hebtv.com/jishi/shaoerkejiao?t=2510710360&k=1c62f2efbb83251f173978255f47079d
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="七龙珠" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%83%E9%BE%99%E7%8F%A0.png",七龙珠
+http://tv.666150.xyz/huya.php?id=11601966
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="海绵宝宝" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E7%BB%B5%E5%AE%9D%E5%AE%9D.png",海绵宝宝
+https://live.metshop.top/douyu/3949681
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="中华小当家" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%AD%E5%8D%8E%E5%B0%8F%E5%BD%93%E5%AE%B6.png",中华小当家
+https://live.metshop.top/huya/11342413
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="中华小当家" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%AD%E5%8D%8E%E5%B0%8F%E5%BD%93%E5%AE%B6.png",中华小当家
+https://live.iill.top/huya/11342413
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="中华小当家" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%AD%E5%8D%8E%E5%B0%8F%E5%BD%93%E5%AE%B6.png",中华小当家
+http://tv.666150.xyz/huya.php?id=11342413
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="猫和老鼠" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%8C%AB%E5%92%8C%E8%80%81%E9%BC%A0.png",猫和老鼠
+https://live.iill.top/huya/11352879
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="猫和老鼠" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%8C%AB%E5%92%8C%E8%80%81%E9%BC%A0.png",猫和老鼠
+http://live.iill.top/huya.php?id=11352879
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="猫和老鼠" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%8C%AB%E5%92%8C%E8%80%81%E9%BC%A0.png",猫和老鼠
+http://tv.666150.xyz/huya.php?id=11352879
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="经典动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8F%E5%85%B8%E5%8A%A8%E6%BC%AB.png",经典动漫
+http://luobo.bkpcp.top/yy/24180320
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="经典动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8F%E5%85%B8%E5%8A%A8%E6%BC%AB.png",经典动漫
+https://www.goodiptv.club/yy/22777075
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="经典动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BB%8F%E5%85%B8%E5%8A%A8%E6%BC%AB.png",经典动漫
+https://www.goodiptv.club/yy/24180320
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="漫画解说" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BC%AB%E7%94%BB%E8%A7%A3%E8%AF%B4.png",漫画解说
+http://luobo.bkpcp.top/yy/1382735568
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="漫画解说" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BC%AB%E7%94%BB%E8%A7%A3%E8%AF%B4.png",漫画解说
+https://www.goodiptv.club/douyu/5907076
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="漫画解说" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BC%AB%E7%94%BB%E8%A7%A3%E8%AF%B4.png",漫画解说
+https://judy.livednow.dpdns.org/yy/1382735568
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="漫画解说" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BC%AB%E7%94%BB%E8%A7%A3%E8%AF%B4.png",漫画解说
+http://liushizupu.site:35455/yy/1382735568
+#EXTINF:-1 group-title="🎵音乐频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221225641/index.m3u8
+#EXTINF:-1 group-title="🎵音乐频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+https://www.freetv.top/migu/673168223.m3u8?migutoken=4e8d5766579c6bef231494cabd07e5b49d965804790214280c9791e4c331fd90311cb62ea43d3a1899229bfa57be4afe5a567b32a6b78153fc9a9801e28a39435e078b48c211e71d6083519be4
+#EXTINF:-1 group-title="🎵音乐频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+https://smart.pendy.dpdns.org/Smart.php?id=cctv15
+#EXTINF:-1 group-title="🎵音乐频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://[2409:8087:1a01:df::4033]:80/TVOD/88888888/224/3221226127/main.m3u8
+#EXTINF:-1 group-title="🎵音乐频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225601/index.m3u8
+#EXTINF:-1 group-title="🎵音乐频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225601/index.m3u8
+#EXTINF:-1 group-title="🎵音乐频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225601/index.m3u8
+#EXTINF:-1 group-title="🎵音乐频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225601/index.m3u8
+#EXTINF:-1 group-title="🎵音乐频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8
+#EXTINF:-1 group-title="🎵音乐频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226444/1.m3u8
+#EXTINF:-1 group-title="🎵音乐频道" tvg-name="风云音乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A3%8E%E4%BA%91%E9%9F%B3%E4%B9%90.png",风云音乐
+http://[2409:8087:7001:20:2::3]/dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226953/index.m3u8
+#EXTINF:-1 group-title="🎵音乐频道" tvg-name="风云音乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A3%8E%E4%BA%91%E9%9F%B3%E4%B9%90.png",风云音乐
+https://radio.0472.org/?id=641
+#EXTINF:-1 group-title="🎵音乐频道" tvg-name="音乐现场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9F%B3%E4%B9%90%E7%8E%B0%E5%9C%BA.png",音乐现场
+http://satellitepull.cnr.cn/live/wx32nmgyygb/playlist.m3u8
+#EXTINF:-1 group-title="🎵音乐频道" tvg-name="音乐现场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9F%B3%E4%B9%90%E7%8E%B0%E5%9C%BA.png",音乐现场
+https://satellitepull.cnr.cn/live/wx32nmgyygb/playlist.m3u8
+#EXTINF:-1 group-title="🎵音乐频道" tvg-name="音乐之声" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9F%B3%E4%B9%90%E4%B9%8B%E5%A3%B0.png",音乐之声
+http://a.live.hnradio.com/yypd/radio120k_yypd.m3u8?auth_key=1588751172-0-0-d97b858279c1c86650172b9913ea4af2
+#EXTINF:-1 group-title="🎵音乐频道" tvg-name="音乐之声" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9F%B3%E4%B9%90%E4%B9%8B%E5%A3%B0.png",音乐之声
+https://radio.0472.org/?id=641
+#EXTINF:-1 group-title="🕘️更新时间" tvg-name="2025-07-11 18:20:41" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/2025-07-11+18%3A20%3A41.png",2025-07-11 18:20:41
+http://ali-m-l.cztv.com/channels/lantian/channel15/1080p.m3u8
diff --git a/欧歌/lives/公众号【杰歌软件APP】如有收费,直接找退款!.txt b/欧歌/lives/公众号【杰歌软件APP】如有收费,直接找退款!.txt
index ba1acca..4ef1132 100644
--- a/欧歌/lives/公众号【杰歌软件APP】如有收费,直接找退款!.txt
+++ b/欧歌/lives/公众号【杰歌软件APP】如有收费,直接找退款!.txt
@@ -1094,234 +1094,230 @@ webview://https://tv.cctv.com/live/cctv17/$央视网
#EXTINF:-1 group-title="🐲央卫频道" tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5%2B.png",CCTV5+
webview://https://tv.cctv.com/live/cctv5plus/$央视网
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
-http://101.74.30.190:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
-http://114.238.59.148:4000/rtp/239.49.8.19:9614
+http://ali-m-l.cztv.com/channels/lantian/channel15/1080p.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
http://114.238.59.2:4000/rtp/239.49.8.19:9614
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
-http://ali-m-l.cztv.com/channels/lantian/channel15/1080p.m3u8
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
http://60.26.181.220:4022/rtp/225.1.1.120:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
-http://111.193.239.245:9999/rtp/239.3.1.129:8008
+http://111.162.205.201:8686/rtp/225.1.1.120:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
-http://220.169.100.41:10087/udp/239.76.251.87:9000
+http://114.238.59.148:4000/rtp/239.49.8.19:9614
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
-http://tcpsit.vicp.net:8811/udp/225.1.8.1:8008
+http://220.169.100.41:10087/udp/239.76.253.151:9000
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
http://58.19.180.108:9981/stream/channelid/1198995092?profile=pass
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
-http://221.13.233.107:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
-http://221.13.233.107:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
-http://123.160.232.254:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
-http://nn.7x9d.cn/xzc2.php?ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA2LjAuMC4wIFNhZmFyaS81MzcuMzY=&hls=aHR0cDovL3d3dy5kc2suY2MvcGhwL3N4Z2QucGhwP2lkPWNjdHYy
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
-http://b.zgjok.com:35455/mgtv/631780532.m3u8
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
-http://111.162.205.201:8686/rtp/225.1.1.133:5002
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
-http://106.115.24.17:9901/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
-http://222.218.122.114:8188/udp/239.81.0.115:4056
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
-http://tcpsit.vicp.net:8811/udp/225.1.8.2:8084
+http://111.193.239.245:9999/rtp/239.3.1.129:8008
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
+http://php.jdshipin.com/TVOD/iptv.php?id=rthk33
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-1.png",CCTV-1
+http://iptv.huuc.edu.cn/hls/cctv1hd.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
http://60.26.181.220:4022/rtp/225.1.1.133:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://219.141.44.245:8188/udp/238.255.2.11:5999
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://222.218.122.114:8188/udp/239.81.0.115:4056
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://omnix.cn:4000/udp/225.1.8.2:8084
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://nn.7x9d.cn/xzc2.php?ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA2LjAuMC4wIFNhZmFyaS81MzcuMzY=&hls=aHR0cDovL3d3dy5kc2suY2MvcGhwL3N4Z2QucGhwP2lkPWNjdHYy
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://114.238.59.148:4000/rtp/239.49.8.50:9802
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
http://27.18.157.225:2701/rtp/239.69.1.102:10250
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221225588
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://goo.bkpcp.top/mg/CCTV2
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-2.png",CCTV-2
+http://iptv.huuc.edu.cn/hls/cctv2hd.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
-http://123.160.232.254:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
-http://221.13.233.107:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
-http://111.162.205.201:8686/rtp/225.1.1.158:5002
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
-http://106.115.24.17:9901/tsfile/live/1002_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
-http://171.105.180.92:4022/udp/239.81.0.231:4056
+http://b.zgjok.com:35455/mgtv/624878271.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
http://60.26.181.220:4022/rtp/225.1.1.158:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
+http://111.162.205.201:8686/rtp/225.1.1.158:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
+http://171.15.18.199:8180/TV00000000000000000003@HHZT
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
http://111.193.239.245:9999/rtp/239.3.1.172:8001
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
-http://tcpsit.vicp.net:8811/udp/225.1.8.88:8000
+http://180.165.29.204:4022/rtp/239.45.1.68:5140
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
-http://111.196.134.250:20000/udp/239.3.1.172:8001
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226021
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
-http://101.74.30.190:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
-http://123.160.232.254:9901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
-http://111.162.205.201:8686/rtp/225.1.1.150:5002
+http://iptv.huuc.edu.cn/hls/cctv3hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
+https://smart.pendy.dpdns.org/Smart.php?id=cctv3
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-3.png",CCTV-3
+http://[2409:8087:1a01:df::4041]/TVOD/88888888/224/3221225799/main.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
http://60.26.181.220:4022/rtp/225.1.1.150:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
-http://221.13.233.107:9901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
-http://111.196.134.250:20000/udp/239.3.1.105:8092
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
-http://121.29.141.167:4022/rtp/239.253.92.251:6141
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
https://global.cgtn.cicc.media.caton.cloud/master/cgtn-america.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
-http://180.165.28.24:4022/rtp/239.45.0.2:5140
+http://101.74.30.190:9901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
http://180.165.29.204:4022/rtp/239.45.0.2:5140
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
http://php.jdshipin.com/TVOD/hljyd.php?id=3221226428
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
-http://123.160.232.254:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
-http://111.162.205.201:8686/rtp/225.1.1.160:5002
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
-http://101.74.30.190:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
-http://116.234.0.89:4022/rtp/239.45.1.69:5140
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
-http://220.169.100.41:10087/udp/239.76.246.155:1234
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
-http://tcpsit.vicp.net:8811/udp/225.1.8.89:8000
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
+http://z.b.bkpcp.top/m.php?id=CCTV-4国际
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
+http://iptv.huuc.edu.cn/hls/cctv4hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
+https://www.freetv.top/migu/631780421.m3u8?migutoken=fefc6a44400a0dd448699ae0ce3d6e2c5a0f49b8d48adb36e747c4fbab039337eb3244f9951acbddaf26b7bf51597a7d1b43c8845e67fd5914ece875dcad325bb388200bc0f12fdff727d03e2d
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
+https://smart.pendy.dpdns.org/Smart.php?id=cctv4
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-4.png",CCTV-4
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226007/index.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
https://ldcctvwbcdbd.a.bdydns.com/ldcctvwbcd/cdrmldcctv5plus_1/index.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
http://60.26.181.220:4022/rtp/225.1.1.160:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
-http://111.196.134.250:20000/udp/239.3.1.173:8001
+http://116.234.0.89:4022/rtp/239.45.1.69:5140
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://116.237.148.215:8881/rtp/239.45.1.69:5140
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://omnix.cn:4000/udp/225.1.8.89:8000
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://111.162.205.201:8686/rtp/225.1.1.160:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
http://180.165.29.204:4022/rtp/239.45.1.69:5140
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
-http://111.162.205.201:8686/rtp/225.1.1.121:5002
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
-http://114.238.59.148:4000/rtp/239.49.8.18:9610
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226019
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+http://iptv.huuc.edu.cn/hls/cctv5hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
+https://www.freetv.top/migu/641886683.m3u8?migutoken=3e5c01f93922de8d1c940fe15bb47349b27e8f7a2e624dde1a83dff3b2a80f58b7624151a3a4d00488edee34f202818557340903382fae02bb754084eb942bd50e59061df36fab62fb5b908903
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
http://60.26.181.220:4022/rtp/225.1.1.121:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
-http://111.193.239.245:9999/rtp/239.3.1.130:8004
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
-http://111.196.134.250:20000/udp/239.3.1.130:8004
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
-http://101.74.30.190:9901/tsfile/live/0016_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
http://omnix.cn:4000/udp/225.1.8.20:8004
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://114.226.231.231:8787/rtp/239.49.8.18:9610
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://111.162.205.201:8686/rtp/225.1.1.121:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://111.193.239.245:9999/rtp/239.3.1.130:8004
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
http://php.jdshipin.com/TVOD/hljyd.php?id=3221225603
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
https://www.freetv.top/migu/641886773.m3u8?migutoken=03a1b82e35e58cd89a95034ecb29e77e50493397000ec2b1e4d1ce59af01e6420d6dbc068c8230ec03be3a35a20eed8714e0959e3570a08713a7a2e8d86085eabf8f1aa85744c80c38343988b2
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225603/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+https://smart.pendy.dpdns.org/Smart.php?id=cctv5plus
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5%2B.png",CCTV-5+
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225603/index.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
http://nn.7x9d.cn/xzc2.php?ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA2LjAuMC4wIFNhZmFyaS81MzcuMzY=&hls=aHR0cDovL3d3dy5kc2suY2MvcGhwL3N4Z2QucGhwP2lkPWNjdHY2
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
-http://123.160.232.254:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0
+http://60.26.181.220:4022/rtp/225.1.1.195:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
http://111.162.205.201:8686/rtp/225.1.1.195:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
-http://121.29.141.167:4022/rtp/239.253.92.193:6058
+http://219.141.44.245:8188/udp/238.255.2.135:5999
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
http://111.193.239.245:9999/rtp/239.3.1.174:8001
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
-http://219.141.44.245:8188/udp/238.255.2.135:5999
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
-http://111.196.134.250:20000/udp/239.3.1.174:8001
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
http://180.165.29.204:4022/rtp/239.45.1.70:5140
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
-http://60.26.181.220:4022/rtp/225.1.1.195:5002
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226010
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
-http://101.74.30.190:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
-http://nn.7x9d.cn/xzc2.php?ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA2LjAuMC4wIFNhZmFyaS81MzcuMzY=&hls=aHR0cDovL3d3dy5kc2suY2MvcGhwL3N4Z2QucGhwP2lkPWNjdHY3
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
-http://123.160.232.254:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
-http://111.162.205.201:8686/rtp/225.1.1.138:5002
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
-http://171.35.84.178:8688/udp/239.252.220.185:5140
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
-http://221.13.233.107:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
-http://tcpsit.vicp.net:8811/udp/225.1.8.7:8104
+http://iptv.huuc.edu.cn/hls/cctv6hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
+https://smart.pendy.dpdns.org/Smart.php?id=cctv6
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-6.png",CCTV-6
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226010/index.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
http://60.26.181.220:4022/rtp/225.1.1.138:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
+http://111.162.205.201:8686/rtp/225.1.1.138:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
+http://123.160.232.254:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
http://219.141.44.245:8188/udp/238.255.2.12:5999
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
-http://111.196.134.250:20000/udp/239.3.1.61:8104
+http://omnix.cn:4000/udp/225.1.8.7:8104
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
-http://101.74.30.190:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
-http://123.160.232.254:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
-http://111.162.205.201:8686/rtp/225.1.1.196:5002
+http://171.15.18.199:8180/TV00000000000000000007@HHZT
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221225733
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
+http://goo.bkpcp.top/mg/CCTV7
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
+http://iptv.huuc.edu.cn/hls/cctv7hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-7.png",CCTV-7
+https://smart.pendy.dpdns.org/Smart.php?id=cctv7
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
http://60.26.181.220:4022/rtp/225.1.1.196:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
http://219.141.44.245:8188/udp/238.255.2.136:5999
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
-http://111.193.239.245:9999/rtp/239.3.1.175:8001
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
-http://111.196.134.250:20000/udp/239.3.1.175:8001
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
-http://101.74.30.190:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
-http://tcpsit.vicp.net:8811/udp/225.1.8.85:8000
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
http://171.15.18.199:8180/TV00000000000000000008@HHZT
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
+http://111.193.239.245:9999/rtp/239.3.1.175:8001
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
http://php.jdshipin.com/TVOD/hljyd.php?id=3221226008
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
-http://123.160.232.254:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
-http://221.13.233.107:9901/tsfile/live/1005_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
-http://111.162.205.201:8686/rtp/225.1.1.119:5002
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
-http://114.238.59.148:4000/rtp/239.49.8.53:9814
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
-http://220.169.100.41:10087/udp/239.76.246.159:1234
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
+http://goo.bkpcp.top/mg/cctv8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
+http://iptv.huuc.edu.cn/hls/cctv8hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
+https://www.freetv.top/migu/624878356.m3u8?migutoken=170b73b07e0cf0d307afea3545da5b9609d7c15461a2f4ac0f43634101df9baf391a446b91e5f84446b6a3b0934bb4730e2f3c4a32a565f904f22c8ff745a094d45dfd49c54f31b0b78156a080
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
+http://[2409:8087:1a01:df::4051]:80/TVOD/88888888/224/3221225795/main.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-8.png",CCTV-8
+https://smart.pendy.dpdns.org/Smart.php?id=cctv8hd
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
http://60.26.181.220:4022/rtp/225.1.1.119:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+http://111.162.205.201:8686/rtp/225.1.1.119:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+http://114.226.231.231:8787/rtp/239.49.8.53:9814
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
http://219.141.44.245:8188/udp/238.255.2.155:5999
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
-http://111.196.134.250:20000/udp/239.3.1.62:8112
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
-http://101.74.30.190:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
http://php.jdshipin.com/TVOD/hljyd.php?id=3221225734
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
-http://123.160.232.254:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+http://iptv.huuc.edu.cn/hls/cctv9hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+https://www.freetv.top/migu/673168140.m3u8?migutoken=749c49cdc31bb395e0349adc81010adc8707f80e51e9d3491ad67bfa71388ad768f7b52c8064338a7ef45eb7ddb192fb4937b21681c82499a0c16653ad9a9bec98ff5ce6ab183e4029bbdf269e
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+https://smart.pendy.dpdns.org/Smart.php?id=cctv9hd
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225734/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-9.png",CCTV-9
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221225734/index.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
http://60.26.181.220:4022/rtp/225.1.1.140:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
-http://111.162.205.201:8686/rtp/225.1.1.140:5002
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
-http://121.29.141.167:4022/rtp/239.253.92.196:6061
+http://171.15.18.199:8180/TV00000000000000000010@HHZT
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
http://114.226.231.231:8787/rtp/239.49.8.54:9818
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
-http://111.196.134.250:20000/udp/239.3.1.63:8116
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
-http://171.15.18.199:8180/TV00000000000000000010@HHZT
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
-http://101.74.30.190:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0
+http://111.162.205.201:8686/rtp/225.1.1.140:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
http://z.b.bkpcp.top/m.php?id=CCTV-10科教科教
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
http://goo.bkpcp.top/mg/cctv10
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
-http://123.160.232.254:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
-http://106.115.24.19:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
-http://111.193.239.245:9999/rtp/239.3.1.152:8120
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
+http://iptv.huuc.edu.cn/hls/cctv10hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
+https://smart.pendy.dpdns.org/Smart.php?id=cctv10hd
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225730/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-10.png",CCTV-10
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225730/index.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
http://60.26.181.220:4022/rtp/225.1.2.192:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
+http://111.193.239.245:9999/rtp/239.3.1.152:8120
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
http://php.jdshipin.com/TVOD/hljyd.php?id=3221226565
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
http://iptv.huuc.edu.cn/hls/cctv11hd.m3u8
@@ -1333,72 +1329,70 @@ http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/322
http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225597/index.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221225597/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225597/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-11.png",CCTV-11
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225597/index.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
-http://123.160.232.254:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
-http://114.238.59.148:4000/rtp/239.49.8.55:9822
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
-http://121.29.141.167:4022/rtp/239.253.92.197:6062
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
-http://220.169.100.41:10087/udp/239.76.246.162:1234
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
-http://111.162.205.201:8686/rtp/225.1.1.142:5002
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
-http://220.169.100.41:10087/udp/239.76.253.162:9000
+http://114.226.231.231:8787/rtp/239.49.8.55:9822
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
http://60.26.181.220:4022/rtp/225.1.1.142:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
-http://101.74.30.190:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
http://php.jdshipin.com/TVOD/hljyd.php?id=3221225731
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
http://z.b.bkpcp.top/m.php?id=CCTV-12社会与法社会与法
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
-http://123.160.232.254:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
-http://b.zgjok.com:35455/mgtv/608807423.m3u8
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
-http://124.162.19.248:4022/udp/225.0.4.219:7980
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
+http://iptv.huuc.edu.cn/hls/cctv12hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
+https://www.freetv.top/migu/673168185.m3u8?migutoken=37acadb43b1d7932b0a1e8a4f2d01a06b42a10c31f3ccb417bae200ac3028f30a8110509f2cd6cd130aee4b21c85693aa49817f3381e4d28e140d8db1a20b6fecea22fec17a70ff1341efe6081
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
+https://smart.pendy.dpdns.org/Smart.php?id=cctv12
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
+http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E2knJCFLHz_HqfBZXNGeA1A%7E_eNUb
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225731/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-12.png",CCTV-12
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225731/index.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
http://60.26.181.220:4022/rtp/225.1.2.193:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
-http://tcpsit.vicp.net:8811/udp/225.1.8.168:8130
+http://b.zgjok.com:35455/mgtv/608807423.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
http://111.162.205.201:8686/rtp/225.1.2.193:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
+http://124.162.19.248:4022/udp/225.0.4.219:7980
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
http://171.15.18.199:8180/TV00000000000000000013@HHZT
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
http://home.yulei.online:9999/rtp/226.0.2.165:9232
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
-http://101.74.30.190:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
https://event.pull.hebtv.com/jishi/cp1.m3u8
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
-http://123.160.232.254:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
+http://z.b.bkpcp.top/m.php?id=cctv13
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
+http://j.x.bkpcp.top/jx/CCTV13HD
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-13.png",CCTV-13
+http://ali-m-l.cztv.com/channels/lantian/channel21/1080p.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
http://116.237.148.215:8881/rtp/239.45.3.23:5140
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
-http://111.193.239.245:9999/rtp/239.3.1.65:8132
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
http://27.18.157.225:2701/rtp/239.69.1.107:10280
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
http://60.26.181.220:4022/rtp/225.1.1.144:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
-http://111.196.134.250:20000/udp/239.3.1.65:8132
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
http://171.15.18.199:8180/TV00000000000000000014@HHZT
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
-http://101.74.30.190:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
-http://114.238.59.148:4000/rtp/239.49.8.56:9826
+http://111.193.239.245:9999/rtp/239.3.1.65:8132
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
http://php.jdshipin.com/TVOD/hljyd.php?id=3221225732
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
-http://123.160.232.254:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
-http://111.162.205.201:8686/rtp/225.1.2.194:5002
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
-http://tcpsit.vicp.net:8811/udp/225.1.8.74:8136
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
+http://iptv.huuc.edu.cn/hls/cctv14hd.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
+https://www.freetv.top/migu/624878440.m3u8?migutoken=239edad94ac0bbff14f123c7f8996ed7639110bd6cf64ec8ba8cf85842224956d452ec8b683385cb27f8a7685224a03e3aa4d914b8fe33249da9df699351b105c795452d03f2be0a1f1e39adb0
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
+https://event.pull.hebtv.com/jishi/cp2.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-14.png",CCTV-14
+https://smart.pendy.dpdns.org/Smart.php?id=cctv14
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
http://60.26.181.220:4022/rtp/225.1.2.194:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
@@ -1413,38 +1407,42 @@ https://smart.pendy.dpdns.org/Smart.php?id=cctv15
http://[2409:8087:1a01:df::4033]:80/TVOD/88888888/224/3221226127/main.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225601/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225601/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225601/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-15.png",CCTV-15
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225601/index.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
-http://171.35.84.178:8688/udp/239.252.220.237:5140
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
-http://36.24.204.5:8888/udp/233.50.201.192:5140
+http://60.26.181.220:4022/rtp/225.1.2.237:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
http://117.12.149.38:4022/rtp/225.1.2.237:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
-http://111.162.205.201:8686/rtp/225.1.2.237:5002
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
http://27.18.157.225:2701/rtp/239.69.1.247:11124
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
+http://111.162.205.201:8686/rtp/225.1.2.237:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
http://111.193.239.245:9999/rtp/239.3.1.184:8001
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
-http://111.196.134.250:20000/udp/239.3.1.184:8001
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
-http://60.26.181.220:4022/rtp/225.1.2.237:5002
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
http://php.jdshipin.com/TVOD/hljyd.php?id=3221226100
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
http://livetv.wqwqwq.sbs/gaoma/cctv4k16.m3u8
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
-http://111.162.205.201:8686/rtp/225.1.2.52:5002
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226100/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226100/index.m3u8
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-16.png",CCTV-16
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226100/index.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
http://60.26.181.220:4022/rtp/225.1.2.52:5002
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
-http://111.193.239.245:9999/rtp/239.3.1.151:8144
-#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
http://b.zgjok.com:35455/mgtv/673168256.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
-http://180.165.29.204:4022/rtp/239.45.3.52:5140
+http://111.193.239.245:9999/rtp/239.3.1.151:8144
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
-http://114.238.59.148:4000/rtp/239.49.8.52:9810
+http://218.1.137.125:4022/rtp/239.45.3.52:5140
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
+http://180.165.29.204:4022/rtp/239.45.3.52:5140
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
http://php.jdshipin.com/TVOD/hljyd.php?id=3221225765
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
@@ -1453,6 +1451,8 @@ http://[2409:8087:1a01:df::4025]:80/TVOD/88888888/224/3221225708/main.m3u8
http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/1.m3u8?icpid=88888888&from=1&hms_devid=1012&vqe=3
#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225765/index.m3u8CCTV1
+#EXTINF:-1 group-title="📺央视频道" tvg-name="CCTV-17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-17.png",CCTV-17
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225765/index.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CETV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV1.png",CETV1
http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8
#EXTINF:-1 group-title="📺央视频道" tvg-name="CETV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV1.png",CETV1
@@ -1480,15 +1480,13 @@ http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221226997/1.m3u8?GuardEncType
#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
http://satellitepull.cnr.cn/live/wxgdws/playlist.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
-http://123.160.232.254:9901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
-http://114.238.59.148:4000/rtp/239.49.8.13:9422
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
http://60.26.181.220:4022/rtp/225.1.1.116:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://171.15.18.199:8180/TV00000000000000000031@HHZT
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
http://111.193.239.245:9999/rtp/239.3.1.142:8048
#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
-http://171.15.18.199:8180/TV00000000000000000031@HHZT
+http://218.1.137.125:4022/rtp/239.45.3.230:5140
#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
http://z.b.bkpcp.top/m.php?id=gdws
#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
@@ -1497,6 +1495,8 @@ http://j.x.bkpcp.top/jx/GUANGDHD
http://goo.bkpcp.top/mg/gdws
#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
http://iptv.huuc.edu.cn/hls/gdhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E4%B8%9C%E5%8D%AB%E8%A7%86.png",广东卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873459.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="香港卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86.png",香港卫视
http://cctvtxyh5c.liveplay.myqcloud.com/cstv/xianggangweishi_2/index.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="香港卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86.png",香港卫视
@@ -1512,38 +1512,32 @@ https://stream1.freetv.fun/xiang-gang-wei-shi-13.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="香港卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86.png",香港卫视
https://stream1.freetv.fun/xiang-gang-wei-shi-8.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="香港卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86.png",香港卫视
-https://stream1.freetv.fun/5335c88a9a7d8b74173b491f480d4f94e8d3bd596af54478106aa2399e6c7917.ctv
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
-http://123.160.232.254:9901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0
+https://stream1.freetv.fun/c751876ae5ceaa0d82b5cf2badc152342aa92a4b45bf504d12ee45966b2fc644.ctv
#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
http://139.155.142.13:9177/miguHD.php?id=浙江卫视
#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
-http://joyznm.i234.me:20000/udp/239.3.1.137:8036
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
http://27.18.157.225:2701/rtp/239.254.96.143:8932
#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
http://114.226.231.231:8787/rtp/239.49.8.20:9618
#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
http://60.26.181.220:4022/rtp/225.1.1.112:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
-http://111.162.205.201:8686/rtp/225.1.1.112:5002
+http://joyznm.i234.me:20000/udp/239.3.1.137:8036
#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
http://171.15.18.199:8180/TV00000000000000000020@HHZT
#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
http://zwebl02.cztv.com/live/channel011080P.m3u8?auth_key=2524708799-0-0-9a1229d8b9d311024ebea08c3fb1d63f
#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
http://zhfivel02.cztv.com/channel01/1080p.m3u8?auth_key=2524708799-0-0-adde67b1b344fdd5e512f30a4ae31915
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
-http://123.160.232.254:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
-http://111.162.205.201:8686/rtp/225.1.1.114:5002
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
-http://114.226.231.231:8787/rtp/239.49.8.12:9418
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
-http://tcpsit.vicp.net:8811/udp/225.1.8.41:8012
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010070
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",浙江卫视
+http://z.b.bkpcp.top/m.php?id=zjws
#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
http://60.26.181.220:4022/rtp/225.1.1.114:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://114.226.231.231:8787/rtp/239.49.8.12:9418
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
http://171.15.18.199:8180/TV00000000000000000018@HHZT
#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010058
@@ -1553,19 +1547,17 @@ http://z.b.bkpcp.top/m.php?id=hunws
http://j.x.bkpcp.top/jx/HUNANHD
#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
http://iptv.huuc.edu.cn/hls/hunanhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873458.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225610/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%8D%AB%E8%A7%86.png",湖南卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226493/1.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
http://satellitepull.cnr.cn/live/wxbtv/playlist.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
-http://198.16.100.186:8278/beijing/playlist.m3u8?tid=MD5D2836914028369140&ct=20273&tsum=a5b068469f28162e31477052e2de91d6
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
-http://123.160.232.254:9901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
http://116.237.148.215:8881/rtp/239.45.3.229:5140
#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
-http://220.169.100.41:10087/udp/239.76.253.184:9000
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
-http://tcpsit.vicp.net:8811/udp/225.1.8.21:8002
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
http://60.26.181.220:4022/rtp/225.1.1.113:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
http://zqh2333.top:2222/rtp/239.93.24.180:5140
@@ -1573,94 +1565,94 @@ http://zqh2333.top:2222/rtp/239.93.24.180:5140
http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010143
#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
http://z.b.bkpcp.top/m.php?id=bjws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://j.x.bkpcp.top/jx/BEIJHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226436/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ElMQ3ov45VmhzipweN5VstQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPg_yZ8DZHTaSU92MIl_o3b%2CEND
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+http://iptv.huuc.edu.cn/hls/btv1hd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E5%8D%AB%E8%A7%86.png",北京卫视
+https://smart.pendy.dpdns.org/Smart.php?id=beijing
#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
http://satellitepull.cnr.cn/live/wx32hubws/playlist.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
-http://112.27.145.212:9901/tsfile/live/1535_1.m3u8?key=txiptv&playlive=1&authid=0
+http://60.26.181.220:4022/rtp/225.1.1.147:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
http://joyznm.i234.me:20000/udp/239.3.1.138:8044
#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
-http://111.162.205.201:8686/rtp/225.1.1.147:5002
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
http://114.226.231.231:8787/rtp/239.49.8.8:9632
#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
-http://tcpsit.vicp.net:8811/udp/225.1.8.47:8044
+http://111.193.239.245:9999/rtp/239.3.1.138:8044
#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
-http://219.141.44.245:8188/udp/238.255.2.102:5999
+http://180.165.29.204:4022/rtp/239.45.3.239:5140
#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
-http://60.26.181.220:4022/rtp/225.1.1.147:5002
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010057
#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
-http://111.196.134.250:20000/udp/239.3.1.138:8044
+http://z.b.bkpcp.top/m.php?id=hubws
#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
-http://101.74.30.190:9901/tsfile/live/0132_1.m3u8?key=txiptv&playlive=1&authid=0
+http://j.x.bkpcp.top/jx/HUBEIHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8C%97%E5%8D%AB%E8%A7%86.png",湖北卫视
+http://goo.bkpcp.top/mg/hubws
#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
http://satellitepull.cnr.cn/live/wx32hljws/playlist.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
-http://114.238.59.2:4000/rtp/239.49.8.14:9426
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
http://116.237.148.215:8881/rtp/239.45.3.232:5140
#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
http://114.226.231.231:8787/rtp/239.49.8.14:9426
#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
-http://220.169.100.41:10087/udp/239.76.253.200:9000
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
http://60.26.181.220:4022/rtp/225.1.1.115:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
-http://111.196.134.250:20000/udp/239.3.1.133:8016
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
-http://114.238.59.148:4000/rtp/239.49.8.14:9426
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010056
#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
http://j.x.bkpcp.top/jx/HEILJHD
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
-http://satellitepull.cnr.cn/live/wxahws/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://l.cztvcloud.com/channels/lantian/SXyuyao3/720p.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://iptv.huuc.edu.cn/hls/hljhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873470.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E5%8D%AB%E8%A7%86.png",黑龙江卫视
+http://z.b.bkpcp.top/m.php?id=hljws
#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
http://203.205.191.53/live.ahsx.ahtv.cn/live/ahwssx.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://satellitepull.cnr.cn/live/wxahws/playlist.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
http://joyznm.i234.me:20000/udp/239.3.1.211:8064
#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
-http://114.226.231.231:8787/rtp/239.49.8.204:6000
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
-http://111.162.205.201:8686/rtp/225.1.1.127:5002
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
http://60.26.181.220:4022/rtp/225.1.1.127:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://114.226.231.231:8787/rtp/239.49.8.204:6000
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
http://111.193.239.245:9999/rtp/239.3.1.211:8064
#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
-http://121.29.141.167:4022/rtp/239.253.92.209:6566
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
-http://114.238.59.148:4000/rtp/239.49.8.204:6000
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
http://php.jdshipin.com/TVOD/hljyd.php?id=3221226391
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://j.x.bkpcp.top/jx/ANHUIHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://iptv.huuc.edu.cn/hls/ahhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%89%E5%BE%BD%E5%8D%AB%E8%A7%86.png",安徽卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873469.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
http://satellitepull.cnr.cn/live/wxcqws/playlist.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
-http://123.160.232.254:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0
+http://60.26.181.220:4022/rtp/225.1.1.155:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
http://114.226.231.231:8787/rtp/239.49.8.57:9830
#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
-http://tcpsit.vicp.net:8811/udp/225.1.8.172:8162
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
-http://219.141.44.245:8188/udp/238.255.2.78:5999
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
-http://111.196.134.250:20000/udp/239.3.1.122:8160
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
-http://111.162.205.201:8686/rtp/225.1.1.155:5002
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
-http://60.26.181.220:4022/rtp/225.1.1.155:5002
+http://123.160.232.254:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0
#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
http://171.15.18.199:8180/TV00000000000000000030@HHZT
#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
http://111.193.239.245:9999/rtp/239.3.1.122:8160
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
-http://123.160.232.254:9901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
-http://111.162.205.201:8686/rtp/225.1.2.31:5002
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
-http://tcpsit.vicp.net:8811/udp/225.1.8.45:8032
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
-http://111.196.134.250:20000/udp/239.3.1.136:8032
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010053
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://z.b.bkpcp.top/m.php?id=cqws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://j.x.bkpcp.top/jx/CHONGQHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%8D%E5%BA%86%E5%8D%AB%E8%A7%86.png",重庆卫视
+http://iptv.huuc.edu.cn/hls/cqhd.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
http://60.26.181.220:4022/rtp/225.1.2.31:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
@@ -1673,17 +1665,21 @@ http://z.b.bkpcp.top/m.php?id=dfws#rtsp://115.85.232.19/PLTV/88888910/224/322122
http://goo.bkpcp.top/mg/dfws
#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
http://iptv.huuc.edu.cn/hls/dfhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+https://www.freetv.top/migu/651632648.m3u8?migutoken=67b4219a3e6acdcf288118ed6bf84d3197052966f0bc854079b6038b3fca6437744ca78bb0ea1fad6f61b4c73d0df57bd8b539ec247fd28ce16d1375716bbf774ea19c99e4585bb828fa3851c0
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873462.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+https://bp-cdn-ali.bestv.cn/enhance/bestvdfws_enhance.m3u8?auth_key=1746334807-ddb61092a75249868c8bd1834313f437-0-8a760296d281d86bc4612f5fc4f85247
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E5%8D%AB%E8%A7%86.png",东方卫视
+https://live.lalifeier.eu.org/kankanews/dfws.m3u8?t=1746372302&key=04c79ed1fd72dbd3188040c54dc3858b
#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
http://satellitepull.cnr.cn/live/wx32fjws/playlist.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
-http://123.160.232.254:9901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
-http://121.29.141.167:4022/rtp/239.253.92.201:6146
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
-http://tcpsit.vicp.net:8811/udp/225.1.8.79:8148
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
http://115.171.80.94:1688/udp/225.1.8.79:8148
#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://123.160.232.254:9901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
http://219.141.44.245:8188/udp/238.255.2.103:5999
#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
http://111.193.239.245:9999/rtp/239.3.1.156:8148
@@ -1693,6 +1689,10 @@ http://171.15.18.199:8180/TV00000000000000000033@HHZT
http://180.165.29.204:4022/rtp/239.45.1.121:5140
#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010096
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://z.b.bkpcp.top/m.php?id=dnws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E5%8D%97%E5%8D%AB%E8%A7%86.png",东南卫视
+http://j.x.bkpcp.top/jx/DONGNHD
#EXTINF:-1 group-title="📡卫视频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
http://222.218.122.114:8188/udp/239.81.0.207:4056
#EXTINF:-1 group-title="📡卫视频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
@@ -1714,13 +1714,9 @@ http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221
#EXTINF:-1 group-title="📡卫视频道" tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%94%98%E8%82%83%E5%8D%AB%E8%A7%86.png",甘肃卫视
http://[2409:8c02:21c:60::2b]/live.rxip.sc96655.com/live/gsws_4000.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
-http://123.160.232.254:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
-http://121.29.141.167:4022/rtp/239.253.92.76:8043
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
http://60.26.181.220:4022/rtp/225.1.2.81:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
-http://101.74.30.190:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0
+http://123.160.232.254:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0
#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
http://180.165.29.204:4022/rtp/239.45.0.5:5140
#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
@@ -1733,8 +1729,10 @@ http://z.b.bkpcp.top/m.php?id=gxws
https://mobilelive.gxtv.cn/live/gx_live1004/playlist.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
http://goo.bkpcp.top/mg/gxws
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
-http://111.162.205.201:8686/rtp/225.1.2.28:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+http://live.cztv.cc:85/live/ggpd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%8D%AB%E8%A7%86.png",广西卫视
+https://hlscdn.liangtv.cn/live/de0f97348eb84f62aa6b7d8cf0430770/dd505d87880c478f901f38560ca4d4e6.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
http://115.171.80.94:1688/udp/225.1.8.77:8076
#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
@@ -1742,10 +1740,6 @@ http://219.141.44.245:8188/udp/238.255.2.1:5999
#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
http://60.26.181.220:4022/rtp/225.1.2.28:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
-http://121.29.141.167:4022/rtp/239.253.92.105:6055
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
-http://tcpsit.vicp.net:8811/udp/225.1.8.77:8076
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
http://111.193.239.245:9999/rtp/239.3.1.149:8076
#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
http://php.jdshipin.com/TVOD/hljyd.php?id=3221226474
@@ -1753,12 +1747,18 @@ http://php.jdshipin.com/TVOD/hljyd.php?id=3221226474
http://z.b.bkpcp.top/m.php?id=gzws
#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
http://j.x.bkpcp.top/jx/GUIZHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://goo.bkpcp.top/mg/gzws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225974/main.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%B4%B5%E5%B7%9E%E5%8D%AB%E8%A7%86.png",贵州卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873471.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
http://satellitepull.cnr.cn/live/wxhainlyws/playlist.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
-http://171.15.18.199:8180/TV00000000000000000028@HHZT
+http://116.237.148.215:8881/rtp/239.45.1.81:5140
#EXTINF:-1 group-title="📡卫视频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
-http://121.29.141.167:4022/rtp/239.253.93.155:6323
+http://171.15.18.199:8180/TV00000000000000000028@HHZT
#EXTINF:-1 group-title="📡卫视频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
http://218.1.137.125:4022/rtp/239.45.1.81:5140
#EXTINF:-1 group-title="📡卫视频道" tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%B7%E5%8D%97%E5%8D%AB%E8%A7%86.png",海南卫视
@@ -1780,49 +1780,43 @@ http://222.218.122.114:8188/udp/239.81.0.94:4056
#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
http://116.237.148.215:8881/rtp/239.45.1.44:5140
#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
-http://111.162.205.201:8686/rtp/225.1.2.27:5002
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
http://27.18.157.225:2701/rtp/239.254.96.113:9616
#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
-http://111.193.239.245:9999/rtp/239.3.1.148:8072
+http://114.226.231.231:8787/rtp/239.49.8.188:6000
#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
http://60.26.181.220:4022/rtp/225.1.2.27:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
-http://219.141.44.245:8188/udp/238.255.2.77:5999
+http://111.193.239.245:9999/rtp/239.3.1.148:8072
#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
-http://tcpsit.vicp.net:8811/udp/225.1.8.76:8002
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010101
#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
-http://101.74.30.190:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0
+http://z.b.bkpcp.top/m.php?id=hbws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8C%97%E5%8D%AB%E8%A7%86.png",河北卫视
+https://jwplay.hebyun.com.cn/live/hbwstv/1500k/tzwj_video.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://satellitepull.cnr.cn/live/wxhnws/playlist.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
http://xxwx.yoesun.com/xxw/河南网.php
#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://xxwx.yoesun.com/xxw/河南网.php?id=hnws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
http://150.158.10.195:80/dxxw.php?id=hnws
#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
http://1.94.31.214/php/hntv.php
#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
-http://xxwx.yoesun.com/xxw/河南网.php?id=hnws
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
-http://satellitepull.cnr.cn/live/wxhnws/playlist.m3u8
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
-http://123.160.232.254:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
-http://111.162.205.201:8686/rtp/225.1.2.61:5002
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
http://60.26.181.220:4022/rtp/225.1.2.61:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
http://171.15.18.199:8180/TV00000000000000000016@HHZT
#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
http://tvpull.dxhmt.cn:9081/tv/11425-1.m3u8
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
-http://111.162.205.201:8686/rtp/225.1.2.26:5002
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
-http://171.35.84.178:8688/udp/239.252.220.188:5140
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
-http://60.26.181.220:4022/rtp/225.1.2.26:5002
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://php.jdshipin.com/TVOD/hljyd.php?id=3221226480
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%B3%E5%8D%97%E5%8D%AB%E8%A7%86.png",河南卫视
+http://z.b.bkpcp.top/m.php?id=hnws
#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
https://hyf000.eu.org/80947108/JILINWS
#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
-http://111.196.134.250:20000/udp/239.3.1.240:8172
+http://60.26.181.220:4022/rtp/225.1.2.26:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
http://171.15.18.199:8180/TV00000000000000000036@HHZT
#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
@@ -1833,18 +1827,18 @@ http://z.b.bkpcp.top/m.php?id=jlws
http://j.x.bkpcp.top/jx/JILHD
#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
http://goo.bkpcp.top/mg/jlws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000004972569.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226397/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E5%8D%AB%E8%A7%86.png",吉林卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226397/index.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
-http://106.115.24.17:9901/tsfile/live/1023_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
-http://220.169.100.41:10087/udp/239.76.251.89:9000
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
-http://111.162.205.201:8686/rtp/225.1.1.126:5002
+http://114.226.231.231:8787/rtp/239.49.8.16:9602
#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
http://60.26.181.220:4022/rtp/225.1.1.126:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
-http://121.29.141.167:4022/rtp/239.253.92.88:8018
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
-http://101.74.30.190:9901/tsfile/live/0127_1.m3u8?key=txiptv&playlive=1&authid=0
+http://114.238.59.148:4000/rtp/239.49.8.16:9602
#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010059
#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
@@ -1853,18 +1847,18 @@ http://z.b.bkpcp.top/m.php?id=jsws
http://goo.bkpcp.top/mg/jsws
#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
http://iptv.huuc.edu.cn/hls/jshd.m3u8
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
-http://123.160.232.254:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873461.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226310/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%8B%8F%E5%8D%AB%E8%A7%86.png",江苏卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226310/index.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
http://joyznm.i234.me:20000/udp/239.3.1.123:8164
#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
-http://220.169.100.41:10087/udp/239.76.252.225:9000
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
http://60.26.181.220:4022/rtp/225.1.2.29:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
-http://112.30.73.119:9902/tsfile/live/0138_1.m3u8?key=txiptv&playlive=0&authid=0
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
-http://121.29.141.167:4022/rtp/239.253.92.19:6145
+http://123.160.232.254:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0
#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010060
#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
@@ -1873,15 +1867,15 @@ http://z.b.bkpcp.top/m.php?id=jxws
http://goo.bkpcp.top/mg/jxws
#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
http://iptv.huuc.edu.cn/hls/jxhd.m3u8
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
-http://123.160.232.254:9901/tsfile/live/0121_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
-http://tcpsit.vicp.net:8811/udp/225.1.8.51:8056
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+https://www.freetv.top/migu/783847495.m3u8?migutoken=fddcc05dc0245329d3208607a5b1f5a1980bc31a7ced510e345af6cc68f5b86d2d9178b45706a0b6a0ceddc82ce06e53375cfedbc96fd0b00c12195c7d77b6f23811a67970bcfeb47629aa5aa6
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://[2409:8087:1a01:df::4027]:80/TVOD/88888888/224/3221225935/main.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%9F%E8%A5%BF%E5%8D%AB%E8%A7%86.png",江西卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000004796511.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
http://60.26.181.220:4022/rtp/225.1.1.154:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
-http://121.29.141.167:4022/rtp/239.253.92.115:6056
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
http://php.jdshipin.com/TVOD/hljyd.php?id=3221226546
#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
http://z.b.bkpcp.top/m.php?id=lnws
@@ -1893,6 +1887,12 @@ http://iptv.huuc.edu.cn/hls/lnhd.m3u8
http://dsj.motem.top:8880/bptv/10000100000000050000000003873468.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226546/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226254/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226327/1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%BE%BD%E5%AE%81%E5%8D%AB%E8%A7%86.png",辽宁卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226336/1.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
http://satellitepull.cnr.cn/live/wx32nmgws/playlist.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%86%85%E8%92%99%E5%8F%A4%E5%8D%AB%E8%A7%86.png",内蒙古卫视
@@ -1936,8 +1936,6 @@ http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/32
#EXTINF:-1 group-title="📡卫视频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
http://satellitepull.cnr.cn/live/wx32qhws/playlist.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
-http://123.160.232.254:9901/tsfile/live/0140_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010111
#EXTINF:-1 group-title="📡卫视频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
http://z.b.bkpcp.top/m.php?id=qhws
@@ -1953,26 +1951,28 @@ http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/322
http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226529/1.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226916/1.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E5%8D%AB%E8%A7%86.png",青海卫视
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001082/index.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
http://nn.7x9d.cn/xzc2.php?ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA2LjAuMC4wIFNhZmFyaS81MzcuMzY=&hls=aHR0cDovL3d3dy5kc2suY2MvcGhwL3N4Z2QucGhwP2lkPXNkd3M=
#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
-http://123.160.232.254:9901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
-http://joyznm.i234.me:20000/udp/239.3.1.209:8052
+http://115.171.80.94:1688/udp/225.1.8.50:8052
#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
http://114.226.231.231:8787/rtp/239.49.8.7:9306
#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
-http://220.169.100.41:10087/udp/239.76.246.195:1234
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
-http://115.171.80.94:1688/udp/225.1.8.50:8052
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
-http://tcpsit.vicp.net:8811/udp/225.1.8.50:8052
+http://joyznm.i234.me:20000/udp/239.3.1.209:8052
#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
http://111.193.239.245:9999/rtp/239.3.1.209:8052
#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
-http://121.29.141.167:4022/rtp/239.253.92.207:8109
+http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010066
#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
-http://114.238.59.2:4000/rtp/239.49.8.7:9306
+http://z.b.bkpcp.top/m.php?id=sdws
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://j.x.bkpcp.top/jx/SHANDHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://l.cztvcloud.com/channels/lantian/SXshengzhou1/720p.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E5%8D%AB%E8%A7%86.png",山东卫视
+http://iptv.huuc.edu.cn/hls/sdhd.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010114
#EXTINF:-1 group-title="📡卫视频道" tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E8%A5%BF%E5%8D%AB%E8%A7%86.png",山西卫视
@@ -2016,36 +2016,34 @@ https://www.freetv.top/migu/738910838.m3u8?migutoken=35df06ac83a8fe0b0d98f96b8db
#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
http://222.218.122.114:8188/udp/239.81.0.130:4056
#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
-http://116.237.148.215:8881/rtp/239.45.1.83:5140
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
-http://111.162.205.201:8686/rtp/225.1.1.123:5002
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
http://60.26.181.220:4022/rtp/225.1.1.123:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
-http://219.141.44.245:8188/udp/238.255.2.76:5999
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
http://171.15.18.199:8180/TV00000000000000000040@HHZT
#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
-http://121.29.141.167:4022/rtp/239.253.92.16:6043
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
http://php.jdshipin.com/TVOD/hljyd.php?id=3221226338
#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
http://z.b.bkpcp.top/m.php?id=scws
#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
http://j.x.bkpcp.top/jx/SICHD
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://iptv.huuc.edu.cn/hls/schd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887274.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226338/index.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%9B%E5%B7%9D%E5%8D%AB%E8%A7%86.png",四川卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226338/index.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
http://satellitepull.cnr.cn/live/wxszws/playlist.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
-http://123.160.232.254:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
http://60.26.181.220:4022/rtp/225.1.1.117:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
http://219.141.44.245:8188/udp/238.255.2.61:5999
#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
-http://111.196.134.250:20000/udp/239.3.1.134:8020
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
http://111.162.205.201:8686/rtp/225.1.1.117:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://114.238.59.148:4000/rtp/239.49.8.15:9430
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010068
#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
http://iptv.huuc.edu.cn/hls/szhd.m3u8
@@ -2053,6 +2051,8 @@ http://iptv.huuc.edu.cn/hls/szhd.m3u8
https://smart.pendy.dpdns.org/Smart.php?id=shenzhen
#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
http://dsj.motem.top:8880/bptv/10000100000000050000000003873474.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%B1%E5%9C%B3%E5%8D%AB%E8%A7%86.png",深圳卫视
+http://z.b.bkpcp.top/m.php?id=szws
#EXTINF:-1 group-title="📡卫视频道" tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%89%E6%B2%99%E5%8D%AB%E8%A7%86.png",三沙卫视
http://dsj.motem.top:8880/bptv/10000100000000050000000003887452.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%89%E6%B2%99%E5%8D%AB%E8%A7%86.png",三沙卫视
@@ -2074,25 +2074,25 @@ http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/ind
#EXTINF:-1 group-title="📡卫视频道" tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%89%E6%B2%99%E5%8D%AB%E8%A7%86.png",三沙卫视
https://stream1.freetv.fun/8bd6b69c423ac31e71c2311ad33f4f291e1314c69005ffb7b3b7defc2944adb2.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
-http://123.160.232.254:9901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
-http://111.162.205.201:8686/rtp/225.1.1.111:5002
+http://60.26.181.220:4022/rtp/225.1.1.111:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
http://116.237.148.215:8881/rtp/239.45.1.124:5140
#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
http://114.226.231.231:8787/rtp/239.49.8.35:8620
#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
-http://60.26.181.220:4022/rtp/225.1.1.111:5002
+http://111.162.205.201:8686/rtp/225.1.1.111:5002
#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
http://111.193.239.245:9999/rtp/239.3.1.141:1234
#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
-http://121.29.141.167:4022/rtp/239.253.92.91:8021
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
http://php.jdshipin.com/TVOD/hljyd.php?id=3221226459
#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
http://j.x.bkpcp.top/jx/TIANJHD
#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
http://iptv.huuc.edu.cn/hls/tjhd.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225972/main.m3u8
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003873466.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E8%97%8F%E5%8D%AB%E8%A7%86.png",西藏卫视
http://satellitepull.cnr.cn/live/wxxzws/playlist.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E8%97%8F%E5%8D%AB%E8%A7%86.png",西藏卫视
@@ -2134,10 +2134,10 @@ http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/32212
#EXTINF:-1 group-title="📡卫视频道" tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E7%96%86%E5%8D%AB%E8%A7%86.png",新疆卫视
http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226546/1.m3u8
#EXTINF:-1 group-title="📡卫视频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
-http://123.160.232.254:9901/tsfile/live/0119_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="📡卫视频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
http://116.237.148.215:8881/rtp/239.45.0.4:5140
#EXTINF:-1 group-title="📡卫视频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
+http://218.1.137.125:4022/rtp/239.45.0.4:5140
+#EXTINF:-1 group-title="📡卫视频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
http://180.165.29.204:4022/rtp/239.45.0.4:5140
#EXTINF:-1 group-title="📡卫视频道" tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E5%8D%97%E5%8D%AB%E8%A7%86.png",云南卫视
http://php.jdshipin.com/TVOD/hljyd.php?id=3221226444
@@ -2430,12 +2430,8 @@ https://stream1.freetv.fun/shan-tou-jing-ji-5.ctv
#EXTINF:-1 group-title="☘️广东频道" tvg-name="汕头经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%95%E5%A4%B4%E7%BB%8F%E6%B5%8E.png",汕头经济
https://stream1.freetv.fun/shan-tou-jing-ji-6.ctv
#EXTINF:-1 group-title="☘️广东频道" tvg-name="茂名综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8C%82%E5%90%8D%E7%BB%BC%E5%90%88.png",茂名综合
-http://baota.guangyuan.site:8188/rtp/239.77.0.206:5146
-#EXTINF:-1 group-title="☘️广东频道" tvg-name="茂名综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8C%82%E5%90%8D%E7%BB%BC%E5%90%88.png",茂名综合
http://rustdesk.szsun.xyz:8088/rtp/239.77.0.206:5146
#EXTINF:-1 group-title="☘️广东频道" tvg-name="茂名公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8C%82%E5%90%8D%E5%85%AC%E5%85%B1.png",茂名公共
-http://baota.guangyuan.site:8188/rtp/239.77.0.207:5146
-#EXTINF:-1 group-title="☘️广东频道" tvg-name="茂名公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8C%82%E5%90%8D%E5%85%AC%E5%85%B1.png",茂名公共
http://rustdesk.szsun.xyz:8088/rtp/239.77.0.207:5146
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%99%E6%B1%9F%E9%92%B1%E6%B1%9F.png",浙江钱江
https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8
@@ -2726,14 +2722,10 @@ https://l.cztvcloud.com/channels/lantian/SXlongyou1/720p.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="龙游新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BE%99%E6%B8%B8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",龙游新闻综合
http://l.cztvcloud.com/channels/lantian/SXlongyou1/720p.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="龙泉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BE%99%E6%B3%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",龙泉新闻综合
-http://l.cztvcloud.com/channels/lantian/SXlongquan1/720p.m3u8?zzhed,
-#EXTINF:-1 group-title="☘️浙江频道" tvg-name="龙泉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BE%99%E6%B3%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",龙泉新闻综合
http://l.cztvcloud.com/channels/lantian/SXlongquan1/720p.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="龙泉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BE%99%E6%B3%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",龙泉新闻综合
http://l.cztvcloud.com/channels/lantian/SXlongquan1/720p.m3u8?zzhed"
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="青田电视台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E7%94%B0%E7%94%B5%E8%A7%86%E5%8F%B0.png",青田电视台
-http://l.cztvcloud.com/channels/lantian/SXqingtian1/720p.m3u8?zzhed
-#EXTINF:-1 group-title="☘️浙江频道" tvg-name="青田电视台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E7%94%B0%E7%94%B5%E8%A7%86%E5%8F%B0.png",青田电视台
http://l.cztvcloud.com/channels/lantian/SXqingtian1/720p.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="遂昌综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%81%82%E6%98%8C%E7%BB%BC%E5%90%88.png",遂昌综合
http://l.cztvcloud.com/channels/lantian/SXsuichang1/720p.m3u8?zzhed
@@ -2814,8 +2806,6 @@ https://stream1.freetv.fun/shao-xing-gong-gong-8.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="洞头综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B4%9E%E5%A4%B4%E7%BB%BC%E5%90%88.png",洞头综合
http://l.cztvcloud.com/channels/lantian/SXdongtou1/720p.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="永嘉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B0%B8%E5%98%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",永嘉新闻综合
-http://l.cztvcloud.com/channels/lantian/SXyongjia1/720p.m3u8?zzhed,
-#EXTINF:-1 group-title="☘️浙江频道" tvg-name="永嘉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B0%B8%E5%98%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",永嘉新闻综合
http://l.cztvcloud.com/channels/lantian/SXyongjia1/720p.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="永嘉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B0%B8%E5%98%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",永嘉新闻综合
https://stream1.freetv.fun/yong-jia-xin-wen-zong-he-3.ctv
@@ -2838,6 +2828,8 @@ http://l.cztvcloud.com/channels/lantian/SXwuyi1/720p.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="武义新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%AD%A6%E4%B9%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",武义新闻综合
http://l.cztvcloud.com/channels/lantian/SXwuyi1/720p.m3u8?zzhed
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="松阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%BE%E9%98%B3%E7%BB%BC%E5%90%88.png",松阳综合
+http://l.cztvcloud.com/channels/lantian/SXsongyang1/720p.m3u8?zzhed;http://l.cztvcloud.com/channels/lantian/SXsongyang1/720p.m3u8zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="松阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%BE%E9%98%B3%E7%BB%BC%E5%90%88.png",松阳综合
http://l.cztvcloud.com/channels/lantian/SXsongyang1/720p.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="松阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%BE%E9%98%B3%E7%BB%BC%E5%90%88.png",松阳综合
http://l.cztvcloud.com/channels/lantian/SXsongyang1/720p.m3u8
@@ -2878,8 +2870,6 @@ http://l.cztvcloud.com/channels/lantian/SXkaihua1/720p.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="开化国家公园" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%8C%96%E5%9B%BD%E5%AE%B6%E5%85%AC%E5%9B%AD.png",开化国家公园
http://l.cztvcloud.com/channels/lantian/SXkaihua2/720p.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="庆元综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%86%E5%85%83%E7%BB%BC%E5%90%88.png",庆元综合
-http://l.cztvcloud.com/channels/lantian/SXqingyuan1/720p.m3u8?zzhed[浙江]洞头综合频道
-#EXTINF:-1 group-title="☘️浙江频道" tvg-name="庆元综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%86%E5%85%83%E7%BB%BC%E5%90%88.png",庆元综合
http://l.cztvcloud.com/channels/lantian/SXqingyuan1/720p.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="庆元综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BA%86%E5%85%83%E7%BB%BC%E5%90%88.png",庆元综合
http://l.cztvcloud.com/channels/lantian/SXqingyuan1/720p.m3u8?zzhed
@@ -2922,14 +2912,12 @@ http://l.cztvcloud.com/channels/lantian/SXlanxi1/720p.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="兰溪新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%85%B0%E6%BA%AA%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",兰溪新闻综合
http://l.cztvcloud.com/channels/lantian/SXlanxi1/720p.m3u8?zzhed
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余杭综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E6%9D%AD%E7%BB%BC%E5%90%88.png",余杭综合
+http://l.cztvcloud.com/channels/lantian/SXyuhang1/720p.m3u8?cWlkPSZzPTg3OWMwYmMyZDMzYTFhZGY3NDQxMjgyYTg1MmUzNTY0JmVzPTE3MDY2Nzc4NzMmdXVpZD0yMjdiY2MzNGNiNGY0MThlYjRiY2IxYzcwNmZjODNkMS02NzQ3NDY2NyZ2PTImYXM9MCZjZG5leF9pZD10eF9waG9uZV9saXZl
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余杭综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E6%9D%AD%E7%BB%BC%E5%90%88.png",余杭综合
http://l.cztvcloud.com/channels/lantian/SXyuhang1/720p.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余杭未来E" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E6%9D%AD%E6%9C%AA%E6%9D%A5E.png",余杭未来E
-http://l.cztvcloud.com/channels/lantian/SXyuhang3/720p.m3u8?zzhed
-#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余杭未来E" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E6%9D%AD%E6%9C%AA%E6%9D%A5E.png",余杭未来E
http://l.cztvcloud.com/channels/lantian/SXyuhang3/720p.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E7%BB%BC%E5%90%88.png",余姚综合
-http://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8?zzhed
-#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E7%BB%BC%E5%90%88.png",余姚综合
http://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E7%BB%BC%E5%90%88.png",余姚综合
https://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8
@@ -2938,8 +2926,6 @@ http://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8?cWlkPSZzPTg3OWMwYmMyZ
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E7%BB%BC%E5%90%88.png",余姚综合
http://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",余姚新闻综合
-http://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8?cWlkPSZzPTg3OWMwYmMyZDMzYTFhZGY3NDQxMjgyYTg1MmUzNTY0JmVzPTE3MDY2Nzc4NzMmdXVpZD0yMjdiY2MzNGNiNGY0MThlYjRiY2IxYzcwNmZjODNkMS02NzQ3NDY2NyZ2PTImYXM9MCZjZG5leF9pZD10eF9waG9uZV9saXZl
-#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",余姚新闻综合
https://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="余姚新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BD%99%E5%A7%9A%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",余姚新闻综合
http://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8?zzhed
@@ -2966,8 +2952,6 @@ http://l.cztvcloud.com/channels/lantian/SXshangyu1/720p.m3u8?zzhed
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",上虞新闻综合
http://l.cztvcloud.com/channels/lantian/SXshangyu1/720p.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞新商都" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%B0%E5%95%86%E9%83%BD.png",上虞新商都
-http://l.cztvcloud.com/channels/lantian/SXshangyu3/720p.m3u8?zzhed
-#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞新商都" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%B0%E5%95%86%E9%83%BD.png",上虞新商都
http://l.cztvcloud.com/channels/lantian/SXshangyu3/720p.m3u8?zzhed\r\n
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞新商都" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%B0%E5%95%86%E9%83%BD.png",上虞新商都
https://stream1.freetv.fun/shang-yu-xin-shang-du-1.m3u8
@@ -2984,10 +2968,10 @@ https://stream1.freetv.fun/shang-yu-xin-shang-du-2.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞新商都" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%B0%E5%95%86%E9%83%BD.png",上虞新商都
https://stream1.freetv.fun/shang-yu-xin-shang-du-4.m3u8
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%87%E5%8C%96%E5%BD%B1%E9%99%A2.png",上虞文化影院
-http://l.cztvcloud.com/channels/lantian/SXshangyu2/720p.m3u8?zzhed
-#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%87%E5%8C%96%E5%BD%B1%E9%99%A2.png",上虞文化影院
http://l.cztvcloud.com/channels/lantian/SXshangyu2/720p.m3u8?zzhed;http://l.cztvcloud.com/channels/lantian/SXshangyu2/720p.m3u8zzhed
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%87%E5%8C%96%E5%BD%B1%E9%99%A2.png",上虞文化影院
+http://l.cztvcloud.com/channels/lantian/SXshangyu2/720p.m3u8?zzhed
+#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%87%E5%8C%96%E5%BD%B1%E9%99%A2.png",上虞文化影院
https://stream1.freetv.fun/shang-yu-wen-hua-ying-yuan-3.ctv
#EXTINF:-1 group-title="☘️浙江频道" tvg-name="上虞文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%8A%E8%99%9E%E6%96%87%E5%8C%96%E5%BD%B1%E9%99%A2.png",上虞文化影院
https://stream1.freetv.fun/shang-yu-wen-hua-ying-yuan-4.ctv
@@ -3038,10 +3022,10 @@ http://nas.suntao.online:35455/bptv/10000100000000050000000003870780.m3u8
#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E6%96%B0%E9%97%BB.png",北京新闻
http://yc.myds.me:35455/bptv/10000100000000050000000003870780.m3u8
#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",北京生活
-http://111.193.239.245:9999/rtp/239.3.1.117:8000
-#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",北京生活
https://wstvcpudali.v.myalicdn.com/wstvcpud/udrmbtv7_1/index.m3u8?adapt=0&BR=audio
#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",北京生活
+http://111.193.239.245:9999/rtp/239.3.1.117:8000
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",北京生活
http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226514/1.m3u8
#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%94%9F%E6%B4%BB.png",北京生活
http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226561/1.m3u8
@@ -3060,10 +3044,10 @@ https://migu1.188766.xyz/?migutoken=2a838e272a0ca0393b5b8d6e69fc36bb&id=%E5%
#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E7%A7%91%E6%95%99.png",北京科教
http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225729/index.m3u8
#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F.png",北京财经
-http://111.193.239.245:9999/rtp/239.3.1.116:8000
-#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F.png",北京财经
https://wstvcpudali.v.myalicdn.com/wstvcpud/udrmbtv5_1/index.m3u8?adapt=0&BR=audio
#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F.png",北京财经
+http://111.193.239.245:9999/rtp/239.3.1.116:8000
+#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F.png",北京财经
http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226516/1.m3u8
#EXTINF:-1 group-title="☘️北京频道" tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E4%BA%AC%E8%B4%A2%E7%BB%8F.png",北京财经
http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226560/1.m3u8
@@ -3218,12 +3202,12 @@ http://miqlin.cyou:8888/udp/233.18.204.65:5140
#EXTINF:-1 group-title="☘️上海频道" tvg-name="东方财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%96%B9%E8%B4%A2%E7%BB%8F.png",东方财经
http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8?icpid=88888888&servicetype=1
#EXTINF:-1 group-title="☘️上海频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
-http://180.165.28.24:4022/rtp/239.45.3.134:5140
-#EXTINF:-1 group-title="☘️上海频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
http://116.237.148.215:8881/rtp/239.45.3.134:5140
#EXTINF:-1 group-title="☘️上海频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
http://180.165.29.204:4022/rtp/239.45.3.134:5140
#EXTINF:-1 group-title="☘️上海频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
+http://218.1.137.125:4022/rtp/239.45.3.134:5140
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031113
#EXTINF:-1 group-title="☘️上海频道" tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8A%A8%E6%BC%AB%E7%A7%80%E5%9C%BA.png",动漫秀场
http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226197/index.m3u8
@@ -3240,6 +3224,8 @@ https://stream1.freetv.fun/ipv6-dong-man-xiu-chang-11.m3u8
#EXTINF:-1 group-title="☘️上海频道" tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%93%88%E7%82%AB%E5%8A%A8.png",哈哈炫动
http://116.237.148.215:8881/rtp/239.45.1.55:5140
#EXTINF:-1 group-title="☘️上海频道" tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%93%88%E7%82%AB%E5%8A%A8.png",哈哈炫动
+http://218.1.137.125:4022/rtp/239.45.1.55:5140
+#EXTINF:-1 group-title="☘️上海频道" tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%93%88%E7%82%AB%E5%8A%A8.png",哈哈炫动
http://180.165.29.204:4022/rtp/239.45.1.55:5140
#EXTINF:-1 group-title="☘️上海频道" tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%93%88%E7%82%AB%E5%8A%A8.png",哈哈炫动
http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010117
@@ -3255,8 +3241,6 @@ https://stream1.freetv.fun/ha-ha-xuan-dong-31.m3u8
https://live.lalifeier.eu.org/kankanews/hhxd.m3u8?t=1746307365&key=611cf4efea7a3dd2fe1b6a28541bed06
#EXTINF:-1 group-title="☘️上海频道" tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%93%88%E7%82%AB%E5%8A%A8.png",哈哈炫动
https://stream1.freetv.fun/ha-ha-xuan-dong-25.m3u8
-#EXTINF:-1 group-title="☘️上海频道" tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%93%88%E5%93%88%E7%82%AB%E5%8A%A8.png",哈哈炫动
-https://stream1.freetv.fun/ha-ha-xuan-dong-8.m3u8
#EXTINF:-1 group-title="☘️上海频道" tvg-name="新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新闻综合
http://p2.vzan.com/slowlive/596867413819827251/live.m3u8
#EXTINF:-1 group-title="☘️上海频道" tvg-name="新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新闻综合
@@ -3425,8 +3409,6 @@ https://live.nbs.cn/channels/njtv/xxpd/m3u8:500k/live.m3u8
http://[2409:8087:2001:20:2800:0:df6e:eb10]/wh7f454c46tw3029680014_-204362700/ott.mobaibox.com/PLTV/3/224/3221227730/index.m3u8
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京信息" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E4%BF%A1%E6%81%AF.png",南京信息
http://[2409:8087:2001:20:2800:0:df6e:eb10]:80/wh7f454c46tw471420022_-144346351/ott.mobaibox.com/PLTV/3/224/3221227730/index.m3u8?icpid=3&RTS=1674380586&from=40&popid=40&hms_devid=2110&prioritypopid=40&vqe=3
-#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京信息" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E4%BF%A1%E6%81%AF.png",南京信息
-http://live.nbs.cn/channels/njtv/xxpd/500k.m3u8?zjiangsd
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京十八" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%8D%81%E5%85%AB.png",南京十八
http://z.b.bkpcp.top/m.php?id=njsb
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京十八" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%8D%81%E5%85%AB.png",南京十八
@@ -3449,8 +3431,6 @@ https://live.nbs.cn/channels/njtv/ylpd/m3u8:500k/live.m3u8
http://[2409:8087:2001:20:2800:0:df6e:eb10]/wh7f454c46tw3055198838_-954191684/ott.mobaibox.com/PLTV/3/224/3221227722/index.m3u8
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%A8%B1%E4%B9%90.png",南京娱乐
http://[2409:8087:2001:20:2800:0:df6e:eb10]:80/wh7f454c46tw1756933853_327829486/ott.mobaibox.com/PLTV/3/224/3221227722/index.m3u8?icpid=3&RTS=1674386167&from=40&popid=40&hms_devid=2110&prioritypopid=40&vqe=3
-#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%A8%B1%E4%B9%90.png",南京娱乐
-http://live.nbs.cn/channels/njtv/ylpd/500k.m3u8?zjiangsd
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%B0%91%E5%84%BF.png",南京少儿
https://live.nbs.cn/channels/njtv/sepd/nbs23.m3u8
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%B0%91%E5%84%BF.png",南京少儿
@@ -3467,8 +3447,6 @@ http://live.nbs.cn/channels/njtv/sepd/500k.m3u8#http://live.nbs.cn/channels/njtv
http://live.nbs.cn/channels/njtv/sepd/500k.m3u8
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%B0%91%E5%84%BF.png",南京少儿
http://live.nbs.cn/channels/njtv/sepd/m3u8:500k/live.m3u8#http://live.nbs.cn/channels/njtv/sepd/500k.m3u8?zjiangsd
-#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E5%B0%91%E5%84%BF.png",南京少儿
-http://live.nbs.cn/channels/njtv/sepd/nbs23.m3u8
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京教科" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E6%95%99%E7%A7%91.png",南京教科
http://live.nbs.cn/channels/njtv/jkpd/nbs06.m3u8
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="南京教科" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E4%BA%AC%E6%95%99%E7%A7%91.png",南京教科
@@ -3527,8 +3505,6 @@ http://stream.thmz.com/wxtv2/sd/live.m3u8?_upt=978cd8731706199708
http://stream.thmz.com/wxtv2/sd/live.m3u8?_upt=acffe97a1704940314
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E5%A8%B1%E4%B9%90.png",无锡娱乐
http://stream.thmz.com/wxtv2/playlist.m3u8
-#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E5%A8%B1%E4%B9%90.png",无锡娱乐
-http://stream.thmz.com/wxtv2/sd/live.m3u8?zjiangsd#http://stream.thmz.com/wxtv2/playlist.m3u8?_upt=5ff4061f1706166872#http://stream.thmz.com/wxtv2/playlist.m3u8#http://stream.thmz.com/wxtv2/sd/live.m3u8?_upt=acffe97a1704940314
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",无锡新闻综合
http://m.m3u8.wifiwx.com/live/wifiwx-239.m3u8?zjiangsd
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",无锡新闻综合
@@ -3549,16 +3525,12 @@ http://stream.thmz.com/wxtv4/sd/live.m3u8
http://stream.thmz.com/wxtv4/sd/live.m3u8?_upt=978cd8731706199708
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E7%94%9F%E6%B4%BB.png",无锡生活
http://stream.thmz.com/wxtv4/playlist.m3u8
-#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E7%94%9F%E6%B4%BB.png",无锡生活
-http://stream.thmz.com/wxtv4/playlist.m3u8?_upt=8c51357c1707362770
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E7%BB%8F%E6%B5%8E.png",无锡经济
https://stream.thmz.com/wxtv5/playlist.m3u8
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E7%BB%8F%E6%B5%8E.png",无锡经济
http://stream.thmz.com/wxtv5/sd/live.m3u8
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E7%BB%8F%E6%B5%8E.png",无锡经济
http://stream.thmz.com/wxtv5/playlist.m3u8
-#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E7%BB%8F%E6%B5%8E.png",无锡经济
-http://stream.thmz.com/wxtv5/sd/live.m3u8?zjiangsd#http://stream.thmz.com/wxtv5/playlist.m3u8?_upt=10155d141706166867#http://stream.thmz.com/wxtv5/playlist.m3u8#http://stream.thmz.com/wxtv5/sd/live.m3u8?_upt=cfacd5221704890772
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡都市资讯" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E9%83%BD%E5%B8%82%E8%B5%84%E8%AE%AF.png",无锡都市资讯
http://stream.thmz.com/wxtv3/playlist.m3u8?_upt=1758133b1706166861
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="无锡都市资讯" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%97%A0%E9%94%A1%E9%83%BD%E5%B8%82%E8%B5%84%E8%AE%AF.png",无锡都市资讯
@@ -3655,8 +3627,6 @@ http://live1.habctv.com/ggpdsl/sd/live.m3u8?zjiangsd#http://live1.habctv.com/ggp
http://live1.habctv.com/ggpdsl/sd/live.m3u8?zjiangsd#http://live1.habctv.com/ggpdsl/sd/live.m3u8
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="淮安影院娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%AE%E5%AE%89%E5%BD%B1%E9%99%A2%E5%A8%B1%E4%B9%90.png",淮安影院娱乐
http://live1.habctv.com/ysylsl/sd/live.m3u8
-#EXTINF:-1 group-title="☘️江苏频道" tvg-name="淮安影院娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%AE%E5%AE%89%E5%BD%B1%E9%99%A2%E5%A8%B1%E4%B9%90.png",淮安影院娱乐
-http://live1.habctv.com/ysylsl/sd/live.m3u8?zjiangsd
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="淮安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%AE%E5%AE%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",淮安新闻综合
http://z.b.bkpcp.top/m.php?id=haxwzh
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="淮安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B7%AE%E5%AE%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",淮安新闻综合
@@ -3686,11 +3656,9 @@ http://live.lyg1.com/zhpd/sd/live.m3u8
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="镇江二套社会民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%95%87%E6%B1%9F%E4%BA%8C%E5%A5%97%E7%A4%BE%E4%BC%9A%E6%B0%91%E7%94%9F.png",镇江二套社会民生
http://zjtv-wshls.homecdn.com/live/2aa16.m3u8
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="镇江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%95%87%E6%B1%9F%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",镇江新闻综合
-http://zjtv-wshls.homecdn.com/live/2aa50.m3u8
-#EXTINF:-1 group-title="☘️江苏频道" tvg-name="镇江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%95%87%E6%B1%9F%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",镇江新闻综合
http://cm-wshls.homecdn.com/live/2aa50.m3u8
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="镇江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%95%87%E6%B1%9F%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",镇江新闻综合
-http://zjtv-wshls.homecdn.com/live/2aa50.m3u8?wsSession=a263bdc5a26cd01b57a80359-170493712215358&wsIPSercert=f56bd6194d219a5172dbed60eca6e9b0
+http://zjtv-wshls.homecdn.com/live/2aa50.m3u8
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="靖江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E6%B1%9F%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",靖江新闻综合
http://ls.qingting.fm/live/23797.m3u8
#EXTINF:-1 group-title="☘️江苏频道" tvg-name="靖江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E6%B1%9F%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",靖江新闻综合
@@ -3737,8 +3705,6 @@ https://stream1.freetv.fun/hu-nan-du-shi-1.m3u8
https://stream1.freetv.fun/hu-nan-du-shi-3.m3u8
#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E9%83%BD%E5%B8%82.png",湖南都市
http://pili-live-snapshot.tv.hntvcloud.com/mg-tv/channel-6.m3u8
-#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E9%83%BD%E5%B8%82.png",湖南都市
-http://php.jdshipin.com:8880/TVOD/iptv.php?id=hnds
#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%BB%8F%E8%A7%86.png",湖南经视
https://stream1.freetv.fun/hu-nan-jing-shi-10.ctv
#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南经视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%BB%8F%E8%A7%86.png",湖南经视
@@ -3805,8 +3771,6 @@ http://p2.vzan.com/527645544/149039617847513156/live.m3u8
http://php.jdshipin.com:8880/iptv.php
#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南爱晚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%88%B1%E6%99%9A.png",湖南爱晚
http://pili-live-snapshot.tv.hntvcloud.com/mg-tv/channel-9.m3u8
-#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南爱晚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E7%88%B1%E6%99%9A.png",湖南爱晚
-http://php.jdshipin.com:8880/TVOD/iptv.php?id=hngg
#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E6%95%99%E8%82%B2.png",湖南教育
https://stream1.freetv.fun/hu-nan-jiao-yu-6.ctv
#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E6%95%99%E8%82%B2.png",湖南教育
@@ -3853,8 +3817,6 @@ https://stream1.freetv.fun/hu-nan-guo-ji-3.m3u8
http://php.jdshipin.com:8880/iptv.php
#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%9B%BD%E9%99%85.png",湖南国际
http://pili-live-snapshot.tv.hntvcloud.com/mg-tv/channel-4.m3u8
-#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%9B%BD%E9%99%85.png",湖南国际
-http://php.jdshipin.com:8880/TVOD/iptv.php?id=hngj
#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%85%AC%E5%85%B1.png",湖南公共
https://stream1.freetv.fun/hu-nan-gong-gong-5.ctv
#EXTINF:-1 group-title="☘️湖南频道" tvg-name="湖南公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B9%96%E5%8D%97%E5%85%AC%E5%85%B1.png",湖南公共
@@ -4083,8 +4045,6 @@ https://stream1.freetv.fun/jing-men-xin-wen-zong-he-5.m3u8
https://stream1.freetv.fun/jing-men-xin-wen-zong-he-4.m3u8
#EXTINF:-1 group-title="☘️湖北频道" tvg-name="荆门新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%86%E9%97%A8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",荆门新闻综合
http://stream.jmtv.com.cn/xwzh/sd/live.m3u8
-#EXTINF:-1 group-title="☘️湖北频道" tvg-name="荆门新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%86%E9%97%A8%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",荆门新闻综合
-http://stream.jmtv.com.cn/xwzh/sd/live.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
#EXTINF:-1 group-title="☘️广西频道" tvg-name="北海经济科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8C%97%E6%B5%B7%E7%BB%8F%E6%B5%8E%E7%A7%91%E6%95%99.png",北海经济科教
https://play-a2.quklive.com:443/live/1727311690820146.m3u8
#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E5%85%AC%E5%85%B1.png",南宁公共
@@ -4102,8 +4062,6 @@ https://stream1.freetv.fun/nan-zhu-gong-gong-7.m3u8
#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E5%85%AC%E5%85%B1.png",南宁公共
https://stream1.freetv.fun/nan-zhu-gong-gong-9.m3u8
#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",南宁新闻综合
-http://live.xmcdn.com/live/305/64.m3u8?aac
-#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",南宁新闻综合
http://688b7cbf9b7a8d911a085372b6c70ab5.livehwc3.cn/hls.nntv.cn/nnlive/XWZH_24.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=d1391be1fc200f8e4700c5d82b44edae
#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",南宁新闻综合
https://stream1.freetv.fun/nan-zhu-xin-wen-zong-he-1.m3u8
@@ -4135,8 +4093,6 @@ https://hlscdn.liangtv.cn/live/0234c48e0bc24fe1b41b9999a253e581/1075ee38e04f4906
http://hlscdn.liangtv.cn/live/0234c48e0bc24fe1b41b9999a253e581/1075ee38e04f490690f6a36a16e09c79.m3u8
#EXTINF:-1 group-title="☘️广西频道" tvg-name="广西国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%9B%BD%E9%99%85.png",广西国际
https://mobilelive.gxtv.cn/live/nn_live1009/playlist.m3u8
-#EXTINF:-1 group-title="☘️广西频道" tvg-name="广西国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B9%BF%E8%A5%BF%E5%9B%BD%E9%99%85.png",广西国际
-http://hlscdn.liangtv.cn/live/0234c48e0bc24fe1b41b9999a253e581/1075ee38e04f490690f6a36a16e09c79.m3u8?fbl=
#EXTINF:-1 group-title="☘️广西频道" tvg-name="南宁影视娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8D%97%E5%AE%81%E5%BD%B1%E8%A7%86%E5%A8%B1%E4%B9%90.png",南宁影视娱乐
http://688b7cbf9b7a8d911a085372b6c70ab5.livehwc3.cn/hls.nntv.cn/nnlive/YSYL_244.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=e7eb508555e76e08cc1b198d04f41fb5
#EXTINF:-1 group-title="☘️天津频道" tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%A4%A9%E6%B4%A5%E5%8D%AB%E8%A7%86.png",天津卫视
@@ -4181,8 +4137,6 @@ rtmp://luzhi.xuyongrongmei.com:1935/live/xyxw?zsicd
http://luzhi.xuyongrongmei.com:1935/live/_definst_/xyxw/playlist.m3u8
#EXTINF:-1 group-title="☘️四川频道" tvg-name="叙永综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8F%99%E6%B0%B8%E7%BB%BC%E5%90%88.png",叙永综合
http://luzhi.xuyongrongmei.com:1935/live/_definst_/xyxw/playlist.m3u8?zsicd
-#EXTINF:-1 group-title="☘️四川频道" tvg-name="叙永综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8F%99%E6%B0%B8%E7%BB%BC%E5%90%88.png",叙永综合
-http://luzhi.xuyongrongmei.com:1935/live/_definst_/xyxw/playlist.m3u8?zsicd#rtmp://luzhi.xuyongrongmei.com:1935/live/xyxw?zsicd
#EXTINF:-1 group-title="☘️四川频道" tvg-name="名山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%8D%E5%B1%B1%E7%BB%BC%E5%90%88.png",名山综合
https://m3u8channel-bx.yunxya.com/nmip-media/channellive/channel104666/playlist.m3u8
#EXTINF:-1 group-title="☘️四川频道" tvg-name="名山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%8D%E5%B1%B1%E7%BB%BC%E5%90%88.png",名山综合
@@ -4229,12 +4183,8 @@ http://live.spccmc.com:90/live/spxwzh.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%
http://live.spccmc.com:90/live/spxwzh.m3u8
#EXTINF:-1 group-title="☘️四川频道" tvg-name="松潘新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%BE%E6%BD%98%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",松潘新闻综合
http://live.spccmc.com:90/live/spxwzh.m3u8?zsicd
-#EXTINF:-1 group-title="☘️四川频道" tvg-name="松潘新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%9D%BE%E6%BD%98%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",松潘新闻综合
-http://live.spccmc.com:90/live/spxwzh.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
#EXTINF:-1 group-title="☘️四川频道" tvg-name="汉源综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%89%E6%BA%90%E7%BB%BC%E5%90%88.png",汉源综合
http://live.hyxrmt.com:85/live/xwpd.m3u8
-#EXTINF:-1 group-title="☘️四川频道" tvg-name="汉源综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%89%E6%BA%90%E7%BB%BC%E5%90%88.png",汉源综合
-http://live.hyxrmt.com:85/live/xwpd.m3u8?zsicd
#EXTINF:-1 group-title="☘️四川频道" tvg-name="汶川新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%B6%E5%B7%9D%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",汶川新闻综合
rtmp://live.iwcmt.cn:1936/live/zhxw
#EXTINF:-1 group-title="☘️四川频道" tvg-name="汶川新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B1%B6%E5%B7%9D%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",汶川新闻综合
@@ -4243,8 +4193,6 @@ http://live.iwcmt.cn:90/live/zhxw.m3u8
http://live.iwcmt.cn:90/live/zhxw.m3u8?zsicd
#EXTINF:-1 group-title="☘️四川频道" tvg-name="沐川综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%90%E5%B7%9D%E7%BB%BC%E5%90%88.png",沐川综合
http://file.ysxtv.cn/cms/videos/nmip-media/channellive/channel4/playlist.m3u8?zsicd
-#EXTINF:-1 group-title="☘️四川频道" tvg-name="沐川综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B2%90%E5%B7%9D%E7%BB%BC%E5%90%88.png",沐川综合
-http://file.ysxtv.cn/cms/videos/nmip-media/channellive/channel4/playlist.m3u8?zsicd#rtmp://tv.mcrm.org.cn:1935/channellive/tv01
#EXTINF:-1 group-title="☘️四川频道" tvg-name="泸县新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%B8%E5%8E%BF%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",泸县新闻综合
http://lxfile.lxxcb.cn/nmip-media/channellive/channel103799/playlist.m3u8
#EXTINF:-1 group-title="☘️四川频道" tvg-name="泸县新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B3%B8%E5%8E%BF%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",泸县新闻综合
@@ -4309,8 +4257,6 @@ https://live.zzyxxw.com:2443/live/xwzh.m3u8
http://live.zzyxxw.com:85/live/xwzh.m3u8
#EXTINF:-1 group-title="☘️福建频道" tvg-name="云霄综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E9%9C%84%E7%BB%BC%E5%90%88.png",云霄综合
http://live.zzyxxw.com:85/live/xwzh.m3u8?fujian
-#EXTINF:-1 group-title="☘️福建频道" tvg-name="云霄综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BA%91%E9%9C%84%E7%BB%BC%E5%90%88.png",云霄综合
-http://live.zzyxxw.com:85/live/xwzh.m3u8?fujian,
#EXTINF:-1 group-title="☘️福建频道" tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8E%A6%E9%97%A8%E5%8D%AB%E8%A7%86.png",厦门卫视
http://dsj.motem.top:8880/bptv/10000100000000050000000003887454.m3u8
#EXTINF:-1 group-title="☘️福建频道" tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%8E%A6%E9%97%A8%E5%8D%AB%E8%A7%86.png",厦门卫视
@@ -4341,8 +4287,6 @@ https://stream1.freetv.fun/zhang-zhou-xin-wen-zong-he-3.m3u8
http://live.zohi.tv/video/s10001-fztv-4/index.m3u8
#EXTINF:-1 group-title="☘️福建频道" tvg-name="福州生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%B7%9E%E7%94%9F%E6%B4%BB.png",福州生活
http://live.zohi.tv/video/s10001-fztv-3/index.m3u8
-#EXTINF:-1 group-title="☘️福建频道" tvg-name="福州生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%B7%9E%E7%94%9F%E6%B4%BB.png",福州生活
-http://live.zohi.tv:80/video/s10001-fztv-3/index.m3u8
#EXTINF:-1 group-title="☘️福建频道" tvg-name="福州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%B7%9E%E7%BB%BC%E5%90%88.png",福州综合
http://live.zohi.tv/video/s10001-fztv-1/index.m3u8
#EXTINF:-1 group-title="☘️福建频道" tvg-name="福建新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%8F%E5%BB%BA%E6%96%B0%E9%97%BB.png",福建新闻
@@ -4455,8 +4399,6 @@ http://tvpull.dxhmt.cn:9081/tv/10781-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1
http://tvpull.dxhmt.cn:9081/tv/10422-1.m3u8#
#EXTINF:-1 group-title="☘️河南频道" tvg-name="唐河一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%94%90%E6%B2%B3%E4%B8%80%E5%A5%97.png",唐河一套
http://tvpull.dxhmt.cn:9081/tv/11328-1.m3u8
-#EXTINF:-1 group-title="☘️河南频道" tvg-name="唐河一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%94%90%E6%B2%B3%E4%B8%80%E5%A5%97.png",唐河一套
-http://tvpull.dxhmt.cn:9081/tv/11328-1.m3u8?zhend#http://tvpull.dxhmt.cn:9081/tv/11328-1.m3u8
#EXTINF:-1 group-title="☘️河南频道" tvg-name="固始综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%9B%BA%E5%A7%8B%E7%BB%BC%E5%90%88.png",固始综合
http://tvpull.dxhmt.cn:9081/tv/11525-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
#EXTINF:-1 group-title="☘️河南频道" tvg-name="宝丰综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%9D%E4%B8%B0%E7%BB%BC%E5%90%88.png",宝丰综合
@@ -4489,8 +4431,6 @@ http://tvpull.dxhmt.cn:9081/tv/10185-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1
http://tvpull.dxhmt.cn:9081/tv/11081-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
#EXTINF:-1 group-title="☘️河南频道" tvg-name="西华综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%8D%8E%E7%BB%BC%E5%90%88.png",西华综合
http://tvpull.dxhmt.cn:9081/tv/11622-1.m3u8
-#EXTINF:-1 group-title="☘️河南频道" tvg-name="西华综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%8D%8E%E7%BB%BC%E5%90%88.png",西华综合
-http://tvpull.dxhmt.cn:9081/tv/11622-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
#EXTINF:-1 group-title="☘️河南频道" tvg-name="郏县综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%83%8F%E5%8E%BF%E7%BB%BC%E5%90%88.png",郏县综合
http://tvpull.dxhmt.cn:9081/tv/10425-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
#EXTINF:-1 group-title="☘️河南频道" tvg-name="郸城新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%83%B8%E5%9F%8E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",郸城新闻综合
@@ -4507,8 +4447,6 @@ http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226673/index.m3u8
http://tvpull.dxhmt.cn:9081/tv/10182-1.m3u8
#EXTINF:-1 group-title="☘️河南频道" tvg-name="荥阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%A5%E9%98%B3%E7%BB%BC%E5%90%88.png",荥阳综合
http://tvpull.dxhmt.cn:9081/tv/10182-1.m3u8?zhend
-#EXTINF:-1 group-title="☘️河南频道" tvg-name="荥阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%8D%A5%E9%98%B3%E7%BB%BC%E5%90%88.png",荥阳综合
-http://tvpull.dxhmt.cn:9081/tv/10182-1.m3u8?wsSecret=df15530a0abec41b14bca00fc96270d1&wsTime=1654956569
#EXTINF:-1 group-title="☘️河南频道" tvg-name="禹州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%A6%B9%E5%B7%9E%E5%85%AC%E5%85%B1.png",禹州公共
http://tvpull.dxhmt.cn:9081/tv/11081-2.m3u8
#EXTINF:-1 group-title="☘️河南频道" tvg-name="灵宝新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%81%B5%E5%AE%9D%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",灵宝新闻综合
@@ -4517,8 +4455,6 @@ http://tvpull.dxhmt.cn:9081/tv/11282-1.m3u8?zhend
http://tvpull.dxhmt.cn:9081/tv/10526-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
#EXTINF:-1 group-title="☘️河南频道" tvg-name="济源电视一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%8E%E6%BA%90%E7%94%B5%E8%A7%86%E4%B8%80%E5%A5%97.png",济源电视一套
http://tvpull.dxhmt.cn:9081/tv/19001-1.m3u8
-#EXTINF:-1 group-title="☘️河南频道" tvg-name="济源电视一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%8E%E6%BA%90%E7%94%B5%E8%A7%86%E4%B8%80%E5%A5%97.png",济源电视一套
-http://tvpull.dxhmt.cn:9081/tv/19001-1.m3u8?zhend
#EXTINF:-1 group-title="☘️河南频道" tvg-name="洛阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B4%9B%E9%98%B3%E7%BB%BC%E5%90%88.png",洛阳综合
https://wshlslive.migucloud.com/live/6AL7GTQX_C0/playlist.m3u8
#EXTINF:-1 group-title="☘️河南频道" tvg-name="洛阳科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B4%9B%E9%98%B3%E7%A7%91%E6%95%99.png",洛阳科教
@@ -4575,30 +4511,26 @@ http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227057/index.m3u8
http://tvpull.dxhmt.cn:9081/tv/11481-1.m3u8
#EXTINF:-1 group-title="☘️河南频道" tvg-name="方城一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B9%E5%9F%8E%E4%B8%80%E5%A5%97.png",方城一套
http://tvpull.dxhmt.cn:9081/tv/11322-1.m3u8
-#EXTINF:-1 group-title="☘️河南频道" tvg-name="方城一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B9%E5%9F%8E%E4%B8%80%E5%A5%97.png",方城一套
-http://tvpull.dxhmt.cn:9081/tv/11322-1.m3u8?zhend
#EXTINF:-1 group-title="☘️河南频道" tvg-name="新野综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E9%87%8E%E7%BB%BC%E5%90%88.png",新野综合
http://tvpull.dxhmt.cn:9081/tv/11329-1.m3u8?zhend
#EXTINF:-1 group-title="☘️河南频道" tvg-name="新安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E5%AE%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新安新闻综合
http://tvpull.dxhmt.cn:9081/tv/10323-1.m3u8
#EXTINF:-1 group-title="☘️河南频道" tvg-name="新安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E5%AE%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新安新闻综合
http://tvpull.dxhmt.cn:9081/tv/10323-1.m3u8?zhend
-#EXTINF:-1 group-title="☘️河南频道" tvg-name="新安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%96%B0%E5%AE%89%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",新安新闻综合
-http://tvpull.dxhmt.cn:9081/tv/10323-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
#EXTINF:-1 group-title="☘️河南频道" tvg-name="开封新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%B0%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",开封新闻综合
http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226689/index.m3u8
#EXTINF:-1 group-title="☘️河南频道" tvg-name="开封新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%B0%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",开封新闻综合
https://stream1.freetv.fun/kai-feng-xin-wen-zong-he-2.m3u8
#EXTINF:-1 group-title="☘️河南频道" tvg-name="开封新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%B0%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",开封新闻综合
http://tvpull.dxhmt.cn:9081/tv/10200-2.m3u8
+#EXTINF:-1 group-title="☘️河南频道" tvg-name="开封新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%B0%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",开封新闻综合
+http://tvpull.dxhmt.cn:9081/tv/10200-2.m3u8?zhend
#EXTINF:-1 group-title="☘️河南频道" tvg-name="开封文化旅游" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%B0%81%E6%96%87%E5%8C%96%E6%97%85%E6%B8%B8.png",开封文化旅游
http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226515/index.m3u8
#EXTINF:-1 group-title="☘️河南频道" tvg-name="开封文化旅游" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%B0%81%E6%96%87%E5%8C%96%E6%97%85%E6%B8%B8.png",开封文化旅游
http://tvpull.dxhmt.cn:9081/tv/10200-3.m3u8
#EXTINF:-1 group-title="☘️河南频道" tvg-name="开封文化旅游" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%B0%81%E6%96%87%E5%8C%96%E6%97%85%E6%B8%B8.png",开封文化旅游
http://tvpull.dxhmt.cn:9081/tv/10200-3.m3u8?zhend
-#EXTINF:-1 group-title="☘️河南频道" tvg-name="开封文化旅游" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BC%80%E5%B0%81%E6%96%87%E5%8C%96%E6%97%85%E6%B8%B8.png",开封文化旅游
-http://tvpull.dxhmt.cn:9081/tv/10200-3.m3u8?zhend,
#EXTINF:-1 group-title="☘️河南频道" tvg-name="嵩县综合新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B5%A9%E5%8E%BF%E7%BB%BC%E5%90%88%E6%96%B0%E9%97%BB.png",嵩县综合新闻
http://tvpull.dxhmt.cn:9081/tv/10325-1.m3u8?zhendhttp://wshls.live.migucloud.com/live/MZCYG799_C0/playlist.m3u8?zhend
#EXTINF:-1 group-title="☘️河南频道" tvg-name="嵩县综合新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B5%A9%E5%8E%BF%E7%BB%BC%E5%90%88%E6%96%B0%E9%97%BB.png",嵩县综合新闻
@@ -4607,8 +4539,6 @@ http://wshls.live.migucloud.com/live/MZCYG799_C0/playlist.m3u8
http://wshls.live.migucloud.com/live/MZCYG799_C0/playlist.m3u8?zhend
#EXTINF:-1 group-title="☘️河南频道" tvg-name="宜阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%9C%E9%98%B3%E7%BB%BC%E5%90%88.png",宜阳综合
http://tvpull.dxhmt.cn:9081/tv/10327-1.m3u8
-#EXTINF:-1 group-title="☘️河南频道" tvg-name="宜阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%9C%E9%98%B3%E7%BB%BC%E5%90%88.png",宜阳综合
-http://tvpull.dxhmt.cn:9081/tv/10327-1.m3u8?wsSecret=df15530a0abec41b14bca00fc96270d1&wsTime=1654956569
#EXTINF:-1 group-title="☘️河南频道" tvg-name="周口新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%91%A8%E5%8F%A3%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",周口新闻综合
https://stream1.freetv.fun/zhou-kou-xin-wen-zong-he-1.m3u8
#EXTINF:-1 group-title="☘️河南频道" tvg-name="周口新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%91%A8%E5%8F%A3%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",周口新闻综合
@@ -4621,8 +4551,6 @@ http://tvpull.dxhmt.cn:9081/tv/11325-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1
http://tvpull.dxhmt.cn:9081/tv/10381-1.m3u8?wsSecret=df15530a0abec41b14bca00fc96270d1&wsTime=1654956569
#EXTINF:-1 group-title="☘️河北频道" tvg-name="鹿泉一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%B9%BF%E6%B3%89%E4%B8%80%E5%A5%97.png",鹿泉一套
https://jwcdnqx.hebyun.com.cn/zb/luquanyi/1500k/tzwj_video.m3u8
-#EXTINF:-1 group-title="☘️河北频道" tvg-name="鹿泉一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%B9%BF%E6%B3%89%E4%B8%80%E5%A5%97.png",鹿泉一套
-https://jwcdnqx.hebyun.com.cn/live/luquanyi/1500k/tzwj_video.m3u8
#EXTINF:-1 group-title="☘️河北频道" tvg-name="邯郸科技教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%AF%E9%83%B8%E7%A7%91%E6%8A%80%E6%95%99%E8%82%B2.png",邯郸科技教育
http://live.hd.hdbs.cn/video/s10001-2021hdkjjy/index.m3u8?zhebd
#EXTINF:-1 group-title="☘️河北频道" tvg-name="邯郸科技教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%AF%E9%83%B8%E7%A7%91%E6%8A%80%E6%95%99%E8%82%B2.png",邯郸科技教育
@@ -4649,8 +4577,6 @@ https://stream1.freetv.fun/xing-tai-zong-he-8.ctv
https://stream1.freetv.fun/xing-tai-zong-he-8.m3u8
#EXTINF:-1 group-title="☘️河北频道" tvg-name="邢台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%A2%E5%8F%B0%E7%BB%BC%E5%90%88.png",邢台综合
https://stream1.freetv.fun/xing-tai-zong-he-9.m3u8
-#EXTINF:-1 group-title="☘️河北频道" tvg-name="邢台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%82%A2%E5%8F%B0%E7%BB%BC%E5%90%88.png",邢台综合
-https://jwplay.hebyun.com.cn/live/xttv/1500k/tzwj_video.m3u8?zhebd#https://jwplay.hebyun.com.cn/live/xttv/1500k/tzwj_video.m3u8
#EXTINF:-1 group-title="☘️河北频道" tvg-name="衡水公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A1%A1%E6%B0%B4%E5%85%AC%E5%85%B1.png",衡水公共
http://ls.qingting.fm/live/2810.m3u8
#EXTINF:-1 group-title="☘️河北频道" tvg-name="石家庄都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%9F%B3%E5%AE%B6%E5%BA%84%E9%83%BD%E5%B8%82.png",石家庄都市
@@ -4902,8 +4828,6 @@ http://satellitepull.cnr.cn/live/wxsdtyxxgb/playlist.m3u8
#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
https://satellitepull.cnr.cn/live/wxsdtyxxgb/playlist.m3u8
#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
-http://live.xmcdn.com/live/805/64.m3u8
-#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
https://stream1.freetv.fun/shan-dong-ti-yu-8.m3u8
#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
https://stream1.freetv.fun/shan-dong-ti-yu-18.m3u8
@@ -4917,6 +4841,8 @@ https://stream1.freetv.fun/shan-dong-ti-yu-23.m3u8
https://stream1.freetv.fun/shan-dong-ti-yu-15.m3u8
#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
http://livealone302.iqilu.com/iqilu/typd.m3u8
+#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E4%BD%93%E8%82%B2.png",山东体育
+https://stream1.freetv.fun/shan-dong-ti-yu-7.m3u8
#EXTINF:-1 group-title="☘️山东频道" tvg-name="山东综艺" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%B1%B1%E4%B8%9C%E7%BB%BC%E8%89%BA.png",山东综艺
http://livealone302.iqilu.com/iqilu/zypd.m3u8
#EXTINF:-1 group-title="☘️山东频道" tvg-name="济南综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%B5%8E%E5%8D%97%E7%BB%BC%E5%90%88.png",济南综合
@@ -5145,8 +5071,6 @@ https://live.lalifeier.eu.org/ahtv/ahzyty.m3u8?t=1746739480&key=d9527b9d7ce3
https://live.lalifeier.eu.org/ahtv/ahzyty.m3u8?t=1746775525&key=fab8cb8fa94cd29ea294c635fb944f88
#EXTINF:-1 group-title="☘️安徽频道" tvg-name="黄山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%84%E5%B1%B1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",黄山新闻综合
http://hslive.hsnewsnet.com/lsdream/hve9Wjs/1000/live.m3u8
-#EXTINF:-1 group-title="☘️安徽频道" tvg-name="黄山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%84%E5%B1%B1%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",黄山新闻综合
-http://hslive.hsnewsnet.com/lsdream/hve9Wjs/1000/live.m3u8?zanhd
#EXTINF:-1 group-title="☘️安徽频道" tvg-name="黄山公共生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%84%E5%B1%B1%E5%85%AC%E5%85%B1%E7%94%9F%E6%B4%BB.png",黄山公共生活
http://hslive.hsnewsnet.com/lsdream/iY92ady/1000/live.m3u8?zanhd
#EXTINF:-1 group-title="☘️安徽频道" tvg-name="铜陵新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%93%9C%E9%99%B5%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",铜陵新闻综合
@@ -5157,24 +5081,18 @@ http://live.cztv.cc:85/live/sjpd.m3u8
http://live.cztv.cc:85/live/sjpd.m3u8
#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E7%A7%91%E6%95%99.png",滁州科教
http://live.cztv.cc:85/live/sjpd.m3u8?zanhd
-#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E7%A7%91%E6%95%99.png",滁州科教
-http://live.cztv.cc:85/live/sjpd.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",滁州新闻综合
http://live.cztv.cc:85/live/xwpd.m3u8
#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",滁州新闻综合
http://live.cztv.cc:85/live/xwpd.m3u8?zanhd
#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",滁州新闻综合
http://live.cztv.cc:85/live/xwpd.m3u8#http://live.cztv.cc:85/live/xwpd.m3u8?zanhd
-#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",滁州新闻综合
-http://live.cztv.cc:85/live/xwpd.m3u8?zanhd#http://live.cztv.cc:85/live/xwpd.m3u8
#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州市广播电视台 新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E5%B8%82%E5%B9%BF%E6%92%AD%E7%94%B5%E8%A7%86%E5%8F%B0+%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",滁州市广播电视台 新闻综合
http://live.cztv.cc:85/live/xwpd.m3u8
#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E5%85%AC%E5%85%B1.png",滁州公共
http://live.cztv.cc:85/live/ggpd.m3u8
#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E5%85%AC%E5%85%B1.png",滁州公共
http://live.cztv.cc:85/live/ggpd.m3u8?zanhd
-#EXTINF:-1 group-title="☘️安徽频道" tvg-name="滁州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E6%BB%81%E5%B7%9E%E5%85%AC%E5%85%B1.png",滁州公共
-http://live.cztv.cc:85/live/ggpd.m3u8?zanhd#http://live.cztv.cc:85/live/ggpd.m3u8
#EXTINF:-1 group-title="☘️安徽频道" tvg-name="宿州科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%BF%E5%B7%9E%E7%A7%91%E6%95%99.png",宿州科教
rtmp://live.ahsz.tv/video/s10001-kxjy
#EXTINF:-1 group-title="☘️安徽频道" tvg-name="宿州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%AE%BF%E5%B7%9E%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",宿州新闻综合
@@ -5200,8 +5118,6 @@ http://play-a2.quklive.com/live/1667883943560053.m3u8
#EXTINF:-1 group-title="☘️宁夏频道" tvg-name="银川文体" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%93%B6%E5%B7%9D%E6%96%87%E4%BD%93.png",银川文体
http://play-a2.quklive.com/live/1667884025738071.m3u8
#EXTINF:-1 group-title="☘️吉林频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
-http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8#
-#EXTINF:-1 group-title="☘️吉林频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8
#EXTINF:-1 group-title="☘️吉林频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001470/index.m3u8
@@ -5219,6 +5135,8 @@ http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/
http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221227045/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eq0D3NdTUN7FuRzr8eJsbQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
#EXTINF:-1 group-title="☘️吉林频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
http://tvbox6.com/tv/bfgd.php?id=117
+#EXTINF:-1 group-title="☘️吉林频道" tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BB%B6%E8%BE%B9%E5%8D%AB%E8%A7%86.png",延边卫视
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8
#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E9%83%BD%E5%B8%82.png",吉林都市
https://live.lalifeier.eu.org/jlntv/jlds.m3u8?t=1745796321&key=ba85da6410cdc8b830d46c3182ad7775
#EXTINF:-1 group-title="☘️吉林频道" tvg-name="吉林都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%90%89%E6%9E%97%E9%83%BD%E5%B8%82.png",吉林都市
@@ -5397,8 +5315,6 @@ rtmp://liveout.xntv.tv/a65jur/96iln2
https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd#https://liveout.xntv.tv/a65jur/90p2i1.m3u8#http://dtrmlive.qhdtrm.cn/xnds/sd/live.m3u8
#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",西宁新闻综合
https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd
-#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E6%96%B0%E9%97%BB%E7%BB%BC%E5%90%88.png",西宁新闻综合
-https://liveout.xntv.tv/a65jur/96iln2.m3u8#@http://cm-wshls.homecdn.com/live/5a296.dlv#@http://dtrmlive.qhdtrm.cn/xnds/sd/live.m3u8#@http://cm-wshls.homecdn.com/live/5a296.m3u8#rtmp://liveout.xntv.tv/a65jur/96iln2
#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁生活服务" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E7%94%9F%E6%B4%BB%E6%9C%8D%E5%8A%A1.png",西宁生活服务
https://liveout.xntv.tv/a65jur/90p2i1.m3u8
#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁生活服务" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E7%94%9F%E6%B4%BB%E6%9C%8D%E5%8A%A1.png",西宁生活服务
@@ -5409,8 +5325,6 @@ https://stream1.freetv.fun/xi-zhu-sheng-huo-fu-wu-1.m3u8
https://stream1.freetv.fun/xi-zhu-sheng-huo-fu-wu-2.m3u8
#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁生活服务" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E7%94%9F%E6%B4%BB%E6%9C%8D%E5%8A%A1.png",西宁生活服务
https://stream1.freetv.fun/xi-zhu-sheng-huo-fu-wu-3.m3u8
-#EXTINF:-1 group-title="☘️青海频道" tvg-name="西宁生活服务" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E8%A5%BF%E5%AE%81%E7%94%9F%E6%B4%BB%E6%9C%8D%E5%8A%A1.png",西宁生活服务
-https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd#https://liveout.xntv.tv/a65jur/90p2i1.m3u8#http://dtrmlive.qhdtrm.cn/xnds/sd/live.m3u8
#EXTINF:-1 group-title="☘️青海频道" tvg-name="青海综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%92%E6%B5%B7%E7%BB%BC%E5%90%88.png",青海综合
http://lmt.scqstv.com/live1/live1.m3u8
#EXTINF:-1 group-title="☘️黑龙江频道" tvg-name="黑龙江文体" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E9%BE%99%E6%B1%9F%E6%96%87%E4%BD%93.png",黑龙江文体
@@ -5546,10 +5460,10 @@ http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/322
#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
http://117.12.149.38:4022/rtp/225.1.1.213:5002
#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
-http://60.26.181.220:4022/rtp/225.1.1.213:5002
-#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
http://111.162.205.201:8686/rtp/225.1.1.213:5002
#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
+http://60.26.181.220:4022/rtp/225.1.1.213:5002
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
http://gat.bkpcp.top/ymg.php?id=jtyy
#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
http://goo.bkpcp.top/mg/jtyy
@@ -5564,10 +5478,6 @@ https://www.freetv.top/migu/644368373.m3u8?migutoken=b9d9d0ba0208e949cf0736455b8
#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2.png",CHC家庭影院
https://stream1.freetv.fun/chcjia-ting-ying-yuan-1.ctv
#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
-http://117.12.149.38:4022/rtp/225.1.1.215:5002
-#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
-http://171.35.84.178:8688/udp/239.252.219.85:5140
-#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
http://60.26.181.220:4022/rtp/225.1.1.215:5002
#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
http://z.b.bkpcp.top/m.php
@@ -5583,6 +5493,10 @@ http://[2409:8087:1a01:df::4021]:80/TVOD/88888888/224/3221225555/main.m3u8
http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380763222d00/index.m3u8?m3u8_level=2
#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
http://[2409:8087:3c02:0021:0000:0001:0000:100a]:6410/shandong_cabletv.live.zte.com////CHANNEL00002030/index.m3u8?IASHttpSessionId=
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
+http://data.3g.yy.com/live/hls/1382735573/1382735573
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E5%8A%A8%E4%BD%9C%E7%94%B5%E5%BD%B1.png",CHC动作电影
+https://www.freetv.top/migu/644368714.m3u8?migutoken=2e48d18419793654f347e8ca29e0028ce9f3eaaa7a108b006304178b8f790f34908f8a09bbb8f4b8b8abcf36e2341f1043dde8719cf4927fcd0dcde4667f8b91e68e820314791d9b70452862c9
#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC高清电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E9%AB%98%E6%B8%85%E7%94%B5%E5%BD%B1.png",CHC高清电影
http://[2409:8087:7001:20:2::3]:80/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226463/index.m3u8
#EXTINF:-1 group-title="🎬电影频道" tvg-name="CHC高清电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC%E9%AB%98%E6%B8%85%E7%94%B5%E5%BD%B1.png",CHC高清电影
@@ -5648,17 +5562,17 @@ http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225769/2/index.
#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天映画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%98%A0%E7%94%BB.png",靖天映画
https://cdn.iptv8k.top/dl/jrys.php?id=320&amp;time=20240926215313&amp;ip=111.229.253.40
#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天映画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%98%A0%E7%94%BB.png",靖天映画
-https://cdn.iptv8k.top/dl/jrys.php?id=320&amp;amp;time=20240926215313&amp;amp;ip=111.229.253.40
-#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天映画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%98%A0%E7%94%BB.png",靖天映画
https://cdn.iptv8k.top/dl/jrys.php?id=320&time=20240926215313&ip=111.229.253.40
#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天映画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%98%A0%E7%94%BB.png",靖天映画
+https://cdn.iptv8k.top/dl/jrys.php?id=320&amp;amp;time=20240926215313&amp;amp;ip=111.229.253.40
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天映画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%98%A0%E7%94%BB.png",靖天映画
https://tv.iill.top/litv/4gtv-4gtv055
#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%88%8F%E5%89%A7.png",靖天戏剧
+https://cdn.iptv8k.top/dl/jrys.php?id=318&time=20240926215313&ip=111.229.253.40
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%88%8F%E5%89%A7.png",靖天戏剧
https://cdn.iptv8k.top/dl/jrys.php?id=318&amp;time=20240926215313&amp;ip=111.229.253.40
#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%88%8F%E5%89%A7.png",靖天戏剧
-https://cdn.iptv8k.top/dl/jrys.php?id=318&amp;amp;time=20240926215313&amp;amp;ip=111.229.253.40
-#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%88%8F%E5%89%A7.png",靖天戏剧
-https://cdn.iptv8k.top/dl/jrys.php?id=318&time=20240926215313&ip=111.229.253.40
+https://cdn.iptv8k.top/dl/jrys.php?id=318&time=20240926215313&ip=111.229.253.40
#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%88%8F%E5%89%A7.png",靖天戏剧
http://serv00.bkpcp.top/litv3.php?id=4gtv-4gtv058
#EXTINF:-1 group-title="🎬电影频道" tvg-name="靖天戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9D%96%E5%A4%A9%E6%88%8F%E5%89%A7.png",靖天戏剧
@@ -5742,11 +5656,9 @@ https://smart.pendy.dpdns.org/Smart.php
#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森洋片" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E6%B4%8B%E7%89%87.png",东森洋片
https://cdn.iptv8k.top/dl/jrys.php?id=232&time=20240926215313&ip=111.229.253.40
#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
-https://cdn.iptv8k.top/dl/jrys.php?id=217&time=20240926215313&ip=111.229.253.40
-#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
https://cdn.iptv8k.top/dl/jrys.php?id=216&time=20240926215313&ip=111.229.253.40
#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
-https://cdn.iptv8k.top/dl/jrys.php?id=216&time=20240926215313&ip=111.229.253.40#rtmp://f13h.mine.nu/sat/tv331#rtmp://f13h.mine.nu/sat/tv331
+https://cdn.iptv8k.top/dl/jrys.php?id=217&time=20240926215313&ip=111.229.253.40
#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
http://38.64.72.148:80/hls/modn/list/2013/chunklist1.m3u8
#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
@@ -5761,6 +5673,8 @@ https://stream1.freetv.fun/dong-sen-chao-shi-9.m3u8
https://stream1.freetv.fun/dong-sen-chao-shi-8.ctv
#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
https://stream1.freetv.fun/dong-sen-chao-shi-2.ctv
+#EXTINF:-1 group-title="🎬电影频道" tvg-name="东森超视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%B8%9C%E6%A3%AE%E8%B6%85%E8%A7%86.png",东森超视
+https://stream1.freetv.fun/dong-sen-chao-shi-6.ctv
#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
http://php.jdshipin.com/TVOD/hljyd.php?id=3221226019
#EXTINF:-1 group-title="🏀体育频道" tvg-name="CCTV-5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV-5.png",CCTV-5
@@ -5824,12 +5738,12 @@ https://stream1.freetv.fun/yan-dong-ti-yu-11.ctv
#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
https://cdn.iptv8k.top/dl/jrys.php?id=291&time=20240926215313&ip=111.229.253.40
#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
-https://cdn.iptv8k.top/dl/jrys.php?id=292&amp;time=20240926215313&amp;ip=111.229.253.40
-#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
https://cdn.iptv8k.top/dl/jrys.php?id=292&amp;amp;time=20240926215313&amp;amp;ip=111.229.253.40
#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40
#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
+https://cdn.iptv8k.top/dl/jrys.php?id=292&amp;time=20240926215313&amp;ip=111.229.253.40
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
https://stream1.freetv.fun/wei-lai-ti-yu-9.ctv
#EXTINF:-1 group-title="🏀体育频道" tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E7%BA%AC%E6%9D%A5%E4%BD%93%E8%82%B2.png",纬来体育
https://epg.pw/stream/8855a9936e37e608a0ec8a014cce1673dee9c5d68d560da376cc92e5edef2b25.m3u8
@@ -6108,10 +6022,10 @@ http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/322122
#EXTINF:-1 group-title="🏀体育频道" tvg-name="快乐垂钓" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E5%BF%AB%E4%B9%90%E5%9E%82%E9%92%93.png",快乐垂钓
http://www.1328099.xyz:9001/rtp/239.77.0.145:5146
#EXTINF:-1 group-title="🏀体育频道" tvg-name="JJ斗地主" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/JJ%E6%96%97%E5%9C%B0%E4%B8%BB.png",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
-#EXTINF:-1 group-title="🏀体育频道" tvg-name="JJ斗地主" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/JJ%E6%96%97%E5%9C%B0%E4%B8%BB.png",JJ斗地主
http://zzy789.xyz/douyu1.php?id=488743
#EXTINF:-1 group-title="🏀体育频道" tvg-name="JJ斗地主" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/JJ%E6%96%97%E5%9C%B0%E4%B8%BB.png",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
+#EXTINF:-1 group-title="🏀体育频道" tvg-name="JJ斗地主" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/JJ%E6%96%97%E5%9C%B0%E4%B8%BB.png",JJ斗地主
http://huanqiuzhibo.cn/manifest/douyu.php?id=488743
#EXTINF:-1 group-title="🏀体育频道" tvg-name="JJ斗地主" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/JJ%E6%96%97%E5%9C%B0%E4%B8%BB.png",JJ斗地主
http://www.52sw.top:678/play/huya.php?id=14079954
@@ -6204,10 +6118,6 @@ http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221
#EXTINF:-1 group-title="🪁动画频道" tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E4%BC%98%E6%BC%AB%E5%8D%A1%E9%80%9A.png",优漫卡通
https://stream1.freetv.fun/4073fb5ec1ec48f010e1db882aeb63ddc7104c56c5c729c4d08e932d585591a8.m3u8
#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
-http://116.237.148.215:8881/rtp/239.45.0.38:5140
-#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
-http://221.13.233.107:9901/tsfile/live/1017_1.m3u8?key=txiptv&playlive=1&authid=0
-#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225653/2.m3u8
#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
https://stream1.freetv.fun/jin-ying-qia-tong-38.m3u8
@@ -6223,6 +6133,10 @@ https://stream1.freetv.fun/aec603fdb1ae19a081a7ca50498e3c9429447092a2208a2d383ae
https://stream1.freetv.fun/321f73ad28440de1629cd54e028c9355b2cb709eb8b30b90e4d0f3d5b41b0c4e.m3u8
#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
https://stream1.freetv.fun/jin-ying-qia-tong-19.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
+https://stream1.freetv.fun/1b907bbf4760e673ec9ab89e2327cd1d9e5df04ca6ef35a6fb07f5b6757f4791.m3u8
+#EXTINF:-1 group-title="🪁动画频道" tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%87%91%E9%B9%B0%E5%8D%A1%E9%80%9A.png",金鹰卡通
+https://stream1.freetv.fun/jin-ying-qia-tong-29.m3u8
#EXTINF:-1 group-title="🪁动画频道" tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E5%8A%A8%E7%94%BB.png",黑莓动画
http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010002
#EXTINF:-1 group-title="🪁动画频道" tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%BB%91%E8%8E%93%E5%8A%A8%E7%94%BB.png",黑莓动画
@@ -6346,8 +6260,6 @@ https://satellitepull.cnr.cn/live/wx32nmgyygb/playlist.m3u8
#EXTINF:-1 group-title="🎵音乐频道" tvg-name="音乐之声" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9F%B3%E4%B9%90%E4%B9%8B%E5%A3%B0.png",音乐之声
http://a.live.hnradio.com/yypd/radio120k_yypd.m3u8?auth_key=1588751172-0-0-d97b858279c1c86650172b9913ea4af2
#EXTINF:-1 group-title="🎵音乐频道" tvg-name="音乐之声" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9F%B3%E4%B9%90%E4%B9%8B%E5%A3%B0.png",音乐之声
-http://live.xmcdn.com/live/1205/64.m3u8
-#EXTINF:-1 group-title="🎵音乐频道" tvg-name="音乐之声" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/%E9%9F%B3%E4%B9%90%E4%B9%8B%E5%A3%B0.png",音乐之声
https://radio.0472.org/?id=641
-#EXTINF:-1 group-title="🕘️更新时间" tvg-name="2025-07-10 06:28:18" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/2025-07-10+06%3A28%3A18.png",2025-07-10 06:28:18
-http://101.74.30.190:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 group-title="🕘️更新时间" tvg-name="2025-07-11 18:20:41" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/2025-07-11+18%3A20%3A41.png",2025-07-11 18:20:41
+http://ali-m-l.cztv.com/channels/lantian/channel15/1080p.m3u8
diff --git a/欧歌/spider.jar b/欧歌/spider.jar
index 35d2dfd..7c3cb68 100644
Binary files a/欧歌/spider.jar and b/欧歌/spider.jar differ
diff --git a/欧歌/txt/2.txt b/欧歌/txt/2.txt
index 36f4aa3..338c4e7 100644
--- a/欧歌/txt/2.txt
+++ b/欧歌/txt/2.txt
@@ -1 +1 @@
-http://160.202.244.9:9788/
\ No newline at end of file
+http://160.202.244.9:2489
\ No newline at end of file
diff --git a/欧歌/txt/89.txt b/欧歌/txt/89.txt
index 2a0f83e..fd0a371 100644
--- a/欧歌/txt/89.txt
+++ b/欧歌/txt/89.txt
@@ -1 +1 @@
-https://mac.555618.xyz
\ No newline at end of file
+http://app.555618.xyz:1766
\ No newline at end of file
diff --git a/欧歌/txt/xfdd.txt b/欧歌/txt/xfdd.txt
index 503d3b8..695b3d5 100644
--- a/欧歌/txt/xfdd.txt
+++ b/欧歌/txt/xfdd.txt
@@ -1 +1 @@
-http://110.42.7.59:9428
\ No newline at end of file
+http://110.42.7.59:9066
\ No newline at end of file
diff --git a/潇洒/.版本.png b/潇洒/.版本.png
deleted file mode 100644
index adb6de7..0000000
Binary files a/潇洒/.版本.png and /dev/null differ
diff --git a/潇洒/JS/Anime1.js b/潇洒/JS/Anime1.js
index c0e6fb0..67e4a6e 100644
--- a/潇洒/JS/Anime1.js
+++ b/潇洒/JS/Anime1.js
@@ -1,169 +1 @@
-// 注意事项:此源仅支持 影视TV 及 爱佬版tvbox最新版
-// 注意事项:此源仅支持 影视TV 及 爱佬版tvbox最新版
-// 注意事项:此源仅支持 影视TV 及 爱佬版tvbox最新版
-// 3个set-Cookie
-
-var rule = {
- title:'Anime1动畫',
- host:'https://anime1.me',
- url: '/fyclass',
- detailUrl:'/?cat=fyid',
- searchUrl: '/page/fypage?s=**',
- searchable:2,
- quickSearch:0,
- headers:{'User-Agent': 'PC_UA'},
- timeout:5000,
- class_name:'連載中&2025&2024&2023&2022&2021&2020&2019&2018&更早',
- class_url:'連載中&2025&2024&2023&2022&2021&2020&2019&2018&2017',
- play_parse:true,
- lazy:`js:
- var apiurl = 'https://v.anime1.me/api';
- var html = request(apiurl, {
- headers: {
- 'Referer': HOST,
- },
- body: 'd=' + input,
- method: 'POST',
- withHeaders: true
- });
- let json = JSON.parse(html);
- print(json);
- log(Object.keys(json));
- let setCk = Object.keys(json).filter(it => it.toLowerCase() === "set-cookie");
- let cookie = setCk ? json[setCk] : "";
- // 3个set-Cookie
- if (Array.isArray(cookie)) {
- cookie = cookie.join(';');
- }
- cookie = cookie.split(';').filter(function(it) {
- return ['e', 'p', 'h'].includes(it.split('=')[0])
- }).join(';');
- log(cookie);
- var purl = JSON.parse(json.body).s[0].src;
- if (purl.startsWith('/')) {
- purl = 'https:' + purl
- }
- input = {
- jx: 0,
- url: purl,
- parse: 0,
- header: JSON.stringify({
- 'referer': HOST,
- 'Cookie': cookie,
- 'user-agent': PC_UA
- }),
- }
- `,
- limit:6,
- 推荐: `js:
- var d = [];
- function stripHtmlTag(src) {
- return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' ');
- }
- var timestamp = new Date().getTime();
- var json = request('https://d1zquzjgwo9yb.cloudfront.net/?_=' + timestamp);
- var list = JSON.parse(json);
- let playKeys = Object.values(list).filter(function(x) {
- return x[2].includes('連載中');
- });
- playKeys.forEach(function(it) {
- d.push({
- title: stripHtmlTag(it[1]),
- img: 'https://sta.anicdn.com/playerImg/8.jpg',
- desc: it[2],
- url: it[0],
- });
- });
- setResult(d);
- `,
- 一级: `js:
- var d = [];
- function stripHtmlTag(src) {
- return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' ');
- }
- var timestamp = new Date().getTime();
- var json = request('https://d1zquzjgwo9yb.cloudfront.net/?_=' + timestamp);
- var list = JSON.parse(json);
- let playKeys = Object.values(list).filter(function(x) {
- if (MY_CATE === '連載中') return x[2].includes(MY_CATE);
- else if (MY_CATE === '2017') return x[3] <= MY_CATE;
- else return x[3] == MY_CATE;
- });
- playKeys.forEach(function(it) {
- d.push({
- title: stripHtmlTag(it[1]),
- img: 'https://sta.anicdn.com/playerImg/8.jpg',
- desc: it[2],
- url: it[0],
- });
- });
- setResult(d);
- `,
- 二级: `js:
- pdfh = jsp.pdfh; pdfa = jsp.pdfa; pd = jsp.pd;
- var html = request(input);
- var timestamp = new Date().getTime();
- var json = request('https://d1zquzjgwo9yb.cloudfront.net/?_=' + timestamp);
- var list = JSON.parse(json);
- var vid = input.split('=')[1];
- let playKeys = Object.values(list).find(function(x) {
- return x[0] === parseInt(vid);
- });
- VOD = {
- vod_pic: 'https://sta.anicdn.com/playerImg/8.jpg',
- vod_id: playKeys[0],
- vod_name: playKeys[1],
- vod_content: playKeys[2],
- vod_year: playKeys[3],
- type_name: playKeys[4],
- vod_actor: playKeys[5],
- };
- var pageurl = pd(html, '.cat-links&&a&&href');
- var pagenum = 1;
- let vod_tab_list = [];
- let vlist = [];
- for (let p = 1; p < parseInt(pagenum) + 1; p++) {
- let phtml = request(pageurl + '/page/' + pagenum);
- let new_vod_list = [];
- let vodList = [];
- vodList = pdfa(phtml, '.site-main&&article');
- for (let i = 0; i < vodList.length; i++) {
- let it = vodList[i];
- let ptitle = pdfh(it, '.entry-title&&Text').replace(/\\[(.*)\\]/, '$1');
- let purl = pd(it, '.video-js&&data-apireq');
- new_vod_list.push(ptitle + '$' + purl);
- }
- vlist = vlist.concat(new_vod_list);
- try {
- pagenum = pd(phtml, '.nav-previous&&a&&href').split('/page/')[1];
- } catch(e) {}
- }
- let vlist2 = vlist.reverse().join("#");
- vod_tab_list.push(vlist2);
- VOD.vod_play_from = '在线播放';
- VOD.vod_play_url = vod_tab_list.join("$$$");
- `,
- 搜索: `js:
- var d = [];
- function stripHtmlTag(src) {
- return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' ');
- }
- var timestamp = new Date().getTime();
- var json = request('https://d1zquzjgwo9yb.cloudfront.net/?_=' + timestamp);
- var list = JSON.parse(json);
- var wd = input.split('=')[1];
- let playKeys = Object.values(list).filter(function(x) {
- return x[1].includes(wd);
- });
- log(playKeys);
- playKeys.forEach(function(it) {
- d.push({
- title: stripHtmlTag(it[1]),
- img: 'https://sta.anicdn.com/playerImg/8.jpg',
- desc: it[2],
- url: it[0],
- });
- });
- setResult(d);
- `,
-}
\ No newline at end of file
+Ly8g5rOo5oSP5LqL6aG5OuatpOa6kOS7heaUr+aMgSDlvbHop4ZUViDlj4og54ix5L2s54mIdHZib3jmnIDmlrDniYgKLy8g5rOo5oSP5LqL6aG5OuatpOa6kOS7heaUr+aMgSDlvbHop4ZUViDlj4og54ix5L2s54mIdHZib3jmnIDmlrDniYgKLy8g5rOo5oSP5LqL6aG5OuatpOa6kOS7heaUr+aMgSDlvbHop4ZUViDlj4og54ix5L2s54mIdHZib3jmnIDmlrDniYgKLy8gM+S4qnNldC1Db29raWUKCnZhciBydWxlID0gewoJdGl0bGU6J0FuaW1lMeWKqOeVqycsCglob3N0OidodHRwczovL2FuaW1lMS5tZScsCgl1cmw6ICcvZnljbGFzcycsCglkZXRhaWxVcmw6Jy8/Y2F0PWZ5aWQnLAoJc2VhcmNoVXJsOiAnL3BhZ2UvZnlwYWdlP3M9KionLAoJc2VhcmNoYWJsZToyLAoJcXVpY2tTZWFyY2g6MCwKCWhlYWRlcnM6eydVc2VyLUFnZW50JzogJ1BDX1VBJ30sCgl0aW1lb3V0OjUwMDAsCiAgICBjbGFzc19uYW1lOifpgKPovInkuK0mMjAyNSYyMDI0JjIwMjMmMjAyMiYyMDIxJjIwMjAmMjAxOSYyMDE4JuabtOaXqScsCiAgICBjbGFzc191cmw6J+mAo+i8ieS4rSYyMDI1JjIwMjQmMjAyMyYyMDIyJjIwMjEmMjAyMCYyMDE5JjIwMTgmMjAxNycsCglwbGF5X3BhcnNlOnRydWUsCglsYXp5OmBqczoKCQl2YXIgYXBpdXJsID0gJ2h0dHBzOi8vdi5hbmltZTEubWUvYXBpJzsKCQl2YXIgaHRtbCA9IHJlcXVlc3QoYXBpdXJsLCB7CgkJCWhlYWRlcnM6IHsKCQkJCSdSZWZlcmVyJzogSE9TVCwKCQkJfSwKCQkJYm9keTogJ2Q9JyArIGlucHV0LAoJCQltZXRob2Q6ICdQT1NUJywKCQkJd2l0aEhlYWRlcnM6IHRydWUKCQl9KTsKCQlsZXQganNvbiA9IEpTT04ucGFyc2UoaHRtbCk7CgkJcHJpbnQoanNvbik7CgkJbG9nKE9iamVjdC5rZXlzKGpzb24pKTsKCQlsZXQgc2V0Q2sgPSBPYmplY3Qua2V5cyhqc29uKS5maWx0ZXIoaXQgPT4gaXQudG9Mb3dlckNhc2UoKSA9PT0gInNldC1jb29raWUiKTsKCQlsZXQgY29va2llID0gc2V0Q2sgPyBqc29uW3NldENrXSA6ICIiOwoJCS8vIDPkuKpzZXQtQ29va2llCgkJaWYgKEFycmF5LmlzQXJyYXkoY29va2llKSkgewoJCQljb29raWUgPSBjb29raWUuam9pbignOycpOwoJCX0KCQljb29raWUgPSBjb29raWUuc3BsaXQoJzsnKS5maWx0ZXIoZnVuY3Rpb24oaXQpIHsKCQkJcmV0dXJuIFsnZScsICdwJywgJ2gnXS5pbmNsdWRlcyhpdC5zcGxpdCgnPScpWzBdKQoJCX0pLmpvaW4oJzsnKTsKCQlsb2coY29va2llKTsKCQl2YXIgcHVybCA9IEpTT04ucGFyc2UoanNvbi5ib2R5KS5zWzBdLnNyYzsKCQlpZiAocHVybC5zdGFydHNXaXRoKCcvJykpIHsKCQkJcHVybCA9ICdodHRwczonICsgcHVybAoJCX0KCQlpbnB1dCA9IHsKCQkJang6IDAsCgkJCXVybDogcHVybCwKCQkJcGFyc2U6IDAsCgkJCWhlYWRlcjogSlNPTi5zdHJpbmdpZnkoewoJCQkJJ3JlZmVyZXInOiBIT1NULAoJCQkJJ0Nvb2tpZSc6IGNvb2tpZSwKCQkJCSd1c2VyLWFnZW50JzogUENfVUEKCQkJfSksCgkJfQoJYCwKCWxpbWl0OjYsCgnmjqjojZA6IGBqczoKCQl2YXIgZCA9IFtdOwoJCWZ1bmN0aW9uIHN0cmlwSHRtbFRhZyhzcmMpIHsKCQkJcmV0dXJuIHNyYy5yZXBsYWNlKC88XFwvP1tePl0rKD58JCkvZywgJycpLnJlcGxhY2UoLyYuezEsNX07L2csICcnKS5yZXBsYWNlKC9cXHN7Mix9L2csICcgJyk7CgkJfQoJCXZhciB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKCQl2YXIganNvbiA9IHJlcXVlc3QoJ2h0dHBzOi8vZDF6cXV6amd3bzl5Yi5jbG91ZGZyb250Lm5ldC8/Xz0nICsgdGltZXN0YW1wKTsKCQl2YXIgbGlzdCA9IEpTT04ucGFyc2UoanNvbik7CgkJbGV0IHBsYXlLZXlzID0gT2JqZWN0LnZhbHVlcyhsaXN0KS5maWx0ZXIoZnVuY3Rpb24oeCkgewoJCQlyZXR1cm4geFsyXS5pbmNsdWRlcygn6YCj6LyJ5LitJyk7CgkJfSk7CgkJcGxheUtleXMuZm9yRWFjaChmdW5jdGlvbihpdCkgewoJCQlkLnB1c2goewoJCQkJdGl0bGU6IHN0cmlwSHRtbFRhZyhpdFsxXSksCgkJCQlpbWc6ICdodHRwczovL3N0YS5hbmljZG4uY29tL3BsYXllckltZy84LmpwZycsCgkJCQlkZXNjOiBpdFsyXSwKCQkJCXVybDogaXRbMF0sCgkJCX0pOwoJCX0pOwoJCXNldFJlc3VsdChkKTsKCWAsCgnkuIDnuqc6IGBqczoKCQl2YXIgZCA9IFtdOwoJCWZ1bmN0aW9uIHN0cmlwSHRtbFRhZyhzcmMpIHsKCQkJcmV0dXJuIHNyYy5yZXBsYWNlKC88XFwvP1tePl0rKD58JCkvZywgJycpLnJlcGxhY2UoLyYuezEsNX07L2csICcnKS5yZXBsYWNlKC9cXHN7Mix9L2csICcgJyk7CgkJfQoJCXZhciB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKCQl2YXIganNvbiA9IHJlcXVlc3QoJ2h0dHBzOi8vZDF6cXV6amd3bzl5Yi5jbG91ZGZyb250Lm5ldC8/Xz0nICsgdGltZXN0YW1wKTsKCQl2YXIgbGlzdCA9IEpTT04ucGFyc2UoanNvbik7CgkJbGV0IHBsYXlLZXlzID0gT2JqZWN0LnZhbHVlcyhsaXN0KS5maWx0ZXIoZnVuY3Rpb24oeCkgewoJCQlpZiAoTVlfQ0FURSA9PT0gJ+mAo+i8ieS4rScpIHJldHVybiB4WzJdLmluY2x1ZGVzKE1ZX0NBVEUpOwoJCQllbHNlIGlmIChNWV9DQVRFID09PSAnMjAxNycpIHJldHVybiB4WzNdIDw9IE1ZX0NBVEU7CgkJCWVsc2UgcmV0dXJuIHhbM10gPT0gTVlfQ0FURTsKCQl9KTsKCQlwbGF5S2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGl0KSB7CgkJCWQucHVzaCh7CgkJCQl0aXRsZTogc3RyaXBIdG1sVGFnKGl0WzFdKSwKCQkJCWltZzogJ2h0dHBzOi8vc3RhLmFuaWNkbi5jb20vcGxheWVySW1nLzguanBnJywKCQkJCWRlc2M6IGl0WzJdLAoJCQkJdXJsOiBpdFswXSwKCQkJfSk7CgkJfSk7CgkJc2V0UmVzdWx0KGQpOwoJYCwKCeS6jOe6pzogYGpzOgoJCXBkZmggPSBqc3AucGRmaDsgcGRmYSA9IGpzcC5wZGZhOyBwZCA9IGpzcC5wZDsKCQl2YXIgaHRtbCA9IHJlcXVlc3QoaW5wdXQpOwoJCXZhciB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKCQl2YXIganNvbiA9IHJlcXVlc3QoJ2h0dHBzOi8vZDF6cXV6amd3bzl5Yi5jbG91ZGZyb250Lm5ldC8/Xz0nICsgdGltZXN0YW1wKTsKCQl2YXIgbGlzdCA9IEpTT04ucGFyc2UoanNvbik7CgkJdmFyIHZpZCA9IGlucHV0LnNwbGl0KCc9JylbMV07CgkJbGV0IHBsYXlLZXlzID0gT2JqZWN0LnZhbHVlcyhsaXN0KS5maW5kKGZ1bmN0aW9uKHgpIHsKCQkJcmV0dXJuIHhbMF0gPT09IHBhcnNlSW50KHZpZCk7CgkJfSk7CgkJVk9EID0gewoJCQl2b2RfcGljOiAnaHR0cHM6Ly9zdGEuYW5pY2RuLmNvbS9wbGF5ZXJJbWcvOC5qcGcnLAoJCQl2b2RfaWQ6IHBsYXlLZXlzWzBdLAoJCQl2b2RfbmFtZTogcGxheUtleXNbMV0sCgkJCXZvZF9jb250ZW50OiBwbGF5S2V5c1syXSwKCQkJdm9kX3llYXI6IHBsYXlLZXlzWzNdLAoJCQl0eXBlX25hbWU6IHBsYXlLZXlzWzRdLAoJCQl2b2RfYWN0b3I6IHBsYXlLZXlzWzVdLAoJCX07CgkJdmFyIHBhZ2V1cmwgPSBwZChodG1sLCAnLmNhdC1saW5rcyYmYSYmaHJlZicpOwoJCXZhciBwYWdlbnVtID0gMTsKCQlsZXQgdm9kX3RhYl9saXN0ID0gW107CgkJbGV0IHZsaXN0ID0gW107CgkJZm9yIChsZXQgcCA9IDE7IHAgPCBwYXJzZUludChwYWdlbnVtKSArIDE7IHArKykgewoJCQlsZXQgcGh0bWwgPSByZXF1ZXN0KHBhZ2V1cmwgKyAnL3BhZ2UvJyArIHBhZ2VudW0pOwoJCQlsZXQgbmV3X3ZvZF9saXN0ID0gW107CgkJCWxldCB2b2RMaXN0ID0gW107CgkJCXZvZExpc3QgPSBwZGZhKHBodG1sLCAnLnNpdGUtbWFpbiYmYXJ0aWNsZScpOwoJCQlmb3IgKGxldCBpID0gMDsgaSA8IHZvZExpc3QubGVuZ3RoOyBpKyspIHsKCQkJCWxldCBpdCA9IHZvZExpc3RbaV07CgkJCQlsZXQgcHRpdGxlID0gcGRmaChpdCwgJy5lbnRyeS10aXRsZSYmVGV4dCcpLnJlcGxhY2UoL1xcWyguKilcXF0vLCAnJDEnKTsKCQkJCWxldCBwdXJsID0gcGQoaXQsICcudmlkZW8tanMmJmRhdGEtYXBpcmVxJyk7CgkJCQluZXdfdm9kX2xpc3QucHVzaChwdGl0bGUgKyAnJCcgKyBwdXJsKTsKCQkJfQoJCQl2bGlzdCA9IHZsaXN0LmNvbmNhdChuZXdfdm9kX2xpc3QpOwoJCQl0cnkgewoJCQkJcGFnZW51bSA9IHBkKHBodG1sLCAnLm5hdi1wcmV2aW91cyYmYSYmaHJlZicpLnNwbGl0KCcvcGFnZS8nKVsxXTsKCQkJfSBjYXRjaChlKSB7fQoJCX0KCQlsZXQgdmxpc3QyID0gdmxpc3QucmV2ZXJzZSgpLmpvaW4oIiMiKTsKCQl2b2RfdGFiX2xpc3QucHVzaCh2bGlzdDIpOwoJCVZPRC52b2RfcGxheV9mcm9tID0gJ+mBk+mVv+WcqOe6vyc7CgkJVk9ELnZvZF9wbGF5X3VybCA9IHZvZF90YWJfbGlzdC5qb2luKCIkJCQiKTsKCWAsCgnmkJzntKI6IGBqczoKCQl2YXIgZCA9IFtdOwoJCWZ1bmN0aW9uIHN0cmlwSHRtbFRhZyhzcmMpIHsKCQkJcmV0dXJuIHNyYy5yZXBsYWNlKC88XFwvP1tePl0rKD58JCkvZywgJycpLnJlcGxhY2UoLyYuezEsNX07L2csICcnKS5yZXBsYWNlKC9cXHN7Mix9L2csICcgJyk7CgkJfQoJCXZhciB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKCQl2YXIganNvbiA9IHJlcXVlc3QoJ2h0dHBzOi8vZDF6cXV6amd3bzl5Yi5jbG91ZGZyb250Lm5ldC8/Xz0nICsgdGltZXN0YW1wKTsKCQl2YXIgbGlzdCA9IEpTT04ucGFyc2UoanNvbik7CgkJdmFyIHdkID0gaW5wdXQuc3BsaXQoJz0nKVsxXTsKCQlsZXQgcGxheUtleXMgPSBPYmplY3QudmFsdWVzKGxpc3QpLmZpbHRlcihmdW5jdGlvbih4KSB7CgkJCXJldHVybiB4WzFdLmluY2x1ZGVzKHdkKTsKCQl9KTsKCQlsb2cocGxheUtleXMpOwoJCXBsYXlLZXlzLmZvckVhY2goZnVuY3Rpb24oaXQpIHsKCQkJZC5wdXNoKHsKCQkJCXRpdGxlOiBzdHJpcEh0bWxUYWcoaXRbMV0pLAoJCQkJaW1nOiAnaHR0cHM6Ly9zdGEuYW5pY2RuLmNvbS9wbGF5ZXJJbWcvOC5qcGcnLAoJCQkJZGVzYzogaXRbMl0sCgkJCQl1cmw6IGl0WzBdLAoJCQl9KTsKCQl9KTsKCQlzZXRSZXN1bHQoZCk7CglgLAp9
\ No newline at end of file
diff --git a/潇洒/XBPQ/修罗影视.json b/潇洒/XBPQ/修罗影视.json
deleted file mode 100644
index b94ea54..0000000
--- a/潇洒/XBPQ/修罗影视.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "数组": "card card-sm card-link&&",
- "图片": "src=\"&&\"",
- "标题": "mb-0 card-title text-truncate\">&&<",
- "副标题": "start-0 text-red-fg\">&&",
- "链接": "href=\"&&\"",
- "简介": "剧情简介:&&\"",
- "线路标题": "磁力+>&&<",
- "播放数组": "download-list&&",
- "播放列表": "
",
- "播放标题": "text-muted\">&&[不包含:网盘下载]",
- "跳转播放链接": "href=\"&&\"",
- "分类url": "https://v.xlys.ltd.ua/s/all/{catePg}?type={cateId};;d0",
- "分类": "电影$0#电视剧$1"
-}
\ No newline at end of file
diff --git a/潇洒/XBPQ/农民影视.json b/潇洒/XBPQ/农民影视.json
deleted file mode 100644
index 205677c..0000000
--- a/潇洒/XBPQ/农民影视.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "请求头": "手机",
- "编码": "UTF-8",
- "简介": "简 介:&&",
- "线路数组": "javascript:;\">&&",
- "数组": "&&",
- "图片": "data-echo=\"&&\"",
- "分类url": "https://vip.wwgz.cn:5200/vod-list-id-{cateId}-pg-{catePg}-order--by-time-class-0-year-{year}-letter--area-{area}-lang-.html",
- "分类": "电影$1#电视剧$2#动漫$4#综艺$3#短剧$26"
-}
\ No newline at end of file
diff --git a/潇洒/XBPQ/短剧网.json b/潇洒/XBPQ/短剧网.json
deleted file mode 100644
index 1d5f5a7..0000000
--- a/潇洒/XBPQ/短剧网.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "分类": "短剧$duanju#电影$dianying#电视剧$dianshiju#动漫$dongman#综艺$zongyi",
- "分类url": "https://www.duanjuwang.cc/vodtype/{cateId}/page/{catePg}.html"
-}
\ No newline at end of file
diff --git a/潇洒/XYQHiker/短剧屋.json b/潇洒/XYQHiker/短剧屋.json
deleted file mode 100644
index 0a1bf24..0000000
--- a/潇洒/XYQHiker/短剧屋.json
+++ /dev/null
@@ -1,81 +0,0 @@
-{
- "规则名": "短剧屋",
- "规则作者": "",
- "请求头参数": "手机",
- "网页编码格式": "UTF-8",
- "图片是否需要代理": "0",
- "是否开启获取首页数据": "1",
- "首页推荐链接": "http://www.metaysw.com",
- "首页列表数组规则": "body&&.vod-vodlist",
- "首页片单列表数组规则": "li",
- "首页片单是否Jsoup写法": "1",
- "分类起始页码": "1",
- "分类链接": "http://www.metaysw.com/type/{cateId}-{catePg}.html",
- "分类名称": "短剧",
- "分类名称替换词": "lianxuju",
- "筛选数据": {},
- //"筛选数据": "ext",
- //{cateId}
- "筛选子分类名称": "",
- "筛选子分类替换词": "",
- //{class}
- "筛选类型名称": "",
- "筛选类型替换词": "*",
- //{area}
- "筛选地区名称": "",
- "筛选地区替换词": "*",
- //{year}
- "筛选年份名称": "",
- "筛选年份替换词": "*",
- //{lang}
- "筛选语言名称": "",
- "筛选语言替换词": "*",
- //{by}
- "筛选排序名称": "时间&人气&评分",
- "筛选排序替换词": "time&hits&score",
- "分类截取模式": "1",
- "分类列表数组规则": ".vod-vodlist&&li",
- "分类片单是否Jsoup写法": "1",
- "分类片单标题": ".vod-vodlist__title&&Text",
- "分类片单链接": "a&&href",
- "分类片单图片": ".lazyload&&data-original",
- "分类片单副标题": ".pic-text&&Text",
- "分类片单链接加前缀": "http://www.metaysw.com",
- "分类片单链接加后缀": "",
- "搜索请求头参数": "User-Agent$手机",
- "搜索链接": "http://www.metaysw.com/search/page/{SearchPg}/wd/{wd}.html",
- "POST请求数据": "",
- "搜索截取模式": "1",
- "搜索列表数组规则": ".vod-vodlist&&li",
- "搜索片单是否Jsoup写法": "1",
- "搜索片单图片": ".lazyload&&data-original",
- "搜索片单标题": ".vod-vodlist__title&&Text",
- "搜索片单链接": "a&&href",
- "搜索片单副标题": ".pic-text&&Text",
- "搜索片单链接加前缀": "http://www.metaysw.com",
- "搜索片单链接加后缀": "",
- "链接是否直接播放": "0",
- "直接播放链接加前缀": "https://live.52sf.ga/huya/",
- "直接播放链接加后缀": "#isVideo=true#",
- "直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online",
- "详情是否Jsoup写法": "1",
- "类型详情": "",
- "年代详情": "",
- "地区详情": "",
- "演员详情": ".vod-content__detail&&p,2&&Text!主演:",
- "简介详情": "",
- "线路列表数组规则": ".dropdown-menu&&li",
- "线路标题": "a&&Text",
- "播放列表数组规则": "body&&.vod-content__playlist",
- "选集列表数组规则": "li",
- "选集标题链接是否Jsoup写法": "1",
- "选集标题": "a&&Text",
- "选集链接": "a&&href",
- "是否反转选集序列": "0",
- "选集链接加前缀": "http://www.metaysw.com",
- "选集链接加后缀": "",
- "分析MacPlayer": "0",
- "是否开启手动嗅探": "0",
- "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
- "手动嗅探视频链接过滤词": ".html#=http"
-}
\ No newline at end of file
diff --git a/潇洒/api.json b/潇洒/api.json
index dc8ae20..48ccd9d 100644
--- a/潇洒/api.json
+++ b/潇洒/api.json
@@ -72,6 +72,14 @@
"url": "http://v.lkuys.cn"
}
},
+ {
+ "key": "移动",
+ "name": "移动|APP",
+ "type": 3,
+ "api": "csp_YD",
+ "searchable": 1,
+ "quickSearch": 1
+ },
{
"key": "行动",
"name": "行动|APP",
@@ -104,12 +112,11 @@
"api": "csp_AppGet2",
"ext": {
"url": "",
- "site": "https://cdn-tupic-duofun-neimenggu.56uxi.com/2.txt",
+ "site": "./txt/2.txt",
"dataKey": "qwertyuiopqwertt",
"dataIv": "qwertyuiopqwertt",
"deviceId": "",
- "version": "109",
- "ua": "okhttp/3.10.0"
+ "version": "109"
}
},
{
@@ -135,7 +142,7 @@
"api": "csp_AppGet",
"ext": {
"url": "",
- "site": "https://vip.123pan.cn/1848451100/zl/xfdd.txt",
+ "site": "./txt/xfdd.txt",
"dataKey": "xasdasdqwertyuio",
"dataIv": "xasdasdqwertyuio",
"deviceId": "",
@@ -150,7 +157,7 @@
"api": "csp_AppGet",
"ext": {
"url": "",
- "site": "https://bind.315999.xyz/89.txt",
+ "site": "./txt/89.txt",
"dataKey": "#getapp@TMD@2025",
"dataIv": "#getapp@TMD@2025",
"deviceId": "",
@@ -179,7 +186,7 @@
"api": "csp_AppGet2",
"ext": {
"url": "",
- "site": "https://lanyinghz.oss-cn-hangzhou.aliyuncs.com/lanyingxmy.txt",
+ "site": "./txt/lanyingxmy.txt",
"dataKey": "ca94b06ca359d80e",
"dataIv": "ca94b06ca359d80e",
"deviceId": "",
@@ -228,21 +235,6 @@
"version": "120"
}
},
- {
- "key": "鲸鱼",
- "name": "鲸鱼|APP",
- "type": 3,
- "quickSearch": 1,
- "api": "csp_AppGet2",
- "ext": {
- "url": "",
- "site": "https://jingyu4k-1312635929.cos.ap-nanjing.myqcloud.com/1.json",
- "dataKey": "AAdgrdghjfgswerA",
- "dataIv": "AAdgrdghjfgswerA",
- "deviceId": "",
- "version": ""
- }
- },
{
"key": "鲶鱼",
"name": "鲶鱼|APP",
@@ -319,7 +311,7 @@
"api": "csp_AppGet",
"ext": {
"url": "",
- "site": "http://59.153.167.137:7788/1.json",
+ "site": "./json/1.json",
"dataKey": "4d83b87c4c5ea111",
"dataIv": "4d83b87c4c5ea111",
"deviceId": "",
@@ -487,7 +479,7 @@
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
- "url": "https://new.tkbot.fun",
+ "url": "http://v.tkbot.fun",
"dataKey": "d032c12876bc6848",
"dataIv": "d032c12876bc6848",
"deviceId": "",
@@ -618,7 +610,7 @@
"ratio": 1.433
},
"ext": {
- "json": "./json/哔哩视频.json",
+ "json": "./json/BLSP.json",
"cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"
}
},
@@ -626,29 +618,29 @@
"key": "腾讯视频",
"name": "腾讯|视频",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/腾讯视频.js"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/TXSP.js"
},
{
"key": "优酷视频",
"name": "优酷|视频",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/优酷视频.js"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/YKSP.js"
},
{
"key": "芒果视频",
"name": "芒果|视频",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/芒果视频.js"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/MGSP.js"
},
{
"key": "爱奇艺",
- "name": "爱奇异|视频",
+ "name": "爱奇艺|视频",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/爱奇艺.js"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/AQY.js"
},
{
"key": "三六零",
@@ -657,15 +649,15 @@
"api": "csp_SP360"
},
{
- "key": "聚合",
- "name": "聚合|4K弹幕",
+ "key": "小斑快映",
+ "name": "小斑快映|4K弹幕",
"type": 3,
"api": "csp_PanWebShare",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"changeable": 1,
- "ext": "./json/jh.json"
+ "ext": "./json/xbky.json"
},
{
"key": "玩偶哥哥",
@@ -875,8 +867,8 @@
"key": "双星",
"name": "双星|4K弹幕",
"type": 3,
- "api": "./js/cloud.min.js",
- "ext": "./js/双星.js",
+ "api": "./api/cloud.min.js",
+ "ext": "./js/SX.js",
"style": {
"type": "list"
}
@@ -885,8 +877,8 @@
"key": "懒盘",
"name": "懒盘|4K弹幕",
"type": 3,
- "api": "./js/cloud.min.js",
- "ext": "./js/懒盘.js",
+ "api": "./api/cloud.min.js",
+ "ext": "./js/LP.js",
"style": {
"type": "list"
}
@@ -895,8 +887,8 @@
"key": "百酷",
"name": "百酷|4K弹幕",
"type": 3,
- "api": "./js/cloud.min.js",
- "ext": "./js/百酷.js",
+ "api": "./api/cloud.min.js",
+ "ext": "./js/BK.js",
"style": {
"type": "list"
}
@@ -905,8 +897,8 @@
"key": "校长",
"name": "校长|4K弹幕",
"type": 3,
- "api": "./js/cloud.min.js",
- "ext": "./js/校长.js",
+ "api": "./api/cloud.min.js",
+ "ext": "./js/XZ.js",
"style": {
"type": "list"
}
@@ -915,8 +907,8 @@
"key": "天堂",
"name": "天堂|4K弹幕",
"type": 3,
- "api": "./js/cloud.min.js",
- "ext": "./js/天堂.js",
+ "api": "./api/cloud.min.js",
+ "ext": "./js/TT.js",
"style": {
"type": "list"
}
@@ -925,8 +917,8 @@
"key": "人人电影网",
"name": "人人|4K弹幕",
"type": 3,
- "api": "./js/cloud.min.js",
- "ext": "./js/人人电影网.js",
+ "api": "./api/cloud.min.js",
+ "ext": "./js/RRDYW.js",
"style": {
"type": "list"
}
@@ -935,19 +927,8 @@
"key": "爱搜",
"name": "爱搜|4K弹幕",
"type": 3,
- "api": "./js/cloud.min.js",
- "ext": "./js/爱搜.js",
- "style": {
- "type": "list"
- }
- },
- {
- "key": "移动",
- "name": "移动|4K",
- "type": 3,
- "api": "csp_YD",
- "searchable": 1,
- "quickSearch": 1,
+ "api": "./api/cloud.min.js",
+ "ext": "./js/AS.js",
"style": {
"type": "list"
}
@@ -974,8 +955,8 @@
"key": "米搜",
"name": "米搜|搜索",
"type": 3,
- "api": "./js/cloud.min.js",
- "ext": "./js/米搜.js",
+ "api": "./api/cloud.min.js",
+ "ext": "./js/MS.js",
"style": {
"type": "list"
}
@@ -984,8 +965,8 @@
"key": "人人分享站",
"name": "人人|搜索",
"type": 3,
- "api": "./js/cloud.min.js",
- "ext": "./js/人人分享站.js",
+ "api": "./api/cloud.min.js",
+ "ext": "./js/RR.js",
"style": {
"type": "list"
}
@@ -994,8 +975,8 @@
"key": "全盘",
"name": "全盘|搜索",
"type": 3,
- "api": "./js/cloud.min.js",
- "ext": "./js/全盘.js",
+ "api": "./api/cloud.min.js",
+ "ext": "./js/QP.js",
"style": {
"type": "list"
}
@@ -1004,8 +985,8 @@
"key": "夸克盘搜",
"name": "盘搜|搜索",
"type": 3,
- "api": "./js/cloud.min.js",
- "ext": "./js/夸克盘搜.js",
+ "api": "./api/cloud.min.js",
+ "ext": "./js/KKPS.js",
"style": {
"type": "list"
}
@@ -1023,7 +1004,7 @@
"key": "河马短剧",
"name": "河马|短剧",
"type": 3,
- "api": "./py/河马短剧.py",
+ "api": "./api/HMDJ.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
@@ -1034,7 +1015,7 @@
"key": "偷乐短剧",
"name": "偷乐|短剧",
"type": 3,
- "api": "./py/偷乐短剧.py",
+ "api": "./api/TLDJ.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
@@ -1045,8 +1026,8 @@
"key": "短剧网",
"name": "短剧网|短剧",
"type": 3,
- "api": "csp_HBPQ",
- "ext": "./XBPQ/短剧网.json"
+ "api": "csp_XBPQ",
+ "ext": "./json/DJWang.json"
},
{
"key": "短剧屋",
@@ -1056,7 +1037,7 @@
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
- "ext": "./XYQHiker/短剧屋.json"
+ "ext": "./json/DJWu.json"
},
{
"key": "起点",
@@ -1072,7 +1053,7 @@
"key": "金牌影视",
"name": "金牌|影视",
"type": 3,
- "api": "./py/金牌影视.py",
+ "api": "./api/JPYS.py",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
@@ -1085,7 +1066,7 @@
"key": "猎手影视",
"name": "猎手|影视",
"type": 3,
- "api": "./py/猎手影视.py",
+ "api": "./api/LSYS.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
@@ -1207,8 +1188,8 @@
"key": "采集之王",
"name": "采集|合集",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/采集之王.js?type=url¶ms=../json/采集静态.json$1$1"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/CJZW.js?type=url¶ms=./json/CJJT.json$1$1"
},
{
"key": "爱看机器人",
@@ -1223,57 +1204,57 @@
"key": "海纳影视",
"name": "海纳|影视",
"type": 3,
- "api": "csp_HBPQ",
- "ext": "./XBPQ/海纳影视.json"
+ "api": "csp_XBPQ",
+ "ext": "./json/HNYS.json"
},
{
"key": "面包影视",
"name": "面包|影视",
"type": 3,
- "api": "csp_HBPQ",
- "ext": "./XBPQ/面包影视.json"
+ "api": "csp_XBPQ",
+ "ext": "./json/MBYS.json"
},
{
"key": "永乐影视",
"name": "永乐|影视",
"type": 3,
- "api": "csp_HBPQ",
- "ext": "./XBPQ/永乐影视.json"
+ "api": "csp_XBPQ",
+ "ext": "./json/YLYS.json"
},
{
"key": "雪糕影视",
"name": "雪糕|影视",
"type": 3,
- "api": "csp_HBPQ",
- "ext": "./XBPQ/雪糕影视.json"
+ "api": "csp_XBPQ",
+ "ext": "./json/XGYS.json"
},
{
"key": "骚火影视",
"name": "骚火|影视",
"type": 3,
- "api": "csp_HBPQ",
- "ext": "./XBPQ/骚火影视.json"
+ "api": "csp_XBPQ",
+ "ext": "./json/SHYS.json"
},
{
"key": "七点影视",
"name": "七点|影视",
"type": 3,
- "api": "csp_HBPQ",
- "ext": "./XBPQ/七点影视.json"
+ "api": "csp_XBPQ",
+ "ext": "./json/QDYS.json"
},
{
"key": "三九影视",
"name": "三九|影视",
"type": 3,
- "api": "csp_HBPQ",
- "ext": "./XBPQ/三九影视.json"
+ "api": "csp_XBPQ",
+ "ext": "./json/SJYS.json"
},
{
"key": "三四影视",
"name": "三四|影视",
"type": 3,
- "api": "csp_HBPQ",
- "ext": "./XBPQ/三四影视.json"
+ "api": "csp_XBPQ",
+ "ext": "./json/SSYS.json"
},
{
"key": "农民影视",
@@ -1283,7 +1264,7 @@
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
- "ext": "./XYQHiker/农民影视.json"
+ "ext": "./json/NMYS.json"
},
{
"key": "盒子影视",
@@ -1293,24 +1274,24 @@
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
- "ext": "./XYQHiker/盒子影视.json"
+ "ext": "./json/HZYS.json"
},
{
"key": "电影牛",
- "name": "影牛|影视",
+ "name": "电影牛|影视",
"type": 3,
"api": "csp_XYQHiker",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
- "ext": "./XYQHiker/电影牛.json"
+ "ext": "./json/DYN.json"
},
{
"key": "剧圈圈",
- "name": "剧圈|影视",
+ "name": "剧圈圈|影视",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/剧圈圈.js"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/JQQ.js"
},
{
"key": "1905",
@@ -1342,31 +1323,31 @@
"key": "哆啦新番社",
"name": "哆啦|新番社",
"type": 3,
- "api": "csp_HBPQ",
+ "api": "csp_XBPQ",
"style": {
"type": "list"
},
- "ext": "./XBPQ/哆啦新番社.json"
+ "ext": "./json/DLXFS.json"
},
{
"key": "56动漫",
"name": "56|动漫",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/56动漫.js"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/56DM.js"
},
{
"key": "NT动漫",
"name": "NT|动漫",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/NT动漫.js"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/NTDM.js"
},
{
"key": "Anime1",
- "name": "A1|动漫",
+ "name": "Anime1|动漫",
"type": 3,
- "api": "./js/drpy2.min.js",
+ "api": "./api/drpy2.min.js",
"ext": "./js/Anime1.js"
},
{
@@ -1390,8 +1371,7 @@
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
- "url": "",
- "site": "https://xfapp-1305390065.cos.ap-guangzhou.myqcloud.com/getapp.txt",
+ "url": "https://pzoap.moedot.net",
"dataKey": "1yZ2Spn9krnzVKoC",
"dataIv": "1yZ2Spn9krnzVKoC",
"deviceId": "",
@@ -1486,101 +1466,102 @@
"key": "樱花动漫",
"name": "樱花|动漫",
"type": 3,
- "api": "csp_HBPQ",
- "ext": "./XBPQ/樱花动漫.json"
+ "api": "csp_XBPQ",
+ "ext": "./json/YHDM.json"
},
{
"key": "巴士动漫",
"name": "巴士|动漫",
"type": 3,
"api": "csp_XYQHiker",
- "ext": "./XYQHiker/巴士动漫.json"
+ "ext": "./json/bsdm.json"
},
{
"key": "好看动漫",
"name": "好看|动漫",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/好看动漫.js"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/HKDM.js"
},
{
"key": "奇米动漫",
"name": "奇米|动漫",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/奇米动漫.js"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/QMDM.js"
+ },
+ {
+ "key": "怡萱动漫",
+ "name": "怡萱|动漫",
+ "type": 3,
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/YXDM.js"
},
{
"key": "花子动漫",
"name": "花子|动漫",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/花子动漫.js"
- },
- {
- "key": "樱花动漫",
- "name": "樱花|动漫",
- "type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/樱花动漫.js"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/HZDM.js"
},
{
"key": "动画片",
"name": "动画片|动漫",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/动画片大全.js"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/DHPDQ.js"
},
{
"key": "路漫漫",
"name": "路漫漫|动漫",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/路漫漫.js"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/LMM.js"
},
{
"key": "动漫岛",
"name": "动漫岛|动漫",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/动漫岛.js"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/DMD.js"
},
{
"key": "去看吧",
"name": "去看吧|动漫",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/去看吧.js"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/QKB.js"
},
{
"key": "爱弹幕",
"name": "爱弹幕|动漫",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/爱弹幕.js"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/ADM.js"
},
{
"key": "异世界",
"name": "异世界|动漫",
"type": 3,
- "api": "./js/drpy2.min.js",
- "ext": "./js/异世界.js"
+ "api": "./api/drpy2.min.js",
+ "ext": "./js/YSJ.js"
},
{
"key": "荐片",
"name": "荐片|磁力",
"api": "csp_Jianpian",
- "type": 3
+ "type": 3,
+ "playerType": 1
},
{
"key": "修罗影视",
"name": "修罗|磁力",
"type": 3,
- "api": "csp_HBPQ",
+ "api": "csp_XBPQ",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
- "ext": "./XBPQ/修罗影视.json"
+ "ext": "./json/XLYS.json"
},
{
"key": "七味",
@@ -1646,18 +1627,18 @@
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
- "ext": "./XYQHiker/电影港.json"
+ "ext": "./json/DYG.json"
},
{
"key": "狐狸君",
"name": "狐狸君|磁力",
"type": 3,
- "api": "csp_HBPQ",
+ "api": "csp_XBPQ",
"changeable": 1,
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
- "ext": "./XBPQ/狐狸君.json"
+ "ext": "./json/HLJ.json"
},
{
"key": "BT天堂",
@@ -1667,7 +1648,7 @@
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
- "ext": "./XYQHiker/BT天堂.json"
+ "ext": "./json/BTTT.json"
},
{
"key": "Mp4电影",
@@ -1755,8 +1736,8 @@
"key": "短剧合集",
"name": "短剧|合集",
"type": 3,
- "api": "./js/cloud.min.js",
- "ext": "./js/短剧合集.js",
+ "api": "./api/cloud.min.js",
+ "ext": "./js/DJHJ.js",
"style": {
"type": "list"
}
@@ -1765,8 +1746,8 @@
"key": "短剧大全",
"name": "短剧|大全",
"type": 3,
- "api": "./js/cloud.min.js",
- "ext": "./js/短剧大全.js",
+ "api": "./api/cloud.min.js",
+ "ext": "./js/DJDQ.js",
"style": {
"type": "list"
}
@@ -1788,7 +1769,7 @@
"key": "网络直播",
"name": "网络|直播",
"type": 3,
- "api": "./py/网络直播.py"
+ "api": "./api/WLZB.py"
},
{
"key": "88看球",
@@ -1814,12 +1795,12 @@
"ratio": 1.433
},
"ext": {
- "json": "./json/哔哩合集.json",
+ "json": "./json/BLHJ.json",
"cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"
}
},
{
- "key": "哔哩哔哩演唱会",
+ "key": "哔哩哔哩戏曲",
"name": "哔哩|音乐",
"type": 3,
"api": "csp_Bili",
@@ -1828,7 +1809,7 @@
"filterable": 0,
"ext": {
"cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt",
- "json": "./json/哔哩哔哩演唱会.json"
+ "json": "./json/BLYCH.json"
},
"style": {
"type": "rect",
@@ -1845,7 +1826,7 @@
"filterable": 0,
"ext": {
"cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt",
- "json": "./json/哔哩哔哩听书.json"
+ "json": "./json/BLTS.json"
},
"style": {
"type": "rect",
@@ -1862,7 +1843,7 @@
"filterable": 0,
"ext": {
"cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt",
- "json": "./json/哔哩哔哩相声.json"
+ "json": "./json/BLXS.json"
},
"style": {
"type": "rect",
@@ -1879,7 +1860,7 @@
"filterable": 0,
"ext": {
"cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt",
- "json": "./json/哔哩哔哩小品.json"
+ "json": "./json/BLXP.json"
},
"style": {
"type": "rect",
@@ -1896,75 +1877,7 @@
"filterable": 0,
"ext": {
"cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt",
- "json": "./json/哔哩哔哩戏曲.json"
- },
- "style": {
- "type": "rect",
- "ratio": 1.597
- }
- },
- {
- "key": "少儿教育",
- "name": "少儿|教育",
- "type": 3,
- "api": "csp_Bili",
- "searchable": 0,
- "quickSearch": 0,
- "filterable": 1,
- "ext": {
- "json": "./json/少儿教育.json",
- "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"
- },
- "style": {
- "type": "rect",
- "ratio": 1.597
- }
- },
- {
- "key": "小学课堂",
- "name": "小学|课堂",
- "type": 3,
- "api": "csp_Bili",
- "searchable": 0,
- "quickSearch": 0,
- "filterable": 1,
- "ext": {
- "json": "./json/小学课堂.json",
- "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"
- },
- "style": {
- "type": "rect",
- "ratio": 1.597
- }
- },
- {
- "key": "初中课堂",
- "name": "初中|课堂",
- "type": 3,
- "api": "csp_Bili",
- "searchable": 0,
- "quickSearch": 0,
- "filterable": 1,
- "ext": {
- "json": "./json/初中课堂.json",
- "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"
- },
- "style": {
- "type": "rect",
- "ratio": 1.597
- }
- },
- {
- "key": "高中教育",
- "name": "高中|课堂",
- "type": 3,
- "api": "csp_Bili",
- "searchable": 0,
- "quickSearch": 0,
- "filterable": 1,
- "ext": {
- "json": "./json/高中课堂.json",
- "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"
+ "json": "./json/BLXQ.json"
},
"style": {
"type": "rect",
@@ -1989,23 +1902,13 @@
"key": "养生堂",
"name": "养生|知识",
"type": 3,
- "api": "csp_HBPQ",
- "ext": "./XBPQ/养生堂.json",
+ "api": "csp_XBPQ",
+ "ext": "./json/YST.json",
"style": {
"type": "rect",
"ratio": 1.597
}
},
- {
- "key": "版本信息",
- "name": "版本|信息",
- "type": 3,
- "api": "csp_Market",
- "searchable": 0,
- "changeable": 0,
- "indexs": 0,
- "ext": "https://9877.kstore.space/Market/single.json"
- },
{
"key": "push_agent",
"name": "手机|推送",
@@ -2243,78 +2146,64 @@
{
"name": "AI直播",
"type": 0,
- "url": "https://github.3x25.com/https://raw.githubusercontent.com/PizazzGY/TV/master/output/user_result.txt",
- "epg": "http://cdn.1678520.xyz/epg/?ch={name}&date={date}",
- "playerType": 1,
- "timeout": 10
+ "url": "./lives/AI直播.txt",
+ "epg": "http://cdn.1678520.xyz/epg/?ch={name}&date={date}"
},
{
"name": "Guovin",
"type": 0,
- "url": "https://gitee.com/mytv-android/iptv-api/raw/master/output/result.m3u",
- "epg": "http://cdn.1678520.xyz/epg/?ch={name}&date={date}",
- "timeout": 10
+ "url": "./lives/Guovin.txt",
+ "epg": "http://cdn.1678520.xyz/epg/?ch={name}&date={date}"
},
{
"name": "虎牙一起看",
"type": 3,
"api": "csp_Feiyang",
- "url": "https://yun.urldwz.com/f/BE9PSL/huyayqk.m3u",
- "timeout": 10,
+ "url": "./lives/虎牙一起看.txt",
"ua": "okhttp/3.15"
},
{
"name": "斗鱼一起看",
"type": 3,
"api": "csp_Feiyang",
- "url": "https://yun.urldwz.com/f/NR9qiA/douyuyqk.m3u",
- "timeout": 10,
+ "url": "./lives/斗鱼一起看.txt",
"ua": "okhttp/3.15"
},
{
"name": "YY轮播",
"type": 3,
"api": "csp_Feiyang",
- "url": "https://yun.urldwz.com/f/dlkycZ/yylunbo.m3u",
- "timeout": 10,
+ "url": "./lives/YY轮播.txt",
"ua": "okhttp/3.15"
},
{
"name": "B站直播",
"type": 3,
"api": "csp_Feiyang",
- "url": "https://yun.urldwz.com/f/9XBkHK/bilibili.m3u",
- "timeout": 10,
+ "url": "./lives/B站直播.txt",
"ua": "okhttp/3.15"
},
{
"name": "电视Live",
"type": 0,
- "url": "https://tv.iill.top/m3u/Gather",
- "playerType": 2,
- "timeout": 10
+ "url": "./lives/电视Live.txt"
},
{
"name": "网络Live",
"type": 0,
- "url": "https://tv.iill.top/m3u/Live",
- "playerType": 2,
- "timeout": 10
+ "url": "./lives/网络Live.txt"
},
{
"name": "范明明",
"type": 0,
- "url": "https://live.fanmingming.cn/tv/m3u/ipv6.m3u",
- "timeout": 10
+ "url": "./lives/范明明.txt"
},
{
"name": "APTV",
"type": 0,
- "url": "https://github.3x25.com/https://github.com/Kimentanm/aptv/raw/master/m3u/iptv.m3u",
+ "url": "./lives/APTV.txt",
"epg": "http://epg.51zmt.top:8000/api/diyp/?ch={name}&date={date}",
- "logo": "https://epg.iill.top/logo/{name}.png",
- "ua": "okhttp/3.15,AptvPlayer/1.4.0",
- "timeout": 10
+ "ua": "okhttp/3.15,AptvPlayer/1.4.0"
}
],
"hosts": [
diff --git a/潇洒/py/河马短剧.py b/潇洒/api/HMDJ.py
similarity index 100%
rename from 潇洒/py/河马短剧.py
rename to 潇洒/api/HMDJ.py
diff --git a/潇洒/py/金牌影视.py b/潇洒/api/JPYS.py
similarity index 100%
rename from 潇洒/py/金牌影视.py
rename to 潇洒/api/JPYS.py
diff --git a/潇洒/py/猎手影视.py b/潇洒/api/LSYS.py
similarity index 100%
rename from 潇洒/py/猎手影视.py
rename to 潇洒/api/LSYS.py
diff --git a/潇洒/py/偷乐短剧.py b/潇洒/api/TLDJ.py
similarity index 100%
rename from 潇洒/py/偷乐短剧.py
rename to 潇洒/api/TLDJ.py
diff --git a/潇洒/py/网络直播.py b/潇洒/api/WLZB.py
similarity index 100%
rename from 潇洒/py/网络直播.py
rename to 潇洒/api/WLZB.py
diff --git a/潇洒/js/cloud.min.js b/潇洒/api/cloud.min.js
similarity index 100%
rename from 潇洒/js/cloud.min.js
rename to 潇洒/api/cloud.min.js
diff --git a/潇洒/js/drpy2.min.js b/潇洒/api/drpy2.min.js
similarity index 100%
rename from 潇洒/js/drpy2.min.js
rename to 潇洒/api/drpy2.min.js
diff --git a/潇洒/js/jinja.js b/潇洒/api/jinja.js
similarity index 100%
rename from 潇洒/js/jinja.js
rename to 潇洒/api/jinja.js
diff --git a/潇洒/api/jsencrypt.js b/潇洒/api/jsencrypt.js
new file mode 100644
index 0000000..8deca5f
--- /dev/null
+++ b/潇洒/api/jsencrypt.js
@@ -0,0 +1,360 @@
+/*
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+(function webpackUniversalModuleDefinition(root, factory) {
+ if (typeof exports === 'object' && typeof module === 'object') {
+ // CommonJS
+ module.exports = exports = factory();
+ } else if (typeof define === 'function' && define.amd) {
+ // AMD
+ define([], factory);
+ } else {
+ // Global (browser)
+ globalThis.JSEncrypt = factory();
+ }
+})(this, () => {
+ return /******/ (() => { // webpackBootstrap
+ /******/
+ var __webpack_modules__ = ({
+
+ /***/
+ "./lib/JSEncrypt.js":
+ /*!**************************!*\
+ !*** ./lib/JSEncrypt.js ***!
+ \**************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncrypt\": () => (/* binding */ JSEncrypt)\n/* harmony export */ });\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ \"./lib/lib/jsbn/base64.js\");\n/* harmony import */ var _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./JSEncryptRSAKey */ \"./lib/JSEncryptRSAKey.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process/browser */ \"./node_modules/process/browser.js\");\nvar _a;\n\n\nvar version = typeof process !== 'undefined'\n ? (_a = process.env) === null || _a === void 0 ? void 0 : \"3.3.2\"\n : undefined;\n/**\n *\n * @param {Object} [options = {}] - An object to customize JSEncrypt behaviour\n * possible parameters are:\n * - default_key_size {number} default: 1024 the key size in bit\n * - default_public_exponent {string} default: '010001' the hexadecimal representation of the public exponent\n * - log {boolean} default: false whether log warn/error or not\n * @constructor\n */\nvar JSEncrypt = /** @class */ (function () {\n function JSEncrypt(options) {\n if (options === void 0) { options = {}; }\n options = options || {};\n this.default_key_size = options.default_key_size\n ? parseInt(options.default_key_size, 10)\n : 1024;\n this.default_public_exponent = options.default_public_exponent || \"010001\"; // 65537 default openssl public exponent for rsa key type\n this.log = options.log || false;\n // The private and public key.\n this.key = null;\n }\n /**\n * Method to set the rsa key parameter (one method is enough to set both the public\n * and the private key, since the private key contains the public key paramenters)\n * Log a warning if logs are enabled\n * @param {Object|string} key the pem encoded string or an object (with or without header/footer)\n * @public\n */\n JSEncrypt.prototype.setKey = function (key) {\n if (this.log && this.key) {\n console.warn(\"A key was already set, overriding existing.\");\n }\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey(key);\n };\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n JSEncrypt.prototype.setPrivateKey = function (privkey) {\n // Create the key.\n this.setKey(privkey);\n };\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n JSEncrypt.prototype.setPublicKey = function (pubkey) {\n // Sets the public key.\n this.setKey(pubkey);\n };\n /**\n * Proxy method for RSAKey object's decrypt, decrypt the string using the private\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str base64 encoded crypted string to decrypt\n * @return {string} the decrypted string\n * @public\n */\n JSEncrypt.prototype.decrypt = function (str) {\n // Return the decrypted string.\n try {\n return this.getKey().decrypt((0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(str));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's encrypt, encrypt the string using the public\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str the string to encrypt\n * @return {string} the encrypted string encoded in base64\n * @public\n */\n JSEncrypt.prototype.encrypt = function (str) {\n // Return the encrypted string.\n try {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().encrypt(str));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's sign.\n * @param {string} str the string to sign\n * @param {function} digestMethod hash method\n * @param {string} digestName the name of the hash algorithm\n * @return {string} the signature encoded in base64\n * @public\n */\n JSEncrypt.prototype.sign = function (str, digestMethod, digestName) {\n // return the RSA signature of 'str' in 'hex' format.\n try {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().sign(str, digestMethod, digestName));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's verify.\n * @param {string} str the string to verify\n * @param {string} signature the signature encoded in base64 to compare the string to\n * @param {function} digestMethod hash method\n * @return {boolean} whether the data and signature match\n * @public\n */\n JSEncrypt.prototype.verify = function (str, signature, digestMethod) {\n // Return the decrypted 'digest' of the signature.\n try {\n return this.getKey().verify(str, (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(signature), digestMethod);\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object\n * will be created and returned\n * @param {callback} [cb] the callback to be called if we want the key to be generated\n * in an async fashion\n * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object\n * @public\n */\n JSEncrypt.prototype.getKey = function (cb) {\n // Only create new if it does not exist.\n if (!this.key) {\n // Get a new private key.\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey();\n if (cb && {}.toString.call(cb) === \"[object Function]\") {\n this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb);\n return;\n }\n // Generate the key.\n this.key.generate(this.default_key_size, this.default_public_exponent);\n }\n return this.key;\n };\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITH header and footer\n * @public\n */\n JSEncrypt.prototype.getPrivateKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateKey();\n };\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITHOUT header and footer\n * @public\n */\n JSEncrypt.prototype.getPrivateKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateBaseKeyB64();\n };\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITH header and footer\n * @public\n */\n JSEncrypt.prototype.getPublicKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicKey();\n };\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITHOUT header and footer\n * @public\n */\n JSEncrypt.prototype.getPublicKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicBaseKeyB64();\n };\nvar b64map=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";var b64pad=\"=\";var base64DecodeChars=new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);function btoa(str){var out,i,len;var c1,c2,c3;len=str.length;i=0;out=\"\";while(i>2);out+=b64map.charAt((c1&3)<<4);out+=\"==\";break}c2=str.charCodeAt(i++);if(i==len){out+=b64map.charAt(c1>>2);out+=b64map.charAt((c1&3)<<4|(c2&240)>>4);out+=b64map.charAt((c2&15)<<2);out+=\"=\";break}c3=str.charCodeAt(i++);out+=b64map.charAt(c1>>2);out+=b64map.charAt((c1&3)<<4|(c2&240)>>4);out+=b64map.charAt((c2&15)<<2|(c3&192)>>6);out+=b64map.charAt(c3&63)}return out}function atob(str){var c1,c2,c3,c4;var i,len,out;len=str.length;i=0;out=\"\";while(i>4);do{c3=str.charCodeAt(i++)&255;if(c3==61)return out;c3=base64DecodeChars[c3]}while(i>2);do{c4=str.charCodeAt(i++)&255;if(c4==61)return out;c4=base64DecodeChars[c4]}while(i>6)+b64map.charAt(c&63)}if(i+1==h.length){c=parseInt(h.substring(i,i+1),16);ret+=b64map.charAt(c<<2)}else if(i+2==h.length){c=parseInt(h.substring(i,i+2),16);ret+=b64map.charAt(c>>2)+b64map.charAt((c&3)<<4)}while((ret.length&3)>0)ret+=b64pad;return ret}function hexToBytes(hex){for(var bytes=[],c=0;c>>4).toString(16));hex.push((bytes[i]&15).toString(16))}return hex.join(\"\")}function b64tohex(str){for(var i=0,bin=atob(str.replace(/[ \\r\\n]+$/,\"\")),hex=[];i>3};JSEncrypt.prototype.decryptUnicodeLong=function(string){var k=this.getKey();var maxLength=(k.n.bitLength()+7>>3)*2;try{var hexString=b64tohex(string);var decryptedString=\"\";var rexStr=\".{1,\"+maxLength+\"}\";var rex=new RegExp(rexStr,\"g\");var subStrArray=hexString.match(rex);if(subStrArray){subStrArray.forEach(function(entry){decryptedString+=k.decrypt(entry)});return decryptedString}}catch(ex){console.log(\"加密错误:\"+ex.message);return false}};JSEncrypt.prototype.encryptUnicodeLong=function(string){var k=this.getKey();var maxLength=(k.n.bitLength()+7>>3)-11;try{var subStr=\"\",encryptedString=\"\";var subStart=0,subEnd=0;var bitLen=0,tmpPoint=0;for(var i=0,len=string.length;imaxLength){subStr=string.substring(subStart,subEnd);encryptedString+=k.encrypt(subStr);subStart=subEnd;bitLen=bitLen-tmpPoint}else{subEnd=i;tmpPoint=bitLen}}subStr=string.substring(subStart,len);encryptedString+=k.encrypt(subStr);return hex2b64(encryptedString)}catch(ex){console.log(\"解密错误:\"+ex.message);return false}}; JSEncrypt.version = version;\n return JSEncrypt;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/JSEncrypt.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/JSEncryptRSAKey.js":
+ /*!********************************!*\
+ !*** ./lib/JSEncryptRSAKey.js ***!
+ \********************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncryptRSAKey\": () => (/* binding */ JSEncryptRSAKey)\n/* harmony export */ });\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ \"./lib/lib/jsbn/base64.js\");\n/* harmony import */ var _lib_asn1js_hex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/asn1js/hex */ \"./lib/lib/asn1js/hex.js\");\n/* harmony import */ var _lib_asn1js_base64__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/asn1js/base64 */ \"./lib/lib/asn1js/base64.js\");\n/* harmony import */ var _lib_asn1js_asn1__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/asn1js/asn1 */ \"./lib/lib/asn1js/asn1.js\");\n/* harmony import */ var _lib_jsbn_rsa__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/jsbn/rsa */ \"./lib/lib/jsbn/rsa.js\");\n/* harmony import */ var _lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/jsbn/jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/jsrsasign/asn1-1.0 */ \"./lib/lib/jsrsasign/asn1-1.0.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n/**\n * Create a new JSEncryptRSAKey that extends Tom Wu's RSA key object.\n * This object is just a decorator for parsing the key parameter\n * @param {string|Object} key - The key in string format, or an object containing\n * the parameters needed to build a RSAKey object.\n * @constructor\n */\nvar JSEncryptRSAKey = /** @class */ (function (_super) {\n __extends(JSEncryptRSAKey, _super);\n function JSEncryptRSAKey(key) {\n var _this = _super.call(this) || this;\n // Call the super constructor.\n // RSAKey.call(this);\n // If a key key was provided.\n if (key) {\n // If this is a string...\n if (typeof key === \"string\") {\n _this.parseKey(key);\n }\n else if (JSEncryptRSAKey.hasPrivateKeyProperty(key) ||\n JSEncryptRSAKey.hasPublicKeyProperty(key)) {\n // Set the values for the key.\n _this.parsePropertiesFrom(key);\n }\n }\n return _this;\n }\n /**\n * Method to parse a pem encoded string containing both a public or private key.\n * The method will translate the pem encoded string in a der encoded string and\n * will parse private key and public key parameters. This method accepts public key\n * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1).\n *\n * @todo Check how many rsa formats use the same format of pkcs #1.\n *\n * The format is defined as:\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * it's possible to examine the structure of the keys obtained from openssl using\n * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/\n * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer\n * @private\n */\n JSEncryptRSAKey.prototype.parseKey = function (pem) {\n try {\n var modulus = 0;\n var public_exponent = 0;\n var reHex = /^\\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\\s*)+$/;\n var der = reHex.test(pem) ? _lib_asn1js_hex__WEBPACK_IMPORTED_MODULE_1__.Hex.decode(pem) : _lib_asn1js_base64__WEBPACK_IMPORTED_MODULE_2__.Base64.unarmor(pem);\n var asn1 = _lib_asn1js_asn1__WEBPACK_IMPORTED_MODULE_3__.ASN1.decode(der);\n // Fixes a bug with OpenSSL 1.0+ private keys\n if (asn1.sub.length === 3) {\n asn1 = asn1.sub[2].sub[0];\n }\n if (asn1.sub.length === 9) {\n // Parse the private key.\n modulus = asn1.sub[1].getHexStringValue(); // bigint\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = asn1.sub[2].getHexStringValue(); // int\n this.e = parseInt(public_exponent, 16);\n var private_exponent = asn1.sub[3].getHexStringValue(); // bigint\n this.d = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(private_exponent, 16);\n var prime1 = asn1.sub[4].getHexStringValue(); // bigint\n this.p = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(prime1, 16);\n var prime2 = asn1.sub[5].getHexStringValue(); // bigint\n this.q = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(prime2, 16);\n var exponent1 = asn1.sub[6].getHexStringValue(); // bigint\n this.dmp1 = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(exponent1, 16);\n var exponent2 = asn1.sub[7].getHexStringValue(); // bigint\n this.dmq1 = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(exponent2, 16);\n var coefficient = asn1.sub[8].getHexStringValue(); // bigint\n this.coeff = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(coefficient, 16);\n }\n else if (asn1.sub.length === 2) {\n if (asn1.sub[0].sub) {\n // Parse ASN.1 SubjectPublicKeyInfo type as defined by X.509\n var bit_string = asn1.sub[1];\n var sequence = bit_string.sub[0];\n modulus = sequence.sub[0].getHexStringValue();\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = sequence.sub[1].getHexStringValue();\n this.e = parseInt(public_exponent, 16);\n }\n else {\n // Parse ASN.1 RSAPublicKey type as defined by PKCS #1\n modulus = asn1.sub[0].getHexStringValue();\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = asn1.sub[1].getHexStringValue();\n this.e = parseInt(public_exponent, 16);\n }\n }\n else {\n return false;\n }\n return true;\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa key.\n *\n * The translation follow the ASN.1 notation :\n * RSAPrivateKey ::= SEQUENCE {\n * version Version,\n * modulus INTEGER, -- n\n * publicExponent INTEGER, -- e\n * privateExponent INTEGER, -- d\n * prime1 INTEGER, -- p\n * prime2 INTEGER, -- q\n * exponent1 INTEGER, -- d mod (p1)\n * exponent2 INTEGER, -- d mod (q-1)\n * coefficient INTEGER, -- (inverse of q) mod p\n * }\n * @returns {string} DER Encoded String representing the rsa private key\n * @private\n */\n JSEncryptRSAKey.prototype.getPrivateBaseKey = function () {\n var options = {\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: 0 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.n }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: this.e }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.d }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.p }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.q }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.dmp1 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.dmq1 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.coeff }),\n ],\n };\n var seq = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence(options);\n return seq.getEncodedHex();\n };\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPrivateBaseKeyB64 = function () {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getPrivateBaseKey());\n };\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa public key.\n * The representation follow the ASN.1 notation :\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * @returns {string} DER Encoded String representing the rsa public key\n * @private\n */\n JSEncryptRSAKey.prototype.getPublicBaseKey = function () {\n var first_sequence = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERObjectIdentifier({ oid: \"1.2.840.113549.1.1.1\" }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERNull(),\n ],\n });\n var second_sequence = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.n }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: this.e }),\n ],\n });\n var bit_string = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERBitString({\n hex: \"00\" + second_sequence.getEncodedHex(),\n });\n var seq = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [first_sequence, bit_string],\n });\n return seq.getEncodedHex();\n };\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPublicBaseKeyB64 = function () {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getPublicBaseKey());\n };\n /**\n * wrap the string in block of width chars. The default value for rsa keys is 64\n * characters.\n * @param {string} str the pem encoded string without header and footer\n * @param {Number} [width=64] - the length the string has to be wrapped at\n * @returns {string}\n * @private\n */\n JSEncryptRSAKey.wordwrap = function (str, width) {\n width = width || 64;\n if (!str) {\n return str;\n }\n var regex = \"(.{1,\" + width + \"})( +|$\\n?)|(.{1,\" + width + \"})\";\n return str.match(RegExp(regex, \"g\")).join(\"\\n\");\n };\n /**\n * Retrieve the pem encoded private key\n * @returns {string} the pem encoded private key with header/footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPrivateKey = function () {\n var key = \"-----BEGIN RSA PRIVATE KEY-----\\n\";\n key += JSEncryptRSAKey.wordwrap(this.getPrivateBaseKeyB64()) + \"\\n\";\n key += \"-----END RSA PRIVATE KEY-----\";\n return key;\n };\n /**\n * Retrieve the pem encoded public key\n * @returns {string} the pem encoded public key with header/footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPublicKey = function () {\n var key = \"-----BEGIN PUBLIC KEY-----\\n\";\n key += JSEncryptRSAKey.wordwrap(this.getPublicBaseKeyB64()) + \"\\n\";\n key += \"-----END PUBLIC KEY-----\";\n return key;\n };\n /**\n * Check if the object contains the necessary parameters to populate the rsa modulus\n * and public exponent parameters.\n * @param {Object} [obj={}] - An object that may contain the two public key\n * parameters\n * @returns {boolean} true if the object contains both the modulus and the public exponent\n * properties (n and e)\n * @todo check for types of n and e. N should be a parseable bigInt object, E should\n * be a parseable integer number\n * @private\n */\n JSEncryptRSAKey.hasPublicKeyProperty = function (obj) {\n obj = obj || {};\n return obj.hasOwnProperty(\"n\") && obj.hasOwnProperty(\"e\");\n };\n /**\n * Check if the object contains ALL the parameters of an RSA key.\n * @param {Object} [obj={}] - An object that may contain nine rsa key\n * parameters\n * @returns {boolean} true if the object contains all the parameters needed\n * @todo check for types of the parameters all the parameters but the public exponent\n * should be parseable bigint objects, the public exponent should be a parseable integer number\n * @private\n */\n JSEncryptRSAKey.hasPrivateKeyProperty = function (obj) {\n obj = obj || {};\n return (obj.hasOwnProperty(\"n\") &&\n obj.hasOwnProperty(\"e\") &&\n obj.hasOwnProperty(\"d\") &&\n obj.hasOwnProperty(\"p\") &&\n obj.hasOwnProperty(\"q\") &&\n obj.hasOwnProperty(\"dmp1\") &&\n obj.hasOwnProperty(\"dmq1\") &&\n obj.hasOwnProperty(\"coeff\"));\n };\n /**\n * Parse the properties of obj in the current rsa object. Obj should AT LEAST\n * include the modulus and public exponent (n, e) parameters.\n * @param {Object} obj - the object containing rsa parameters\n * @private\n */\n JSEncryptRSAKey.prototype.parsePropertiesFrom = function (obj) {\n this.n = obj.n;\n this.e = obj.e;\n if (obj.hasOwnProperty(\"d\")) {\n this.d = obj.d;\n this.p = obj.p;\n this.q = obj.q;\n this.dmp1 = obj.dmp1;\n this.dmq1 = obj.dmq1;\n this.coeff = obj.coeff;\n }\n };\n return JSEncryptRSAKey;\n}(_lib_jsbn_rsa__WEBPACK_IMPORTED_MODULE_4__.RSAKey));\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/JSEncryptRSAKey.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/index.js":
+ /*!**********************!*\
+ !*** ./lib/index.js ***!
+ \**********************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncrypt\": () => (/* reexport safe */ _JSEncrypt__WEBPACK_IMPORTED_MODULE_0__.JSEncrypt),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _JSEncrypt__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./JSEncrypt */ \"./lib/JSEncrypt.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_JSEncrypt__WEBPACK_IMPORTED_MODULE_0__.JSEncrypt);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/index.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/asn1js/asn1.js":
+ /*!********************************!*\
+ !*** ./lib/lib/asn1js/asn1.js ***!
+ \********************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ASN1\": () => (/* binding */ ASN1),\n/* harmony export */ \"ASN1Tag\": () => (/* binding */ ASN1Tag),\n/* harmony export */ \"Stream\": () => (/* binding */ Stream)\n/* harmony export */ });\n/* harmony import */ var _int10__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./int10 */ \"./lib/lib/asn1js/int10.js\");\n// ASN.1 JavaScript decoder\n// Copyright (c) 2008-2014 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\n/*global oids */\n\nvar ellipsis = \"\\u2026\";\nvar reTimeS = /^(\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nvar reTimeL = /^(\\d\\d\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nfunction stringCut(str, len) {\n if (str.length > len) {\n str = str.substring(0, len) + ellipsis;\n }\n return str;\n}\nvar Stream = /** @class */ (function () {\n function Stream(enc, pos) {\n this.hexDigits = \"0123456789ABCDEF\";\n if (enc instanceof Stream) {\n this.enc = enc.enc;\n this.pos = enc.pos;\n }\n else {\n // enc should be an array or a binary string\n this.enc = enc;\n this.pos = pos;\n }\n }\n Stream.prototype.get = function (pos) {\n if (pos === undefined) {\n pos = this.pos++;\n }\n if (pos >= this.enc.length) {\n throw new Error(\"Requesting byte offset \".concat(pos, \" on a stream of length \").concat(this.enc.length));\n }\n return (\"string\" === typeof this.enc) ? this.enc.charCodeAt(pos) : this.enc[pos];\n };\n Stream.prototype.hexByte = function (b) {\n return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF);\n };\n Stream.prototype.hexDump = function (start, end, raw) {\n var s = \"\";\n for (var i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n if (raw !== true) {\n switch (i & 0xF) {\n case 0x7:\n s += \" \";\n break;\n case 0xF:\n s += \"\\n\";\n break;\n default:\n s += \" \";\n }\n }\n }\n return s;\n };\n Stream.prototype.isASCII = function (start, end) {\n for (var i = start; i < end; ++i) {\n var c = this.get(i);\n if (c < 32 || c > 176) {\n return false;\n }\n }\n return true;\n };\n Stream.prototype.parseStringISO = function (start, end) {\n var s = \"\";\n for (var i = start; i < end; ++i) {\n s += String.fromCharCode(this.get(i));\n }\n return s;\n };\n Stream.prototype.parseStringUTF = function (start, end) {\n var s = \"\";\n for (var i = start; i < end;) {\n var c = this.get(i++);\n if (c < 128) {\n s += String.fromCharCode(c);\n }\n else if ((c > 191) && (c < 224)) {\n s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F));\n }\n else {\n s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F));\n }\n }\n return s;\n };\n Stream.prototype.parseStringBMP = function (start, end) {\n var str = \"\";\n var hi;\n var lo;\n for (var i = start; i < end;) {\n hi = this.get(i++);\n lo = this.get(i++);\n str += String.fromCharCode((hi << 8) | lo);\n }\n return str;\n };\n Stream.prototype.parseTime = function (start, end, shortYear) {\n var s = this.parseStringISO(start, end);\n var m = (shortYear ? reTimeS : reTimeL).exec(s);\n if (!m) {\n return \"Unrecognized time: \" + s;\n }\n if (shortYear) {\n // to avoid querying the timer, use the fixed range [1970, 2069]\n // it will conform with ITU X.400 [-10, +40] sliding window until 2030\n m[1] = +m[1];\n m[1] += (+m[1] < 70) ? 2000 : 1900;\n }\n s = m[1] + \"-\" + m[2] + \"-\" + m[3] + \" \" + m[4];\n if (m[5]) {\n s += \":\" + m[5];\n if (m[6]) {\n s += \":\" + m[6];\n if (m[7]) {\n s += \".\" + m[7];\n }\n }\n }\n if (m[8]) {\n s += \" UTC\";\n if (m[8] != \"Z\") {\n s += m[8];\n if (m[9]) {\n s += \":\" + m[9];\n }\n }\n }\n return s;\n };\n Stream.prototype.parseInteger = function (start, end) {\n var v = this.get(start);\n var neg = (v > 127);\n var pad = neg ? 255 : 0;\n var len;\n var s = \"\";\n // skip unuseful bits (not allowed in DER)\n while (v == pad && ++start < end) {\n v = this.get(start);\n }\n len = end - start;\n if (len === 0) {\n return neg ? -1 : 0;\n }\n // show bit length of huge integers\n if (len > 4) {\n s = v;\n len <<= 3;\n while (((+s ^ pad) & 0x80) == 0) {\n s = +s << 1;\n --len;\n }\n s = \"(\" + len + \" bit)\\n\";\n }\n // decode the integer\n if (neg) {\n v = v - 256;\n }\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10(v);\n for (var i = start + 1; i < end; ++i) {\n n.mulAdd(256, this.get(i));\n }\n return s + n.toString();\n };\n Stream.prototype.parseBitString = function (start, end, maxLength) {\n var unusedBit = this.get(start);\n var lenBit = ((end - start - 1) << 3) - unusedBit;\n var intro = \"(\" + lenBit + \" bit)\\n\";\n var s = \"\";\n for (var i = start + 1; i < end; ++i) {\n var b = this.get(i);\n var skip = (i == end - 1) ? unusedBit : 0;\n for (var j = 7; j >= skip; --j) {\n s += (b >> j) & 1 ? \"1\" : \"0\";\n }\n if (s.length > maxLength) {\n return intro + stringCut(s, maxLength);\n }\n }\n return intro + s;\n };\n Stream.prototype.parseOctetString = function (start, end, maxLength) {\n if (this.isASCII(start, end)) {\n return stringCut(this.parseStringISO(start, end), maxLength);\n }\n var len = end - start;\n var s = \"(\" + len + \" byte)\\n\";\n maxLength /= 2; // we work in bytes\n if (len > maxLength) {\n end = start + maxLength;\n }\n for (var i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n }\n if (len > maxLength) {\n s += ellipsis;\n }\n return s;\n };\n Stream.prototype.parseOID = function (start, end, maxLength) {\n var s = \"\";\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n var bits = 0;\n for (var i = start; i < end; ++i) {\n var v = this.get(i);\n n.mulAdd(128, v & 0x7F);\n bits += 7;\n if (!(v & 0x80)) { // finished\n if (s === \"\") {\n n = n.simplify();\n if (n instanceof _int10__WEBPACK_IMPORTED_MODULE_0__.Int10) {\n n.sub(80);\n s = \"2.\" + n.toString();\n }\n else {\n var m = n < 80 ? n < 40 ? 0 : 1 : 2;\n s = m + \".\" + (n - m * 40);\n }\n }\n else {\n s += \".\" + n.toString();\n }\n if (s.length > maxLength) {\n return stringCut(s, maxLength);\n }\n n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n bits = 0;\n }\n }\n if (bits > 0) {\n s += \".incomplete\";\n }\n return s;\n };\n return Stream;\n}());\n\nvar ASN1 = /** @class */ (function () {\n function ASN1(stream, header, length, tag, sub) {\n if (!(tag instanceof ASN1Tag)) {\n throw new Error(\"Invalid tag value.\");\n }\n this.stream = stream;\n this.header = header;\n this.length = length;\n this.tag = tag;\n this.sub = sub;\n }\n ASN1.prototype.typeName = function () {\n switch (this.tag.tagClass) {\n case 0: // universal\n switch (this.tag.tagNumber) {\n case 0x00:\n return \"EOC\";\n case 0x01:\n return \"BOOLEAN\";\n case 0x02:\n return \"INTEGER\";\n case 0x03:\n return \"BIT_STRING\";\n case 0x04:\n return \"OCTET_STRING\";\n case 0x05:\n return \"NULL\";\n case 0x06:\n return \"OBJECT_IDENTIFIER\";\n case 0x07:\n return \"ObjectDescriptor\";\n case 0x08:\n return \"EXTERNAL\";\n case 0x09:\n return \"REAL\";\n case 0x0A:\n return \"ENUMERATED\";\n case 0x0B:\n return \"EMBEDDED_PDV\";\n case 0x0C:\n return \"UTF8String\";\n case 0x10:\n return \"SEQUENCE\";\n case 0x11:\n return \"SET\";\n case 0x12:\n return \"NumericString\";\n case 0x13:\n return \"PrintableString\"; // ASCII subset\n case 0x14:\n return \"TeletexString\"; // aka T61String\n case 0x15:\n return \"VideotexString\";\n case 0x16:\n return \"IA5String\"; // ASCII\n case 0x17:\n return \"UTCTime\";\n case 0x18:\n return \"GeneralizedTime\";\n case 0x19:\n return \"GraphicString\";\n case 0x1A:\n return \"VisibleString\"; // ASCII subset\n case 0x1B:\n return \"GeneralString\";\n case 0x1C:\n return \"UniversalString\";\n case 0x1E:\n return \"BMPString\";\n }\n return \"Universal_\" + this.tag.tagNumber.toString();\n case 1:\n return \"Application_\" + this.tag.tagNumber.toString();\n case 2:\n return \"[\" + this.tag.tagNumber.toString() + \"]\"; // Context\n case 3:\n return \"Private_\" + this.tag.tagNumber.toString();\n }\n };\n ASN1.prototype.content = function (maxLength) {\n if (this.tag === undefined) {\n return null;\n }\n if (maxLength === undefined) {\n maxLength = Infinity;\n }\n var content = this.posContent();\n var len = Math.abs(this.length);\n if (!this.tag.isUniversal()) {\n if (this.sub !== null) {\n return \"(\" + this.sub.length + \" elem)\";\n }\n return this.stream.parseOctetString(content, content + len, maxLength);\n }\n switch (this.tag.tagNumber) {\n case 0x01: // BOOLEAN\n return (this.stream.get(content) === 0) ? \"false\" : \"true\";\n case 0x02: // INTEGER\n return this.stream.parseInteger(content, content + len);\n case 0x03: // BIT_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseBitString(content, content + len, maxLength);\n case 0x04: // OCTET_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseOctetString(content, content + len, maxLength);\n // case 0x05: // NULL\n case 0x06: // OBJECT_IDENTIFIER\n return this.stream.parseOID(content, content + len, maxLength);\n // case 0x07: // ObjectDescriptor\n // case 0x08: // EXTERNAL\n // case 0x09: // REAL\n // case 0x0A: // ENUMERATED\n // case 0x0B: // EMBEDDED_PDV\n case 0x10: // SEQUENCE\n case 0x11: // SET\n if (this.sub !== null) {\n return \"(\" + this.sub.length + \" elem)\";\n }\n else {\n return \"(no elem)\";\n }\n case 0x0C: // UTF8String\n return stringCut(this.stream.parseStringUTF(content, content + len), maxLength);\n case 0x12: // NumericString\n case 0x13: // PrintableString\n case 0x14: // TeletexString\n case 0x15: // VideotexString\n case 0x16: // IA5String\n // case 0x19: // GraphicString\n case 0x1A: // VisibleString\n // case 0x1B: // GeneralString\n // case 0x1C: // UniversalString\n return stringCut(this.stream.parseStringISO(content, content + len), maxLength);\n case 0x1E: // BMPString\n return stringCut(this.stream.parseStringBMP(content, content + len), maxLength);\n case 0x17: // UTCTime\n case 0x18: // GeneralizedTime\n return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17));\n }\n return null;\n };\n ASN1.prototype.toString = function () {\n return this.typeName() + \"@\" + this.stream.pos + \"[header:\" + this.header + \",length:\" + this.length + \",sub:\" + ((this.sub === null) ? \"null\" : this.sub.length) + \"]\";\n };\n ASN1.prototype.toPrettyString = function (indent) {\n if (indent === undefined) {\n indent = \"\";\n }\n var s = indent + this.typeName() + \" @\" + this.stream.pos;\n if (this.length >= 0) {\n s += \"+\";\n }\n s += this.length;\n if (this.tag.tagConstructed) {\n s += \" (constructed)\";\n }\n else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) {\n s += \" (encapsulates)\";\n }\n s += \"\\n\";\n if (this.sub !== null) {\n indent += \" \";\n for (var i = 0, max = this.sub.length; i < max; ++i) {\n s += this.sub[i].toPrettyString(indent);\n }\n }\n return s;\n };\n ASN1.prototype.posStart = function () {\n return this.stream.pos;\n };\n ASN1.prototype.posContent = function () {\n return this.stream.pos + this.header;\n };\n ASN1.prototype.posEnd = function () {\n return this.stream.pos + this.header + Math.abs(this.length);\n };\n ASN1.prototype.toHexString = function () {\n return this.stream.hexDump(this.posStart(), this.posEnd(), true);\n };\n ASN1.decodeLength = function (stream) {\n var buf = stream.get();\n var len = buf & 0x7F;\n if (len == buf) {\n return len;\n }\n // no reason to use Int10, as it would be a huge buffer anyways\n if (len > 6) {\n throw new Error(\"Length over 48 bits not supported at position \" + (stream.pos - 1));\n }\n if (len === 0) {\n return null;\n } // undefined\n buf = 0;\n for (var i = 0; i < len; ++i) {\n buf = (buf * 256) + stream.get();\n }\n return buf;\n };\n /**\n * Retrieve the hexadecimal value (as a string) of the current ASN.1 element\n * @returns {string}\n * @public\n */\n ASN1.prototype.getHexStringValue = function () {\n var hexString = this.toHexString();\n var offset = this.header * 2;\n var length = this.length * 2;\n return hexString.substr(offset, length);\n };\n ASN1.decode = function (str) {\n var stream;\n if (!(str instanceof Stream)) {\n stream = new Stream(str, 0);\n }\n else {\n stream = str;\n }\n var streamStart = new Stream(stream);\n var tag = new ASN1Tag(stream);\n var len = ASN1.decodeLength(stream);\n var start = stream.pos;\n var header = start - streamStart.pos;\n var sub = null;\n var getSub = function () {\n var ret = [];\n if (len !== null) {\n // definite length\n var end = start + len;\n while (stream.pos < end) {\n ret[ret.length] = ASN1.decode(stream);\n }\n if (stream.pos != end) {\n throw new Error(\"Content size is not correct for container starting at offset \" + start);\n }\n }\n else {\n // undefined length\n try {\n for (;;) {\n var s = ASN1.decode(stream);\n if (s.tag.isEOC()) {\n break;\n }\n ret[ret.length] = s;\n }\n len = start - stream.pos; // undefined lengths are represented as negative values\n }\n catch (e) {\n throw new Error(\"Exception while decoding undefined length content: \" + e);\n }\n }\n return ret;\n };\n if (tag.tagConstructed) {\n // must have valid content\n sub = getSub();\n }\n else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) {\n // sometimes BitString and OctetString are used to encapsulate ASN.1\n try {\n if (tag.tagNumber == 0x03) {\n if (stream.get() != 0) {\n throw new Error(\"BIT STRINGs with unused bits cannot encapsulate.\");\n }\n }\n sub = getSub();\n for (var i = 0; i < sub.length; ++i) {\n if (sub[i].tag.isEOC()) {\n throw new Error(\"EOC is not supposed to be actual content.\");\n }\n }\n }\n catch (e) {\n // but silently ignore when they don't\n sub = null;\n }\n }\n if (sub === null) {\n if (len === null) {\n throw new Error(\"We can't skip over an invalid tag with undefined length at offset \" + start);\n }\n stream.pos = start + Math.abs(len);\n }\n return new ASN1(streamStart, header, len, tag, sub);\n };\n return ASN1;\n}());\n\nvar ASN1Tag = /** @class */ (function () {\n function ASN1Tag(stream) {\n var buf = stream.get();\n this.tagClass = buf >> 6;\n this.tagConstructed = ((buf & 0x20) !== 0);\n this.tagNumber = buf & 0x1F;\n if (this.tagNumber == 0x1F) { // long tag\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n do {\n buf = stream.get();\n n.mulAdd(128, buf & 0x7F);\n } while (buf & 0x80);\n this.tagNumber = n.simplify();\n }\n }\n ASN1Tag.prototype.isUniversal = function () {\n return this.tagClass === 0x00;\n };\n ASN1Tag.prototype.isEOC = function () {\n return this.tagClass === 0x00 && this.tagNumber === 0x00;\n };\n return ASN1Tag;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/asn1.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/asn1js/base64.js":
+ /*!**********************************!*\
+ !*** ./lib/lib/asn1js/base64.js ***!
+ \**********************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Base64\": () => (/* binding */ Base64)\n/* harmony export */ });\n// Base64 JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar decoder;\nvar Base64 = {\n decode: function (a) {\n var i;\n if (decoder === undefined) {\n var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n var ignore = \"= \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = Object.create(null);\n for (i = 0; i < 64; ++i) {\n decoder[b64.charAt(i)] = i;\n }\n decoder['-'] = 62; //+\n decoder['_'] = 63; //-\n for (i = 0; i < ignore.length; ++i) {\n decoder[ignore.charAt(i)] = -1;\n }\n }\n var out = [];\n var bits = 0;\n var char_count = 0;\n for (i = 0; i < a.length; ++i) {\n var c = a.charAt(i);\n if (c == \"=\") {\n break;\n }\n c = decoder[c];\n if (c == -1) {\n continue;\n }\n if (c === undefined) {\n throw new Error(\"Illegal character at offset \" + i);\n }\n bits |= c;\n if (++char_count >= 4) {\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n out[out.length] = bits & 0xFF;\n bits = 0;\n char_count = 0;\n }\n else {\n bits <<= 6;\n }\n }\n switch (char_count) {\n case 1:\n throw new Error(\"Base64 encoding incomplete: at least 2 bits missing\");\n case 2:\n out[out.length] = (bits >> 10);\n break;\n case 3:\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n break;\n }\n return out;\n },\n re: /-----BEGIN [^-]+-----([A-Za-z0-9+\\/=\\s]+)-----END [^-]+-----|begin-base64[^\\n]+\\n([A-Za-z0-9+\\/=\\s]+)====/,\n unarmor: function (a) {\n var m = Base64.re.exec(a);\n if (m) {\n if (m[1]) {\n a = m[1];\n }\n else if (m[2]) {\n a = m[2];\n }\n else {\n throw new Error(\"RegExp out of sync\");\n }\n }\n return Base64.decode(a);\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/base64.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/asn1js/hex.js":
+ /*!*******************************!*\
+ !*** ./lib/lib/asn1js/hex.js ***!
+ \*******************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Hex\": () => (/* binding */ Hex)\n/* harmony export */ });\n// Hex JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar decoder;\nvar Hex = {\n decode: function (a) {\n var i;\n if (decoder === undefined) {\n var hex = \"0123456789ABCDEF\";\n var ignore = \" \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = {};\n for (i = 0; i < 16; ++i) {\n decoder[hex.charAt(i)] = i;\n }\n hex = hex.toLowerCase();\n for (i = 10; i < 16; ++i) {\n decoder[hex.charAt(i)] = i;\n }\n for (i = 0; i < ignore.length; ++i) {\n decoder[ignore.charAt(i)] = -1;\n }\n }\n var out = [];\n var bits = 0;\n var char_count = 0;\n for (i = 0; i < a.length; ++i) {\n var c = a.charAt(i);\n if (c == \"=\") {\n break;\n }\n c = decoder[c];\n if (c == -1) {\n continue;\n }\n if (c === undefined) {\n throw new Error(\"Illegal character at offset \" + i);\n }\n bits |= c;\n if (++char_count >= 2) {\n out[out.length] = bits;\n bits = 0;\n char_count = 0;\n }\n else {\n bits <<= 4;\n }\n }\n if (char_count) {\n throw new Error(\"Hex encoding incomplete: 4 bits missing\");\n }\n return out;\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/hex.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/asn1js/int10.js":
+ /*!*********************************!*\
+ !*** ./lib/lib/asn1js/int10.js ***!
+ \*********************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Int10\": () => (/* binding */ Int10)\n/* harmony export */ });\n// Big integer base-10 printing library\n// Copyright (c) 2014 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar max = 10000000000000; // biggest integer that can still fit 2^53 when multiplied by 256\nvar Int10 = /** @class */ (function () {\n function Int10(value) {\n this.buf = [+value || 0];\n }\n Int10.prototype.mulAdd = function (m, c) {\n // assert(m <= 256)\n var b = this.buf;\n var l = b.length;\n var i;\n var t;\n for (i = 0; i < l; ++i) {\n t = b[i] * m + c;\n if (t < max) {\n c = 0;\n }\n else {\n c = 0 | (t / max);\n t -= c * max;\n }\n b[i] = t;\n }\n if (c > 0) {\n b[i] = c;\n }\n };\n Int10.prototype.sub = function (c) {\n // assert(m <= 256)\n var b = this.buf;\n var l = b.length;\n var i;\n var t;\n for (i = 0; i < l; ++i) {\n t = b[i] - c;\n if (t < 0) {\n t += max;\n c = 1;\n }\n else {\n c = 0;\n }\n b[i] = t;\n }\n while (b[b.length - 1] === 0) {\n b.pop();\n }\n };\n Int10.prototype.toString = function (base) {\n if ((base || 10) != 10) {\n throw new Error(\"only base 10 is supported\");\n }\n var b = this.buf;\n var s = b[b.length - 1].toString();\n for (var i = b.length - 2; i >= 0; --i) {\n s += (max + b[i]).toString().substring(1);\n }\n return s;\n };\n Int10.prototype.valueOf = function () {\n var b = this.buf;\n var v = 0;\n for (var i = b.length - 1; i >= 0; --i) {\n v = v * max + b[i];\n }\n return v;\n };\n Int10.prototype.simplify = function () {\n var b = this.buf;\n return (b.length == 1) ? b[0] : this;\n };\n return Int10;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/int10.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/jsbn/base64.js":
+ /*!********************************!*\
+ !*** ./lib/lib/jsbn/base64.js ***!
+ \********************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"b64toBA\": () => (/* binding */ b64toBA),\n/* harmony export */ \"b64tohex\": () => (/* binding */ b64tohex),\n/* harmony export */ \"hex2b64\": () => (/* binding */ hex2b64)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./lib/lib/jsbn/util.js\");\n\nvar b64map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar b64pad = \"=\";\nfunction hex2b64(h) {\n var i;\n var c;\n var ret = \"\";\n for (i = 0; i + 3 <= h.length; i += 3) {\n c = parseInt(h.substring(i, i + 3), 16);\n ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);\n }\n if (i + 1 == h.length) {\n c = parseInt(h.substring(i, i + 1), 16);\n ret += b64map.charAt(c << 2);\n }\n else if (i + 2 == h.length) {\n c = parseInt(h.substring(i, i + 2), 16);\n ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);\n }\n while ((ret.length & 3) > 0) {\n ret += b64pad;\n }\n return ret;\n}\n// convert a base64 string to hex\nfunction b64tohex(s) {\n var ret = \"\";\n var i;\n var k = 0; // b64 state, 0-3\n var slop = 0;\n for (i = 0; i < s.length; ++i) {\n if (s.charAt(i) == b64pad) {\n break;\n }\n var v = b64map.indexOf(s.charAt(i));\n if (v < 0) {\n continue;\n }\n if (k == 0) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v >> 2);\n slop = v & 3;\n k = 1;\n }\n else if (k == 1) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)((slop << 2) | (v >> 4));\n slop = v & 0xf;\n k = 2;\n }\n else if (k == 2) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(slop);\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v >> 2);\n slop = v & 3;\n k = 3;\n }\n else {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)((slop << 2) | (v >> 4));\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v & 0xf);\n k = 0;\n }\n }\n if (k == 1) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(slop << 2);\n }\n return ret;\n}\n// convert a base64 string to a byte/number array\nfunction b64toBA(s) {\n // piggyback on b64tohex for now, optimize later\n var h = b64tohex(s);\n var i;\n var a = [];\n for (i = 0; 2 * i < h.length; ++i) {\n a[i] = parseInt(h.substring(2 * i, 2 * i + 2), 16);\n }\n return a;\n}\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/base64.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/jsbn/jsbn.js":
+ /*!******************************!*\
+ !*** ./lib/lib/jsbn/jsbn.js ***!
+ \******************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BigInteger\": () => (/* binding */ BigInteger),\n/* harmony export */ \"intAt\": () => (/* binding */ intAt),\n/* harmony export */ \"nbi\": () => (/* binding */ nbi),\n/* harmony export */ \"nbits\": () => (/* binding */ nbits),\n/* harmony export */ \"nbv\": () => (/* binding */ nbv),\n/* harmony export */ \"parseBigInt\": () => (/* binding */ parseBigInt)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./lib/lib/jsbn/util.js\");\n// Copyright (c) 2005 Tom Wu\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n// Basic JavaScript BN library - subset useful for RSA encryption.\n\n// Bits per digit\nvar dbits;\n// JavaScript engine analysis\nvar canary = 0xdeadbeefcafe;\nvar j_lm = ((canary & 0xffffff) == 0xefcafe);\n//#region\nvar lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];\nvar lplim = (1 << 26) / lowprimes[lowprimes.length - 1];\n//#endregion\n// (public) Constructor\nvar BigInteger = /** @class */ (function () {\n function BigInteger(a, b, c) {\n if (a != null) {\n if (\"number\" == typeof a) {\n this.fromNumber(a, b, c);\n }\n else if (b == null && \"string\" != typeof a) {\n this.fromString(a, 256);\n }\n else {\n this.fromString(a, b);\n }\n }\n }\n //#region PUBLIC\n // BigInteger.prototype.toString = bnToString;\n // (public) return string representation in given radix\n BigInteger.prototype.toString = function (b) {\n if (this.s < 0) {\n return \"-\" + this.negate().toString(b);\n }\n var k;\n if (b == 16) {\n k = 4;\n }\n else if (b == 8) {\n k = 3;\n }\n else if (b == 2) {\n k = 1;\n }\n else if (b == 32) {\n k = 5;\n }\n else if (b == 4) {\n k = 2;\n }\n else {\n return this.toRadix(b);\n }\n var km = (1 << k) - 1;\n var d;\n var m = false;\n var r = \"\";\n var i = this.t;\n var p = this.DB - (i * this.DB) % k;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) > 0) {\n m = true;\n r = (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(d);\n }\n while (i >= 0) {\n if (p < k) {\n d = (this[i] & ((1 << p) - 1)) << (k - p);\n d |= this[--i] >> (p += this.DB - k);\n }\n else {\n d = (this[i] >> (p -= k)) & km;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if (d > 0) {\n m = true;\n }\n if (m) {\n r += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(d);\n }\n }\n }\n return m ? r : \"0\";\n };\n // BigInteger.prototype.negate = bnNegate;\n // (public) -this\n BigInteger.prototype.negate = function () {\n var r = nbi();\n BigInteger.ZERO.subTo(this, r);\n return r;\n };\n // BigInteger.prototype.abs = bnAbs;\n // (public) |this|\n BigInteger.prototype.abs = function () {\n return (this.s < 0) ? this.negate() : this;\n };\n // BigInteger.prototype.compareTo = bnCompareTo;\n // (public) return + if this > a, - if this < a, 0 if equal\n BigInteger.prototype.compareTo = function (a) {\n var r = this.s - a.s;\n if (r != 0) {\n return r;\n }\n var i = this.t;\n r = i - a.t;\n if (r != 0) {\n return (this.s < 0) ? -r : r;\n }\n while (--i >= 0) {\n if ((r = this[i] - a[i]) != 0) {\n return r;\n }\n }\n return 0;\n };\n // BigInteger.prototype.bitLength = bnBitLength;\n // (public) return the number of bits in \"this\"\n BigInteger.prototype.bitLength = function () {\n if (this.t <= 0) {\n return 0;\n }\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));\n };\n // BigInteger.prototype.mod = bnMod;\n // (public) this mod a\n BigInteger.prototype.mod = function (a) {\n var r = nbi();\n this.abs().divRemTo(a, null, r);\n if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\n a.subTo(r, r);\n }\n return r;\n };\n // BigInteger.prototype.modPowInt = bnModPowInt;\n // (public) this^e % m, 0 <= e < 2^32\n BigInteger.prototype.modPowInt = function (e, m) {\n var z;\n if (e < 256 || m.isEven()) {\n z = new Classic(m);\n }\n else {\n z = new Montgomery(m);\n }\n return this.exp(e, z);\n };\n // BigInteger.prototype.clone = bnClone;\n // (public)\n BigInteger.prototype.clone = function () {\n var r = nbi();\n this.copyTo(r);\n return r;\n };\n // BigInteger.prototype.intValue = bnIntValue;\n // (public) return value as integer\n BigInteger.prototype.intValue = function () {\n if (this.s < 0) {\n if (this.t == 1) {\n return this[0] - this.DV;\n }\n else if (this.t == 0) {\n return -1;\n }\n }\n else if (this.t == 1) {\n return this[0];\n }\n else if (this.t == 0) {\n return 0;\n }\n // assumes 16 < DB < 32\n return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0];\n };\n // BigInteger.prototype.byteValue = bnByteValue;\n // (public) return value as byte\n BigInteger.prototype.byteValue = function () {\n return (this.t == 0) ? this.s : (this[0] << 24) >> 24;\n };\n // BigInteger.prototype.shortValue = bnShortValue;\n // (public) return value as short (assumes DB>=16)\n BigInteger.prototype.shortValue = function () {\n return (this.t == 0) ? this.s : (this[0] << 16) >> 16;\n };\n // BigInteger.prototype.signum = bnSigNum;\n // (public) 0 if this == 0, 1 if this > 0\n BigInteger.prototype.signum = function () {\n if (this.s < 0) {\n return -1;\n }\n else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) {\n return 0;\n }\n else {\n return 1;\n }\n };\n // BigInteger.prototype.toByteArray = bnToByteArray;\n // (public) convert to bigendian byte array\n BigInteger.prototype.toByteArray = function () {\n var i = this.t;\n var r = [];\n r[0] = this.s;\n var p = this.DB - (i * this.DB) % 8;\n var d;\n var k = 0;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) {\n r[k++] = d | (this.s << (this.DB - p));\n }\n while (i >= 0) {\n if (p < 8) {\n d = (this[i] & ((1 << p) - 1)) << (8 - p);\n d |= this[--i] >> (p += this.DB - 8);\n }\n else {\n d = (this[i] >> (p -= 8)) & 0xff;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if ((d & 0x80) != 0) {\n d |= -256;\n }\n if (k == 0 && (this.s & 0x80) != (d & 0x80)) {\n ++k;\n }\n if (k > 0 || d != this.s) {\n r[k++] = d;\n }\n }\n }\n return r;\n };\n // BigInteger.prototype.equals = bnEquals;\n BigInteger.prototype.equals = function (a) {\n return (this.compareTo(a) == 0);\n };\n // BigInteger.prototype.min = bnMin;\n BigInteger.prototype.min = function (a) {\n return (this.compareTo(a) < 0) ? this : a;\n };\n // BigInteger.prototype.max = bnMax;\n BigInteger.prototype.max = function (a) {\n return (this.compareTo(a) > 0) ? this : a;\n };\n // BigInteger.prototype.and = bnAnd;\n BigInteger.prototype.and = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_and, r);\n return r;\n };\n // BigInteger.prototype.or = bnOr;\n BigInteger.prototype.or = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_or, r);\n return r;\n };\n // BigInteger.prototype.xor = bnXor;\n BigInteger.prototype.xor = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_xor, r);\n return r;\n };\n // BigInteger.prototype.andNot = bnAndNot;\n BigInteger.prototype.andNot = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_andnot, r);\n return r;\n };\n // BigInteger.prototype.not = bnNot;\n // (public) ~this\n BigInteger.prototype.not = function () {\n var r = nbi();\n for (var i = 0; i < this.t; ++i) {\n r[i] = this.DM & ~this[i];\n }\n r.t = this.t;\n r.s = ~this.s;\n return r;\n };\n // BigInteger.prototype.shiftLeft = bnShiftLeft;\n // (public) this << n\n BigInteger.prototype.shiftLeft = function (n) {\n var r = nbi();\n if (n < 0) {\n this.rShiftTo(-n, r);\n }\n else {\n this.lShiftTo(n, r);\n }\n return r;\n };\n // BigInteger.prototype.shiftRight = bnShiftRight;\n // (public) this >> n\n BigInteger.prototype.shiftRight = function (n) {\n var r = nbi();\n if (n < 0) {\n this.lShiftTo(-n, r);\n }\n else {\n this.rShiftTo(n, r);\n }\n return r;\n };\n // BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\n // (public) returns index of lowest 1-bit (or -1 if none)\n BigInteger.prototype.getLowestSetBit = function () {\n for (var i = 0; i < this.t; ++i) {\n if (this[i] != 0) {\n return i * this.DB + (0,_util__WEBPACK_IMPORTED_MODULE_0__.lbit)(this[i]);\n }\n }\n if (this.s < 0) {\n return this.t * this.DB;\n }\n return -1;\n };\n // BigInteger.prototype.bitCount = bnBitCount;\n // (public) return number of set bits\n BigInteger.prototype.bitCount = function () {\n var r = 0;\n var x = this.s & this.DM;\n for (var i = 0; i < this.t; ++i) {\n r += (0,_util__WEBPACK_IMPORTED_MODULE_0__.cbit)(this[i] ^ x);\n }\n return r;\n };\n // BigInteger.prototype.testBit = bnTestBit;\n // (public) true iff nth bit is set\n BigInteger.prototype.testBit = function (n) {\n var j = Math.floor(n / this.DB);\n if (j >= this.t) {\n return (this.s != 0);\n }\n return ((this[j] & (1 << (n % this.DB))) != 0);\n };\n // BigInteger.prototype.setBit = bnSetBit;\n // (public) this | (1< 1) {\n var g2 = nbi();\n z.sqrTo(g[1], g2);\n while (n <= km) {\n g[n] = nbi();\n z.mulTo(g2, g[n - 2], g[n]);\n n += 2;\n }\n }\n var j = e.t - 1;\n var w;\n var is1 = true;\n var r2 = nbi();\n var t;\n i = nbits(e[j]) - 1;\n while (j >= 0) {\n if (i >= k1) {\n w = (e[j] >> (i - k1)) & km;\n }\n else {\n w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i);\n if (j > 0) {\n w |= e[j - 1] >> (this.DB + i - k1);\n }\n }\n n = k;\n while ((w & 1) == 0) {\n w >>= 1;\n --n;\n }\n if ((i -= n) < 0) {\n i += this.DB;\n --j;\n }\n if (is1) { // ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n }\n else {\n while (n > 1) {\n z.sqrTo(r, r2);\n z.sqrTo(r2, r);\n n -= 2;\n }\n if (n > 0) {\n z.sqrTo(r, r2);\n }\n else {\n t = r;\n r = r2;\n r2 = t;\n }\n z.mulTo(r2, g[w], r);\n }\n while (j >= 0 && (e[j] & (1 << i)) == 0) {\n z.sqrTo(r, r2);\n t = r;\n r = r2;\n r2 = t;\n if (--i < 0) {\n i = this.DB - 1;\n --j;\n }\n }\n }\n return z.revert(r);\n };\n // BigInteger.prototype.modInverse = bnModInverse;\n // (public) 1/this % m (HAC 14.61)\n BigInteger.prototype.modInverse = function (m) {\n var ac = m.isEven();\n if ((this.isEven() && ac) || m.signum() == 0) {\n return BigInteger.ZERO;\n }\n var u = m.clone();\n var v = this.clone();\n var a = nbv(1);\n var b = nbv(0);\n var c = nbv(0);\n var d = nbv(1);\n while (u.signum() != 0) {\n while (u.isEven()) {\n u.rShiftTo(1, u);\n if (ac) {\n if (!a.isEven() || !b.isEven()) {\n a.addTo(this, a);\n b.subTo(m, b);\n }\n a.rShiftTo(1, a);\n }\n else if (!b.isEven()) {\n b.subTo(m, b);\n }\n b.rShiftTo(1, b);\n }\n while (v.isEven()) {\n v.rShiftTo(1, v);\n if (ac) {\n if (!c.isEven() || !d.isEven()) {\n c.addTo(this, c);\n d.subTo(m, d);\n }\n c.rShiftTo(1, c);\n }\n else if (!d.isEven()) {\n d.subTo(m, d);\n }\n d.rShiftTo(1, d);\n }\n if (u.compareTo(v) >= 0) {\n u.subTo(v, u);\n if (ac) {\n a.subTo(c, a);\n }\n b.subTo(d, b);\n }\n else {\n v.subTo(u, v);\n if (ac) {\n c.subTo(a, c);\n }\n d.subTo(b, d);\n }\n }\n if (v.compareTo(BigInteger.ONE) != 0) {\n return BigInteger.ZERO;\n }\n if (d.compareTo(m) >= 0) {\n return d.subtract(m);\n }\n if (d.signum() < 0) {\n d.addTo(m, d);\n }\n else {\n return d;\n }\n if (d.signum() < 0) {\n return d.add(m);\n }\n else {\n return d;\n }\n };\n // BigInteger.prototype.pow = bnPow;\n // (public) this^e\n BigInteger.prototype.pow = function (e) {\n return this.exp(e, new NullExp());\n };\n // BigInteger.prototype.gcd = bnGCD;\n // (public) gcd(this,a) (HAC 14.54)\n BigInteger.prototype.gcd = function (a) {\n var x = (this.s < 0) ? this.negate() : this.clone();\n var y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n var t = x;\n x = y;\n y = t;\n }\n var i = x.getLowestSetBit();\n var g = y.getLowestSetBit();\n if (g < 0) {\n return x;\n }\n if (i < g) {\n g = i;\n }\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n while (x.signum() > 0) {\n if ((i = x.getLowestSetBit()) > 0) {\n x.rShiftTo(i, x);\n }\n if ((i = y.getLowestSetBit()) > 0) {\n y.rShiftTo(i, y);\n }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n }\n else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n }\n if (g > 0) {\n y.lShiftTo(g, y);\n }\n return y;\n };\n // BigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n // (public) test primality with certainty >= 1-.5^t\n BigInteger.prototype.isProbablePrime = function (t) {\n var i;\n var x = this.abs();\n if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {\n for (i = 0; i < lowprimes.length; ++i) {\n if (x[0] == lowprimes[i]) {\n return true;\n }\n }\n return false;\n }\n if (x.isEven()) {\n return false;\n }\n i = 1;\n while (i < lowprimes.length) {\n var m = lowprimes[i];\n var j = i + 1;\n while (j < lowprimes.length && m < lplim) {\n m *= lowprimes[j++];\n }\n m = x.modInt(m);\n while (i < j) {\n if (m % lowprimes[i++] == 0) {\n return false;\n }\n }\n }\n return x.millerRabin(t);\n };\n //#endregion PUBLIC\n //#region PROTECTED\n // BigInteger.prototype.copyTo = bnpCopyTo;\n // (protected) copy this to r\n BigInteger.prototype.copyTo = function (r) {\n for (var i = this.t - 1; i >= 0; --i) {\n r[i] = this[i];\n }\n r.t = this.t;\n r.s = this.s;\n };\n // BigInteger.prototype.fromInt = bnpFromInt;\n // (protected) set from integer value x, -DV <= x < DV\n BigInteger.prototype.fromInt = function (x) {\n this.t = 1;\n this.s = (x < 0) ? -1 : 0;\n if (x > 0) {\n this[0] = x;\n }\n else if (x < -1) {\n this[0] = x + this.DV;\n }\n else {\n this.t = 0;\n }\n };\n // BigInteger.prototype.fromString = bnpFromString;\n // (protected) set from string and radix\n BigInteger.prototype.fromString = function (s, b) {\n var k;\n if (b == 16) {\n k = 4;\n }\n else if (b == 8) {\n k = 3;\n }\n else if (b == 256) {\n k = 8;\n /* byte array */\n }\n else if (b == 2) {\n k = 1;\n }\n else if (b == 32) {\n k = 5;\n }\n else if (b == 4) {\n k = 2;\n }\n else {\n this.fromRadix(s, b);\n return;\n }\n this.t = 0;\n this.s = 0;\n var i = s.length;\n var mi = false;\n var sh = 0;\n while (--i >= 0) {\n var x = (k == 8) ? (+s[i]) & 0xff : intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\") {\n mi = true;\n }\n continue;\n }\n mi = false;\n if (sh == 0) {\n this[this.t++] = x;\n }\n else if (sh + k > this.DB) {\n this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;\n this[this.t++] = (x >> (this.DB - sh));\n }\n else {\n this[this.t - 1] |= x << sh;\n }\n sh += k;\n if (sh >= this.DB) {\n sh -= this.DB;\n }\n }\n if (k == 8 && ((+s[0]) & 0x80) != 0) {\n this.s = -1;\n if (sh > 0) {\n this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;\n }\n }\n this.clamp();\n if (mi) {\n BigInteger.ZERO.subTo(this, this);\n }\n };\n // BigInteger.prototype.clamp = bnpClamp;\n // (protected) clamp off excess high words\n BigInteger.prototype.clamp = function () {\n var c = this.s & this.DM;\n while (this.t > 0 && this[this.t - 1] == c) {\n --this.t;\n }\n };\n // BigInteger.prototype.dlShiftTo = bnpDLShiftTo;\n // (protected) r = this << n*DB\n BigInteger.prototype.dlShiftTo = function (n, r) {\n var i;\n for (i = this.t - 1; i >= 0; --i) {\n r[i + n] = this[i];\n }\n for (i = n - 1; i >= 0; --i) {\n r[i] = 0;\n }\n r.t = this.t + n;\n r.s = this.s;\n };\n // BigInteger.prototype.drShiftTo = bnpDRShiftTo;\n // (protected) r = this >> n*DB\n BigInteger.prototype.drShiftTo = function (n, r) {\n for (var i = n; i < this.t; ++i) {\n r[i - n] = this[i];\n }\n r.t = Math.max(this.t - n, 0);\n r.s = this.s;\n };\n // BigInteger.prototype.lShiftTo = bnpLShiftTo;\n // (protected) r = this << n\n BigInteger.prototype.lShiftTo = function (n, r) {\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << cbs) - 1;\n var ds = Math.floor(n / this.DB);\n var c = (this.s << bs) & this.DM;\n for (var i = this.t - 1; i >= 0; --i) {\n r[i + ds + 1] = (this[i] >> cbs) | c;\n c = (this[i] & bm) << bs;\n }\n for (var i = ds - 1; i >= 0; --i) {\n r[i] = 0;\n }\n r[ds] = c;\n r.t = this.t + ds + 1;\n r.s = this.s;\n r.clamp();\n };\n // BigInteger.prototype.rShiftTo = bnpRShiftTo;\n // (protected) r = this >> n\n BigInteger.prototype.rShiftTo = function (n, r) {\n r.s = this.s;\n var ds = Math.floor(n / this.DB);\n if (ds >= this.t) {\n r.t = 0;\n return;\n }\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << bs) - 1;\n r[0] = this[ds] >> bs;\n for (var i = ds + 1; i < this.t; ++i) {\n r[i - ds - 1] |= (this[i] & bm) << cbs;\n r[i - ds] = this[i] >> bs;\n }\n if (bs > 0) {\n r[this.t - ds - 1] |= (this.s & bm) << cbs;\n }\n r.t = this.t - ds;\n r.clamp();\n };\n // BigInteger.prototype.subTo = bnpSubTo;\n // (protected) r = this - a\n BigInteger.prototype.subTo = function (a, r) {\n var i = 0;\n var c = 0;\n var m = Math.min(a.t, this.t);\n while (i < m) {\n c += this[i] - a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n if (a.t < this.t) {\n c -= a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while (i < a.t) {\n c -= a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = (c < 0) ? -1 : 0;\n if (c < -1) {\n r[i++] = this.DV + c;\n }\n else if (c > 0) {\n r[i++] = c;\n }\n r.t = i;\n r.clamp();\n };\n // BigInteger.prototype.multiplyTo = bnpMultiplyTo;\n // (protected) r = this * a, r != this,a (HAC 14.12)\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyTo = function (a, r) {\n var x = this.abs();\n var y = a.abs();\n var i = x.t;\n r.t = i + y.t;\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = 0; i < y.t; ++i) {\n r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\n }\n r.s = 0;\n r.clamp();\n if (this.s != a.s) {\n BigInteger.ZERO.subTo(r, r);\n }\n };\n // BigInteger.prototype.squareTo = bnpSquareTo;\n // (protected) r = this^2, r != this (HAC 14.16)\n BigInteger.prototype.squareTo = function (r) {\n var x = this.abs();\n var i = r.t = 2 * x.t;\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = 0; i < x.t - 1; ++i) {\n var c = x.am(i, x[i], r, 2 * i, 0, 1);\n if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\n r[i + x.t] -= x.DV;\n r[i + x.t + 1] = 1;\n }\n }\n if (r.t > 0) {\n r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\n }\n r.s = 0;\n r.clamp();\n };\n // BigInteger.prototype.divRemTo = bnpDivRemTo;\n // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n // r != q, this != m. q or r may be null.\n BigInteger.prototype.divRemTo = function (m, q, r) {\n var pm = m.abs();\n if (pm.t <= 0) {\n return;\n }\n var pt = this.abs();\n if (pt.t < pm.t) {\n if (q != null) {\n q.fromInt(0);\n }\n if (r != null) {\n this.copyTo(r);\n }\n return;\n }\n if (r == null) {\n r = nbi();\n }\n var y = nbi();\n var ts = this.s;\n var ms = m.s;\n var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus\n if (nsh > 0) {\n pm.lShiftTo(nsh, y);\n pt.lShiftTo(nsh, r);\n }\n else {\n pm.copyTo(y);\n pt.copyTo(r);\n }\n var ys = y.t;\n var y0 = y[ys - 1];\n if (y0 == 0) {\n return;\n }\n var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0);\n var d1 = this.FV / yt;\n var d2 = (1 << this.F1) / yt;\n var e = 1 << this.F2;\n var i = r.t;\n var j = i - ys;\n var t = (q == null) ? nbi() : q;\n y.dlShiftTo(j, t);\n if (r.compareTo(t) >= 0) {\n r[r.t++] = 1;\n r.subTo(t, r);\n }\n BigInteger.ONE.dlShiftTo(ys, t);\n t.subTo(y, y); // \"negative\" y so we can replace sub with am later\n while (y.t < ys) {\n y[y.t++] = 0;\n }\n while (--j >= 0) {\n // Estimate quotient digit\n var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\n if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out\n y.dlShiftTo(j, t);\n r.subTo(t, r);\n while (r[i] < --qd) {\n r.subTo(t, r);\n }\n }\n }\n if (q != null) {\n r.drShiftTo(ys, q);\n if (ts != ms) {\n BigInteger.ZERO.subTo(q, q);\n }\n }\n r.t = ys;\n r.clamp();\n if (nsh > 0) {\n r.rShiftTo(nsh, r);\n } // Denormalize remainder\n if (ts < 0) {\n BigInteger.ZERO.subTo(r, r);\n }\n };\n // BigInteger.prototype.invDigit = bnpInvDigit;\n // (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n // justification:\n // xy == 1 (mod m)\n // xy = 1+km\n // xy(2-xy) = (1+km)(1-km)\n // x[y(2-xy)] = 1-k^2m^2\n // x[y(2-xy)] == 1 (mod m^2)\n // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n // JS multiply \"overflows\" differently from C/C++, so care is needed here.\n BigInteger.prototype.invDigit = function () {\n if (this.t < 1) {\n return 0;\n }\n var x = this[0];\n if ((x & 1) == 0) {\n return 0;\n }\n var y = x & 3; // y == 1/x mod 2^2\n y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4\n y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8\n y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return (y > 0) ? this.DV - y : -y;\n };\n // BigInteger.prototype.isEven = bnpIsEven;\n // (protected) true iff this is even\n BigInteger.prototype.isEven = function () {\n return ((this.t > 0) ? (this[0] & 1) : this.s) == 0;\n };\n // BigInteger.prototype.exp = bnpExp;\n // (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\n BigInteger.prototype.exp = function (e, z) {\n if (e > 0xffffffff || e < 1) {\n return BigInteger.ONE;\n }\n var r = nbi();\n var r2 = nbi();\n var g = z.convert(this);\n var i = nbits(e) - 1;\n g.copyTo(r);\n while (--i >= 0) {\n z.sqrTo(r, r2);\n if ((e & (1 << i)) > 0) {\n z.mulTo(r2, g, r);\n }\n else {\n var t = r;\n r = r2;\n r2 = t;\n }\n }\n return z.revert(r);\n };\n // BigInteger.prototype.chunkSize = bnpChunkSize;\n // (protected) return x s.t. r^x < DV\n BigInteger.prototype.chunkSize = function (r) {\n return Math.floor(Math.LN2 * this.DB / Math.log(r));\n };\n // BigInteger.prototype.toRadix = bnpToRadix;\n // (protected) convert to radix string\n BigInteger.prototype.toRadix = function (b) {\n if (b == null) {\n b = 10;\n }\n if (this.signum() == 0 || b < 2 || b > 36) {\n return \"0\";\n }\n var cs = this.chunkSize(b);\n var a = Math.pow(b, cs);\n var d = nbv(a);\n var y = nbi();\n var z = nbi();\n var r = \"\";\n this.divRemTo(d, y, z);\n while (y.signum() > 0) {\n r = (a + z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d, y, z);\n }\n return z.intValue().toString(b) + r;\n };\n // BigInteger.prototype.fromRadix = bnpFromRadix;\n // (protected) convert from radix string\n BigInteger.prototype.fromRadix = function (s, b) {\n this.fromInt(0);\n if (b == null) {\n b = 10;\n }\n var cs = this.chunkSize(b);\n var d = Math.pow(b, cs);\n var mi = false;\n var j = 0;\n var w = 0;\n for (var i = 0; i < s.length; ++i) {\n var x = intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\" && this.signum() == 0) {\n mi = true;\n }\n continue;\n }\n w = b * w + x;\n if (++j >= cs) {\n this.dMultiply(d);\n this.dAddOffset(w, 0);\n j = 0;\n w = 0;\n }\n }\n if (j > 0) {\n this.dMultiply(Math.pow(b, j));\n this.dAddOffset(w, 0);\n }\n if (mi) {\n BigInteger.ZERO.subTo(this, this);\n }\n };\n // BigInteger.prototype.fromNumber = bnpFromNumber;\n // (protected) alternate constructor\n BigInteger.prototype.fromNumber = function (a, b, c) {\n if (\"number\" == typeof b) {\n // new BigInteger(int,int,RNG)\n if (a < 2) {\n this.fromInt(1);\n }\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1)) {\n // force MSB set\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), _util__WEBPACK_IMPORTED_MODULE_0__.op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n } // force odd\n while (!this.isProbablePrime(b)) {\n this.dAddOffset(2, 0);\n if (this.bitLength() > a) {\n this.subTo(BigInteger.ONE.shiftLeft(a - 1), this);\n }\n }\n }\n }\n else {\n // new BigInteger(int,RNG)\n var x = [];\n var t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) {\n x[0] &= ((1 << t) - 1);\n }\n else {\n x[0] = 0;\n }\n this.fromString(x, 256);\n }\n };\n // BigInteger.prototype.bitwiseTo = bnpBitwiseTo;\n // (protected) r = this op a (bitwise)\n BigInteger.prototype.bitwiseTo = function (a, op, r) {\n var i;\n var f;\n var m = Math.min(a.t, this.t);\n for (i = 0; i < m; ++i) {\n r[i] = op(this[i], a[i]);\n }\n if (a.t < this.t) {\n f = a.s & this.DM;\n for (i = m; i < this.t; ++i) {\n r[i] = op(this[i], f);\n }\n r.t = this.t;\n }\n else {\n f = this.s & this.DM;\n for (i = m; i < a.t; ++i) {\n r[i] = op(f, a[i]);\n }\n r.t = a.t;\n }\n r.s = op(this.s, a.s);\n r.clamp();\n };\n // BigInteger.prototype.changeBit = bnpChangeBit;\n // (protected) this op (1<>= this.DB;\n }\n if (a.t < this.t) {\n c += a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while (i < a.t) {\n c += a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += a.s;\n }\n r.s = (c < 0) ? -1 : 0;\n if (c > 0) {\n r[i++] = c;\n }\n else if (c < -1) {\n r[i++] = this.DV + c;\n }\n r.t = i;\n r.clamp();\n };\n // BigInteger.prototype.dMultiply = bnpDMultiply;\n // (protected) this *= n, this >= 0, 1 < n < DV\n BigInteger.prototype.dMultiply = function (n) {\n this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);\n ++this.t;\n this.clamp();\n };\n // BigInteger.prototype.dAddOffset = bnpDAddOffset;\n // (protected) this += n << w words, this >= 0\n BigInteger.prototype.dAddOffset = function (n, w) {\n if (n == 0) {\n return;\n }\n while (this.t <= w) {\n this[this.t++] = 0;\n }\n this[w] += n;\n while (this[w] >= this.DV) {\n this[w] -= this.DV;\n if (++w >= this.t) {\n this[this.t++] = 0;\n }\n ++this[w];\n }\n };\n // BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\n // (protected) r = lower n words of \"this * a\", a.t <= n\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyLowerTo = function (a, n, r) {\n var i = Math.min(this.t + a.t, n);\n r.s = 0; // assumes a,this >= 0\n r.t = i;\n while (i > 0) {\n r[--i] = 0;\n }\n for (var j = r.t - this.t; i < j; ++i) {\n r[i + this.t] = this.am(0, a[i], r, i, 0, this.t);\n }\n for (var j = Math.min(a.t, n); i < j; ++i) {\n this.am(0, a[i], r, i, 0, n - i);\n }\n r.clamp();\n };\n // BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\n // (protected) r = \"this * a\" without lower n words, n > 0\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyUpperTo = function (a, n, r) {\n --n;\n var i = r.t = this.t + a.t - n;\n r.s = 0; // assumes a,this >= 0\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = Math.max(n - this.t, 0); i < a.t; ++i) {\n r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n);\n }\n r.clamp();\n r.drShiftTo(1, r);\n };\n // BigInteger.prototype.modInt = bnpModInt;\n // (protected) this % n, n < 2^26\n BigInteger.prototype.modInt = function (n) {\n if (n <= 0) {\n return 0;\n }\n var d = this.DV % n;\n var r = (this.s < 0) ? n - 1 : 0;\n if (this.t > 0) {\n if (d == 0) {\n r = this[0] % n;\n }\n else {\n for (var i = this.t - 1; i >= 0; --i) {\n r = (d * r + this[i]) % n;\n }\n }\n }\n return r;\n };\n // BigInteger.prototype.millerRabin = bnpMillerRabin;\n // (protected) true if probably prime (HAC 4.24, Miller-Rabin)\n BigInteger.prototype.millerRabin = function (t) {\n var n1 = this.subtract(BigInteger.ONE);\n var k = n1.getLowestSetBit();\n if (k <= 0) {\n return false;\n }\n var r = n1.shiftRight(k);\n t = (t + 1) >> 1;\n if (t > lowprimes.length) {\n t = lowprimes.length;\n }\n var a = nbi();\n for (var i = 0; i < t; ++i) {\n // Pick bases at random, instead of starting at 2\n a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);\n var y = a.modPow(r, this);\n if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n var j = 1;\n while (j++ < k && y.compareTo(n1) != 0) {\n y = y.modPowInt(2, this);\n if (y.compareTo(BigInteger.ONE) == 0) {\n return false;\n }\n }\n if (y.compareTo(n1) != 0) {\n return false;\n }\n }\n }\n return true;\n };\n // BigInteger.prototype.square = bnSquare;\n // (public) this^2\n BigInteger.prototype.square = function () {\n var r = nbi();\n this.squareTo(r);\n return r;\n };\n //#region ASYNC\n // Public API method\n BigInteger.prototype.gcda = function (a, callback) {\n var x = (this.s < 0) ? this.negate() : this.clone();\n var y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n var t = x;\n x = y;\n y = t;\n }\n var i = x.getLowestSetBit();\n var g = y.getLowestSetBit();\n if (g < 0) {\n callback(x);\n return;\n }\n if (i < g) {\n g = i;\n }\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n // Workhorse of the algorithm, gets called 200 - 800 times per 512 bit keygen.\n var gcda1 = function () {\n if ((i = x.getLowestSetBit()) > 0) {\n x.rShiftTo(i, x);\n }\n if ((i = y.getLowestSetBit()) > 0) {\n y.rShiftTo(i, y);\n }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n }\n else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n if (!(x.signum() > 0)) {\n if (g > 0) {\n y.lShiftTo(g, y);\n }\n setTimeout(function () { callback(y); }, 0); // escape\n }\n else {\n setTimeout(gcda1, 0);\n }\n };\n setTimeout(gcda1, 10);\n };\n // (protected) alternate constructor\n BigInteger.prototype.fromNumberAsync = function (a, b, c, callback) {\n if (\"number\" == typeof b) {\n if (a < 2) {\n this.fromInt(1);\n }\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1)) {\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), _util__WEBPACK_IMPORTED_MODULE_0__.op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n }\n var bnp_1 = this;\n var bnpfn1_1 = function () {\n bnp_1.dAddOffset(2, 0);\n if (bnp_1.bitLength() > a) {\n bnp_1.subTo(BigInteger.ONE.shiftLeft(a - 1), bnp_1);\n }\n if (bnp_1.isProbablePrime(b)) {\n setTimeout(function () { callback(); }, 0); // escape\n }\n else {\n setTimeout(bnpfn1_1, 0);\n }\n };\n setTimeout(bnpfn1_1, 0);\n }\n }\n else {\n var x = [];\n var t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) {\n x[0] &= ((1 << t) - 1);\n }\n else {\n x[0] = 0;\n }\n this.fromString(x, 256);\n }\n };\n return BigInteger;\n}());\n\n//#region REDUCERS\n//#region NullExp\nvar NullExp = /** @class */ (function () {\n function NullExp() {\n }\n // NullExp.prototype.convert = nNop;\n NullExp.prototype.convert = function (x) {\n return x;\n };\n // NullExp.prototype.revert = nNop;\n NullExp.prototype.revert = function (x) {\n return x;\n };\n // NullExp.prototype.mulTo = nMulTo;\n NullExp.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n };\n // NullExp.prototype.sqrTo = nSqrTo;\n NullExp.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n };\n return NullExp;\n}());\n// Modular reduction using \"classic\" algorithm\nvar Classic = /** @class */ (function () {\n function Classic(m) {\n this.m = m;\n }\n // Classic.prototype.convert = cConvert;\n Classic.prototype.convert = function (x) {\n if (x.s < 0 || x.compareTo(this.m) >= 0) {\n return x.mod(this.m);\n }\n else {\n return x;\n }\n };\n // Classic.prototype.revert = cRevert;\n Classic.prototype.revert = function (x) {\n return x;\n };\n // Classic.prototype.reduce = cReduce;\n Classic.prototype.reduce = function (x) {\n x.divRemTo(this.m, null, x);\n };\n // Classic.prototype.mulTo = cMulTo;\n Classic.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Classic.prototype.sqrTo = cSqrTo;\n Classic.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Classic;\n}());\n//#endregion\n//#region Montgomery\n// Montgomery reduction\nvar Montgomery = /** @class */ (function () {\n function Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp & 0x7fff;\n this.mph = this.mp >> 15;\n this.um = (1 << (m.DB - 15)) - 1;\n this.mt2 = 2 * m.t;\n }\n // Montgomery.prototype.convert = montConvert;\n // xR mod m\n Montgomery.prototype.convert = function (x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t, r);\n r.divRemTo(this.m, null, r);\n if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\n this.m.subTo(r, r);\n }\n return r;\n };\n // Montgomery.prototype.revert = montRevert;\n // x/R mod m\n Montgomery.prototype.revert = function (x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n };\n // Montgomery.prototype.reduce = montReduce;\n // x = x/R mod m (HAC 14.32)\n Montgomery.prototype.reduce = function (x) {\n while (x.t <= this.mt2) {\n // pad x so am has enough room later\n x[x.t++] = 0;\n }\n for (var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x[i]*mp mod DV\n var j = x[i] & 0x7fff;\n var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i + this.m.t;\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t);\n // propagate carry\n while (x[j] >= x.DV) {\n x[j] -= x.DV;\n x[++j]++;\n }\n }\n x.clamp();\n x.drShiftTo(this.m.t, x);\n if (x.compareTo(this.m) >= 0) {\n x.subTo(this.m, x);\n }\n };\n // Montgomery.prototype.mulTo = montMulTo;\n // r = \"xy/R mod m\"; x,y != r\n Montgomery.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Montgomery.prototype.sqrTo = montSqrTo;\n // r = \"x^2/R mod m\"; x != r\n Montgomery.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Montgomery;\n}());\n//#endregion Montgomery\n//#region Barrett\n// Barrett modular reduction\nvar Barrett = /** @class */ (function () {\n function Barrett(m) {\n this.m = m;\n // setup Barrett\n this.r2 = nbi();\n this.q3 = nbi();\n BigInteger.ONE.dlShiftTo(2 * m.t, this.r2);\n this.mu = this.r2.divide(m);\n }\n // Barrett.prototype.convert = barrettConvert;\n Barrett.prototype.convert = function (x) {\n if (x.s < 0 || x.t > 2 * this.m.t) {\n return x.mod(this.m);\n }\n else if (x.compareTo(this.m) < 0) {\n return x;\n }\n else {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n }\n };\n // Barrett.prototype.revert = barrettRevert;\n Barrett.prototype.revert = function (x) {\n return x;\n };\n // Barrett.prototype.reduce = barrettReduce;\n // x = x mod m (HAC 14.42)\n Barrett.prototype.reduce = function (x) {\n x.drShiftTo(this.m.t - 1, this.r2);\n if (x.t > this.m.t + 1) {\n x.t = this.m.t + 1;\n x.clamp();\n }\n this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);\n this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);\n while (x.compareTo(this.r2) < 0) {\n x.dAddOffset(1, this.m.t + 1);\n }\n x.subTo(this.r2, x);\n while (x.compareTo(this.m) >= 0) {\n x.subTo(this.m, x);\n }\n };\n // Barrett.prototype.mulTo = barrettMulTo;\n // r = x*y mod m; x,y != r\n Barrett.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Barrett.prototype.sqrTo = barrettSqrTo;\n // r = x^2 mod m; x != r\n Barrett.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Barrett;\n}());\n//#endregion\n//#endregion REDUCERS\n// return new, unset BigInteger\nfunction nbi() { return new BigInteger(null); }\nfunction parseBigInt(str, r) {\n return new BigInteger(str, r);\n}\n// am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\nvar inBrowser = typeof navigator !== \"undefined\";\nif (inBrowser && j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n // am2 avoids a big mult-and-extract completely.\n // Max digit bits should be <= 30 because we do bitwise ops\n // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\n BigInteger.prototype.am = function am2(i, x, w, j, c, n) {\n var xl = x & 0x7fff;\n var xh = x >> 15;\n while (--n >= 0) {\n var l = this[i] & 0x7fff;\n var h = this[i++] >> 15;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\n w[j++] = l & 0x3fffffff;\n }\n return c;\n };\n dbits = 30;\n}\nelse if (inBrowser && j_lm && (navigator.appName != \"Netscape\")) {\n // am1: use a single mult and divide to get the high bits,\n // max digit bits should be 26 because\n // max internal value = 2*dvalue^2-2*dvalue (< 2^53)\n BigInteger.prototype.am = function am1(i, x, w, j, c, n) {\n while (--n >= 0) {\n var v = x * this[i++] + w[j] + c;\n c = Math.floor(v / 0x4000000);\n w[j++] = v & 0x3ffffff;\n }\n return c;\n };\n dbits = 26;\n}\nelse { // Mozilla/Netscape seems to prefer am3\n // Alternately, set max digit bits to 28 since some\n // browsers slow down when dealing with 32-bit numbers.\n BigInteger.prototype.am = function am3(i, x, w, j, c, n) {\n var xl = x & 0x3fff;\n var xh = x >> 14;\n while (--n >= 0) {\n var l = this[i] & 0x3fff;\n var h = this[i++] >> 14;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\n c = (l >> 28) + (m >> 14) + xh * h;\n w[j++] = l & 0xfffffff;\n }\n return c;\n };\n dbits = 28;\n}\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = ((1 << dbits) - 1);\nBigInteger.prototype.DV = (1 << dbits);\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\nBigInteger.prototype.F1 = BI_FP - dbits;\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\n// Digit conversions\nvar BI_RC = [];\nvar rr;\nvar vv;\nrr = \"0\".charCodeAt(0);\nfor (vv = 0; vv <= 9; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"a\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"A\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nfunction intAt(s, i) {\n var c = BI_RC[s.charCodeAt(i)];\n return (c == null) ? -1 : c;\n}\n// return bigint initialized to value\nfunction nbv(i) {\n var r = nbi();\n r.fromInt(i);\n return r;\n}\n// returns bit length of the integer x\nfunction nbits(x) {\n var r = 1;\n var t;\n if ((t = x >>> 16) != 0) {\n x = t;\n r += 16;\n }\n if ((t = x >> 8) != 0) {\n x = t;\n r += 8;\n }\n if ((t = x >> 4) != 0) {\n x = t;\n r += 4;\n }\n if ((t = x >> 2) != 0) {\n x = t;\n r += 2;\n }\n if ((t = x >> 1) != 0) {\n x = t;\n r += 1;\n }\n return r;\n}\n// \"constants\"\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/jsbn.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/jsbn/prng4.js":
+ /*!*******************************!*\
+ !*** ./lib/lib/jsbn/prng4.js ***!
+ \*******************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Arcfour\": () => (/* binding */ Arcfour),\n/* harmony export */ \"prng_newstate\": () => (/* binding */ prng_newstate),\n/* harmony export */ \"rng_psize\": () => (/* binding */ rng_psize)\n/* harmony export */ });\n// prng4.js - uses Arcfour as a PRNG\nvar Arcfour = /** @class */ (function () {\n function Arcfour() {\n this.i = 0;\n this.j = 0;\n this.S = [];\n }\n // Arcfour.prototype.init = ARC4init;\n // Initialize arcfour context from key, an array of ints, each from [0..255]\n Arcfour.prototype.init = function (key) {\n var i;\n var j;\n var t;\n for (i = 0; i < 256; ++i) {\n this.S[i] = i;\n }\n j = 0;\n for (i = 0; i < 256; ++i) {\n j = (j + this.S[i] + key[i % key.length]) & 255;\n t = this.S[i];\n this.S[i] = this.S[j];\n this.S[j] = t;\n }\n this.i = 0;\n this.j = 0;\n };\n // Arcfour.prototype.next = ARC4next;\n Arcfour.prototype.next = function () {\n var t;\n this.i = (this.i + 1) & 255;\n this.j = (this.j + this.S[this.i]) & 255;\n t = this.S[this.i];\n this.S[this.i] = this.S[this.j];\n this.S[this.j] = t;\n return this.S[(t + this.S[this.i]) & 255];\n };\n return Arcfour;\n}());\n\n// Plug in your RNG constructor here\nfunction prng_newstate() {\n return new Arcfour();\n}\n// Pool size must be a multiple of 4 and greater than 32.\n// An array of bytes the size of the pool will be passed to init()\nvar rng_psize = 256;\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/prng4.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/jsbn/rng.js":
+ /*!*****************************!*\
+ !*** ./lib/lib/jsbn/rng.js ***!
+ \*****************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SecureRandom\": () => (/* binding */ SecureRandom)\n/* harmony export */ });\n/* harmony import */ var _prng4__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./prng4 */ \"./lib/lib/jsbn/prng4.js\");\n// Random number generator - requires a PRNG backend, e.g. prng4.js\n\nvar rng_state;\nvar rng_pool = null;\nvar rng_pptr;\n// Initialize the pool with junk if needed.\nif (rng_pool == null) {\n rng_pool = [];\n rng_pptr = 0;\n var t = void 0;\n if (typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues) {\n // Extract entropy (2048 bits) from RNG if available\n var z = new Uint32Array(256);\n window.crypto.getRandomValues(z);\n for (t = 0; t < z.length; ++t) {\n rng_pool[rng_pptr++] = z[t] & 255;\n }\n }\n // Use mouse events for entropy, if we do not have enough entropy by the time\n // we need it, entropy will be generated by Math.random.\n var count = 0;\n var onMouseMoveListener_1 = function (ev) {\n count = count || 0;\n if (count >= 256 || rng_pptr >= _prng4__WEBPACK_IMPORTED_MODULE_0__.rng_psize) {\n if (window.removeEventListener) {\n window.removeEventListener(\"mousemove\", onMouseMoveListener_1, false);\n }\n else if (window.detachEvent) {\n window.detachEvent(\"onmousemove\", onMouseMoveListener_1);\n }\n return;\n }\n try {\n var mouseCoordinates = ev.x + ev.y;\n rng_pool[rng_pptr++] = mouseCoordinates & 255;\n count += 1;\n }\n catch (e) {\n // Sometimes Firefox will deny permission to access event properties for some reason. Ignore.\n }\n };\n if (typeof window !== 'undefined') {\n if (window.addEventListener) {\n window.addEventListener(\"mousemove\", onMouseMoveListener_1, false);\n }\n else if (window.attachEvent) {\n window.attachEvent(\"onmousemove\", onMouseMoveListener_1);\n }\n }\n}\nfunction rng_get_byte() {\n if (rng_state == null) {\n rng_state = (0,_prng4__WEBPACK_IMPORTED_MODULE_0__.prng_newstate)();\n // At this point, we may not have collected enough entropy. If not, fall back to Math.random\n while (rng_pptr < _prng4__WEBPACK_IMPORTED_MODULE_0__.rng_psize) {\n var random = Math.floor(65536 * Math.random());\n rng_pool[rng_pptr++] = random & 255;\n }\n rng_state.init(rng_pool);\n for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) {\n rng_pool[rng_pptr] = 0;\n }\n rng_pptr = 0;\n }\n // TODO: allow reseeding after first request\n return rng_state.next();\n}\nvar SecureRandom = /** @class */ (function () {\n function SecureRandom() {\n }\n SecureRandom.prototype.nextBytes = function (ba) {\n for (var i = 0; i < ba.length; ++i) {\n ba[i] = rng_get_byte();\n }\n };\n return SecureRandom;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/rng.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/jsbn/rsa.js":
+ /*!*****************************!*\
+ !*** ./lib/lib/jsbn/rsa.js ***!
+ \*****************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"RSAKey\": () => (/* binding */ RSAKey)\n/* harmony export */ });\n/* harmony import */ var _jsbn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _rng__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rng */ \"./lib/lib/jsbn/rng.js\");\n// Depends on jsbn.js and rng.js\n// Version 1.1: support utf-8 encoding in pkcs1pad2\n// convert a (hex) string to a bignum object\n\n\n// function linebrk(s,n) {\n// var ret = \"\";\n// var i = 0;\n// while(i + n < s.length) {\n// ret += s.substring(i,i+n) + \"\\n\";\n// i += n;\n// }\n// return ret + s.substring(i,s.length);\n// }\n// function byte2Hex(b) {\n// if(b < 0x10)\n// return \"0\" + b.toString(16);\n// else\n// return b.toString(16);\n// }\nfunction pkcs1pad1(s, n) {\n if (n < s.length + 22) {\n console.error(\"Message too long for RSA\");\n return null;\n }\n var len = n - s.length - 6;\n var filler = \"\";\n for (var f = 0; f < len; f += 2) {\n filler += \"ff\";\n }\n var m = \"0001\" + filler + \"00\" + s;\n return (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(m, 16);\n}\n// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint\nfunction pkcs1pad2(s, n) {\n if (n < s.length + 11) { // TODO: fix for utf-8\n console.error(\"Message too long for RSA\");\n return null;\n }\n var ba = [];\n var i = s.length - 1;\n while (i >= 0 && n > 0) {\n var c = s.charCodeAt(i--);\n if (c < 128) { // encode using utf-8\n ba[--n] = c;\n }\n else if ((c > 127) && (c < 2048)) {\n ba[--n] = (c & 63) | 128;\n ba[--n] = (c >> 6) | 192;\n }\n else {\n ba[--n] = (c & 63) | 128;\n ba[--n] = ((c >> 6) & 63) | 128;\n ba[--n] = (c >> 12) | 224;\n }\n }\n ba[--n] = 0;\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var x = [];\n while (n > 2) { // random non-zero pad\n x[0] = 0;\n while (x[0] == 0) {\n rng.nextBytes(x);\n }\n ba[--n] = x[0];\n }\n ba[--n] = 2;\n ba[--n] = 0;\n return new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(ba);\n}\n// \"empty\" RSA key constructor\nvar RSAKey = /** @class */ (function () {\n function RSAKey() {\n this.n = null;\n this.e = 0;\n this.d = null;\n this.p = null;\n this.q = null;\n this.dmp1 = null;\n this.dmq1 = null;\n this.coeff = null;\n }\n //#region PROTECTED\n // protected\n // RSAKey.prototype.doPublic = RSADoPublic;\n // Perform raw public operation on \"x\": return x^e (mod n)\n RSAKey.prototype.doPublic = function (x) {\n return x.modPowInt(this.e, this.n);\n };\n // RSAKey.prototype.doPrivate = RSADoPrivate;\n // Perform raw private operation on \"x\": return x^d (mod n)\n RSAKey.prototype.doPrivate = function (x) {\n if (this.p == null || this.q == null) {\n return x.modPow(this.d, this.n);\n }\n // TODO: re-calculate any missing CRT params\n var xp = x.mod(this.p).modPow(this.dmp1, this.p);\n var xq = x.mod(this.q).modPow(this.dmq1, this.q);\n while (xp.compareTo(xq) < 0) {\n xp = xp.add(this.p);\n }\n return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);\n };\n //#endregion PROTECTED\n //#region PUBLIC\n // RSAKey.prototype.setPublic = RSASetPublic;\n // Set the public key fields N and e from hex strings\n RSAKey.prototype.setPublic = function (N, E) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n }\n else {\n console.error(\"Invalid RSA public key\");\n }\n };\n // RSAKey.prototype.encrypt = RSAEncrypt;\n // Return the PKCS#1 RSA encryption of \"text\" as an even-length hex string\n RSAKey.prototype.encrypt = function (text) {\n var maxLength = (this.n.bitLength() + 7) >> 3;\n var m = pkcs1pad2(text, maxLength);\n if (m == null) {\n return null;\n }\n var c = this.doPublic(m);\n if (c == null) {\n return null;\n }\n var h = c.toString(16);\n var length = h.length;\n // fix zero before result\n for (var i = 0; i < maxLength * 2 - length; i++) {\n h = \"0\" + h;\n }\n return h;\n };\n // RSAKey.prototype.setPrivate = RSASetPrivate;\n // Set the private key fields N, e, and d from hex strings\n RSAKey.prototype.setPrivate = function (N, E, D) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n this.d = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(D, 16);\n }\n else {\n console.error(\"Invalid RSA private key\");\n }\n };\n // RSAKey.prototype.setPrivateEx = RSASetPrivateEx;\n // Set the private key fields N, e, d and CRT params from hex strings\n RSAKey.prototype.setPrivateEx = function (N, E, D, P, Q, DP, DQ, C) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n this.d = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(D, 16);\n this.p = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(P, 16);\n this.q = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(Q, 16);\n this.dmp1 = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(DP, 16);\n this.dmq1 = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(DQ, 16);\n this.coeff = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(C, 16);\n }\n else {\n console.error(\"Invalid RSA private key\");\n }\n };\n // RSAKey.prototype.generate = RSAGenerate;\n // Generate a new random private key B bits long, using public expt E\n RSAKey.prototype.generate = function (B, E) {\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var qs = B >> 1;\n this.e = parseInt(E, 16);\n var ee = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(E, 16);\n for (;;) {\n for (;;) {\n this.p = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(B - qs, 1, rng);\n if (this.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) {\n break;\n }\n }\n for (;;) {\n this.q = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(qs, 1, rng);\n if (this.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) {\n break;\n }\n }\n if (this.p.compareTo(this.q) <= 0) {\n var t = this.p;\n this.p = this.q;\n this.q = t;\n }\n var p1 = this.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var q1 = this.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0) {\n this.n = this.p.multiply(this.q);\n this.d = ee.modInverse(phi);\n this.dmp1 = this.d.mod(p1);\n this.dmq1 = this.d.mod(q1);\n this.coeff = this.q.modInverse(this.p);\n break;\n }\n }\n };\n // RSAKey.prototype.decrypt = RSADecrypt;\n // Return the PKCS#1 RSA decryption of \"ctext\".\n // \"ctext\" is an even-length hex string and the output is a plain string.\n RSAKey.prototype.decrypt = function (ctext) {\n var c = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(ctext, 16);\n var m = this.doPrivate(c);\n if (m == null) {\n return null;\n }\n return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3);\n };\n // Generate a new random private key B bits long, using public expt E\n RSAKey.prototype.generateAsync = function (B, E, callback) {\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var qs = B >> 1;\n this.e = parseInt(E, 16);\n var ee = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(E, 16);\n var rsa = this;\n // These functions have non-descript names because they were originally for(;;) loops.\n // I don't know about cryptography to give them better names than loop1-4.\n var loop1 = function () {\n var loop4 = function () {\n if (rsa.p.compareTo(rsa.q) <= 0) {\n var t = rsa.p;\n rsa.p = rsa.q;\n rsa.q = t;\n }\n var p1 = rsa.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var q1 = rsa.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0) {\n rsa.n = rsa.p.multiply(rsa.q);\n rsa.d = ee.modInverse(phi);\n rsa.dmp1 = rsa.d.mod(p1);\n rsa.dmq1 = rsa.d.mod(q1);\n rsa.coeff = rsa.q.modInverse(rsa.p);\n setTimeout(function () { callback(); }, 0); // escape\n }\n else {\n setTimeout(loop1, 0);\n }\n };\n var loop3 = function () {\n rsa.q = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.nbi)();\n rsa.q.fromNumberAsync(qs, 1, rng, function () {\n rsa.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcda(ee, function (r) {\n if (r.compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && rsa.q.isProbablePrime(10)) {\n setTimeout(loop4, 0);\n }\n else {\n setTimeout(loop3, 0);\n }\n });\n });\n };\n var loop2 = function () {\n rsa.p = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.nbi)();\n rsa.p.fromNumberAsync(B - qs, 1, rng, function () {\n rsa.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcda(ee, function (r) {\n if (r.compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && rsa.p.isProbablePrime(10)) {\n setTimeout(loop3, 0);\n }\n else {\n setTimeout(loop2, 0);\n }\n });\n });\n };\n setTimeout(loop2, 0);\n };\n setTimeout(loop1, 0);\n };\n RSAKey.prototype.sign = function (text, digestMethod, digestName) {\n var header = getDigestHeader(digestName);\n var digest = header + digestMethod(text).toString();\n var m = pkcs1pad1(digest, this.n.bitLength() / 4);\n if (m == null) {\n return null;\n }\n var c = this.doPrivate(m);\n if (c == null) {\n return null;\n }\n var h = c.toString(16);\n if ((h.length & 1) == 0) {\n return h;\n }\n else {\n return \"0\" + h;\n }\n };\n RSAKey.prototype.verify = function (text, signature, digestMethod) {\n var c = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(signature, 16);\n var m = this.doPublic(c);\n if (m == null) {\n return null;\n }\n var unpadded = m.toString(16).replace(/^1f+00/, \"\");\n var digest = removeDigestHeader(unpadded);\n return digest == digestMethod(text).toString();\n };\n return RSAKey;\n}());\n\n// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext\nfunction pkcs1unpad2(d, n) {\n var b = d.toByteArray();\n var i = 0;\n while (i < b.length && b[i] == 0) {\n ++i;\n }\n if (b.length - i != n - 1 || b[i] != 2) {\n return null;\n }\n ++i;\n while (b[i] != 0) {\n if (++i >= b.length) {\n return null;\n }\n }\n var ret = \"\";\n while (++i < b.length) {\n var c = b[i] & 255;\n if (c < 128) { // utf-8 decode\n ret += String.fromCharCode(c);\n }\n else if ((c > 191) && (c < 224)) {\n ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63));\n ++i;\n }\n else {\n ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63));\n i += 2;\n }\n }\n return ret;\n}\n// https://tools.ietf.org/html/rfc3447#page-43\nvar DIGEST_HEADERS = {\n md2: \"3020300c06082a864886f70d020205000410\",\n md5: \"3020300c06082a864886f70d020505000410\",\n sha1: \"3021300906052b0e03021a05000414\",\n sha224: \"302d300d06096086480165030402040500041c\",\n sha256: \"3031300d060960864801650304020105000420\",\n sha384: \"3041300d060960864801650304020205000430\",\n sha512: \"3051300d060960864801650304020305000440\",\n ripemd160: \"3021300906052b2403020105000414\"\n};\nfunction getDigestHeader(name) {\n return DIGEST_HEADERS[name] || \"\";\n}\nfunction removeDigestHeader(str) {\n for (var name_1 in DIGEST_HEADERS) {\n if (DIGEST_HEADERS.hasOwnProperty(name_1)) {\n var header = DIGEST_HEADERS[name_1];\n var len = header.length;\n if (str.substr(0, len) == header) {\n return str.substr(len);\n }\n }\n }\n return str;\n}\n// Return the PKCS#1 RSA encryption of \"text\" as a Base64-encoded string\n// function RSAEncryptB64(text) {\n// var h = this.encrypt(text);\n// if(h) return hex2b64(h); else return null;\n// }\n// public\n// RSAKey.prototype.encrypt_b64 = RSAEncryptB64;\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/rsa.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/jsbn/util.js":
+ /*!******************************!*\
+ !*** ./lib/lib/jsbn/util.js ***!
+ \******************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"cbit\": () => (/* binding */ cbit),\n/* harmony export */ \"int2char\": () => (/* binding */ int2char),\n/* harmony export */ \"lbit\": () => (/* binding */ lbit),\n/* harmony export */ \"op_and\": () => (/* binding */ op_and),\n/* harmony export */ \"op_andnot\": () => (/* binding */ op_andnot),\n/* harmony export */ \"op_or\": () => (/* binding */ op_or),\n/* harmony export */ \"op_xor\": () => (/* binding */ op_xor)\n/* harmony export */ });\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nfunction int2char(n) {\n return BI_RM.charAt(n);\n}\n//#region BIT_OPERATIONS\n// (public) this & a\nfunction op_and(x, y) {\n return x & y;\n}\n// (public) this | a\nfunction op_or(x, y) {\n return x | y;\n}\n// (public) this ^ a\nfunction op_xor(x, y) {\n return x ^ y;\n}\n// (public) this & ~a\nfunction op_andnot(x, y) {\n return x & ~y;\n}\n// return index of lowest 1-bit in x, x < 2^31\nfunction lbit(x) {\n if (x == 0) {\n return -1;\n }\n var r = 0;\n if ((x & 0xffff) == 0) {\n x >>= 16;\n r += 16;\n }\n if ((x & 0xff) == 0) {\n x >>= 8;\n r += 8;\n }\n if ((x & 0xf) == 0) {\n x >>= 4;\n r += 4;\n }\n if ((x & 3) == 0) {\n x >>= 2;\n r += 2;\n }\n if ((x & 1) == 0) {\n ++r;\n }\n return r;\n}\n// return number of 1 bits in x\nfunction cbit(x) {\n var r = 0;\n while (x != 0) {\n x &= x - 1;\n ++r;\n }\n return r;\n}\n//#endregion BIT_OPERATIONS\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/util.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/jsrsasign/asn1-1.0.js":
+ /*!***************************************!*\
+ !*** ./lib/lib/jsrsasign/asn1-1.0.js ***!
+ \***************************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"KJUR\": () => (/* binding */ KJUR)\n/* harmony export */ });\n/* harmony import */ var _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../jsbn/jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _yahoo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./yahoo */ \"./lib/lib/jsrsasign/yahoo.js\");\n/* asn1-1.0.13.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license\n */\n/*\n * asn1.js - ASN.1 DER encoder classes\n *\n * Copyright (c) 2013-2017 Kenji Urushima (kenji.urushima@gmail.com)\n *\n * This software is licensed under the terms of the MIT License.\n * https://kjur.github.io/jsrsasign/license\n *\n * The above copyright and license notice shall be\n * included in all copies or substantial portions of the Software.\n */\n\n\n/**\n * @fileOverview\n * @name asn1-1.0.js\n * @author Kenji Urushima kenji.urushima@gmail.com\n * @version asn1 1.0.13 (2017-Jun-02)\n * @since jsrsasign 2.1\n * @license MIT License\n */\n/**\n * kjur's class library name space\n * \n * This name space provides following name spaces:\n *
\n * - {@link KJUR.asn1} - ASN.1 primitive hexadecimal encoder
\n * - {@link KJUR.asn1.x509} - ASN.1 structure for X.509 certificate and CRL
\n * - {@link KJUR.crypto} - Java Cryptographic Extension(JCE) style MessageDigest/Signature\n * class and utilities
\n *
\n * \n * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2.\n * @name KJUR\n * @namespace kjur's class library name space\n */\nvar KJUR = {};\n/**\n * kjur's ASN.1 class library name space\n * \n * This is ITU-T X.690 ASN.1 DER encoder class library and\n * class structure and methods is very similar to\n * org.bouncycastle.asn1 package of\n * well known BouncyCaslte Cryptography Library.\n *
PROVIDING ASN.1 PRIMITIVES
\n * Here are ASN.1 DER primitive classes.\n * \n * - 0x01 {@link KJUR.asn1.DERBoolean}
\n * - 0x02 {@link KJUR.asn1.DERInteger}
\n * - 0x03 {@link KJUR.asn1.DERBitString}
\n * - 0x04 {@link KJUR.asn1.DEROctetString}
\n * - 0x05 {@link KJUR.asn1.DERNull}
\n * - 0x06 {@link KJUR.asn1.DERObjectIdentifier}
\n * - 0x0a {@link KJUR.asn1.DEREnumerated}
\n * - 0x0c {@link KJUR.asn1.DERUTF8String}
\n * - 0x12 {@link KJUR.asn1.DERNumericString}
\n * - 0x13 {@link KJUR.asn1.DERPrintableString}
\n * - 0x14 {@link KJUR.asn1.DERTeletexString}
\n * - 0x16 {@link KJUR.asn1.DERIA5String}
\n * - 0x17 {@link KJUR.asn1.DERUTCTime}
\n * - 0x18 {@link KJUR.asn1.DERGeneralizedTime}
\n * - 0x30 {@link KJUR.asn1.DERSequence}
\n * - 0x31 {@link KJUR.asn1.DERSet}
\n *
\n * OTHER ASN.1 CLASSES
\n * \n * - {@link KJUR.asn1.ASN1Object}
\n * - {@link KJUR.asn1.DERAbstractString}
\n * - {@link KJUR.asn1.DERAbstractTime}
\n * - {@link KJUR.asn1.DERAbstractStructured}
\n * - {@link KJUR.asn1.DERTaggedObject}
\n *
\n * SUB NAME SPACES
\n * \n * - {@link KJUR.asn1.cades} - CAdES long term signature format
\n * - {@link KJUR.asn1.cms} - Cryptographic Message Syntax
\n * - {@link KJUR.asn1.csr} - Certificate Signing Request (CSR/PKCS#10)
\n * - {@link KJUR.asn1.tsp} - RFC 3161 Timestamping Protocol Format
\n * - {@link KJUR.asn1.x509} - RFC 5280 X.509 certificate and CRL
\n *
\n * \n * NOTE: Please ignore method summary and document of this namespace.\n * This caused by a bug of jsdoc2.\n * @name KJUR.asn1\n * @namespace\n */\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1)\n KJUR.asn1 = {};\n/**\n * ASN1 utilities class\n * @name KJUR.asn1.ASN1Util\n * @class ASN1 utilities class\n * @since asn1 1.0.2\n */\nKJUR.asn1.ASN1Util = new function () {\n this.integerToByteHex = function (i) {\n var h = i.toString(16);\n if ((h.length % 2) == 1)\n h = '0' + h;\n return h;\n };\n this.bigIntToMinTwosComplementsHex = function (bigIntegerValue) {\n var h = bigIntegerValue.toString(16);\n if (h.substr(0, 1) != '-') {\n if (h.length % 2 == 1) {\n h = '0' + h;\n }\n else {\n if (!h.match(/^[0-7]/)) {\n h = '00' + h;\n }\n }\n }\n else {\n var hPos = h.substr(1);\n var xorLen = hPos.length;\n if (xorLen % 2 == 1) {\n xorLen += 1;\n }\n else {\n if (!h.match(/^[0-7]/)) {\n xorLen += 2;\n }\n }\n var hMask = '';\n for (var i = 0; i < xorLen; i++) {\n hMask += 'f';\n }\n var biMask = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(hMask, 16);\n var biNeg = biMask.xor(bigIntegerValue).add(_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n h = biNeg.toString(16).replace(/^-/, '');\n }\n return h;\n };\n /**\n * get PEM string from hexadecimal data and header string\n * @name getPEMStringFromHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} dataHex hexadecimal string of PEM body\n * @param {String} pemHeader PEM header string (ex. 'RSA PRIVATE KEY')\n * @return {String} PEM formatted string of input data\n * @description\n * This method converts a hexadecimal string to a PEM string with\n * a specified header. Its line break will be CRLF(\"\\r\\n\").\n * @example\n * var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex('616161', 'RSA PRIVATE KEY');\n * // value of pem will be:\n * -----BEGIN PRIVATE KEY-----\n * YWFh\n * -----END PRIVATE KEY-----\n */\n this.getPEMStringFromHex = function (dataHex, pemHeader) {\n return hextopem(dataHex, pemHeader);\n };\n /**\n * generate ASN1Object specifed by JSON parameters\n * @name newObject\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {Array} param JSON parameter to generate ASN1Object\n * @return {KJUR.asn1.ASN1Object} generated object\n * @since asn1 1.0.3\n * @description\n * generate any ASN1Object specified by JSON param\n * including ASN.1 primitive or structured.\n * Generally 'param' can be described as follows:\n * \n * {TYPE-OF-ASNOBJ: ASN1OBJ-PARAMETER}\n *
\n * 'TYPE-OF-ASN1OBJ' can be one of following symbols:\n * \n * - 'bool' - DERBoolean
\n * - 'int' - DERInteger
\n * - 'bitstr' - DERBitString
\n * - 'octstr' - DEROctetString
\n * - 'null' - DERNull
\n * - 'oid' - DERObjectIdentifier
\n * - 'enum' - DEREnumerated
\n * - 'utf8str' - DERUTF8String
\n * - 'numstr' - DERNumericString
\n * - 'prnstr' - DERPrintableString
\n * - 'telstr' - DERTeletexString
\n * - 'ia5str' - DERIA5String
\n * - 'utctime' - DERUTCTime
\n * - 'gentime' - DERGeneralizedTime
\n * - 'seq' - DERSequence
\n * - 'set' - DERSet
\n * - 'tag' - DERTaggedObject
\n *
\n * @example\n * newObject({'prnstr': 'aaa'});\n * newObject({'seq': [{'int': 3}, {'prnstr': 'aaa'}]})\n * // ASN.1 Tagged Object\n * newObject({'tag': {'tag': 'a1',\n * 'explicit': true,\n * 'obj': {'seq': [{'int': 3}, {'prnstr': 'aaa'}]}}});\n * // more simple representation of ASN.1 Tagged Object\n * newObject({'tag': ['a1',\n * true,\n * {'seq': [\n * {'int': 3},\n * {'prnstr': 'aaa'}]}\n * ]});\n */\n this.newObject = function (param) {\n var _KJUR = KJUR, _KJUR_asn1 = _KJUR.asn1, _DERBoolean = _KJUR_asn1.DERBoolean, _DERInteger = _KJUR_asn1.DERInteger, _DERBitString = _KJUR_asn1.DERBitString, _DEROctetString = _KJUR_asn1.DEROctetString, _DERNull = _KJUR_asn1.DERNull, _DERObjectIdentifier = _KJUR_asn1.DERObjectIdentifier, _DEREnumerated = _KJUR_asn1.DEREnumerated, _DERUTF8String = _KJUR_asn1.DERUTF8String, _DERNumericString = _KJUR_asn1.DERNumericString, _DERPrintableString = _KJUR_asn1.DERPrintableString, _DERTeletexString = _KJUR_asn1.DERTeletexString, _DERIA5String = _KJUR_asn1.DERIA5String, _DERUTCTime = _KJUR_asn1.DERUTCTime, _DERGeneralizedTime = _KJUR_asn1.DERGeneralizedTime, _DERSequence = _KJUR_asn1.DERSequence, _DERSet = _KJUR_asn1.DERSet, _DERTaggedObject = _KJUR_asn1.DERTaggedObject, _newObject = _KJUR_asn1.ASN1Util.newObject;\n var keys = Object.keys(param);\n if (keys.length != 1)\n throw \"key of param shall be only one.\";\n var key = keys[0];\n if (\":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:\".indexOf(\":\" + key + \":\") == -1)\n throw \"undefined key: \" + key;\n if (key == \"bool\")\n return new _DERBoolean(param[key]);\n if (key == \"int\")\n return new _DERInteger(param[key]);\n if (key == \"bitstr\")\n return new _DERBitString(param[key]);\n if (key == \"octstr\")\n return new _DEROctetString(param[key]);\n if (key == \"null\")\n return new _DERNull(param[key]);\n if (key == \"oid\")\n return new _DERObjectIdentifier(param[key]);\n if (key == \"enum\")\n return new _DEREnumerated(param[key]);\n if (key == \"utf8str\")\n return new _DERUTF8String(param[key]);\n if (key == \"numstr\")\n return new _DERNumericString(param[key]);\n if (key == \"prnstr\")\n return new _DERPrintableString(param[key]);\n if (key == \"telstr\")\n return new _DERTeletexString(param[key]);\n if (key == \"ia5str\")\n return new _DERIA5String(param[key]);\n if (key == \"utctime\")\n return new _DERUTCTime(param[key]);\n if (key == \"gentime\")\n return new _DERGeneralizedTime(param[key]);\n if (key == \"seq\") {\n var paramList = param[key];\n var a = [];\n for (var i = 0; i < paramList.length; i++) {\n var asn1Obj = _newObject(paramList[i]);\n a.push(asn1Obj);\n }\n return new _DERSequence({ 'array': a });\n }\n if (key == \"set\") {\n var paramList = param[key];\n var a = [];\n for (var i = 0; i < paramList.length; i++) {\n var asn1Obj = _newObject(paramList[i]);\n a.push(asn1Obj);\n }\n return new _DERSet({ 'array': a });\n }\n if (key == \"tag\") {\n var tagParam = param[key];\n if (Object.prototype.toString.call(tagParam) === '[object Array]' &&\n tagParam.length == 3) {\n var obj = _newObject(tagParam[2]);\n return new _DERTaggedObject({ tag: tagParam[0],\n explicit: tagParam[1],\n obj: obj });\n }\n else {\n var newParam = {};\n if (tagParam.explicit !== undefined)\n newParam.explicit = tagParam.explicit;\n if (tagParam.tag !== undefined)\n newParam.tag = tagParam.tag;\n if (tagParam.obj === undefined)\n throw \"obj shall be specified for 'tag'.\";\n newParam.obj = _newObject(tagParam.obj);\n return new _DERTaggedObject(newParam);\n }\n }\n };\n /**\n * get encoded hexadecimal string of ASN1Object specifed by JSON parameters\n * @name jsonToASN1HEX\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {Array} param JSON parameter to generate ASN1Object\n * @return hexadecimal string of ASN1Object\n * @since asn1 1.0.4\n * @description\n * As for ASN.1 object representation of JSON object,\n * please see {@link newObject}.\n * @example\n * jsonToASN1HEX({'prnstr': 'aaa'});\n */\n this.jsonToASN1HEX = function (param) {\n var asn1Obj = this.newObject(param);\n return asn1Obj.getEncodedHex();\n };\n};\n/**\n * get dot noted oid number string from hexadecimal value of OID\n * @name oidHexToInt\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} hex hexadecimal value of object identifier\n * @return {String} dot noted string of object identifier\n * @since jsrsasign 4.8.3 asn1 1.0.7\n * @description\n * This static method converts from hexadecimal string representation of\n * ASN.1 value of object identifier to oid number string.\n * @example\n * KJUR.asn1.ASN1Util.oidHexToInt('550406') → \"2.5.4.6\"\n */\nKJUR.asn1.ASN1Util.oidHexToInt = function (hex) {\n var s = \"\";\n var i01 = parseInt(hex.substr(0, 2), 16);\n var i0 = Math.floor(i01 / 40);\n var i1 = i01 % 40;\n var s = i0 + \".\" + i1;\n var binbuf = \"\";\n for (var i = 2; i < hex.length; i += 2) {\n var value = parseInt(hex.substr(i, 2), 16);\n var bin = (\"00000000\" + value.toString(2)).slice(-8);\n binbuf = binbuf + bin.substr(1, 7);\n if (bin.substr(0, 1) == \"0\") {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(binbuf, 2);\n s = s + \".\" + bi.toString(10);\n binbuf = \"\";\n }\n }\n ;\n return s;\n};\n/**\n * get hexadecimal value of object identifier from dot noted oid value\n * @name oidIntToHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} oidString dot noted string of object identifier\n * @return {String} hexadecimal value of object identifier\n * @since jsrsasign 4.8.3 asn1 1.0.7\n * @description\n * This static method converts from object identifier value string.\n * to hexadecimal string representation of it.\n * @example\n * KJUR.asn1.ASN1Util.oidIntToHex(\"2.5.4.6\") → \"550406\"\n */\nKJUR.asn1.ASN1Util.oidIntToHex = function (oidString) {\n var itox = function (i) {\n var h = i.toString(16);\n if (h.length == 1)\n h = '0' + h;\n return h;\n };\n var roidtox = function (roid) {\n var h = '';\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(roid, 10);\n var b = bi.toString(2);\n var padLen = 7 - b.length % 7;\n if (padLen == 7)\n padLen = 0;\n var bPad = '';\n for (var i = 0; i < padLen; i++)\n bPad += '0';\n b = bPad + b;\n for (var i = 0; i < b.length - 1; i += 7) {\n var b8 = b.substr(i, 7);\n if (i != b.length - 7)\n b8 = '1' + b8;\n h += itox(parseInt(b8, 2));\n }\n return h;\n };\n if (!oidString.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + oidString;\n }\n var h = '';\n var a = oidString.split('.');\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n h += itox(i0);\n a.splice(0, 2);\n for (var i = 0; i < a.length; i++) {\n h += roidtox(a[i]);\n }\n return h;\n};\n// ********************************************************************\n// Abstract ASN.1 Classes\n// ********************************************************************\n// ********************************************************************\n/**\n * base class for ASN.1 DER encoder object\n * @name KJUR.asn1.ASN1Object\n * @class base class for ASN.1 DER encoder object\n * @property {Boolean} isModified flag whether internal data was changed\n * @property {String} hTLV hexadecimal string of ASN.1 TLV\n * @property {String} hT hexadecimal string of ASN.1 TLV tag(T)\n * @property {String} hL hexadecimal string of ASN.1 TLV length(L)\n * @property {String} hV hexadecimal string of ASN.1 TLV value(V)\n * @description\n */\nKJUR.asn1.ASN1Object = function () {\n var isModified = true;\n var hTLV = null;\n var hT = '00';\n var hL = '00';\n var hV = '';\n /**\n * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V)\n * @name getLengthHexFromValue\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV length(L)\n */\n this.getLengthHexFromValue = function () {\n if (typeof this.hV == \"undefined\" || this.hV == null) {\n throw \"this.hV is null or undefined.\";\n }\n if (this.hV.length % 2 == 1) {\n throw \"value hex must be even length: n=\" + hV.length + \",v=\" + this.hV;\n }\n var n = this.hV.length / 2;\n var hN = n.toString(16);\n if (hN.length % 2 == 1) {\n hN = \"0\" + hN;\n }\n if (n < 128) {\n return hN;\n }\n else {\n var hNlen = hN.length / 2;\n if (hNlen > 15) {\n throw \"ASN.1 length too long to represent by 8x: n = \" + n.toString(16);\n }\n var head = 128 + hNlen;\n return head.toString(16) + hN;\n }\n };\n /**\n * get hexadecimal string of ASN.1 TLV bytes\n * @name getEncodedHex\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV\n */\n this.getEncodedHex = function () {\n if (this.hTLV == null || this.isModified) {\n this.hV = this.getFreshValueHex();\n this.hL = this.getLengthHexFromValue();\n this.hTLV = this.hT + this.hL + this.hV;\n this.isModified = false;\n //alert(\"first time: \" + this.hTLV);\n }\n return this.hTLV;\n };\n /**\n * get hexadecimal string of ASN.1 TLV value(V) bytes\n * @name getValueHex\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV value(V) bytes\n */\n this.getValueHex = function () {\n this.getEncodedHex();\n return this.hV;\n };\n this.getFreshValueHex = function () {\n return '';\n };\n};\n// == BEGIN DERAbstractString ================================================\n/**\n * base class for ASN.1 DER string classes\n * @name KJUR.asn1.DERAbstractString\n * @class base class for ASN.1 DER string classes\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @property {String} s internal string of value\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - str - specify initial ASN.1 value(V) by a string
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERAbstractString = function (params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var s = null;\n var hV = null;\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @return {String} string value of this string object\n */\n this.getString = function () {\n return this.s;\n };\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @param {String} newS value by a string to set\n */\n this.setString = function (newS) {\n this.hTLV = null;\n this.isModified = true;\n this.s = newS;\n this.hV = stohex(this.s);\n };\n /**\n * set value by a hexadecimal string\n * @name setStringHex\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @param {String} newHexString value by a hexadecimal string to set\n */\n this.setStringHex = function (newHexString) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params == \"string\") {\n this.setString(params);\n }\n else if (typeof params['str'] != \"undefined\") {\n this.setString(params['str']);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setStringHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);\n// == END DERAbstractString ================================================\n// == BEGIN DERAbstractTime ==================================================\n/**\n * base class for ASN.1 DER Generalized/UTCTime class\n * @name KJUR.asn1.DERAbstractTime\n * @class base class for ASN.1 DER Generalized/UTCTime class\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractTime = function (params) {\n KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);\n var s = null;\n var date = null;\n // --- PRIVATE METHODS --------------------\n this.localDateToUTC = function (d) {\n utc = d.getTime() + (d.getTimezoneOffset() * 60000);\n var utcDate = new Date(utc);\n return utcDate;\n };\n /*\n * format date string by Data object\n * @name formatDate\n * @memberOf KJUR.asn1.AbstractTime;\n * @param {Date} dateObject\n * @param {string} type 'utc' or 'gen'\n * @param {boolean} withMillis flag for with millisections or not\n * @description\n * 'withMillis' flag is supported from asn1 1.0.6.\n */\n this.formatDate = function (dateObject, type, withMillis) {\n var pad = this.zeroPadding;\n var d = this.localDateToUTC(dateObject);\n var year = String(d.getFullYear());\n if (type == 'utc')\n year = year.substr(2, 2);\n var month = pad(String(d.getMonth() + 1), 2);\n var day = pad(String(d.getDate()), 2);\n var hour = pad(String(d.getHours()), 2);\n var min = pad(String(d.getMinutes()), 2);\n var sec = pad(String(d.getSeconds()), 2);\n var s = year + month + day + hour + min + sec;\n if (withMillis === true) {\n var millis = d.getMilliseconds();\n if (millis != 0) {\n var sMillis = pad(String(millis), 3);\n sMillis = sMillis.replace(/[0]+$/, \"\");\n s = s + \".\" + sMillis;\n }\n }\n return s + \"Z\";\n };\n this.zeroPadding = function (s, len) {\n if (s.length >= len)\n return s;\n return new Array(len - s.length + 1).join('0') + s;\n };\n // --- PUBLIC METHODS --------------------\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @return {String} string value of this time object\n */\n this.getString = function () {\n return this.s;\n };\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @param {String} newS value by a string to set such like \"130430235959Z\"\n */\n this.setString = function (newS) {\n this.hTLV = null;\n this.isModified = true;\n this.s = newS;\n this.hV = stohex(newS);\n };\n /**\n * set value by a Date object\n * @name setByDateValue\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @param {Integer} year year of date (ex. 2013)\n * @param {Integer} month month of date between 1 and 12 (ex. 12)\n * @param {Integer} day day of month\n * @param {Integer} hour hours of date\n * @param {Integer} min minutes of date\n * @param {Integer} sec seconds of date\n */\n this.setByDateValue = function (year, month, day, hour, min, sec) {\n var dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0));\n this.setByDate(dateObject);\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);\n// == END DERAbstractTime ==================================================\n// == BEGIN DERAbstractStructured ============================================\n/**\n * base class for ASN.1 DER structured class\n * @name KJUR.asn1.DERAbstractStructured\n * @class base class for ASN.1 DER structured class\n * @property {Array} asn1Array internal array of ASN1Object\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractStructured = function (params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var asn1Array = null;\n /**\n * set value by array of ASN1Object\n * @name setByASN1ObjectArray\n * @memberOf KJUR.asn1.DERAbstractStructured#\n * @function\n * @param {array} asn1ObjectArray array of ASN1Object to set\n */\n this.setByASN1ObjectArray = function (asn1ObjectArray) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array = asn1ObjectArray;\n };\n /**\n * append an ASN1Object to internal array\n * @name appendASN1Object\n * @memberOf KJUR.asn1.DERAbstractStructured#\n * @function\n * @param {ASN1Object} asn1Object to add\n */\n this.appendASN1Object = function (asn1Object) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array.push(asn1Object);\n };\n this.asn1Array = new Array();\n if (typeof params != \"undefined\") {\n if (typeof params['array'] != \"undefined\") {\n this.asn1Array = params['array'];\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);\n// ********************************************************************\n// ASN.1 Object Classes\n// ********************************************************************\n// ********************************************************************\n/**\n * class for ASN.1 DER Boolean\n * @name KJUR.asn1.DERBoolean\n * @class class for ASN.1 DER Boolean\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERBoolean = function () {\n KJUR.asn1.DERBoolean.superclass.constructor.call(this);\n this.hT = \"01\";\n this.hTLV = \"0101ff\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER Integer\n * @name KJUR.asn1.DERInteger\n * @class class for ASN.1 DER Integer\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - int - specify initial ASN.1 value(V) by integer value
\n * - bigint - specify initial ASN.1 value(V) by BigInteger object
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERInteger = function (params) {\n KJUR.asn1.DERInteger.superclass.constructor.call(this);\n this.hT = \"02\";\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DERInteger#\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function (bigIntegerValue) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DERInteger\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function (intValue) {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(String(intValue), 10);\n this.setByBigInteger(bi);\n };\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DERInteger#\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n *
\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n * @example\n * new KJUR.asn1.DERInteger(123);\n * new KJUR.asn1.DERInteger({'int': 123});\n * new KJUR.asn1.DERInteger({'hex': '1fad'});\n */\n this.setValueHex = function (newHexString) {\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['bigint'] != \"undefined\") {\n this.setByBigInteger(params['bigint']);\n }\n else if (typeof params['int'] != \"undefined\") {\n this.setByInteger(params['int']);\n }\n else if (typeof params == \"number\") {\n this.setByInteger(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setValueHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER encoded BitString primitive\n * @name KJUR.asn1.DERBitString\n * @class class for ASN.1 DER encoded BitString primitive\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - bin - specify binary string (ex. '10111')
\n * - array - specify array of boolean (ex. [true,false,true,true])
\n * - hex - specify hexadecimal string of ASN.1 value(V) including unused bits
\n * - obj - specify {@link KJUR.asn1.ASN1Util.newObject}\n * argument for \"BitString encapsulates\" structure.
\n *
\n * NOTE1: 'params' can be omitted.
\n * NOTE2: 'obj' parameter have been supported since\n * asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).
\n * @example\n * // default constructor\n * o = new KJUR.asn1.DERBitString();\n * // initialize with binary string\n * o = new KJUR.asn1.DERBitString({bin: \"1011\"});\n * // initialize with boolean array\n * o = new KJUR.asn1.DERBitString({array: [true,false,true,true]});\n * // initialize with hexadecimal string (04 is unused bits)\n * o = new KJUR.asn1.DEROctetString({hex: \"04bac0\"});\n * // initialize with ASN1Util.newObject argument for encapsulated\n * o = new KJUR.asn1.DERBitString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});\n * // above generates a ASN.1 data like this:\n * // BIT STRING, encapsulates {\n * // SEQUENCE {\n * // INTEGER 3\n * // PrintableString 'aaa'\n * // }\n * // }\n */\nKJUR.asn1.DERBitString = function (params) {\n if (params !== undefined && typeof params.obj !== \"undefined\") {\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\n params.hex = \"00\" + o.getEncodedHex();\n }\n KJUR.asn1.DERBitString.superclass.constructor.call(this);\n this.hT = \"03\";\n /**\n * set ASN.1 value(V) by a hexadecimal string including unused bits\n * @name setHexValueIncludingUnusedBits\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {String} newHexStringIncludingUnusedBits\n */\n this.setHexValueIncludingUnusedBits = function (newHexStringIncludingUnusedBits) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = newHexStringIncludingUnusedBits;\n };\n /**\n * set ASN.1 value(V) by unused bit and hexadecimal string of value\n * @name setUnusedBitsAndHexValue\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {Integer} unusedBits\n * @param {String} hValue\n */\n this.setUnusedBitsAndHexValue = function (unusedBits, hValue) {\n if (unusedBits < 0 || 7 < unusedBits) {\n throw \"unused bits shall be from 0 to 7: u = \" + unusedBits;\n }\n var hUnusedBits = \"0\" + unusedBits;\n this.hTLV = null;\n this.isModified = true;\n this.hV = hUnusedBits + hValue;\n };\n /**\n * set ASN.1 DER BitString by binary string
\n * @name setByBinaryString\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {String} binaryString binary value string (i.e. '10111')\n * @description\n * Its unused bits will be calculated automatically by length of\n * 'binaryValue'.
\n * NOTE: Trailing zeros '0' will be ignored.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.setByBooleanArray(\"01011\");\n */\n this.setByBinaryString = function (binaryString) {\n binaryString = binaryString.replace(/0+$/, '');\n var unusedBits = 8 - binaryString.length % 8;\n if (unusedBits == 8)\n unusedBits = 0;\n for (var i = 0; i <= unusedBits; i++) {\n binaryString += '0';\n }\n var h = '';\n for (var i = 0; i < binaryString.length - 1; i += 8) {\n var b = binaryString.substr(i, 8);\n var x = parseInt(b, 2).toString(16);\n if (x.length == 1)\n x = '0' + x;\n h += x;\n }\n this.hTLV = null;\n this.isModified = true;\n this.hV = '0' + unusedBits + h;\n };\n /**\n * set ASN.1 TLV value(V) by an array of boolean
\n * @name setByBooleanArray\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {array} booleanArray array of boolean (ex. [true, false, true])\n * @description\n * NOTE: Trailing falses will be ignored in the ASN.1 DER Object.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.setByBooleanArray([false, true, false, true, true]);\n */\n this.setByBooleanArray = function (booleanArray) {\n var s = '';\n for (var i = 0; i < booleanArray.length; i++) {\n if (booleanArray[i] == true) {\n s += '1';\n }\n else {\n s += '0';\n }\n }\n this.setByBinaryString(s);\n };\n /**\n * generate an array of falses with specified length
\n * @name newFalseArray\n * @memberOf KJUR.asn1.DERBitString\n * @function\n * @param {Integer} nLength length of array to generate\n * @return {array} array of boolean falses\n * @description\n * This static method may be useful to initialize boolean array.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.newFalseArray(3) → [false, false, false]\n */\n this.newFalseArray = function (nLength) {\n var a = new Array(nLength);\n for (var i = 0; i < nLength; i++) {\n a[i] = false;\n }\n return a;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params == \"string\" && params.toLowerCase().match(/^[0-9a-f]+$/)) {\n this.setHexValueIncludingUnusedBits(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setHexValueIncludingUnusedBits(params['hex']);\n }\n else if (typeof params['bin'] != \"undefined\") {\n this.setByBinaryString(params['bin']);\n }\n else if (typeof params['array'] != \"undefined\") {\n this.setByBooleanArray(params['array']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER OctetString
\n * @name KJUR.asn1.DEROctetString\n * @class class for ASN.1 DER OctetString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * This class provides ASN.1 OctetString simple type.
\n * Supported \"params\" attributes are:\n * \n * - str - to set a string as a value
\n * - hex - to set a hexadecimal string as a value
\n * - obj - to set a encapsulated ASN.1 value by JSON object\n * which is defined in {@link KJUR.asn1.ASN1Util.newObject}
\n *
\n * NOTE: A parameter 'obj' have been supported\n * for \"OCTET STRING, encapsulates\" structure.\n * since asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).\n * @see KJUR.asn1.DERAbstractString - superclass\n * @example\n * // default constructor\n * o = new KJUR.asn1.DEROctetString();\n * // initialize with string\n * o = new KJUR.asn1.DEROctetString({str: \"aaa\"});\n * // initialize with hexadecimal string\n * o = new KJUR.asn1.DEROctetString({hex: \"616161\"});\n * // initialize with ASN1Util.newObject argument\n * o = new KJUR.asn1.DEROctetString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});\n * // above generates a ASN.1 data like this:\n * // OCTET STRING, encapsulates {\n * // SEQUENCE {\n * // INTEGER 3\n * // PrintableString 'aaa'\n * // }\n * // }\n */\nKJUR.asn1.DEROctetString = function (params) {\n if (params !== undefined && typeof params.obj !== \"undefined\") {\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\n params.hex = o.getEncodedHex();\n }\n KJUR.asn1.DEROctetString.superclass.constructor.call(this, params);\n this.hT = \"04\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER Null\n * @name KJUR.asn1.DERNull\n * @class class for ASN.1 DER Null\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERNull = function () {\n KJUR.asn1.DERNull.superclass.constructor.call(this);\n this.hT = \"05\";\n this.hTLV = \"0500\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER ObjectIdentifier\n * @name KJUR.asn1.DERObjectIdentifier\n * @class class for ASN.1 DER ObjectIdentifier\n * @param {Array} params associative array of parameters (ex. {'oid': '2.5.4.5'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - oid - specify initial ASN.1 value(V) by a oid string (ex. 2.5.4.13)
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERObjectIdentifier = function (params) {\n var itox = function (i) {\n var h = i.toString(16);\n if (h.length == 1)\n h = '0' + h;\n return h;\n };\n var roidtox = function (roid) {\n var h = '';\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(roid, 10);\n var b = bi.toString(2);\n var padLen = 7 - b.length % 7;\n if (padLen == 7)\n padLen = 0;\n var bPad = '';\n for (var i = 0; i < padLen; i++)\n bPad += '0';\n b = bPad + b;\n for (var i = 0; i < b.length - 1; i += 7) {\n var b8 = b.substr(i, 7);\n if (i != b.length - 7)\n b8 = '1' + b8;\n h += itox(parseInt(b8, 2));\n }\n return h;\n };\n KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);\n this.hT = \"06\";\n /**\n * set value by a hexadecimal string\n * @name setValueHex\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} newHexString hexadecimal value of OID bytes\n */\n this.setValueHex = function (newHexString) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = newHexString;\n };\n /**\n * set value by a OID string
\n * @name setValueOidString\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} oidString OID string (ex. 2.5.4.13)\n * @example\n * o = new KJUR.asn1.DERObjectIdentifier();\n * o.setValueOidString(\"2.5.4.13\");\n */\n this.setValueOidString = function (oidString) {\n if (!oidString.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + oidString;\n }\n var h = '';\n var a = oidString.split('.');\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n h += itox(i0);\n a.splice(0, 2);\n for (var i = 0; i < a.length; i++) {\n h += roidtox(a[i]);\n }\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = h;\n };\n /**\n * set value by a OID name\n * @name setValueName\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} oidName OID name (ex. 'serverAuth')\n * @since 1.0.1\n * @description\n * OID name shall be defined in 'KJUR.asn1.x509.OID.name2oidList'.\n * Otherwise raise error.\n * @example\n * o = new KJUR.asn1.DERObjectIdentifier();\n * o.setValueName(\"serverAuth\");\n */\n this.setValueName = function (oidName) {\n var oid = KJUR.asn1.x509.OID.name2oid(oidName);\n if (oid !== '') {\n this.setValueOidString(oid);\n }\n else {\n throw \"DERObjectIdentifier oidName undefined: \" + oidName;\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (params !== undefined) {\n if (typeof params === \"string\") {\n if (params.match(/^[0-2].[0-9.]+$/)) {\n this.setValueOidString(params);\n }\n else {\n this.setValueName(params);\n }\n }\n else if (params.oid !== undefined) {\n this.setValueOidString(params.oid);\n }\n else if (params.hex !== undefined) {\n this.setValueHex(params.hex);\n }\n else if (params.name !== undefined) {\n this.setValueName(params.name);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER Enumerated\n * @name KJUR.asn1.DEREnumerated\n * @class class for ASN.1 DER Enumerated\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - int - specify initial ASN.1 value(V) by integer value
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n *
\n * NOTE: 'params' can be omitted.\n * @example\n * new KJUR.asn1.DEREnumerated(123);\n * new KJUR.asn1.DEREnumerated({int: 123});\n * new KJUR.asn1.DEREnumerated({hex: '1fad'});\n */\nKJUR.asn1.DEREnumerated = function (params) {\n KJUR.asn1.DEREnumerated.superclass.constructor.call(this);\n this.hT = \"0a\";\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function (bigIntegerValue) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function (intValue) {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(String(intValue), 10);\n this.setByBigInteger(bi);\n };\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n *
\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n */\n this.setValueHex = function (newHexString) {\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['int'] != \"undefined\") {\n this.setByInteger(params['int']);\n }\n else if (typeof params == \"number\") {\n this.setByInteger(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setValueHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER UTF8String\n * @name KJUR.asn1.DERUTF8String\n * @class class for ASN.1 DER UTF8String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERUTF8String = function (params) {\n KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params);\n this.hT = \"0c\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER NumericString\n * @name KJUR.asn1.DERNumericString\n * @class class for ASN.1 DER NumericString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERNumericString = function (params) {\n KJUR.asn1.DERNumericString.superclass.constructor.call(this, params);\n this.hT = \"12\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER PrintableString\n * @name KJUR.asn1.DERPrintableString\n * @class class for ASN.1 DER PrintableString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERPrintableString = function (params) {\n KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params);\n this.hT = \"13\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER TeletexString\n * @name KJUR.asn1.DERTeletexString\n * @class class for ASN.1 DER TeletexString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERTeletexString = function (params) {\n KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params);\n this.hT = \"14\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER IA5String\n * @name KJUR.asn1.DERIA5String\n * @class class for ASN.1 DER IA5String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERIA5String = function (params) {\n KJUR.asn1.DERIA5String.superclass.constructor.call(this, params);\n this.hT = \"16\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER UTCTime\n * @name KJUR.asn1.DERUTCTime\n * @class class for ASN.1 DER UTCTime\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - str - specify initial ASN.1 value(V) by a string (ex.'130430235959Z')
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n * - date - specify Date object.
\n *
\n * NOTE: 'params' can be omitted.\n * EXAMPLES
\n * @example\n * d1 = new KJUR.asn1.DERUTCTime();\n * d1.setString('130430125959Z');\n *\n * d2 = new KJUR.asn1.DERUTCTime({'str': '130430125959Z'});\n * d3 = new KJUR.asn1.DERUTCTime({'date': new Date(Date.UTC(2015, 0, 31, 0, 0, 0, 0))});\n * d4 = new KJUR.asn1.DERUTCTime('130430125959Z');\n */\nKJUR.asn1.DERUTCTime = function (params) {\n KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params);\n this.hT = \"17\";\n /**\n * set value by a Date object
\n * @name setByDate\n * @memberOf KJUR.asn1.DERUTCTime#\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * o = new KJUR.asn1.DERUTCTime();\n * o.setByDate(new Date(\"2016/12/31\"));\n */\n this.setByDate = function (dateObject) {\n this.hTLV = null;\n this.isModified = true;\n this.date = dateObject;\n this.s = this.formatDate(this.date, 'utc');\n this.hV = stohex(this.s);\n };\n this.getFreshValueHex = function () {\n if (typeof this.date == \"undefined\" && typeof this.s == \"undefined\") {\n this.date = new Date();\n this.s = this.formatDate(this.date, 'utc');\n this.hV = stohex(this.s);\n }\n return this.hV;\n };\n if (params !== undefined) {\n if (params.str !== undefined) {\n this.setString(params.str);\n }\n else if (typeof params == \"string\" && params.match(/^[0-9]{12}Z$/)) {\n this.setString(params);\n }\n else if (params.hex !== undefined) {\n this.setStringHex(params.hex);\n }\n else if (params.date !== undefined) {\n this.setByDate(params.date);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);\n// ********************************************************************\n/**\n * class for ASN.1 DER GeneralizedTime\n * @name KJUR.asn1.DERGeneralizedTime\n * @class class for ASN.1 DER GeneralizedTime\n * @param {Array} params associative array of parameters (ex. {'str': '20130430235959Z'})\n * @property {Boolean} withMillis flag to show milliseconds or not\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - str - specify initial ASN.1 value(V) by a string (ex.'20130430235959Z')
\n * - hex - specify initial ASN.1 value(V) by a hexadecimal string
\n * - date - specify Date object.
\n * - millis - specify flag to show milliseconds (from 1.0.6)
\n *
\n * NOTE1: 'params' can be omitted.\n * NOTE2: 'withMillis' property is supported from asn1 1.0.6.\n */\nKJUR.asn1.DERGeneralizedTime = function (params) {\n KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params);\n this.hT = \"18\";\n this.withMillis = false;\n /**\n * set value by a Date object\n * @name setByDate\n * @memberOf KJUR.asn1.DERGeneralizedTime#\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * When you specify UTC time, use 'Date.UTC' method like this:
\n * o1 = new DERUTCTime();\n * o1.setByDate(date);\n *\n * date = new Date(Date.UTC(2015, 0, 31, 23, 59, 59, 0)); #2015JAN31 23:59:59\n */\n this.setByDate = function (dateObject) {\n this.hTLV = null;\n this.isModified = true;\n this.date = dateObject;\n this.s = this.formatDate(this.date, 'gen', this.withMillis);\n this.hV = stohex(this.s);\n };\n this.getFreshValueHex = function () {\n if (this.date === undefined && this.s === undefined) {\n this.date = new Date();\n this.s = this.formatDate(this.date, 'gen', this.withMillis);\n this.hV = stohex(this.s);\n }\n return this.hV;\n };\n if (params !== undefined) {\n if (params.str !== undefined) {\n this.setString(params.str);\n }\n else if (typeof params == \"string\" && params.match(/^[0-9]{14}Z$/)) {\n this.setString(params);\n }\n else if (params.hex !== undefined) {\n this.setStringHex(params.hex);\n }\n else if (params.date !== undefined) {\n this.setByDate(params.date);\n }\n if (params.millis === true) {\n this.withMillis = true;\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);\n// ********************************************************************\n/**\n * class for ASN.1 DER Sequence\n * @name KJUR.asn1.DERSequence\n * @class class for ASN.1 DER Sequence\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - array - specify array of ASN1Object to set elements of content
\n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERSequence = function (params) {\n KJUR.asn1.DERSequence.superclass.constructor.call(this, params);\n this.hT = \"30\";\n this.getFreshValueHex = function () {\n var h = '';\n for (var i = 0; i < this.asn1Array.length; i++) {\n var asn1Obj = this.asn1Array[i];\n h += asn1Obj.getEncodedHex();\n }\n this.hV = h;\n return this.hV;\n };\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);\n// ********************************************************************\n/**\n * class for ASN.1 DER Set\n * @name KJUR.asn1.DERSet\n * @class class for ASN.1 DER Set\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * \n * - array - specify array of ASN1Object to set elements of content
\n * - sortflag - flag for sort (default: true). ASN.1 BER is not sorted in 'SET OF'.
\n *
\n * NOTE1: 'params' can be omitted.
\n * NOTE2: sortflag is supported since 1.0.5.\n */\nKJUR.asn1.DERSet = function (params) {\n KJUR.asn1.DERSet.superclass.constructor.call(this, params);\n this.hT = \"31\";\n this.sortFlag = true; // item shall be sorted only in ASN.1 DER\n this.getFreshValueHex = function () {\n var a = new Array();\n for (var i = 0; i < this.asn1Array.length; i++) {\n var asn1Obj = this.asn1Array[i];\n a.push(asn1Obj.getEncodedHex());\n }\n if (this.sortFlag == true)\n a.sort();\n this.hV = a.join('');\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params.sortflag != \"undefined\" &&\n params.sortflag == false)\n this.sortFlag = false;\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);\n// ********************************************************************\n/**\n * class for ASN.1 DER TaggedObject\n * @name KJUR.asn1.DERTaggedObject\n * @class class for ASN.1 DER TaggedObject\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * Parameter 'tagNoNex' is ASN.1 tag(T) value for this object.\n * For example, if you find '[1]' tag in a ASN.1 dump,\n * 'tagNoHex' will be 'a1'.\n *
\n * As for optional argument 'params' for constructor, you can specify *ANY* of\n * following properties:\n * \n * - explicit - specify true if this is explicit tag otherwise false\n * (default is 'true').
\n * - tag - specify tag (default is 'a0' which means [0])
\n * - obj - specify ASN1Object which is tagged
\n *
\n * @example\n * d1 = new KJUR.asn1.DERUTF8String({'str':'a'});\n * d2 = new KJUR.asn1.DERTaggedObject({'obj': d1});\n * hex = d2.getEncodedHex();\n */\nKJUR.asn1.DERTaggedObject = function (params) {\n KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);\n this.hT = \"a0\";\n this.hV = '';\n this.isExplicit = true;\n this.asn1Object = null;\n /**\n * set value by an ASN1Object\n * @name setString\n * @memberOf KJUR.asn1.DERTaggedObject#\n * @function\n * @param {Boolean} isExplicitFlag flag for explicit/implicit tag\n * @param {Integer} tagNoHex hexadecimal string of ASN.1 tag\n * @param {ASN1Object} asn1Object ASN.1 to encapsulate\n */\n this.setASN1Object = function (isExplicitFlag, tagNoHex, asn1Object) {\n this.hT = tagNoHex;\n this.isExplicit = isExplicitFlag;\n this.asn1Object = asn1Object;\n if (this.isExplicit) {\n this.hV = this.asn1Object.getEncodedHex();\n this.hTLV = null;\n this.isModified = true;\n }\n else {\n this.hV = null;\n this.hTLV = asn1Object.getEncodedHex();\n this.hTLV = this.hTLV.replace(/^../, tagNoHex);\n this.isModified = false;\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['tag'] != \"undefined\") {\n this.hT = params['tag'];\n }\n if (typeof params['explicit'] != \"undefined\") {\n this.isExplicit = params['explicit'];\n }\n if (typeof params['obj'] != \"undefined\") {\n this.asn1Object = params['obj'];\n this.setASN1Object(this.isExplicit, this.hT, this.asn1Object);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsrsasign/asn1-1.0.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./lib/lib/jsrsasign/yahoo.js":
+ /*!************************************!*\
+ !*** ./lib/lib/jsrsasign/yahoo.js ***!
+ \************************************/
+ /***/
+ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+ "use strict";
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"YAHOO\": () => (/* binding */ YAHOO)\n/* harmony export */ });\n/*!\nCopyright (c) 2011, Yahoo! Inc. All rights reserved.\nCode licensed under the BSD License:\nhttp://developer.yahoo.com/yui/license.html\nversion: 2.9.0\n*/\nvar YAHOO = {};\nYAHOO.lang = {\n /**\n * Utility to set up the prototype, constructor and superclass properties to\n * support an inheritance strategy that can chain constructors and methods.\n * Static members will not be inherited.\n *\n * @method extend\n * @static\n * @param {Function} subc the object to modify\n * @param {Function} superc the object to inherit\n * @param {Object} overrides additional properties/methods to add to the\n * subclass prototype. These will override the\n * matching items obtained from the superclass\n * if present.\n */\n extend: function (subc, superc, overrides) {\n if (!superc || !subc) {\n throw new Error(\"YAHOO.lang.extend failed, please check that \" +\n \"all dependencies are included.\");\n }\n var F = function () { };\n F.prototype = superc.prototype;\n subc.prototype = new F();\n subc.prototype.constructor = subc;\n subc.superclass = superc.prototype;\n if (superc.prototype.constructor == Object.prototype.constructor) {\n superc.prototype.constructor = superc;\n }\n if (overrides) {\n var i;\n for (i in overrides) {\n subc.prototype[i] = overrides[i];\n }\n /*\n * IE will not enumerate native functions in a derived object even if the\n * function was overridden. This is a workaround for specific functions\n * we care about on the Object prototype.\n * @property _IEEnumFix\n * @param {Function} r the object to receive the augmentation\n * @param {Function} s the object that supplies the properties to augment\n * @static\n * @private\n */\n var _IEEnumFix = function () { }, ADD = [\"toString\", \"valueOf\"];\n try {\n if (/MSIE/.test(navigator.userAgent)) {\n _IEEnumFix = function (r, s) {\n for (i = 0; i < ADD.length; i = i + 1) {\n var fname = ADD[i], f = s[fname];\n if (typeof f === 'function' && f != Object.prototype[fname]) {\n r[fname] = f;\n }\n }\n };\n }\n }\n catch (ex) { }\n ;\n _IEEnumFix(subc.prototype, overrides);\n }\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsrsasign/yahoo.js?");
+
+ /***/
+ }),
+
+ /***/
+ "./node_modules/process/browser.js":
+ /*!*****************************************!*\
+ !*** ./node_modules/process/browser.js ***!
+ \*****************************************/
+ /***/
+ ((module) => {
+
+ eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n//# sourceURL=webpack://JSEncrypt/./node_modules/process/browser.js?");
+
+ /***/
+ })
+
+ /******/
+ });
+ /************************************************************************/
+ /******/ // The module cache
+ /******/
+ var __webpack_module_cache__ = {};
+ /******/
+ /******/ // The require function
+ /******/
+ function __webpack_require__(moduleId) {
+ /******/ // Check if module is in cache
+ /******/
+ var cachedModule = __webpack_module_cache__[moduleId];
+ /******/
+ if (cachedModule !== undefined) {
+ /******/
+ return cachedModule.exports;
+ /******/
+ }
+ /******/ // Create a new module (and put it into the cache)
+ /******/
+ var module = __webpack_module_cache__[moduleId] = {
+ /******/ // no module.id needed
+ /******/ // no module.loaded needed
+ /******/
+ exports: {}
+ /******/
+ };
+ /******/
+ /******/ // Execute the module function
+ /******/
+ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+ /******/
+ /******/ // Return the exports of the module
+ /******/
+ return module.exports;
+ /******/
+ }
+ /******/
+ /************************************************************************/
+ /******/
+ /* webpack/runtime/define property getters */
+ /******/
+ (() => {
+ /******/ // define getter functions for harmony exports
+ /******/
+ __webpack_require__.d = (exports, definition) => {
+ /******/
+ for (var key in definition) {
+ /******/
+ if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+ /******/
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: definition[key]
+ });
+ /******/
+ }
+ /******/
+ }
+ /******/
+ };
+ /******/
+ })();
+ /******/
+ /******/
+ /* webpack/runtime/hasOwnProperty shorthand */
+ /******/
+ (() => {
+ /******/
+ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+ /******/
+ })();
+ /******/
+ /******/
+ /* webpack/runtime/make namespace object */
+ /******/
+ (() => {
+ /******/ // define __esModule on exports
+ /******/
+ __webpack_require__.r = (exports) => {
+ /******/
+ if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+ /******/
+ Object.defineProperty(exports, Symbol.toStringTag, {
+ value: 'Module'
+ });
+ /******/
+ }
+ /******/
+ Object.defineProperty(exports, '__esModule', {
+ value: true
+ });
+ /******/
+ };
+ /******/
+ })();
+ /******/
+ /************************************************************************/
+ /******/
+ /******/ // startup
+ /******/ // Load entry module and return exports
+ /******/ // This entry module can't be inlined because the eval devtool is used.
+ /******/
+ var __webpack_exports__ = __webpack_require__("./lib/index.js");
+ /******/
+ __webpack_exports__ = __webpack_exports__["default"];
+ /******/
+ /******/
+ return __webpack_exports__;
+ /******/
+ })();
+});
\ No newline at end of file
diff --git a/潇洒/js/json5.js b/潇洒/api/json5.js
similarity index 100%
rename from 潇洒/js/json5.js
rename to 潇洒/api/json5.js
diff --git a/潇洒/js/node-rsa.js b/潇洒/api/node-rsa.js
similarity index 100%
rename from 潇洒/js/node-rsa.js
rename to 潇洒/api/node-rsa.js
diff --git a/潇洒/js/pako.min.js b/潇洒/api/pako.min.js
similarity index 100%
rename from 潇洒/js/pako.min.js
rename to 潇洒/api/pako.min.js
diff --git a/潇洒/js/模板.js b/潇洒/api/模板.js
similarity index 100%
rename from 潇洒/js/模板.js
rename to 潇洒/api/模板.js
diff --git a/潇洒/js/56DM.js b/潇洒/js/56DM.js
new file mode 100644
index 0000000..3ff0ad6
--- /dev/null
+++ b/潇洒/js/56DM.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJzU25Yqo5ryrJywKICAgIGhvc3Q6ICdodHRwczovL3d3dy41NmRtLmNjLycsCiAgICB1cmw6ICdodHRwczovL3d3dy41NmRtLmNjL3R5cGUvZnljbGFzcy1meXBhZ2UuaHRtbCcsCiAgICBzZWFyY2hVcmw6ICdodHRwczovL3d3dy41NmRtLmNjL3NlYXJjaC8qKi0tLS0tLS0tLS1meXBhZ2UtLS0uaHRtbCcsCiAgICBzZWFyY2hhYmxlOiAyLCAvL+aYr+WQpuWQr+eUqOWFqOWxgOaQnOe0oiwKICAgIHF1aWNrU2VhcmNoOiAwLCAvL+aYr+WQpuWQr+eUqOW/q+mAn+aQnOe0oiwKICAgIGZpbHRlcmFibGU6IDAsIC8v5piv5ZCm5ZCv55So5YiG57G7562b6YCJLAogICAgaGVhZGVyczogewogICAgICAgICdVc2VyLUFnZW50JzogJ1VDX1VBJywgLy8gIkNvb2tpZSI6ICIiCiAgICB9LCAvLyBjbGFzc19wYXJzZTonLnN0dWktaGVhZGVyX19tZW51IGxpOmd0KDApOmx0KDcpO2EmJlRleHQ7YSYmaHJlZjsvKFxcZCspLmh0bWwnLAogICAgY2xhc3NfcGFyc2U6ICcuc251aS1oZWFkZXItbWVudS1uYXYgbGk6Z3QoMCk6bHQoNik7YSYmVGV4dDthJiZocmVmOy4qLyguKj8pLmh0bWwnLAogICAgcGxheV9wYXJzZTogdHJ1ZSwKICAgIGxhenk6IGBqczoKICAgICAgICAgICAgaWYoL1xcLihtM3U4fG1wNCkvLnRlc3QoaW5wdXQpKXsKICAgICAgICAgICAgICAgIGlucHV0ID0ge3BhcnNlOjAsdXJsOmlucHV0fQogICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIGlmKHJ1bGUucGFyc2VfdXJsLnN0YXJ0c1dpdGgoJ2pzb246JykpewogICAgICAgICAgICAgICAgICAgIGxldCBwdXJsID0gcnVsZS5wYXJzZV91cmwucmVwbGFjZSgnanNvbjonLCcnKStpbnB1dDsKICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QocHVybCk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSB7cGFyc2U6MCx1cmw6SlNPTi5wYXJzZShodG1sKS51cmx9CiAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICBpbnB1dD0gcnVsZS5wYXJzZV91cmwraW5wdXQ7IAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGAsCiAgICBsaW1pdDogNiwKICAgIOaOqOiNkDogJy5jQ0JmX0ZBQUVmYmM7bGk7YSYmdGl0bGU7Lmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsOy5kQURfQkJDSSYmVGV4dDthJiZocmVmJywKICAgIGRvdWJsZTogdHJ1ZSwgLy8g5o6o6I2Q5YaF5a655piv5ZCm5Y+M5bGC5a6a5L2NCiAgICDkuIDnuqc6ICcuY0NCZl9GQUFFZmJjIGxpO2EmJnRpdGxlO2EmJmRhdGEtb3JpZ2luYWw7LmRBRF9CQkNJJiZUZXh0O2EmJmhyZWYnLAogICAg5LqM57qnOiB7CiAgICAgICAgInRpdGxlIjogImgxJiZUZXh0IiwKICAgICAgICAiaW1nIjogIi5zdHVpLWNvbnRlbnRfX3RodW1iIC5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbCIsCiAgICAgICAgImRlc2MiOiAiLmNDQmZfREFCQ2NhY19faGNJZGVFIHA6ZXEoMCkmJlRleHQ7LmNDQmZfREFCQ2NhY19faGNJZGVFIHA6ZXEoMSkmJlRleHQ7LmNDQmZfREFCQ2NhY19faGNJZGVFIHA6ZXEoMikmJlRleHQ7LmNDQmZfREFCQ2NhY19faGNJZGVFIHA6ZXEoMykmJlRleHQ7LmNDQmZfREFCQ2NhY19faGNJZGVFIHA6ZXEoNCkmJlRleHQiLAogICAgICAgICJjb250ZW50IjogIi5kZXRhaWwmJlRleHQiLAogICAgICAgICJ0YWJzIjogIi5jaGFubmVsLXRhYiBsaSIsCiAgICAgICAgImxpc3RzIjogIi5wbGF5LWxpc3QtY29udGVudDplcSgjaWQpIGxpIgogICAgfSwKICAgIOaQnOe0ojogJy5jQ0JmX0ZBQUVmYmNfX2RiRDthJiZ0aXRsZTsubGF6eWxvYWQmJmRhdGEtb3JpZ2luYWw7LmRBRF9CQkNJJiZUZXh0O2EmJmhyZWY7LmNDQmZfRkFBRWZiY19faGNJZGVFJiZwOmVxKDApIHAmJlRleHQnLAp9
\ No newline at end of file
diff --git a/潇洒/js/56动漫.js b/潇洒/js/56动漫.js
deleted file mode 100644
index 266b5f0..0000000
--- a/潇洒/js/56动漫.js
+++ /dev/null
@@ -1,40 +0,0 @@
-var rule = {
- title: '56动漫',
- host: 'https://www.56dm.cc/',
- url: 'https://www.56dm.cc/type/fyclass-fypage.html',
- searchUrl: 'https://www.56dm.cc/search/**----------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: '.snui-header-menu-nav li:gt(0):lt(6);a&&Text;a&&href;.*/(.*?).html',
- play_parse: true,
- 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;
- }
- }
- `,
- limit: 6,
- 推荐: '.cCBf_FAAEfbc;li;a&&title;.lazyload&&data-original;.dAD_BBCI&&Text;a&&href',
- double: true, // 推荐内容是否双层定位
- 一级: '.cCBf_FAAEfbc li;a&&title;a&&data-original;.dAD_BBCI&&Text;a&&href',
- 二级: {
- "title": "h1&&Text",
- "img": ".stui-content__thumb .lazyload&&data-original",
- "desc": ".cCBf_DABCcac__hcIdeE p:eq(0)&&Text;.cCBf_DABCcac__hcIdeE p:eq(1)&&Text;.cCBf_DABCcac__hcIdeE p:eq(2)&&Text;.cCBf_DABCcac__hcIdeE p:eq(3)&&Text;.cCBf_DABCcac__hcIdeE p:eq(4)&&Text",
- "content": ".detail&&Text",
- "tabs": ".channel-tab li",
- "lists": ".play-list-content:eq(#id) li"
- },
- 搜索: '.cCBf_FAAEfbc__dbD;a&&title;.lazyload&&data-original;.dAD_BBCI&&Text;a&&href;.cCBf_FAAEfbc__hcIdeE&&p:eq(0) p&&Text',
-}
\ No newline at end of file
diff --git a/潇洒/js/88看球.js b/潇洒/js/88看球.js
deleted file mode 100644
index c552ea3..0000000
--- a/潇洒/js/88看球.js
+++ /dev/null
@@ -1,61 +0,0 @@
-var rule = {
- title:'88看球',
- // host:'http://www.88kanqiu.cc',
- host:'http://www.88kanqiu.bar/',
- url: "/match/fyclass/live",
- searchUrl: "",
- searchable: 0,
- quickSearch: 0,
- class_parse: ".nav-pills li;a&&Text;a&&href;/match/(\\d+)/live",
- headers: {
- "User-Agent": "PC_UA",
- },
- timeout: 5000,
- play_parse: true,
- pagecount:{"1":1,"2":1,"4":1,"22":1,"8":1,"9":1,"10":1,"14":1,"15":1,"12":1,"13":1,"16":1,"28":1,"7":1,"11":1,"33":1,"27":1,"23":1,"26":1,"3":1,"21":1,"18":1},
- lazy: `js:
- 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:
- 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/潇洒/js/ADM.js b/潇洒/js/ADM.js
new file mode 100644
index 0000000..0eac3e9
--- /dev/null
+++ b/潇洒/js/ADM.js
@@ -0,0 +1 @@
+bXViYW4u55+t6KeGMi7kuoznuqcuaW1nID0gJy5kZXRhaWwtcGljJiZpbWcmJmRhdGEtc3JjJzsKdmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+eIseW8ueW5lScsCiAgICDmqKHmnb86ICfnn63op4YyJywKICAgIGhvc3Q6ICdodHRwczovL2FuaW1lLmdpcmlnaXJpbG92ZS5jb20nLAogICAgaG9tZVVybDogJy9tYXAvJywKICAgIC8vIHVybDonL3Nob3cvZnljbGFzcy0tLS0tLS0tZnlwYWdlLS0tLycKICAgIHVybDogJy9zaG93L2Z5Y2xhc3NmeWZpbHRlci8nLAogICAgZmlsdGVyYWJsZTogMSwgLy/mmK/lkKblkK/nlKjliIbnsbvnrZvpgIksCiAgICBmaWx0ZXJfdXJsOiAnLXt7ZmwuYXJlYX19LXt7ZmwuYnl9fS17e2ZsLmNsYXNzfX0te3tmbC5sYW5nfX0te3tmbC5sZXR0ZXJ9fS0tLWZ5cGFnZS0tLXt7ZmwueWVhcn19JywKICAgIGZpbHRlcjogewogICAgICAgICIyIjogW3sKICAgICAgICAgICAgImtleSI6ICJjbGFzcyIsCiAgICAgICAgICAgICJuYW1lIjogIuexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLllpzliaciLAogICAgICAgICAgICAgICAgInYiOiAi5Zac5YmnIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLniLHmg4UiLAogICAgICAgICAgICAgICAgInYiOiAi54ix5oOFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgZDmgJYiLAogICAgICAgICAgICAgICAgInYiOiAi5oGQ5oCWIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliqjkvZwiLAogICAgICAgICAgICAgICAgInYiOiAi5Yqo5L2cIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAi56eR5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliafmg4UiLAogICAgICAgICAgICAgICAgInYiOiAi5Ymn5oOFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjkuokiLAogICAgICAgICAgICAgICAgInYiOiAi5oiY5LqJIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpYflubsiLAogICAgICAgICAgICAgICAgInYiOiAi5aWH5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpLpmakiLAogICAgICAgICAgICAgICAgInYiOiAi5YaS6ZmpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgqznlpEiLAogICAgICAgICAgICAgICAgInYiOiAi5oKs55aRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmoKHlm60iLAogICAgICAgICAgICAgICAgInYiOiAi5qCh5ZutIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlkI7lrqsiLAogICAgICAgICAgICAgICAgInYiOiAi5ZCO5a6rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLng63ooYAiLAogICAgICAgICAgICAgICAgInYiOiAi54Ot6KGAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLov5DliqgiLAogICAgICAgICAgICAgICAgInYiOiAi6L+Q5YqoIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnmb7lkIgiLAogICAgICAgICAgICAgICAgInYiOiAi55m+5ZCIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkuZnlpbMiLAogICAgICAgICAgICAgICAgInYiOiAi5LmZ5aWzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnLrnlLIiLAogICAgICAgICAgICAgICAgInYiOiAi5py655SyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLml6XluLgiLAogICAgICAgICAgICAgICAgInYiOiAi5pel5bi4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLprZTms5XlsJHlpbMiLAogICAgICAgICAgICAgICAgInYiOiAi6a2U5rOV5bCR5aWzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlvILkuJbnlYwiLAogICAgICAgICAgICAgICAgInYiOiAi5byC5LiW55WMIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLniLHmipbpnLIiLAogICAgICAgICAgICAgICAgInYiOiAi54ix5oqW6ZyyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpn7PkuZAiLAogICAgICAgICAgICAgICAgInYiOiAi6Z+z5LmQIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLokIwiLAogICAgICAgICAgICAgICAgInYiOiAi6JCMIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJhcmVhIiwKICAgICAgICAgICAgIm5hbWUiOiAi5Zyw5Yy6IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS4gOaciCIsCiAgICAgICAgICAgICAgICAidiI6ICLkuIDmnIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWbm+aciCIsCiAgICAgICAgICAgICAgICAidiI6ICLlm5vmnIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS4g+aciCIsCiAgICAgICAgICAgICAgICAidiI6ICLkuIPmnIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWNgeaciCIsCiAgICAgICAgICAgICAgICAidiI6ICLljYHmnIgiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku70iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDAxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDAiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImxhbmciLAogICAgICAgICAgICAibmFtZSI6ICLor63oqIAiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pel6K+tIiwKICAgICAgICAgICAgICAgICJ2IjogIuaXpeivrSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Zu96K+tIiwKICAgICAgICAgICAgICAgICJ2IjogIuWbveivrSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYnkiLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5pawIiwKICAgICAgICAgICAgICAgICJ2IjogInRpbWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOeDrSIsCiAgICAgICAgICAgICAgICAidiI6ICJoaXRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLor4TliIYiLAogICAgICAgICAgICAgICAgInYiOiAic2NvcmUiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIjMiOiBbewogICAgICAgICAgICAia2V5IjogImNsYXNzIiwKICAgICAgICAgICAgIm5hbWUiOiAi57G75Z6LIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaQnueskSIsCiAgICAgICAgICAgICAgICAidiI6ICLmkJ7nrJEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueIseaDhSIsCiAgICAgICAgICAgICAgICAidiI6ICLniLHmg4UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaBkOaAliIsCiAgICAgICAgICAgICAgICAidiI6ICLmgZDmgJYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWKqOS9nCIsCiAgICAgICAgICAgICAgICAidiI6ICLliqjkvZwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuenkeW5uyIsCiAgICAgICAgICAgICAgICAidiI6ICLnp5HlubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWJp+aDhSIsCiAgICAgICAgICAgICAgICAidiI6ICLliafmg4UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaImOS6iSIsCiAgICAgICAgICAgICAgICAidiI6ICLmiJjkuokiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWlh+W5uyIsCiAgICAgICAgICAgICAgICAidiI6ICLlpYflubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWGkumZqSIsCiAgICAgICAgICAgICAgICAidiI6ICLlhpLpmakiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaCrOeWkSIsCiAgICAgICAgICAgICAgICAidiI6ICLmgqznlpEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuagoeWbrSIsCiAgICAgICAgICAgICAgICAidiI6ICLmoKHlm60iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWQjuWuqyIsCiAgICAgICAgICAgICAgICAidiI6ICLlkI7lrqsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueDreihgCIsCiAgICAgICAgICAgICAgICAidiI6ICLng63ooYAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIui/kOWKqCIsCiAgICAgICAgICAgICAgICAidiI6ICLov5DliqgiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImFyZWEiLAogICAgICAgICAgICAibmFtZSI6ICLlnLDljLoiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YaF5ZywIiwKICAgICAgICAgICAgICAgICJ2IjogIuWGheWcsCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5riv5Y+wIiwKICAgICAgICAgICAgICAgICJ2IjogIua4r+WPsCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pel6Z+pIiwKICAgICAgICAgICAgICAgICJ2IjogIuaXpemfqSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5qyn576OIiwKICAgICAgICAgICAgICAgICJ2IjogIuasp+e+jiIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAieWVhciIsCiAgICAgICAgICAgICJuYW1lIjogIuW5tOS7vSIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDExIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDkiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA3IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDYiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwMyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAibGFuZyIsCiAgICAgICAgICAgICJuYW1lIjogIuivreiogCIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlm73or60iLAogICAgICAgICAgICAgICAgInYiOiAi5Zu96K+tIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLoi7Hor60iLAogICAgICAgICAgICAgICAgInYiOiAi6Iux6K+tIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJieSIsCiAgICAgICAgICAgICJuYW1lIjogIuaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDmlrAiLAogICAgICAgICAgICAgICAgInYiOiAidGltZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA54OtIiwKICAgICAgICAgICAgICAgICJ2IjogImhpdHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuivhOWIhiIsCiAgICAgICAgICAgICAgICAidiI6ICJzY29yZSIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiMjEiOiBbewogICAgICAgICAgICAia2V5IjogImNsYXNzIiwKICAgICAgICAgICAgIm5hbWUiOiAi57G75Z6LIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWWnOWJpyIsCiAgICAgICAgICAgICAgICAidiI6ICLllpzliaciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueIseaDhSIsCiAgICAgICAgICAgICAgICAidiI6ICLniLHmg4UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaBkOaAliIsCiAgICAgICAgICAgICAgICAidiI6ICLmgZDmgJYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWKqOS9nCIsCiAgICAgICAgICAgICAgICAidiI6ICLliqjkvZwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuenkeW5uyIsCiAgICAgICAgICAgICAgICAidiI6ICLnp5HlubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWJp+aDhSIsCiAgICAgICAgICAgICAgICAidiI6ICLliafmg4UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaImOS6iSIsCiAgICAgICAgICAgICAgICAidiI6ICLmiJjkuokiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWlh+W5uyIsCiAgICAgICAgICAgICAgICAidiI6ICLlpYflubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWGkumZqSIsCiAgICAgICAgICAgICAgICAidiI6ICLlhpLpmakiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaCrOeWkSIsCiAgICAgICAgICAgICAgICAidiI6ICLmgqznlpEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuagoeWbrSIsCiAgICAgICAgICAgICAgICAidiI6ICLmoKHlm60iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWQjuWuqyIsCiAgICAgICAgICAgICAgICAidiI6ICLlkI7lrqsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueDreihgCIsCiAgICAgICAgICAgICAgICAidiI6ICLng63ooYAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIui/kOWKqCIsCiAgICAgICAgICAgICAgICAidiI6ICLov5DliqgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueZvuWQiCIsCiAgICAgICAgICAgICAgICAidiI6ICLnmb7lkIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiAvee+jiIsCiAgICAgICAgICAgICAgICAidiI6ICLogL3nvo4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacuueUsiIsCiAgICAgICAgICAgICAgICAidiI6ICLmnLrnlLIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaXpeW4uCIsCiAgICAgICAgICAgICAgICAidiI6ICLml6XluLgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumtlOazleWwkeWlsyIsCiAgICAgICAgICAgICAgICAidiI6ICLprZTms5XlsJHlpbMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuW8guS4lueVjCIsCiAgICAgICAgICAgICAgICAidiI6ICLlvILkuJbnlYwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueIseaKlumcsiIsCiAgICAgICAgICAgICAgICAidiI6ICLniLHmipbpnLIiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku70iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDMiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImxhbmciLAogICAgICAgICAgICAibmFtZSI6ICLor63oqIAiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pel6K+tIiwKICAgICAgICAgICAgICAgICJ2IjogIuaXpeivrSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Lit5paHIiwKICAgICAgICAgICAgICAgICJ2IjogIuS4reaWhyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6Iux6K+tIiwKICAgICAgICAgICAgICAgICJ2IjogIuiLseivrSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYnkiLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5pawIiwKICAgICAgICAgICAgICAgICJ2IjogInRpbWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOeDrSIsCiAgICAgICAgICAgICAgICAidiI6ICJoaXRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLor4TliIYiLAogICAgICAgICAgICAgICAgInYiOiAic2NvcmUiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIjIwIjogW3sKICAgICAgICAgICAgImtleSI6ICJjbGFzcyIsCiAgICAgICAgICAgICJuYW1lIjogIuexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLniLHmg4UiLAogICAgICAgICAgICAgICAgInYiOiAi54ix5oOFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAi56eR5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnu4/lhbgiLAogICAgICAgICAgICAgICAgInYiOiAi57uP5YW4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpLpmakiLAogICAgICAgICAgICAgICAgInYiOiAi5YaS6ZmpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliafmg4UiLAogICAgICAgICAgICAgICAgInYiOiAi5Ymn5oOFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliqjkvZwiLAogICAgICAgICAgICAgICAgInYiOiAi5Yqo5L2cIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlkIzmgKciLAogICAgICAgICAgICAgICAgInYiOiAi5ZCM5oCnIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLllpzliaciLAogICAgICAgICAgICAgICAgInYiOiAi5Zac5YmnIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpYflubsiLAogICAgICAgICAgICAgICAgInYiOiAi5aWH5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgZDmgJYiLAogICAgICAgICAgICAgICAgInYiOiAi5oGQ5oCWIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgqznlpEu5oOK5oKaIiwKICAgICAgICAgICAgICAgICJ2IjogIuaCrOeWkS7mg4rmgpoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaImOS6iSIsCiAgICAgICAgICAgICAgICAidiI6ICLmiJjkuokiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuasp+e+jiIsCiAgICAgICAgICAgICAgICAidiI6ICLmrKfnvo4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuatjOiIniIsCiAgICAgICAgICAgICAgICAidiI6ICLmrYzoiJ4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueBvumaviIsCiAgICAgICAgICAgICAgICAidiI6ICLngb7pmr4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiusOW9lS7ms7DliaciLAogICAgICAgICAgICAgICAgInYiOiAi6K6w5b2VLuazsOWJpyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5L2T6IKyIiwKICAgICAgICAgICAgICAgICJ2IjogIuS9k+iCsiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54On6ISRIiwKICAgICAgICAgICAgICAgICJ2IjogIueDp+iEkSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYXJlYSIsCiAgICAgICAgICAgICJuYW1lIjogIuWcsOWMuiIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLml6XmnKwiLAogICAgICAgICAgICAgICAgInYiOiAi5pel5pysIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrKfnvo4iLAogICAgICAgICAgICAgICAgInYiOiAi5qyn576OIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLms7Dlm70iLAogICAgICAgICAgICAgICAgInYiOiAi5rOw5Zu9IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJ5ZWFyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5bm05Lu9IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDExIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDciLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDQuMjAwMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA0LjIwMDMiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImxhbmciLAogICAgICAgICAgICAibmFtZSI6ICLor63oqIAiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pel6K+tIiwKICAgICAgICAgICAgICAgICJ2IjogIuaXpeivrSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6Iux6K+tIiwKICAgICAgICAgICAgICAgICJ2IjogIuiLseivrSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5rOw6K+tIiwKICAgICAgICAgICAgICAgICJ2IjogIuazsOivrSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYnkiLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5pawIiwKICAgICAgICAgICAgICAgICJ2IjogInRpbWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOeDrSIsCiAgICAgICAgICAgICAgICAidiI6ICJoaXRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLor4TliIYiLAogICAgICAgICAgICAgICAgInYiOiAic2NvcmUiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIjI0IjogW3sKICAgICAgICAgICAgImtleSI6ICJieSIsCiAgICAgICAgICAgICJuYW1lIjogIuaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDmlrAiLAogICAgICAgICAgICAgICAgInYiOiAidGltZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA54OtIiwKICAgICAgICAgICAgICAgICJ2IjogImhpdHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuivhOWIhiIsCiAgICAgICAgICAgICAgICAidiI6ICJzY29yZSIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiMjYiOiBbewogICAgICAgICAgICAia2V5IjogImJ5IiwKICAgICAgICAgICAgIm5hbWUiOiAi5o6S5bqPIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuacgOaWsCIsCiAgICAgICAgICAgICAgICAidiI6ICJ0aW1lIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDng60iLAogICAgICAgICAgICAgICAgInYiOiAiaGl0cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6K+E5YiGIiwKICAgICAgICAgICAgICAgICJ2IjogInNjb3JlIgogICAgICAgICAgICB9XQogICAgICAgIH1dCiAgICB9LAogICAgc2VhcmNoVXJsOiAnL3NlYXJjaC8qKi0tLS0tLS0tLS1meXBhZ2UtLS0vJywKICAgIGNsYXNzX25hbWU6ICfml6Xnlaom576O55WqJuWKh+WgtOeJiCbnnJ/kurrnlarliocmQkTlia/pn7Pou4wm5YW25LuWJywKICAgIGNsYXNzX3VybDogJzImMyYyMSYyMCYyNCYyNicsCiAgICBwbGF5X3BhcnNlOiB0cnVlLAogICAgbGF6eTogYGpzOgogICAgICAgIHZhciBodG1sID0gSlNPTi5wYXJzZShyZXF1ZXN0KGlucHV0KS5tYXRjaCgvciBwbGF5ZXJfLio/PSguKj8pPC8pWzFdKTsKICAgICAgICB2YXIgdXJsID0gaHRtbC51cmw7CiAgICAgICAgdmFyIGZyb20gPSBodG1sLmZyb207CiAgICAgICAgdmFyIG5leHQgPSBodG1sLmxpbmtfbmV4dDsKICAgICAgICBpZiAoaHRtbC5lbmNyeXB0ID09ICcxJykgewogICAgICAgICAgICB1cmwgPSB1bmVzY2FwZSh1cmwpCiAgICAgICAgfSBlbHNlIGlmIChodG1sLmVuY3J5cHQgPT0gJzInKSB7CiAgICAgICAgICAgIHVybCA9IHVuZXNjYXBlKGJhc2U2NERlY29kZSh1cmwpKQogICAgICAgIH0gZWxzZSBpZiAoaHRtbC5lbmNyeXB0ID09ICczJykgewogICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDgsIHVybC5sZW5ndGgpOwogICAgICAgICAgICB1cmwgPSBiYXNlNjREZWNvZGUodXJsKTsKICAgICAgICAgICAgdXJsID0gdXJsLnN1YnN0cmluZyg4LCAodXJsLmxlbmd0aCkgLSA4KQogICAgICAgIH0KICAgICAgICBpZiAoL1xcLm0zdTh8XFwubXA0Ly50ZXN0KHVybCkpIHsKICAgICAgICAgICAgaW5wdXQgPSB7CiAgICAgICAgICAgICAgICBqeDogMCwKICAgICAgICAgICAgICAgIHVybDogdXJsLAogICAgICAgICAgICAgICAgcGFyc2U6IDAKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBwYXVybCA9IHJlcXVlc3QoSE9TVCArICcvc3RhdGljL3BsYXllci8nICsgZnJvbSArICcuanMnKS5tYXRjaCgvIHNyYz0iKC4qPyknLylbMV07CiAgICAgICAgICAgIGlmICgvaHR0cHMvLnRlc3QocGF1cmwpKSB7CiAgICAgICAgICAgICAgICB2YXIgcHVybCA9IHBhdXJsICsgdXJsICsgJyZuZXh0PScgKyBuZXh0ICsgJyZ0aXRsZT0nOwogICAgICAgICAgICAgICAgaW5wdXQgPSB7CiAgICAgICAgICAgICAgICAgICAgang6IDAsCiAgICAgICAgICAgICAgICAgICAgdXJsOiBwdXJsLAogICAgICAgICAgICAgICAgICAgIHBhcnNlOiAxCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICBgLAogICAg5o6o6I2QOiAnLmJvcmRlci1ib3gmJi5wdWJsaWMtbGlzdC1ib3g7YSYmdGl0bGU7LmxhenkmJmRhdGEtc3JjOy5wdWJsaWMtbGlzdC1wcmImJlRleHQ7YSYmaHJlZicsCiAgICBkb3VibGU6IGZhbHNlLCAvLyDmjqjojZDlhoXlrrnmmK/lkKblj4zlsYLlrprkvY0KICAgIOS4gOe6pzogJy5ib3JkZXItYm94IC5wdWJsaWMtbGlzdC1ib3g7YSYmdGl0bGU7LmxhenkmJmRhdGEtc3JjOy5wdWJsaWMtbGlzdC1wcmImJlRleHQ7YSYmaHJlZicsCiAgICDmkJzntKI6ICcucm93LXJpZ2h0JiYuc2VhcmNoLWJveDsudGh1bWItdHh0JiZUZXh0Oy5sYXp5JiZkYXRhLXNyYzsucHVibGljLWxpc3QtcHJiJiZUZXh0O2EmJmhyZWYnLAp9
\ No newline at end of file
diff --git a/潇洒/js/APPV2.js b/潇洒/js/APPV2.js
deleted file mode 100644
index fec0f1b..0000000
--- a/潇洒/js/APPV2.js
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * 传参 ?type=url¶ms=http://122.228.85.203:1000@泽少1
- * 传参 ?type=url¶ms=http://122.228.85.203:1000@泽少2
- */
-
-var rule = {
- title: 'APPV2[模板]',
- author: '道长',
- version: '20241012 beta1',
- update_info: `
-20241012:
-1.根据群友嗷呜的appv2模板修改成可传参源,类似采集之王用法传参
-`.trim(),
- host: '',
- url: '/api.php/app/video?tid=fyclassfyfilter&limit=20&pg=fypage',
- filter_url: '',
- filter: {},
- homeUrl: '/api.php/app/index_video',
- detailUrl: '/api.php/app/video_detail?id=fyid',
- searchUrl: '/api.php/app/search?text=**&pg=fypage',
- parseUrl: '',
- searchable: 2,
- quickSearch: 1,
- filterable: 1,
- headers: {
- 'User-Agent': 'okhttp/4.1.0'
- },
- params: 'http://122.228.85.203:1000$http://122.228.85.203:1000/play?url=',
- hostJs: $js.toString(() => {
- HOST = rule.params.split('$')[0];
- }),
- 预处理: $js.toString(() => {
- log(`传入参数:${rule.params}`);
- let _host = rule.params.split('$')[0];
- rule.parseUrl = rule.params.split('$')[1];
- let _url = _host.rstrip('/') + '/api.php/app/nav?token';
- let _headers = {'User-Agent': 'Dart/2.14 (dart:io)'};
- let html = request(_url, {headers: _headers});
- let data = JSON.parse(html);
- let _classes = [];
- let _filter = {};
- let _filter_url = '';
- let dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序"};
- let jsonData = data.list;
- for (let k = 0; k < jsonData.length; k++) {
- let hasNonEmptyField = false;
- let _obj = {
- type_name: jsonData[k].type_name,
- type_id: jsonData[k].type_id,
- };
- _classes.push(_obj);
- for (let key in dy) {
- if (key in jsonData[k].type_extend && jsonData[k].type_extend[key].trim() !== "") {
- hasNonEmptyField = true;
- break
- }
- }
- if (hasNonEmptyField) {
- _filter[String(jsonData[k].type_id)] = [];
- for (let dkey in jsonData[k].type_extend) {
- if (dkey in dy && jsonData[k].type_extend[dkey].trim() !== "") {
- if (k === 0) {
- _filter_url += `&${dkey}={{fl.${dkey}}}`
- }
- let values = jsonData[k].type_extend[dkey].split(',');
- let valueArray = values.map(value => ({"n": value.trim(), "v": value.trim()}));
- _filter[String(jsonData[k].type_id)].push({"key": dkey, "name": dy[dkey], "value": valueArray})
- }
- }
- }
- }
- rule.classes = _classes;
- rule.filter = _filter;
- rule.filter_url = _filter_url;
- }),
- class_parse: $js.toString(() => {
- input = rule.classes;
- }),
- play_parse: true,
- lazy: $js.toString(() => {
- if (!/^http/.test(input)) {
- input = rule.parseUrl + input
- } else {
- input = {
- url: input,
- parse: 0,
- header: ''
- }
- }
-
- }),
- 推荐: $js.toString(() => {
- let data = JSON.parse(request(input)).list;
- let com = [];
- data.forEach(item => {
- if (Array.isArray(item.vlist) && item.vlist.length !== 0) {
- com = com.concat(item.vlist)
- }
- })
- VODS = com
- }),
- 一级: $js.toString(() => {
- VODS = JSON.parse(request(input)).list
- }),
- 二级: $js.toString(() => {
- VOD = JSON.parse(request(input)).data
- }),
- 搜索: '*',
-}
\ No newline at end of file
diff --git a/潇洒/js/AQY.js b/潇洒/js/AQY.js
new file mode 100644
index 0000000..b95cf2e
--- /dev/null
+++ b/潇洒/js/AQY.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+Wlh+ePjeW8guWFvVvlrphdJywKICAgIGhvc3Q6ICdodHRwczovL3d3dy5pcWl5aS5jb20nLAogICAgaG9tZVVybDogJycsCiAgICAvLyBkZXRhaWxVcmw6J2h0dHBzOi8vcGN3LWFwaS5pcWl5aS5jb20vYWxidW1zL2FsYnVtL2F2bGlzdGluZm8/YWlkPWZ5aWQmc2l6ZT0yMDAwJnBhZ2U9MScsCiAgICBkZXRhaWxVcmw6ICdodHRwczovL3Bjdy1hcGkuaXFpeWkuY29tL3ZpZGVvL3ZpZGVvL3ZpZGVvaW5mb3dpdGh1c2VyL2Z5aWQ/YWdlbnRfdHlwZT0xJmF1dGhjb29raWU9JnN1YmtleT1meWlkJnN1YnNjcmliZT0xJywKICAgIHNlYXJjaFVybDogJ2h0dHBzOi8vc2VhcmNoLnZpZGVvLmlxaXlpLmNvbS9vP2lmPWh0bWw1JmtleT0qKiZwYWdlTnVtPWZ5cGFnZSZwb3M9MSZwYWdlU2l6ZT0yNCZzaXRlPWlxaXlpJywKICAgIHNlYXJjaGFibGU6IDIsCiAgICBtdWx0aTogMSwKICAgIGZpbHRlcmFibGU6IDEsCiAgICBmaWx0ZXI6IHsKICAgICAgICAnMSc6IFt7CiAgICAgICAgICAgICdrZXknOiAnbW9kZScsCiAgICAgICAgICAgICduYW1lJzogJ+e7vOWQiOaOkuW6jycsCiAgICAgICAgICAgICd2YWx1ZSc6IFt7CiAgICAgICAgICAgICAgICAnbic6ICflhajpg6gnLAogICAgICAgICAgICAgICAgJ3YnOiAnJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfng63mkq3mppwnLAogICAgICAgICAgICAgICAgJ3YnOiAxMQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICflpb3or4TmppwnLAogICAgICAgICAgICAgICAgJ3YnOiA4CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+aWsOS4iue6vycsCiAgICAgICAgICAgICAgICAndic6IDQKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICdrZXknOiAneWVhcicsCiAgICAgICAgICAgICduYW1lJzogJ+WFqOmDqOW5tOS7vScsCiAgICAgICAgICAgICd2YWx1ZSc6IFt7CiAgICAgICAgICAgICAgICAnbic6ICflhajpg6gnLAogICAgICAgICAgICAgICAgJ3YnOiAnJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI1IiwKICAgICAgICAgICAgICAgICJ2IjogMjAyNQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogMjAyNAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDIzJywKICAgICAgICAgICAgICAgICd2JzogMjAyMwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDIyJywKICAgICAgICAgICAgICAgICd2JzogMjAyMgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDIxJywKICAgICAgICAgICAgICAgICd2JzogMjAyMQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDIwJywKICAgICAgICAgICAgICAgICd2JzogMjAyMAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDE5JywKICAgICAgICAgICAgICAgICd2JzogMjAxOQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDE4JywKICAgICAgICAgICAgICAgICd2JzogMjAxOAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDE3JywKICAgICAgICAgICAgICAgICd2JzogMjAxNwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDE2LTIwMTEnLAogICAgICAgICAgICAgICAgJ3YnOiAnMjAxMV8yMDE2JwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDEwLTIwMDAnLAogICAgICAgICAgICAgICAgJ3YnOiAnMjAwMF8yMDEwJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICc5MOW5tOS7oycsCiAgICAgICAgICAgICAgICAndic6ICcxOTkwXzE5OTknCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzgw5bm05LujJywKICAgICAgICAgICAgICAgICd2JzogJzE5ODBfMTk4OScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5pu05pepJywKICAgICAgICAgICAgICAgICd2JzogJzE5NjRfMTk3OScKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICdrZXknOiAnaXNfcHVyY2hhc2UnLAogICAgICAgICAgICAnbmFtZSc6ICflhajpg6jotYTotLknLAogICAgICAgICAgICAndmFsdWUnOiBbewogICAgICAgICAgICAgICAgJ24nOiAn5YWo6YOoJywKICAgICAgICAgICAgICAgICd2JzogJycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5YWN6LS5JywKICAgICAgICAgICAgICAgICd2JzogMAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfkvJrlkZgnLAogICAgICAgICAgICAgICAgJ3YnOiAxCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+S7mOi0uScsCiAgICAgICAgICAgICAgICAndic6IDIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICdrZXknOiAndGhyZWVfY2F0ZWdvcnlfaWQnLAogICAgICAgICAgICAnbmFtZSc6ICflnLDljLonLAogICAgICAgICAgICAndmFsdWUnOiBbewogICAgICAgICAgICAgICAgJ24nOiAn5YWo6YOoJywKICAgICAgICAgICAgICAgICd2JzogJycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5Y2O6K+tJywKICAgICAgICAgICAgICAgICd2JzogMQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfpppnmuK/lnLDljLonLAogICAgICAgICAgICAgICAgJ3YnOiAyODk5NwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfnvo7lm70nLAogICAgICAgICAgICAgICAgJ3YnOiAyCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+asp+a0sicsCiAgICAgICAgICAgICAgICAndic6IDMKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn6Z+p5Zu9JywKICAgICAgICAgICAgICAgICd2JzogNAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfml6XmnKwnLAogICAgICAgICAgICAgICAgJ3YnOiAzMDgKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5rOw5Zu9JywKICAgICAgICAgICAgICAgICd2JzogMTExNQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfljbDluqYnLAogICAgICAgICAgICAgICAgJ3YnOiAyODk5OQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICflhbblroMnLAogICAgICAgICAgICAgICAgJ3YnOiA1CiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAna2V5JzogJzE4MDAxJywKICAgICAgICAgICAgJ25hbWUnOiAn57G75Z6LJywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WWnOWJpycsCiAgICAgICAgICAgICAgICAndic6IDgKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn54ix5oOFJywKICAgICAgICAgICAgICAgICd2JzogNgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfliqjkvZwnLAogICAgICAgICAgICAgICAgJ3YnOiAxMQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfmnqrmiJgnLAogICAgICAgICAgICAgICAgJ3YnOiAxMzEKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn54qv572qJywKICAgICAgICAgICAgICAgICd2JzogMjkxCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+aDiuaCmicsCiAgICAgICAgICAgICAgICAndic6IDEyOAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfmgZDmgJYnLAogICAgICAgICAgICAgICAgJ3YnOiAxMAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfmgqznlpEnLAogICAgICAgICAgICAgICAgJ3YnOiAyODkKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5Yqo55S7JywKICAgICAgICAgICAgICAgICd2JzogMTIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5a625bqtJywKICAgICAgICAgICAgICAgICd2JzogMjczNTYKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5aWH5bm7JywKICAgICAgICAgICAgICAgICd2JzogMTI4NAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfprZTlubsnLAogICAgICAgICAgICAgICAgJ3YnOiAxMjkKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn56eR5bm7JywKICAgICAgICAgICAgICAgICd2JzogOQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfmiJjkuoknLAogICAgICAgICAgICAgICAgJ3YnOiA3CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+mdkuaYpScsCiAgICAgICAgICAgICAgICAndic6IDEzMAogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgJ2tleSc6ICcyNzM5NicsCiAgICAgICAgICAgICduYW1lJzogJ+inhOagvCcsCiAgICAgICAgICAgICd2YWx1ZSc6IFt7CiAgICAgICAgICAgICAgICAnbic6ICflhajpg6gnLAogICAgICAgICAgICAgICAgJ3YnOiAnJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICflt6jliLYnLAogICAgICAgICAgICAgICAgJ3YnOiAyNzM5NwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfpmaLnur8nLAogICAgICAgICAgICAgICAgJ3YnOiAyNzgxNQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfni6zmkq0nLAogICAgICAgICAgICAgICAgJ3YnOiAzMDE0OQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfnvZHnu5znlLXlvbEnLAogICAgICAgICAgICAgICAgJ3YnOiAyNzQwMQogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICcyJzogW3sKICAgICAgICAgICAgJ2tleSc6ICdtb2RlJywKICAgICAgICAgICAgJ25hbWUnOiAn57u85ZCI5o6S5bqPJywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+eDreaSreamnCcsCiAgICAgICAgICAgICAgICAndic6IDExCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WlveivhOamnCcsCiAgICAgICAgICAgICAgICAndic6IDgKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5paw5LiK57q/JywKICAgICAgICAgICAgICAgICd2JzogNAogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgJ2tleSc6ICd5ZWFyJywKICAgICAgICAgICAgJ25hbWUnOiAn5YWo6YOo5bm05Lu9JywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMjMnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDIzCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMjInLAogICAgICAgICAgICAgICAgJ3YnOiAyMDIyCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMjEnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDIxCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMjAnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDIwCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMTknLAogICAgICAgICAgICAgICAgJ3YnOiAyMDE5CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMTgnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDE4CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMTcnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDE3CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMTYtMjAxMScsCiAgICAgICAgICAgICAgICAndic6ICcyMDExXzIwMTYnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMTAtMjAwMCcsCiAgICAgICAgICAgICAgICAndic6ICcyMDAwXzIwMTAnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzkw5bm05LujJywKICAgICAgICAgICAgICAgICd2JzogJzE5OTBfMTk5OScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnODDlubTku6MnLAogICAgICAgICAgICAgICAgJ3YnOiAnMTk4MF8xOTg5JwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfmm7Tml6knLAogICAgICAgICAgICAgICAgJ3YnOiAnMTk2NF8xOTc5JwogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgJ2tleSc6ICdpc19wdXJjaGFzZScsCiAgICAgICAgICAgICduYW1lJzogJ+WFqOmDqOi1hOi0uScsCiAgICAgICAgICAgICd2YWx1ZSc6IFt7CiAgICAgICAgICAgICAgICAnbic6ICflhajpg6gnLAogICAgICAgICAgICAgICAgJ3YnOiAnJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICflhY3otLknLAogICAgICAgICAgICAgICAgJ3YnOiAwCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+S8muWRmCcsCiAgICAgICAgICAgICAgICAndic6IDEKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5LuY6LS5JywKICAgICAgICAgICAgICAgICd2JzogMgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgJ2tleSc6ICd0aHJlZV9jYXRlZ29yeV9pZCcsCiAgICAgICAgICAgICduYW1lJzogJ+WcsOWMuicsCiAgICAgICAgICAgICd2YWx1ZSc6IFt7CiAgICAgICAgICAgICAgICAnbic6ICflhajpg6gnLAogICAgICAgICAgICAgICAgJ3YnOiAnJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICflhoXlnLAnLAogICAgICAgICAgICAgICAgJ3YnOiAxNQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfmuK/liacnLAogICAgICAgICAgICAgICAgJ3YnOiAxNgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfpn6nliacnLAogICAgICAgICAgICAgICAgJ3YnOiAxNwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfnvo7liacnLAogICAgICAgICAgICAgICAgJ3YnOiAxOAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfml6XliacnLAogICAgICAgICAgICAgICAgJ3YnOiAzMDkKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5rOw5YmnJywKICAgICAgICAgICAgICAgICd2JzogMTExNAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICflj7Dmub7lnLDljLonLAogICAgICAgICAgICAgICAgJ3YnOiAxMTE3CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+iLseWJpycsCiAgICAgICAgICAgICAgICAndic6IDI4OTE2CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WFtuWugycsCiAgICAgICAgICAgICAgICAndic6IDE5CiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAna2V5JzogJzE4MDAzJywKICAgICAgICAgICAgJ25hbWUnOiAn57G75Z6LJywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+iHquWIticsCiAgICAgICAgICAgICAgICAndic6IDExOTkyCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WPpOijhScsCiAgICAgICAgICAgICAgICAndic6IDI0CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+iogOaDhScsCiAgICAgICAgICAgICAgICAndic6IDIwCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+atpuS+oCcsCiAgICAgICAgICAgICAgICAndic6IDIzCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WBtuWDjycsCiAgICAgICAgICAgICAgICAndic6IDMwCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WutuW6rScsCiAgICAgICAgICAgICAgICAndic6IDE2NTQKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn6Z2S5pilJywKICAgICAgICAgICAgICAgICd2JzogMTY1MwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfpg73luIInLAogICAgICAgICAgICAgICAgJ3YnOiAyNDA2NAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfllpzliacnLAogICAgICAgICAgICAgICAgJ3YnOiAxMzUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5oiY5LqJJywKICAgICAgICAgICAgICAgICd2JzogMjc5MTYKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5Yab5peFJywKICAgICAgICAgICAgICAgICd2JzogMTY1NQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfosI3miJgnLAogICAgICAgICAgICAgICAgJ3YnOiAyOTAKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5oKs55aRJywKICAgICAgICAgICAgICAgICd2JzogMzIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn572q5qGIJywKICAgICAgICAgICAgICAgICd2JzogMTQ5CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+epv+i2iicsCiAgICAgICAgICAgICAgICAndic6IDE0OAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICflrqvlu7cnLAogICAgICAgICAgICAgICAgJ3YnOiAxMzkKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5Y6G5Y+yJywKICAgICAgICAgICAgICAgICd2JzogMjEKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn56We6K+dJywKICAgICAgICAgICAgICAgICd2JzogMTQ1CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+enkeW5uycsCiAgICAgICAgICAgICAgICAndic6IDM0CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+W5tOS7oycsCiAgICAgICAgICAgICAgICAndic6IDI3CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WGnOadkScsCiAgICAgICAgICAgICAgICAndic6IDI5CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WVhuaImCcsCiAgICAgICAgICAgICAgICAndic6IDE0MAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfliafmg4UnLAogICAgICAgICAgICAgICAgJ3YnOiAyNDA2MwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICflpYflubsnLAogICAgICAgICAgICAgICAgJ3YnOiAyNzg4MQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfnvZHliacnLAogICAgICAgICAgICAgICAgJ3YnOiAyNDA2NQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfnq5bnn63niYcnLAogICAgICAgICAgICAgICAgJ3YnOiAzMjgzOQogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICczJzogW3sKICAgICAgICAgICAgJ2tleSc6ICdtb2RlJywKICAgICAgICAgICAgJ25hbWUnOiAn57u85ZCI5o6S5bqPJywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+eDreaSreamnCcsCiAgICAgICAgICAgICAgICAndic6IDExCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WlveivhOamnCcsCiAgICAgICAgICAgICAgICAndic6IDgKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5paw5LiK57q/JywKICAgICAgICAgICAgICAgICd2JzogNAogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgJ2tleSc6ICd5ZWFyJywKICAgICAgICAgICAgJ25hbWUnOiAn5YWo6YOo5bm05Lu9JywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMjMnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDIzCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMjInLAogICAgICAgICAgICAgICAgJ3YnOiAyMDIyCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMjEnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDIxCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMjAnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDIwCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMTknLAogICAgICAgICAgICAgICAgJ3YnOiAyMDE5CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMTgnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDE4CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMTcnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDE3CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMTYtMjAxMScsCiAgICAgICAgICAgICAgICAndic6ICcyMDExXzIwMTYnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMTAtMjAwMCcsCiAgICAgICAgICAgICAgICAndic6ICcyMDAwXzIwMTAnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzkw5bm05LujJywKICAgICAgICAgICAgICAgICd2JzogJzE5OTBfMTk5OScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnODDlubTku6MnLAogICAgICAgICAgICAgICAgJ3YnOiAnMTk4MF8xOTg5JwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfmm7Tml6knLAogICAgICAgICAgICAgICAgJ3YnOiAnMTk2NF8xOTc5JwogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgJ2tleSc6ICdpc19wdXJjaGFzZScsCiAgICAgICAgICAgICduYW1lJzogJ+WFqOmDqOi1hOi0uScsCiAgICAgICAgICAgICd2YWx1ZSc6IFt7CiAgICAgICAgICAgICAgICAnbic6ICflhajpg6gnLAogICAgICAgICAgICAgICAgJ3YnOiAnJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICflhY3otLknLAogICAgICAgICAgICAgICAgJ3YnOiAwCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+S8muWRmCcsCiAgICAgICAgICAgICAgICAndic6IDEKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5LuY6LS5JywKICAgICAgICAgICAgICAgICd2JzogMgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgJ2tleSc6ICd0aHJlZV9jYXRlZ29yeV9pZCcsCiAgICAgICAgICAgICduYW1lJzogJ+WcsOWMuicsCiAgICAgICAgICAgICd2YWx1ZSc6IFt7CiAgICAgICAgICAgICAgICAnbic6ICflhajpg6gnLAogICAgICAgICAgICAgICAgJ3YnOiAnJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICflm73lhoUnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDMyMwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICflm73lpJYnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDMyNAogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgJ2tleSc6ICcxODAwNCcsCiAgICAgICAgICAgICduYW1lJzogJ+exu+WeiycsCiAgICAgICAgICAgICd2YWx1ZSc6IFt7CiAgICAgICAgICAgICAgICAnbic6ICflhajpg6gnLAogICAgICAgICAgICAgICAgJ3YnOiAnJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfkurrmlocnLAogICAgICAgICAgICAgICAgJ3YnOiA3MAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfnvo7po58nLAogICAgICAgICAgICAgICAgJ3YnOiAzMzkwOAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfljLvnlpcnLAogICAgICAgICAgICAgICAgJ3YnOiAzMzkyNAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfoh6rnhLYnLAogICAgICAgICAgICAgICAgJ3YnOiAzMzkzMwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfokIzlrqAnLAogICAgICAgICAgICAgICAgJ3YnOiAzMzk0NQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfotKLnu48nLAogICAgICAgICAgICAgICAgJ3YnOiAzMzk1MwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfnvarmoYgnLAogICAgICAgICAgICAgICAgJ3YnOiAzMzk2MAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfnq57mioAnLAogICAgICAgICAgICAgICAgJ3YnOiAzMzk2NwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfngb7pmr4nLAogICAgICAgICAgICAgICAgJ3YnOiAzMzk3NAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICflhpvkuosnLAogICAgICAgICAgICAgICAgJ3YnOiA3MgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfljoblj7InLAogICAgICAgICAgICAgICAgJ3YnOiA3NAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfmjqLpmaknLAogICAgICAgICAgICAgICAgJ3YnOiA3MwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfnpL7kvJonLAogICAgICAgICAgICAgICAgJ3YnOiA3MQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfnp5HmioAnLAogICAgICAgICAgICAgICAgJ3YnOiAyODExOQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfml4XmuLgnLAogICAgICAgICAgICAgICAgJ3YnOiAzMTAKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICdrZXknOiAnMjg0NjcnLAogICAgICAgICAgICAnbmFtZSc6ICflh7rlk4HmlrknLAogICAgICAgICAgICAndmFsdWUnOiBbewogICAgICAgICAgICAgICAgJ24nOiAn5YWo6YOoJywKICAgICAgICAgICAgICAgICd2JzogJycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnQkJDJywKICAgICAgICAgICAgICAgICd2JzogMjg0NjgKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn576O5Zu95Y6G5Y+y6aKR6YGTJywKICAgICAgICAgICAgICAgICd2JzogMjg0NzAKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5o6i57Si6aKR6YGTJywKICAgICAgICAgICAgICAgICd2JzogMjg0NzEKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5aSu6KeG6K6w5b2VJywKICAgICAgICAgICAgICAgICd2JzogMjg0NzIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5YyX5Lqs57qq5a6e6aKR6YGTJywKICAgICAgICAgICAgICAgICd2JzogMjg0NzMKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5LiK5rW357qq5a6e6aKR6YGTJywKICAgICAgICAgICAgICAgICd2JzogMjg0NzQKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5pyX5oCd5paH5YyWJywKICAgICAgICAgICAgICAgICd2JzogMjg0NzYKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnQ05FWCcsCiAgICAgICAgICAgICAgICAndic6IDI4NDc3CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+S6lOaYn+S8oOWlhycsCiAgICAgICAgICAgICAgICAndic6IDI4NDc4CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ0lNRycsCiAgICAgICAgICAgICAgICAndic6IDI4NDc5CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ05ISycsCiAgICAgICAgICAgICAgICAndic6IDI4NDgwCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+eIseWlh+iJuuWHuuWTgScsCiAgICAgICAgICAgICAgICAndic6IDMxMjgzCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ05ldGZsaXgnLAogICAgICAgICAgICAgICAgJ3YnOiAzMTI4NgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgJ2tleSc6ICcyOTA3NicsCiAgICAgICAgICAgICduYW1lJzogJ+eJh+enjScsCiAgICAgICAgICAgICd2YWx1ZSc6IFt7CiAgICAgICAgICAgICAgICAnbic6ICflhajpg6gnLAogICAgICAgICAgICAgICAgJ3YnOiAnJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfnuqrlvZXnlLXlvbEnLAogICAgICAgICAgICAgICAgJ3YnOiAyOTA3NwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfns7vliJfnuqrlvZXniYcnLAogICAgICAgICAgICAgICAgJ3YnOiAyOTA3OAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfnvZHnu5znuqrlvZXniYcnLAogICAgICAgICAgICAgICAgJ3YnOiAyOTA4MgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfnuqrlrp7moI/nm64nLAogICAgICAgICAgICAgICAgJ3YnOiAyOTA4MwogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgJ2tleSc6ICczMTI5NCcsCiAgICAgICAgICAgICduYW1lJzogJ+aXtumVvycsCiAgICAgICAgICAgICd2YWx1ZSc6IFt7CiAgICAgICAgICAgICAgICAnbic6ICflhajpg6gnLAogICAgICAgICAgICAgICAgJ3YnOiAnJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICflvq7nuqrlvZUnLAogICAgICAgICAgICAgICAgJ3YnOiAyOTA3OQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfplb/nuqrlvZUnLAogICAgICAgICAgICAgICAgJ3YnOiAyOTA4MAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfnn63nuqrlvZUnLAogICAgICAgICAgICAgICAgJ3YnOiAyOTA4MQogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICc0JzogW3sKICAgICAgICAgICAgJ2tleSc6ICdtb2RlJywKICAgICAgICAgICAgJ25hbWUnOiAn57u85ZCI5o6S5bqPJywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+eDreaSreamnCcsCiAgICAgICAgICAgICAgICAndic6IDExCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WlveivhOamnCcsCiAgICAgICAgICAgICAgICAndic6IDgKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5paw5LiK57q/JywKICAgICAgICAgICAgICAgICd2JzogNAogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgJ2tleSc6ICd5ZWFyJywKICAgICAgICAgICAgJ25hbWUnOiAn5YWo6YOo5bm05Lu9JywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMjMnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDIzCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMjInLAogICAgICAgICAgICAgICAgJ3YnOiAyMDIyCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMjEnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDIxCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMjAnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDIwCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMTknLAogICAgICAgICAgICAgICAgJ3YnOiAyMDE5CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMTgnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDE4CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMTcnLAogICAgICAgICAgICAgICAgJ3YnOiAyMDE3CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMTYtMjAxMScsCiAgICAgICAgICAgICAgICAndic6ICcyMDExXzIwMTYnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzIwMTAtMjAwMCcsCiAgICAgICAgICAgICAgICAndic6ICcyMDAwXzIwMTAnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzkw5bm05LujJywKICAgICAgICAgICAgICAgICd2JzogJzE5OTBfMTk5OScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnODDlubTku6MnLAogICAgICAgICAgICAgICAgJ3YnOiAnMTk4MF8xOTg5JwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfmm7Tml6knLAogICAgICAgICAgICAgICAgJ3YnOiAnMTk2NF8xOTc5JwogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgJ2tleSc6ICdpc19wdXJjaGFzZScsCiAgICAgICAgICAgICduYW1lJzogJ+WFqOmDqOi1hOi0uScsCiAgICAgICAgICAgICd2YWx1ZSc6IFt7CiAgICAgICAgICAgICAgICAnbic6ICflhajpg6gnLAogICAgICAgICAgICAgICAgJ3YnOiAnJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICflhY3otLknLAogICAgICAgICAgICAgICAgJ3YnOiAwCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+S8muWRmCcsCiAgICAgICAgICAgICAgICAndic6IDEKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5LuY6LS5JywKICAgICAgICAgICAgICAgICd2JzogMgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgJ2tleSc6ICd0aHJlZV9jYXRlZ29yeV9pZCcsCiAgICAgICAgICAgICduYW1lJzogJ+WcsOWMuicsCiAgICAgICAgICAgICd2YWx1ZSc6IFt7CiAgICAgICAgICAgICAgICAnbic6ICflhajpg6gnLAogICAgICAgICAgICAgICAgJ3YnOiAnJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfkuK3lm73lpKfpmYYnLAogICAgICAgICAgICAgICAgJ3YnOiAzNwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfml6XmnKwnLAogICAgICAgICAgICAgICAgJ3YnOiAzOAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfpn6nlm70nLAogICAgICAgICAgICAgICAgJ3YnOiAxMTA2CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+asp+e+jicsCiAgICAgICAgICAgICAgICAndic6IDMwMjE4CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WFtuWugycsCiAgICAgICAgICAgICAgICAndic6IDQwCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAna2V5JzogJzMwMjE5JywKICAgICAgICAgICAgJ25hbWUnOiAn54mI5pysJywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WKqOeUuycsCiAgICAgICAgICAgICAgICAndic6IDMwMjIwCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+eJueaRhCcsCiAgICAgICAgICAgICAgICAndic6IDMwMjIzCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+W4g+iii+aIjycsCiAgICAgICAgICAgICAgICAndic6IDMwMjI0CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+eJueWIq+evhycsCiAgICAgICAgICAgICAgICAndic6IDMyNzgyCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WKqOaAgea8q+eUuycsCiAgICAgICAgICAgICAgICAndic6IDMyNzgzCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WKqOeUu+eUteW9sScsCiAgICAgICAgICAgICAgICAndic6IDMyNzg0CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+erlueJiOinhumikScsCiAgICAgICAgICAgICAgICAndic6IDMyNzg1CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+i9u+WKqOeUuycsCiAgICAgICAgICAgICAgICAndic6IDMzNDgyCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+efreWJpycsCiAgICAgICAgICAgICAgICAndic6IDMzNDgzCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAna2V5JzogJzMwMjI1JywKICAgICAgICAgICAgJ25hbWUnOiAn6aOO5qC8JywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+aQnueskScsCiAgICAgICAgICAgICAgICAndic6IDMwMjMwCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+eDreihgCcsCiAgICAgICAgICAgICAgICAndic6IDMwMjMyCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WCrOazqicsCiAgICAgICAgICAgICAgICAndic6IDMwMjMzCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+ayu+aEiCcsCiAgICAgICAgICAgICAgICAndic6IDMwMjM0CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WKseW/lycsCiAgICAgICAgICAgICAgICAndic6IDMwMjM3CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+acuuaImCcsCiAgICAgICAgICAgICAgICAndic6IDMwMjQxCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+aBi+eIsScsCiAgICAgICAgICAgICAgICAndic6IDMwMjQzCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+enkeW5uycsCiAgICAgICAgICAgICAgICAndic6IDMwMjQ1CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+Wlh+W5uycsCiAgICAgICAgICAgICAgICAndic6IDMwMjQ3CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+aOqOeQhicsCiAgICAgICAgICAgICAgICAndic6IDMwMjQ4CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+agoeWbrScsCiAgICAgICAgICAgICAgICAndic6IDMwMjQ5CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+aXpeW4uCcsCiAgICAgICAgICAgICAgICAndic6IDMwMjUyCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WOhuWPsicsCiAgICAgICAgICAgICAgICAndic6IDMwMjU0CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+e+jumjnycsCiAgICAgICAgICAgICAgICAndic6IDMwMjU1CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+iBjOWcuicsCiAgICAgICAgICAgICAgICAndic6IDMwMjU2CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WBtuWDjycsCiAgICAgICAgICAgICAgICAndic6IDMwMjU4CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+azoemdoicsCiAgICAgICAgICAgICAgICAndic6IDMwMjY1CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WGkumZqScsCiAgICAgICAgICAgICAgICAndic6IDMwMjY3CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+ernuaKgCcsCiAgICAgICAgICAgICAgICAndic6IDMwMjY4CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WQiOWutuasoicsCiAgICAgICAgICAgICAgICAndic6IDMwMjcwCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+atpuS+oCcsCiAgICAgICAgICAgICAgICAndic6IDMyNzkyCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+eOhOW5uycsCiAgICAgICAgICAgICAgICAndic6IDMyNzkzCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAna2V5JzogJzMyNzk1JywKICAgICAgICAgICAgJ25hbWUnOiAn5paw57G75Z6LJywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+i9u+Wwj+ivtOaUuee8licsCiAgICAgICAgICAgICAgICAndic6IDMyNzk2CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+a8q+eUu+aUuee8licsCiAgICAgICAgICAgICAgICAndic6IDMyNzk3CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+a4uOaIj+aUuee8licsCiAgICAgICAgICAgICAgICAndic6IDMyNzk4CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WOn+WImycsCiAgICAgICAgICAgICAgICAndic6IDMyNzk5CiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgJzYnOiBbewogICAgICAgICAgICAna2V5JzogJ21vZGUnLAogICAgICAgICAgICAnbmFtZSc6ICfnu7zlkIjmjpLluo8nLAogICAgICAgICAgICAndmFsdWUnOiBbewogICAgICAgICAgICAgICAgJ24nOiAn5YWo6YOoJywKICAgICAgICAgICAgICAgICd2JzogJycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn54Ot5pKt5qacJywKICAgICAgICAgICAgICAgICd2JzogMTEKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5aW96K+E5qacJywKICAgICAgICAgICAgICAgICd2JzogOAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfmlrDkuIrnur8nLAogICAgICAgICAgICAgICAgJ3YnOiA0CiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAna2V5JzogJ3llYXInLAogICAgICAgICAgICAnbmFtZSc6ICflhajpg6jlubTku70nLAogICAgICAgICAgICAndmFsdWUnOiBbewogICAgICAgICAgICAgICAgJ24nOiAn5YWo6YOoJywKICAgICAgICAgICAgICAgICd2JzogJycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAyMycsCiAgICAgICAgICAgICAgICAndic6IDIwMjMKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAyMicsCiAgICAgICAgICAgICAgICAndic6IDIwMjIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAyMScsCiAgICAgICAgICAgICAgICAndic6IDIwMjEKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAyMCcsCiAgICAgICAgICAgICAgICAndic6IDIwMjAKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAxOScsCiAgICAgICAgICAgICAgICAndic6IDIwMTkKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAxOCcsCiAgICAgICAgICAgICAgICAndic6IDIwMTgKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAxNycsCiAgICAgICAgICAgICAgICAndic6IDIwMTcKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAxNi0yMDExJywKICAgICAgICAgICAgICAgICd2JzogJzIwMTFfMjAxNicKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAxMC0yMDAwJywKICAgICAgICAgICAgICAgICd2JzogJzIwMDBfMjAxMCcKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnOTDlubTku6MnLAogICAgICAgICAgICAgICAgJ3YnOiAnMTk5MF8xOTk5JwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICc4MOW5tOS7oycsCiAgICAgICAgICAgICAgICAndic6ICcxOTgwXzE5ODknCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+abtOaXqScsCiAgICAgICAgICAgICAgICAndic6ICcxOTY0XzE5NzknCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAna2V5JzogJ2lzX3B1cmNoYXNlJywKICAgICAgICAgICAgJ25hbWUnOiAn5YWo6YOo6LWE6LS5JywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WFjei0uScsCiAgICAgICAgICAgICAgICAndic6IDAKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5Lya5ZGYJywKICAgICAgICAgICAgICAgICd2JzogMQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfku5jotLknLAogICAgICAgICAgICAgICAgJ3YnOiAyCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAna2V5JzogJ3RocmVlX2NhdGVnb3J5X2lkJywKICAgICAgICAgICAgJ25hbWUnOiAn5Zyw5Yy6JywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WGheWcsCcsCiAgICAgICAgICAgICAgICAndic6IDE1MQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfmuK/lj7AnLAogICAgICAgICAgICAgICAgJ3YnOiAxNTIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn6Z+p5Zu9JywKICAgICAgICAgICAgICAgICd2JzogMzMzMDYKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5qyn576OJywKICAgICAgICAgICAgICAgICd2JzogMTU0CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WFtuWugycsCiAgICAgICAgICAgICAgICAndic6IDExMTMKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICdrZXknOiAnMTgwMTQnLAogICAgICAgICAgICAnbmFtZSc6ICfnsbvlnosnLAogICAgICAgICAgICAndmFsdWUnOiBbewogICAgICAgICAgICAgICAgJ24nOiAn5YWo6YOoJywKICAgICAgICAgICAgICAgICd2JzogJycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5pKt5oqlJywKICAgICAgICAgICAgICAgICd2JzogMTU1CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+iuv+iwiCcsCiAgICAgICAgICAgICAgICAndic6IDE1NgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfmuLjmiI8nLAogICAgICAgICAgICAgICAgJ3YnOiAxNTgKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5pma5LyaJywKICAgICAgICAgICAgICAgICd2JzogMjkyCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+absuiJuicsCiAgICAgICAgICAgICAgICAndic6IDI5MwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfohLHlj6Pnp4AnLAogICAgICAgICAgICAgICAgJ3YnOiAyMTE4CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+ecn+S6uuengCcsCiAgICAgICAgICAgICAgICAndic6IDIyMjQKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn56ue5oqAJywKICAgICAgICAgICAgICAgICd2JzogMzAyNzgKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn54ix5aWH6Im65Ye65ZOBJywKICAgICAgICAgICAgICAgICd2JzogMzAyNzkKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn56ue5ryUJywKICAgICAgICAgICAgICAgICd2JzogMzM4NjAKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICdrZXknOiAnMzMxNjInLAogICAgICAgICAgICAnbmFtZSc6ICfpopjmnZAnLAogICAgICAgICAgICAndmFsdWUnOiBbewogICAgICAgICAgICAgICAgJ24nOiAn5YWo6YOoJywKICAgICAgICAgICAgICAgICd2JzogJycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn6Z+z5LmQJywKICAgICAgICAgICAgICAgICd2JzogMzMxNjMKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn6Iie6LmIJywKICAgICAgICAgICAgICAgICd2JzogMzMxNzIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5paH5YyWJywKICAgICAgICAgICAgICAgICd2JzogMzMxNzMKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn576O6aOfJywKICAgICAgICAgICAgICAgICd2JzogMzMxODIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5Lym55CGJywKICAgICAgICAgICAgICAgICd2JzogMzMxODQKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn55u45LqyJywKICAgICAgICAgICAgICAgICd2JzogMzMxOTMKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn57qq5a6eJywKICAgICAgICAgICAgICAgICd2JzogMzMxOTUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn55Sf5rS7JywKICAgICAgICAgICAgICAgICd2JzogMzMxOTYKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5Lqy5a2QJywKICAgICAgICAgICAgICAgICd2JzogMzMxOTcKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5bCR5YS/JywKICAgICAgICAgICAgICAgICd2JzogMzMxOTgKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn6LSi57uPJywKICAgICAgICAgICAgICAgICd2JzogMzMxOTkKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5YGl5bq3JywKICAgICAgICAgICAgICAgICd2JzogMzMyMDAKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5pe25bCaJywKICAgICAgICAgICAgICAgICd2JzogMzMyMDMKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5peF5ri4JywKICAgICAgICAgICAgICAgICd2JzogMzMyMDUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5pWZ6IKyJywKICAgICAgICAgICAgICAgICd2JzogMzMyMDYKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5YW25a6DJywKICAgICAgICAgICAgICAgICd2JzogMzMyMjAKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn54ix5oOFJywKICAgICAgICAgICAgICAgICd2JzogMzMzMTYKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5pCe56yRJywKICAgICAgICAgICAgICAgICd2JzogMzMzMTcKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn55uK5pm6JywKICAgICAgICAgICAgICAgICd2JzogMzMzMTgKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn6IGM5Zy6JywKICAgICAgICAgICAgICAgICd2JzogMzMzMTkKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn6K+t6KiAJywKICAgICAgICAgICAgICAgICd2JzogMzM1MzAKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn6L6p6K66JywKICAgICAgICAgICAgICAgICd2JzogMzM1MzEKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5ryU6K6yJywKICAgICAgICAgICAgICAgICd2JzogMzM4NDMKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAnNSc6IFt7CiAgICAgICAgICAgICdrZXknOiAnbW9kZScsCiAgICAgICAgICAgICduYW1lJzogJ+e7vOWQiOaOkuW6jycsCiAgICAgICAgICAgICd2YWx1ZSc6IFt7CiAgICAgICAgICAgICAgICAnbic6ICflhajpg6gnLAogICAgICAgICAgICAgICAgJ3YnOiAnJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfng63mkq3mppwnLAogICAgICAgICAgICAgICAgJ3YnOiAxMQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICflpb3or4TmppwnLAogICAgICAgICAgICAgICAgJ3YnOiA4CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+aWsOS4iue6vycsCiAgICAgICAgICAgICAgICAndic6IDQKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICdrZXknOiAneWVhcicsCiAgICAgICAgICAgICduYW1lJzogJ+WFqOmDqOW5tOS7vScsCiAgICAgICAgICAgICd2YWx1ZSc6IFt7CiAgICAgICAgICAgICAgICAnbic6ICflhajpg6gnLAogICAgICAgICAgICAgICAgJ3YnOiAnJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDIzJywKICAgICAgICAgICAgICAgICd2JzogMjAyMwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDIyJywKICAgICAgICAgICAgICAgICd2JzogMjAyMgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDIxJywKICAgICAgICAgICAgICAgICd2JzogMjAyMQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDIwJywKICAgICAgICAgICAgICAgICd2JzogMjAyMAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDE5JywKICAgICAgICAgICAgICAgICd2JzogMjAxOQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDE4JywKICAgICAgICAgICAgICAgICd2JzogMjAxOAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDE3JywKICAgICAgICAgICAgICAgICd2JzogMjAxNwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDE2LTIwMTEnLAogICAgICAgICAgICAgICAgJ3YnOiAnMjAxMV8yMDE2JwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICcyMDEwLTIwMDAnLAogICAgICAgICAgICAgICAgJ3YnOiAnMjAwMF8yMDEwJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICc5MOW5tOS7oycsCiAgICAgICAgICAgICAgICAndic6ICcxOTkwXzE5OTknCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJzgw5bm05LujJywKICAgICAgICAgICAgICAgICd2JzogJzE5ODBfMTk4OScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5pu05pepJywKICAgICAgICAgICAgICAgICd2JzogJzE5NjRfMTk3OScKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICdrZXknOiAnaXNfcHVyY2hhc2UnLAogICAgICAgICAgICAnbmFtZSc6ICflhajpg6jotYTotLknLAogICAgICAgICAgICAndmFsdWUnOiBbewogICAgICAgICAgICAgICAgJ24nOiAn5YWo6YOoJywKICAgICAgICAgICAgICAgICd2JzogJycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5YWN6LS5JywKICAgICAgICAgICAgICAgICd2JzogMAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfkvJrlkZgnLAogICAgICAgICAgICAgICAgJ3YnOiAxCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+S7mOi0uScsCiAgICAgICAgICAgICAgICAndic6IDIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICdrZXknOiAndGhyZWVfY2F0ZWdvcnlfaWQnLAogICAgICAgICAgICAnbmFtZSc6ICflnLDljLonLAogICAgICAgICAgICAndmFsdWUnOiBbewogICAgICAgICAgICAgICAgJ24nOiAn5YWo6YOoJywKICAgICAgICAgICAgICAgICd2JzogJycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5YaF5ZywJywKICAgICAgICAgICAgICAgICd2JzogMjIxCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+a4r+WPsCcsCiAgICAgICAgICAgICAgICAndic6IDIyMAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfmrKfnvo4nLAogICAgICAgICAgICAgICAgJ3YnOiAyMTkKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5pel6Z+pJywKICAgICAgICAgICAgICAgICd2JzogMjE4CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+aLiee+jicsCiAgICAgICAgICAgICAgICAndic6IDIxNwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfkuprmtLLlnLDljLonLAogICAgICAgICAgICAgICAgJ3YnOiAyMTYKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn6Z2e5rSyJywKICAgICAgICAgICAgICAgICd2JzogMjE1CiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAna2V5JzogJzE4MDA5JywKICAgICAgICAgICAgJ25hbWUnOiAn6K+t56eNJywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+aZrumAmuivnScsCiAgICAgICAgICAgICAgICAndic6IDkxCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+eypOivrScsCiAgICAgICAgICAgICAgICAndic6IDkyCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+mXveWNl+ivrScsCiAgICAgICAgICAgICAgICAndic6IDkzCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+iLseivrScsCiAgICAgICAgICAgICAgICAndic6IDk0CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+aXpeivrScsCiAgICAgICAgICAgICAgICAndic6IDk1CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+mfqeivrScsCiAgICAgICAgICAgICAgICAndic6IDk2CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WFtuWugycsCiAgICAgICAgICAgICAgICAndic6IDk3CiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAna2V5JzogJzIzNTU0JywKICAgICAgICAgICAgJ25hbWUnOiAn6Z+z5LmQ57G75Z6LJywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WNleabsk1WJywKICAgICAgICAgICAgICAgICd2JzogMjM1NTYKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5Y2V5puy546w5Zy6JywKICAgICAgICAgICAgICAgICd2JzogMjM1NTcKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5ryU5ZSx5LyaJywKICAgICAgICAgICAgICAgICd2JzogMjM1NTgKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5paw6Ze7JywKICAgICAgICAgICAgICAgICd2JzogMjM1NTkKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn6K6/6LCIJywKICAgICAgICAgICAgICAgICd2JzogMjM1NjAKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn6Z+z5LmQ6K6w5b2VJywKICAgICAgICAgICAgICAgICd2JzogMjM1NjEKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn6Z+z5LmQ5ZGo6L65JywKICAgICAgICAgICAgICAgICd2JzogMjM1NjIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn6Z+z5LmQ6IqC55uuJywKICAgICAgICAgICAgICAgICd2JzogMjM1NjMKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5b2x6KeG5Y6f5aOwJywKICAgICAgICAgICAgICAgICd2JzogMjM1NjQKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn6Z+z5LmQ55+t54mHJywKICAgICAgICAgICAgICAgICd2JzogMjM1NjUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5YW25LuWJywKICAgICAgICAgICAgICAgICd2JzogMjM1NjYKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAnMTYnOiBbewogICAgICAgICAgICAna2V5JzogJ21vZGUnLAogICAgICAgICAgICAnbmFtZSc6ICfnu7zlkIjmjpLluo8nLAogICAgICAgICAgICAndmFsdWUnOiBbewogICAgICAgICAgICAgICAgJ24nOiAn5YWo6YOoJywKICAgICAgICAgICAgICAgICd2JzogJycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn54Ot5pKt5qacJywKICAgICAgICAgICAgICAgICd2JzogMTEKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5aW96K+E5qacJywKICAgICAgICAgICAgICAgICd2JzogOAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfmlrDkuIrnur8nLAogICAgICAgICAgICAgICAgJ3YnOiA0CiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAna2V5JzogJ3llYXInLAogICAgICAgICAgICAnbmFtZSc6ICflhajpg6jlubTku70nLAogICAgICAgICAgICAndmFsdWUnOiBbewogICAgICAgICAgICAgICAgJ24nOiAn5YWo6YOoJywKICAgICAgICAgICAgICAgICd2JzogJycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAyMycsCiAgICAgICAgICAgICAgICAndic6IDIwMjMKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAyMicsCiAgICAgICAgICAgICAgICAndic6IDIwMjIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAyMScsCiAgICAgICAgICAgICAgICAndic6IDIwMjEKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAyMCcsCiAgICAgICAgICAgICAgICAndic6IDIwMjAKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAxOScsCiAgICAgICAgICAgICAgICAndic6IDIwMTkKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAxOCcsCiAgICAgICAgICAgICAgICAndic6IDIwMTgKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAxNycsCiAgICAgICAgICAgICAgICAndic6IDIwMTcKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAxNi0yMDExJywKICAgICAgICAgICAgICAgICd2JzogJzIwMTFfMjAxNicKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnMjAxMC0yMDAwJywKICAgICAgICAgICAgICAgICd2JzogJzIwMDBfMjAxMCcKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAnOTDlubTku6MnLAogICAgICAgICAgICAgICAgJ3YnOiAnMTk5MF8xOTk5JwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICc4MOW5tOS7oycsCiAgICAgICAgICAgICAgICAndic6ICcxOTgwXzE5ODknCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+abtOaXqScsCiAgICAgICAgICAgICAgICAndic6ICcxOTY0XzE5NzknCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAna2V5JzogJ2lzX3B1cmNoYXNlJywKICAgICAgICAgICAgJ25hbWUnOiAn5YWo6YOo6LWE6LS5JywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WFjei0uScsCiAgICAgICAgICAgICAgICAndic6IDAKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5Lya5ZGYJywKICAgICAgICAgICAgICAgICd2JzogMQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfku5jotLknLAogICAgICAgICAgICAgICAgJ3YnOiAyCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAna2V5JzogJzE4MDYxJywKICAgICAgICAgICAgJ25hbWUnOiAn57G75Z6LJywKICAgICAgICAgICAgJ3ZhbHVlJzogW3sKICAgICAgICAgICAgICAgICduJzogJ+WFqOmDqCcsCiAgICAgICAgICAgICAgICAndic6ICcnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+WWnOWJpycsCiAgICAgICAgICAgICAgICAndic6IDEyOTYKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn54ix5oOFJywKICAgICAgICAgICAgICAgICd2JzogMTI5NwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfliqjkvZwnLAogICAgICAgICAgICAgICAgJ3YnOiAxMjk4CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+Wlh+W5uycsCiAgICAgICAgICAgICAgICAndic6IDEyOTkKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgJ24nOiAn5oOK5oKaJywKICAgICAgICAgICAgICAgICd2JzogMTMwMAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAnbic6ICfmgqznlpEnLAogICAgICAgICAgICAgICAgJ3YnOiAxMzAxCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICduJzogJ+mdkuaYpScsCiAgICAgICAgICAgICAgICAndic6IDEzMDIKICAgICAgICAgICAgfV0KICAgICAgICB9XQogICAgfSwKICAgIC8vIHVybDonaHR0cHM6Ly9wY3ctYXBpLmlxaXlpLmNvbS9zZWFyY2gvcmVjb21tZW5kL2xpc3Q/Y2hhbm5lbF9pZD1meWNsYXNzJmRhdGFfdHlwZT0xJmlzX3B1cmNoYXNlPSZtb2RlPTI0JnBhZ2VfaWQ9ZnlwYWdlJnJldF9udW09NDgmdGhyZWVfY2F0ZWdvcnlfaWQ9JywKICAgIHVybDogJ2h0dHBzOi8vcGN3LWFwaS5pcWl5aS5jb20vc2VhcmNoL3JlY29tbWVuZC9saXN0P2NoYW5uZWxfaWQ9ZnljbGFzcyZkYXRhX3R5cGU9MSZwYWdlX2lkPWZ5cGFnZSZyZXRfbnVtPTQ4JywKICAgIGZpbHRlcl91cmw6ICdpc19wdXJjaGFzZT17e2ZsLmlzX3B1cmNoYXNlfX0mbW9kZT17e2ZsLm1vZGV9fSZ0aHJlZV9jYXRlZ29yeV9pZD17e2ZsLnRocmVlX2NhdGVnb3J5X2lkfX0mbWFya2V0X3JlbGVhc2VfZGF0ZV9sZXZlbD17e2ZsLnllYXJ9fScsCiAgICAvLyB1cmw6J2h0dHBzOi8vcGN3LWFwaS5pcWl5aS5jb20vc2VhcmNoL3ZpZGVvL3ZpZGVvbGlzdHM/Y2hhbm5lbF9pZD1meWNsYXNzJnBhZ2VOdW09ZnlwYWdlJnBhZ2VTaXplPTI0JmRhdGFfdHlwZT0xJnNpdGU9aXFpeWknLAogICAgaGVhZGVyczogewogICAgICAgICdVc2VyLUFnZW50JzogJ01PQklMRV9VQScKICAgIH0sCiAgICB0aW1lb3V0OiA1MDAwLAogICAgY2xhc3NfbmFtZTogJ+eUteW9sSbnlLXop4bliacm57qq5b2V54mHJuWKqOa8qybnu7zoibom6Z+z5LmQJue9kee7nOeUteW9sScsCiAgICBjbGFzc191cmw6ICcxJjImMyY0JjYmNSYxNicsCiAgICBsaW1pdDogMjAsCiAgICBwbGF5X3BhcnNlOiB0cnVlLAogICAgbGF6eTogJGpzLnRvU3RyaW5nKCgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgICBsZXQgYXBpID0gIiIgKyBpbnB1dC5zcGxpdCgiPyIpWzBdOwogICAgICAgICAgICBjb25zb2xlLmxvZyhhcGkpOwogICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSBmZXRjaChhcGksIHsKICAgICAgICAgICAgICAgIG1ldGhvZDogJ2dldCcsCiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnb2todHRwLzMuMTQuOScsCiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBsZXQgYmF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2UpOwogICAgICAgICAgICBpZiAoYmF0YS51cmwuaW5jbHVkZXMoInFpeWkiKSkgewogICAgICAgICAgICAgICAgaW5wdXQgPSB7CiAgICAgICAgICAgICAgICAgICAgcGFyc2U6IDAsCiAgICAgICAgICAgICAgICAgICAgdXJsOiBiYXRhLnVybCwKICAgICAgICAgICAgICAgICAgICBqeDogMCwKICAgICAgICAgICAgICAgICAgICBkYW5tYWt1OiAiaHR0cDovLzEyNy4wLjAuMTo5OTc4L3Byb3h5P2RvPWRhbm11JnNpdGU9anMmdXJsPWh0dHA6Ly9kbS5xeHE2LmNvbS96eS9hcGkucGhwP3VybD0iICsgaW5wdXQuc3BsaXQoIj8iKVswXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlucHV0ID0gewogICAgICAgICAgICAgICAgICAgIHBhcnNlOiAwLAogICAgICAgICAgICAgICAgICAgIHVybDogaW5wdXQuc3BsaXQoIj8iKVswXSwKICAgICAgICAgICAgICAgICAgICBqeDogMSwKICAgICAgICAgICAgICAgICAgICBkYW5tYWt1OiAiaHR0cDovLzEyNy4wLjAuMTo5OTc4L3Byb3h5P2RvPWRhbm11JnNpdGU9anMmdXJsPWh0dHA6Ly9kbS5xeHE2LmNvbS96eS9hcGkucGhwP3VybD0iICsgaW5wdXQuc3BsaXQoIj8iKVswXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICBpbnB1dCA9IHsKICAgICAgICAgICAgICAgIHBhcnNlOiAwLAogICAgICAgICAgICAgICAgdXJsOiBpbnB1dC5zcGxpdCgiPyIpWzBdLAogICAgICAgICAgICAgICAgang6IDEsCiAgICAgICAgICAgICAgICBkYW5tYWt1OiAiaHR0cDovLzEyNy4wLjAuMTo5OTc4L3Byb3h5P2RvPWRhbm11JnNpdGU9anMmdXJsPWh0dHA6Ly9kbS5xeHE2LmNvbS96eS9hcGkucGhwP3VybD0iICsgaW5wdXQuc3BsaXQoIj8iKVswXQogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0pLAogICAgLy8gcGxheV9wYXJzZTp0cnVlLAogICAgLy8g5omL5Yqo6LCD55So6Kej5p6Q6K+35rGCanNvbueahHVybCzmraRsYXp55LiN5pa55L6/CiAgICAvLyBsYXp5OidqczppbnB1dD0iaHR0cHM6Ly9jYWNoZS5qc29uLmljdS9ob21lL2FwaT90eXBlPXlzJnVpZD0yOTI3OTYma2V5PWZub3J5QUJERUZKTlBRVjI2OSZ1cmw9IitpbnB1dC5zcGxpdCgiPyIpWzBdO2xvZyhpbnB1dCk7bGV0IGh0bWw9SlNPTi5wYXJzZShyZXF1ZXN0KGlucHV0KSk7bG9nKGh0bWwpO2lucHV0PWh0bWwudXJsfHxpbnB1dCcsCiAgICAvLyDmjqjojZA6Jy5saXN0X2l0ZW07aW1nJiZhbHQ7aW1nJiZzcmM7YSYmVGV4dDthJiZkYXRhLWZsb2F0JywKICAgIC8vIOS4gOe6pzonanNvbjouZGF0YS5saXN0Oy5uYW1lOy5pbWFnZVVybDsubGF0ZXN0T3JkZXI7LmFsYnVtSWQnLAogICAg5o6o6I2QOiAnJywKICAgIC8vIOaOqOiNkDonanM6bGV0IGQ9W107ZmV0Y2hfcGFyYW1zLmhlYWRlcnNbInVzZXItYWdlbnQiXT1QQ19VQTtwZGZoPWpzcC5wZGZoO3BkZmE9anNwLnBkZmE7cGQ9anNwLnBkO2xldCBodG1sPWZldGNoKEhPU1QsZmV0Y2hfcGFyYW1zKTtsZXQgbGlzdHM9cGRmYShodG1sLCIucXktbW9kLWxpIik7bGlzdHMuZm9yRWFjaChmdW5jdGlvbihpdCl7dHJ5e2xldCB0aXRsZT1wZGZoKGl0LCJwLnN1YiYmdGl0bGUiKTtsZXQgZGVzYz1wZGZoKGl0LCIucXktbW9kLWxhYmVsJiZUZXh0Iik7bGV0IHBpY191cmw9cGQoaXQsImltZyYmc3JjIik7ZC5wdXNoKHt0aXRsZTp0aXRsZSxkZXNjOmRlc2MsaW1nOnBpY191cmx9KX1jYXRjaChlKXt9fSk7cmVzPXNldFJlc3VsdChkKTsnLAogICAg5LiA57qnOiAnanM6bGV0IGQ9W107aWYoTVlfQ0FURT09PSIxNiIpe2lucHV0PWlucHV0LnJlcGxhY2UoImNoYW5uZWxfaWQ9MTYiLCJjaGFubmVsX2lkPTEiKS5zcGxpdCgidGhyZWVfY2F0ZWdvcnlfaWQiKVswXTtpbnB1dCs9InRocmVlX2NhdGVnb3J5X2lkPTI3NDAxIn1lbHNlIGlmKE1ZX0NBVEU9PT0iNSIpe2lucHV0PWlucHV0LnJlcGxhY2UoImRhdGFfdHlwZT0xIiwiZGF0YV90eXBlPTIiKX1sZXQgaHRtbD1yZXF1ZXN0KGlucHV0KTtsZXQganNvbj1KU09OLnBhcnNlKGh0bWwpO2lmKGpzb24uY29kZT09PSJBMDAwMDMiKXtmZXRjaF9wYXJhbXMuaGVhZGVyc1sidXNlci1hZ2VudCJdPVBDX1VBO2pzb249SlNPTi5wYXJzZShmZXRjaChpbnB1dCxmZXRjaF9wYXJhbXMpKX1qc29uLmRhdGEubGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpe2lmKGRhdGEuY2hhbm5lbElkPT09MSl7ZGVzYz1kYXRhLmhhc093blByb3BlcnR5KCJzY29yZSIpP2RhdGEuc2NvcmUrIuWIhlxcdCI6IiJ9ZWxzZSBpZihkYXRhLmNoYW5uZWxJZD09PTJ8fGRhdGEuY2hhbm5lbElkPT09NCl7aWYoZGF0YS5sYXRlc3RPcmRlcj09PWRhdGEudmlkZW9Db3VudCl7ZGVzYz0oZGF0YS5oYXNPd25Qcm9wZXJ0eSgic2NvcmUiKT9kYXRhLnNjb3JlKyLliIZcXHQiOiIiKStkYXRhLmxhdGVzdE9yZGVyKyLpm4blhagifWVsc2V7aWYoZGF0YS52aWRlb0NvdW50KXtkZXNjPShkYXRhLmhhc093blByb3BlcnR5KCJzY29yZSIpP2RhdGEuc2NvcmUrIuWIhlxcdCI6IiIpK2RhdGEubGF0ZXN0T3JkZXIrIi8iK2RhdGEudmlkZW9Db3VudCsi6ZuGIn1lbHNle2Rlc2M9IuabtOaWsOiHsyAiK2RhdGEubGF0ZXN0T3JkZXIrIumbhiJ9fX1lbHNlIGlmKGRhdGEuY2hhbm5lbElkPT09Nil7ZGVzYz1kYXRhLnBlcmlvZCsi5pyfIn1lbHNlIGlmKGRhdGEuY2hhbm5lbElkPT09NSl7ZGVzYz1kYXRhLmZvY3VzfWVsc2V7aWYoZGF0YS5sYXRlc3RPcmRlcil7ZGVzYz0i5pu05paw6IezIOesrCIrZGF0YS5sYXRlc3RPcmRlcisi5pyfIn1lbHNlIGlmKGRhdGEucGVyaW9kKXtkZXNjPWRhdGEucGVyaW9kfWVsc2V7ZGVzYz1kYXRhLmZvY3VzfX11cmw9TVlfQ0FURSsiJCIrZGF0YS5hbGJ1bUlkO2QucHVzaCh7dXJsOnVybCx0aXRsZTpkYXRhLm5hbWUsZGVzYzpkZXNjLHBpY191cmw6ZGF0YS5pbWFnZVVybC5yZXBsYWNlKCIuanBnIiwiXzM5MF81MjAuanBnP2NhcGxpc3Q9anBnLHdlYnAiKX0pfSk7c2V0UmVzdWx0KGQpOycsCiAgICAvLyDkuIDnuqc6J2pzOmxldCBkPVtdO2lmKE1ZX0NBVEU9PT0iMTYiKXtpbnB1dD1pbnB1dC5yZXBsYWNlKCJjaGFubmVsX2lkPTE2IiwiY2hhbm5lbF9pZD0xIikuc3BsaXQoInRocmVlX2NhdGVnb3J5X2lkIilbMF07aW5wdXQrPSJ0aHJlZV9jYXRlZ29yeV9pZD0yNzQwMSJ9ZWxzZSBpZihNWV9DQVRFPT09IjUiKXtpbnB1dD1pbnB1dC5yZXBsYWNlKCJkYXRhX3R5cGU9MSIsImRhdGFfdHlwZT0yIil9bGV0IGh0bWw9ZmV0Y2goaW5wdXQsZmV0Y2hfcGFyYW1zKTtsZXQganNvbj1KU09OLnBhcnNlKGh0bWwpO2lmKGpzb24uY29kZT09PSJBMDAwMDMiKXtmZXRjaF9wYXJhbXMuaGVhZGVyc1sidXNlci1hZ2VudCJdPVBDX1VBO2pzb249SlNPTi5wYXJzZShmZXRjaChpbnB1dCxmZXRjaF9wYXJhbXMpKX1qc29uLmRhdGEubGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpe2lmKGRhdGEuY2hhbm5lbElkPT09MSl7ZGVzYz1kYXRhLmhhc093blByb3BlcnR5KCJzY29yZSIpP2RhdGEuc2NvcmUrIuWIhlxcdCI6IiJ9ZWxzZSBpZihkYXRhLmNoYW5uZWxJZD09PTJ8fGRhdGEuY2hhbm5lbElkPT09NCl7aWYoZGF0YS5sYXRlc3RPcmRlcj09PWRhdGEudmlkZW9Db3VudCl7ZGVzYz0oZGF0YS5oYXNPd25Qcm9wZXJ0eSgic2NvcmUiKT9kYXRhLnNjb3JlKyLliIZcXHQiOiIiKStkYXRhLmxhdGVzdE9yZGVyKyLpm4blhagifWVsc2V7aWYoZGF0YS52aWRlb0NvdW50KXtkZXNjPShkYXRhLmhhc093blByb3BlcnR5KCJzY29yZSIpP2RhdGEuc2NvcmUrIuWIhlxcdCI6IiIpK2RhdGEubGF0ZXN0T3JkZXIrIi8iK2RhdGEudmlkZW9Db3VudCsi6ZuGIn1lbHNle2Rlc2M9IuabtOaWsOiHsyAiK2RhdGEubGF0ZXN0T3JkZXIrIumbhiJ9fX1lbHNlIGlmKGRhdGEuY2hhbm5lbElkPT09Nil7ZGVzYz1kYXRhLnBlcmlvZCsi5pyfIn1lbHNlIGlmKGRhdGEuY2hhbm5lbElkPT09NSl7ZGVzYz1kYXRhLmZvY3VzfWVsc2V7aWYoZGF0YS5sYXRlc3RPcmRlcil7ZGVzYz0i5pu05paw6IezIOesrCIrZGF0YS5sYXRlc3RPcmRlcisi5pyfIn1lbHNlIGlmKGRhdGEucGVyaW9kKXtkZXNjPWRhdGEucGVyaW9kfWVsc2V7ZGVzYz1kYXRhLmZvY3VzfX11cmw9TVlfQ0FURSsiJCIrZGF0YS5hbGJ1bUlkO2QucHVzaCh7dXJsOnVybCx0aXRsZTpkYXRhLm5hbWUsZGVzYzpkZXNjLHBpY191cmw6ZGF0YS5pbWFnZVVybC5yZXBsYWNlKCIuanBnIiwiXzM5MF81MjAuanBnP2NhcGxpc3Q9anBnLHdlYnAiKX0pfSk7c2V0UmVzdWx0KGQpOycsCiAgICAvLyDkuIDnuqc6J2pzb246LmRhdGEubGlzdDsubmFtZTsuaW1hZ2VVcmw7LnBsYXlVcmw7LmxhdGVzdE9yZGVyJywKICAgIC8vIOS6jOe6pzp7aXNfanNvbjoxLCJ0aXRsZSI6ImRhdGEudGl0bGU7ZGF0YS5tb3ZpZWNhdGVnb3J5WzBdK2RhdGEubW92aWVjYXRlZ29yeVsxXSIsImltZyI6ImRhdGEuY2RuY292ZXIiLCJkZXNjIjoiZGF0YS5hcmVhWzBdO2RhdGEuZGlyZWN0b3JbMF0iLCJjb250ZW50IjoiZGF0YS5kZXNjcmlwdGlvbiIsInRhYnMiOiJkYXRhLnBsYXlsaW5rX3NpdGVzO2RhdGEucGxheWxpbmtzZGV0YWlsLiNpZHYucXVhbGl0eSIsImxpc3RzIjoiZGF0YS5wbGF5bGlua3NkZXRhaWwuI2lkdi5kZWZhdWx0X3VybCJ9LAogICAgLy8g5LqM57qnOntpc19qc29uOjEsInRpdGxlIjoiZGF0YS5uYW1lK2RhdGEuc3VidGl0bGU7ZGF0YS5sYXRlc3RPcmRlciIsImltZyI6ImRhdGEuaW1hZ2VVcmwiLCJkZXNjIjoiZGF0YS5jYXRlZ29yaWVzO2RhdGEuYXJlYXMiLCJjb250ZW50IjoiZGF0YS5kZXNjcmlwdGlvbiIsInRhYnMiOiJkYXRhLm5hbWUiLCJsaXN0cyI6ImRhdGEucGxheWxpbmtzZGV0YWlsLiNpZHYuZGVmYXVsdF91cmwifSwKICAgIOS6jOe6pzogJycsCiAgICDkuoznuqc6ICdqczpsZXQgZD1bXTtsZXQgaHRtbD1yZXF1ZXN0KGlucHV0KTtsZXQganNvbj1KU09OLnBhcnNlKGh0bWwpLmRhdGE7Vk9EPXt2b2RfaWQ6IiIsdm9kX3VybDppbnB1dCx2b2RfbmFtZToiIix0eXBlX25hbWU6IiIsdm9kX2FjdG9yOiIiLHZvZF95ZWFyOiIiLHZvZF9kaXJlY3RvcjoiIix2b2RfYXJlYToiIix2b2RfY29udGVudDoiIix2b2RfcmVtYXJrczoiIix2b2RfcGljOiIifTtWT0Qudm9kX25hbWU9anNvbi5uYW1lO3RyeXtpZihqc29uLmxhdGVzdE9yZGVyKXtWT0Qudm9kX3JlbWFya3M9Iuexu+WeizogIisoanNvbi5jYXRlZ29yaWVzWzBdLm5hbWV8fCIiKSsiXFx0IisoanNvbi5jYXRlZ29yaWVzWzFdLm5hbWV8fCIiKSsiXFx0IisoanNvbi5jYXRlZ29yaWVzWzJdLm5hbWV8fCIiKSsiXFx0Iisi6K+E5YiG77yaIisoanNvbi5zY29yZXx8IiIpKyJcXG7mm7TmlrDoh7PvvJrnrKwiK2pzb24ubGF0ZXN0T3JkZXIrIumbhijmnJ8pL+WFsSIranNvbi52aWRlb0NvdW50KyLpm4Yo5pyfKSJ9ZWxzZXtWT0Qudm9kX3JlbWFya3M9Iuexu+WeizogIisoanNvbi5jYXRlZ29yaWVzWzBdLm5hbWV8fCIiKSsiXFx0IisoanNvbi5jYXRlZ29yaWVzWzFdLm5hbWV8fCIiKSsiXFx0IisoanNvbi5jYXRlZ29yaWVzWzJdLm5hbWV8fCIiKSsiXFx0Iisi6K+E5YiG77yaIisoanNvbi5zY29yZXx8IiIpK2pzb24ucGVyaW9kfX1jYXRjaChlKXtWT0Qudm9kX3JlbWFya3M9anNvbi5zdWJ0aXRsZX1WT0Qudm9kX2FyZWE9KGpzb24uZm9jdXN8fCIiKSsiXFxu6LWE6LS577yaIisoanNvbi5wYXlNYXJrPT09MT8iVklQIjoi5YWN6LS5IikrIlxcbuWcsOWMuu+8miIrKGpzb24uYXJlYXN8fCIiKTtsZXQgdnNpemU9IjU3OV83NzIiO3RyeXt2c2l6ZT1qc29uLmltYWdlU2l6ZVsxMl19Y2F0Y2goZSl7fVZPRC52b2RfcGljPWpzb24uaW1hZ2VVcmwucmVwbGFjZSgiLmpwZyIsIl8iK3ZzaXplKyIuanBnP2NhcGxpc3Q9anBnLHdlYnAiKTtWT0QudHlwZV9uYW1lPWpzb24uY2F0ZWdvcmllcy5tYXAoZnVuY3Rpb24oaXQpe3JldHVybiBpdC5uYW1lfSkuam9pbigiLCIpO2lmKGpzb24ucGVvcGxlLm1haW5fY2hhcmFjdG9yKXtsZXQgdm9kX2FjdG9ycz1bXTtqc29uLnBlb3BsZS5tYWluX2NoYXJhY3Rvci5mb3JFYWNoKGZ1bmN0aW9uKGl0KXt2b2RfYWN0b3JzLnB1c2goaXQubmFtZSl9KTtWT0Qudm9kX2FjdG9yPXZvZF9hY3RvcnMuam9pbigiLCIpfVZPRC52b2RfY29udGVudD1qc29uLmRlc2NyaXB0aW9uO2xldCBwbGF5bGlzdHM9W107aWYoanNvbi5jaGFubmVsSWQ9PT0xfHxqc29uLmNoYW5uZWxJZD09PTUpe3BsYXlsaXN0cz1be3BsYXlVcmw6anNvbi5wbGF5VXJsLGltYWdlVXJsOmpzb24uaW1hZ2VVcmwsc2hvcnRUaXRsZTpqc29uLnNob3J0VGl0bGUsZm9jdXM6anNvbi5mb2N1cyxwZXJpb2Q6anNvbi5wZXJpb2R9XX1lbHNle2lmKGpzb24uY2hhbm5lbElkPT09Nil7bGV0IHFzPWpzb24ucGVyaW9kLnNwbGl0KCItIilbMF07bGV0IGxpc3RVcmw9Imh0dHBzOi8vcGN3LWFwaS5pcWl5aS5jb20vYWxidW0vc291cmNlL3N2bGlzdGluZm8/Y2lkPTYmc291cmNlaWQ9Iitqc29uLmFsYnVtSWQrIiZ0aW1lbGlzdD0iK3FzO2xldCBwbGF5RGF0YT1KU09OLnBhcnNlKHJlcXVlc3QobGlzdFVybCkpLmRhdGFbcXNdO3BsYXlEYXRhLmZvckVhY2goZnVuY3Rpb24oaXQpe3BsYXlsaXN0cy5wdXNoKHtwbGF5VXJsOml0LnBsYXlVcmwsaW1hZ2VVcmw6aXQuaW1hZ2VVcmwsc2hvcnRUaXRsZTppdC5zaG9ydFRpdGxlLGZvY3VzOml0LmZvY3VzLHBlcmlvZDppdC5wZXJpb2R9KX0pfWVsc2V7bGV0IGxpc3RVcmw9Imh0dHBzOi8vcGN3LWFwaS5pcWl5aS5jb20vYWxidW1zL2FsYnVtL2F2bGlzdGluZm8/YWlkPSIranNvbi5hbGJ1bUlkKyImc2l6ZT0yMDAmcGFnZT0xIjtsZXQgZGF0YT1KU09OLnBhcnNlKHJlcXVlc3QobGlzdFVybCkpLmRhdGE7bGV0IHRvdGFsPWRhdGEudG90YWw7cGxheWxpc3RzPWRhdGEuZXBzb2RlbGlzdDtpZih0b3RhbD4yMDApe2ZvcihsZXQgaT0yO2k8dG90YWwvMjAwKzE7aSsrKXtsZXQgbGlzdFVybD0iaHR0cHM6Ly9wY3ctYXBpLmlxaXlpLmNvbS9hbGJ1bXMvYWxidW0vYXZsaXN0aW5mbz9haWQ9Iitqc29uLmFsYnVtSWQrIiZzaXplPTIwMCZwYWdlPSIraTtsZXQgZGF0YT1KU09OLnBhcnNlKHJlcXVlc3QobGlzdFVybCkpLmRhdGE7cGxheWxpc3RzPXBsYXlsaXN0cy5jb25jYXQoZGF0YS5lcHNvZGVsaXN0KX19fX1wbGF5bGlzdHMuZm9yRWFjaChmdW5jdGlvbihpdCl7ZC5wdXNoKHt0aXRsZTppdC5zaG9ydFRpdGxlfHwi56ysIitpdC5vcmRlcisi6ZuGIixkZXNjOml0LnN1YnRpdGxlfHxpdC5mb2N1c3x8aXQucGVyaW9kLGltZzppdC5pbWFnZVVybC5yZXBsYWNlKCIuanBnIiwiXzQ4MF8yNzAuanBnP2NhcGxpc3Q9anBnLHdlYnAiKSx1cmw6aXQucGxheVVybH0pfSk7Vk9ELnZvZF9wbGF5X2Zyb209InFpeWkiO1ZPRC52b2RfcGxheV91cmw9ZC5tYXAoZnVuY3Rpb24oaXQpe3JldHVybiBpdC50aXRsZSsiJCIraXQudXJsfSkuam9pbigiIyIpOycsCiAgICAvLyDkuoznuqc6J2pzOmxldCBkPVtdO2xldCBodG1sPXJlcXVlc3QoaW5wdXQpO2xldCBqc29uPUpTT04ucGFyc2UoaHRtbCkuZGF0YTt2b2Q9e3ZvZF9pZDoiIix2b2RfdXJsOmlucHV0LHZvZF9uYW1lOiIiLHR5cGVfbmFtZToiIix2b2RfYWN0b3I6IiIsdm9kX3llYXI6IiIsdm9kX2RpcmVjdG9yOiIiLHZvZF9hcmVhOiIiLHZvZF9jb250ZW50OiIiLHZvZF9yZW1hcmtzOiIiLHZvZF9waWM6IiJ9O3ZvZC52b2RfbmFtZT1qc29uLm5hbWU7dHJ5e2lmKGpzb24ubGF0ZXN0T3JkZXIpe3ZvZC52b2RfcmVtYXJrcz0i57G75Z6LOiAiKyhqc29uLmNhdGVnb3JpZXNbMF0ubmFtZXx8IiIpKyJcXHQiKyhqc29uLmNhdGVnb3JpZXNbMV0ubmFtZXx8IiIpKyJcXHQiKyhqc29uLmNhdGVnb3JpZXNbMl0ubmFtZXx8IiIpKyJcXHQiKyLor4TliIbvvJoiKyhqc29uLnNjb3JlfHwiIikrIlxcbuabtOaWsOiHs++8muesrCIranNvbi5sYXRlc3RPcmRlcisi6ZuGKOacnykv5YWxIitqc29uLnZpZGVvQ291bnQrIumbhijmnJ8pIn1lbHNle3ZvZC52b2RfcmVtYXJrcz0i57G75Z6LOiAiKyhqc29uLmNhdGVnb3JpZXNbMF0ubmFtZXx8IiIpKyJcXHQiKyhqc29uLmNhdGVnb3JpZXNbMV0ubmFtZXx8IiIpKyJcXHQiKyhqc29uLmNhdGVnb3JpZXNbMl0ubmFtZXx8IiIpKyJcXHQiKyLor4TliIbvvJoiKyhqc29uLnNjb3JlfHwiIikranNvbi5wZXJpb2R9fWNhdGNoKGUpe3ZvZC52b2RfcmVtYXJrcz1qc29uLnN1YnRpdGxlfXZvZC52b2RfYXJlYT0oanNvbi5mb2N1c3x8IiIpKyJcXG7otYTotLnvvJoiKyhqc29uLnBheU1hcms9PT0xPyJWSVAiOiLlhY3otLkiKSsiXFxu5Zyw5Yy677yaIisoanNvbi5hcmVhc3x8IiIpO2xldCB2c2l6ZT0iNTc5Xzc3MiI7dHJ5e3ZzaXplPWpzb24uaW1hZ2VTaXplWzEyXX1jYXRjaChlKXt9dm9kLnZvZF9waWM9anNvbi5pbWFnZVVybC5yZXBsYWNlKCIuanBnIiwiXyIrdnNpemUrIi5qcGc/Y2FwbGlzdD1qcGcsd2VicCIpO3ZvZC50eXBlX25hbWU9anNvbi5jYXRlZ29yaWVzLm1hcChmdW5jdGlvbihpdCl7cmV0dXJuIGl0Lm5hbWV9KS5qb2luKCIsIik7aWYoanNvbi5wZW9wbGUubWFpbl9jaGFyYWN0b3Ipe3ZvZF9hY3RvcnM9W107anNvbi5wZW9wbGUubWFpbl9jaGFyYWN0b3IuZm9yRWFjaChmdW5jdGlvbihpdCl7dm9kX2FjdG9ycy5wdXNoKGl0Lm5hbWUpfSk7dm9kLnZvZF9hY3Rvcj12b2RfYWN0b3JzLmpvaW4oIiwiKX12b2Qudm9kX2NvbnRlbnQ9anNvbi5kZXNjcmlwdGlvbjtsZXQgcGxheWxpc3RzPVtdO2lmKGpzb24uY2hhbm5lbElkPT09MXx8anNvbi5jaGFubmVsSWQ9PT01KXtwbGF5bGlzdHM9W3twbGF5VXJsOmpzb24ucGxheVVybCxpbWFnZVVybDpqc29uLmltYWdlVXJsLHNob3J0VGl0bGU6anNvbi5zaG9ydFRpdGxlLGZvY3VzOmpzb24uZm9jdXMscGVyaW9kOmpzb24ucGVyaW9kfV19ZWxzZXtpZihqc29uLmNoYW5uZWxJZD09PTYpe2xldCBxcz1qc29uLnBlcmlvZC5zcGxpdCgiLSIpWzBdO2xldCBsaXN0VXJsPSJodHRwczovL3Bjdy1hcGkuaXFpeWkuY29tL2FsYnVtL3NvdXJjZS9zdmxpc3RpbmZvP2NpZD02JnNvdXJjZWlkPSIranNvbi5hbGJ1bUlkKyImdGltZWxpc3Q9IitxcztsZXQgcGxheURhdGE9SlNPTi5wYXJzZShyZXF1ZXN0KGxpc3RVcmwpKS5kYXRhW3FzXTtwbGF5RGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGl0KXtwbGF5bGlzdHMucHVzaCh7cGxheVVybDppdC5wbGF5VXJsLGltYWdlVXJsOml0LmltYWdlVXJsLHNob3J0VGl0bGU6aXQuc2hvcnRUaXRsZSxmb2N1czppdC5mb2N1cyxwZXJpb2Q6aXQucGVyaW9kfSl9KX1lbHNle2xldCBsaXN0VXJsPSJodHRwczovL3Bjdy1hcGkuaXFpeWkuY29tL2FsYnVtcy9hbGJ1bS9hdmxpc3RpbmZvP2FpZD0iK2pzb24uYWxidW1JZCsiJnNpemU9MjAwJnBhZ2U9MSI7bGV0IGRhdGE9SlNPTi5wYXJzZShyZXF1ZXN0KGxpc3RVcmwpKS5kYXRhO2xldCB0b3RhbD1kYXRhLnRvdGFsO3BsYXlsaXN0cz1kYXRhLmVwc29kZWxpc3Q7aWYodG90YWw+MjAwKXtmb3IobGV0IGk9MjtpPHRvdGFsLzIwMCsxO2krKyl7bGV0IGxpc3RVcmw9Imh0dHBzOi8vcGN3LWFwaS5pcWl5aS5jb20vYWxidW1zL2FsYnVtL2F2bGlzdGluZm8/YWlkPSIranNvbi5hbGJ1bUlkKyImc2l6ZT0yMDAmcGFnZT0iK2k7bGV0IGRhdGE9SlNPTi5wYXJzZShyZXF1ZXN0KGxpc3RVcmwpKS5kYXRhO3BsYXlsaXN0cz1wbGF5bGlzdHMuY29uY2F0KGRhdGEuZXBzb2RlbGlzdCl9fX19cGxheWxpc3RzLmZvckVhY2goZnVuY3Rpb24oaXQpe2QucHVzaCh7dGl0bGU6aXQuc2hvcnRUaXRsZXx8IuesrCIraXQub3JkZXIrIumbhiIsZGVzYzppdC5zdWJ0aXRsZXx8aXQuZm9jdXN8fGl0LnBlcmlvZCxpbWc6aXQuaW1hZ2VVcmwucmVwbGFjZSgiLmpwZyIsIl80ODBfMjcwLmpwZz9jYXBsaXN0PWpwZyx3ZWJwIiksdXJsOml0LnBsYXlVcmx9KX0pO3ZvZC52b2RfcGxheV9mcm9tPSJxaXlpIjt2b2Qudm9kX3BsYXlfdXJsPWQubWFwKGZ1bmN0aW9uKGl0KXtyZXR1cm4gaXQudGl0bGUrIiQiK2l0LnVybH0pLmpvaW4oIiMiKTsnLAogICAg5pCc57SiOiAnanNvbjouZGF0YS5kb2NpbmZvczsuYWxidW1Eb2NJbmZvLmFsYnVtVGl0bGU7LmFsYnVtRG9jSW5mby5hbGJ1bVZJbWFnZTsuYWxidW1Eb2NJbmZvLmNoYW5uZWw7LmFsYnVtRG9jSW5mby5hbGJ1bUlkOy5hbGJ1bURvY0luZm8udHZGb2N1cycsCn0=
\ No newline at end of file
diff --git a/潇洒/js/AS.js b/潇洒/js/AS.js
new file mode 100644
index 0000000..8a1d37a
--- /dev/null
+++ b/潇洒/js/AS.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+eIseaQnCcsCiAgICBob3N0OiAnaHR0cHM6Ly93d3cuZXNvdWEuY29tLycsCiAgICBob3N0SnM6ICcnLAogICAgaGVhZGVyczogewogICAgICAgICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMTsgUGl4ZWwgNSkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzkwLjAuNDQzMC45MSBNb2JpbGUgU2FmYXJpLzUzNy4zNicsCiAgICB9LAogICAg57yW56CBOiAndXRmLTgnLAogICAgdGltZW91dDogNTAwMCwKICAgIHVybDogJ2h0dHBzOi8vd3d3LmVzb3VhLmNvbS9zZWFyY2g/cT1meWNsYXNzJmZvcm1hdD12aWRlbyZleGFjdD10cnVlJnBhZ2U9ZnlwYWdlJywKICAgIGZpbHRlcl91cmw6ICcnLAogICAgZGV0YWlsVXJsOiAnJywKICAgIHNlYXJjaFVybDogJ2h0dHBzOi8vd3d3LmVzb3VhLmNvbS9zZWFyY2g/cT0qKiZmb3JtYXQ9dmlkZW8mZXhhY3Q9dHJ1ZSZwYWdlPWZ5cGFnZScsCiAgICBzZWFyY2hhYmxlOiAxLAogICAgcXVpY2tTZWFyY2g6IDEsCiAgICBmaWx0ZXJhYmxlOiAxLAogICAgY2xhc3NfbmFtZTogJ+WJp+mbhibnlLXlvbEm55+t5YmnJuWKqOa8qybnu7zoibonLAogICAgY2xhc3NfdXJsOiAn5Ymn6ZuGJueUteW9sSbnn63liacm5Yqo5ryrJue7vOiJuicsCiAgICBwcm94eV9ydWxlOiAnJywKICAgIHNuaWZmZXI6IGZhbHNlLAogICAgaXNWaWRlbzogJycsCiAgICBwbGF5X3BhcnNlOiB0cnVlLAogICAgcGFyc2VfdXJsOiAnJywKICAgIGxhenk6ICJqczpcbiAgICAgICAgaW5wdXQgPSAncHVzaDovLycgKyBpbnB1dDtcbiAgICAiLAogICAgbGltaXQ6IDksCiAgICBkb3VibGU6IGZhbHNlLAogICAgLy8g5o6o6I2QOiAnKicsCiAgICDkuIDnuqc6ICdqczpcbiAgICAgICAgbGV0IGh0bWwgPSBmZXRjaChpbnB1dCk7XG4gICAgICAgIGxldCBsaXN0ID0gcGRmYShodG1sLCAiYm9keSYmLnNlbWktc3BhY2UtbWVkaXVtLXZlcnRpY2FsIik7XG4gICAgICAgIFZPRFMgPSBsaXN0Lm1hcCh4ID0+IHtcbiAgICAgICAgICAgIGxldCByZW1hcmtzID0gcGRmaCh4LCAiZGl2JiZpbWcmJmFsdCIpO1xuICAgICAgICAgICAgLy8g6L+H5ruk5o6J5YyF5ZCrIui/hembt+S6keebmCLnmoTlhoXlrrlcbiAgICAgICAgICAgIGlmKHJlbWFya3MuaW5jbHVkZXMoIui/hembt+S6keebmCIpIHx8IHJlbWFya3MuaW5jbHVkZXMoIjExNSIpIHx8IHJlbWFya3MuaW5jbHVkZXMoIumYv+mHjCIpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdm9kX25hbWU6IHBkZmgoeCwgImRpdiYmYSYmdGl0bGUiKSxcbiAgICAgICAgICAgICAgICB2b2RfcGljOiBcJ1wnLFxuICAgICAgICAgICAgICAgIHZvZF9yZW1hcmtzOiByZW1hcmtzLFxuICAgICAgICAgICAgICAgIHZvZF9jb250ZW50OiByZW1hcmtzLFxuICAgICAgICAgICAgICAgIHZvZF9pZDogcGRmaCh4LCAiZGl2JiZhJiZocmVmIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuZmlsdGVyKHggPT4geCAhPT0gbnVsbCk7XG4gICAgJywKICAgIOS6jOe6pzogewogICAgICAgIHRpdGxlOiAnaDEmJlRleHQnLAogICAgICAgIGltZzogJ2ltZyYmc3JjJywKICAgICAgICBkZXNjOiAnLmNhcmQtdGV4dDplcSgyKSYmVGV4dDs7OzsnLAogICAgICAgIGNvbnRlbnQ6ICdib2R5JiYuc2VtaS1zcGFjZS1sb29zZS12ZXJ0aWNhbCYmYSYmaHJlZicsCiAgICAgICAgdGFiczogImpzOlRBQlMgPSBbJ+aHkuebmCddIiwKICAgICAgICBsaXN0czogImpzOlxuICAgICAgICAgICAgTElTVFMgPSBbXTtcbiAgICAgICAgICAgIGxldCBsaXN0czEgPSBwZGZhKGh0bWwsICdib2R5JiYuc2VtaS1zcGFjZS1sb29zZS12ZXJ0aWNhbCcpLm1hcChpdCA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IF90dCA9IHBkZmgoaXQsICdzcGFuJiZ0aXRsZScpO1xuICAgICAgICAgICAgICAgIGxldCBfdXUgPSBwZGZoKGl0LCAnYSYmaHJlZicpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfdHQgKyAnJCcgKyBfdXU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIExJU1RTLnB1c2gobGlzdHMxKTtcbiAgICAgICAgIiwKICAgIH0sCiAgICDmkJzntKI6ICdqczpcbiAgICAgICAgbGV0IGh0bWwgPSBmZXRjaChpbnB1dCk7XG4gICAgICAgIGxldCBsaXN0ID0gcGRmYShodG1sLCAiYm9keSYmLnNlbWktc3BhY2UtbWVkaXVtLXZlcnRpY2FsIik7XG4gICAgICAgIFZPRFMgPSBsaXN0Lm1hcCh4ID0+IHtcbiAgICAgICAgICAgIGxldCByZW1hcmtzID0gcGRmaCh4LCAiZGl2JiZpbWcmJmFsdCIpO1xuICAgICAgICAgICAgLy8g6L+H5ruk5o6J5YyF5ZCrIui/hembt+S6keebmCLnmoTlhoXlrrlcbiAgICAgICAgICAgIGlmKHJlbWFya3MuaW5jbHVkZXMoIui/hembt+S6keebmCIpIHx8IHJlbWFya3MuaW5jbHVkZXMoIjExNSIpIHx8IHJlbWFya3MuaW5jbHVkZXMoIumYv+mHjCIpKSByZXR1cm4gbnVsbDtsZXQgdm9kTmFtZSA9IHBkZmgoeCwgImRpdiYmYSYmdGl0bGUiKTtcbiAgICAgICAgICAgIC8vIOi/h+a7pOadoeS7tu+8mui/hembt+S6keebmOOAgS50eHTlkI7nvIDjgIHnqbrlkI3np7BcbiAgICAgICAgICAgIGlmKHZvZE5hbWUuZW5kc1dpdGgoIi56aXAiKSB8fCB2b2ROYW1lLmVuZHNXaXRoKCIudHh0IikgfHwgIXZvZE5hbWUudHJpbSgpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdm9kX25hbWU6IHBkZmgoeCwgImRpdiYmYSYmdGl0bGUiKSxcbiAgICAgICAgICAgICAgICB2b2RfcGljOiBcJ1wnLFxuICAgICAgICAgICAgICAgIHZvZF9yZW1hcmtzOiByZW1hcmtzLFxuICAgICAgICAgICAgICAgIHZvZF9jb250ZW50OiByZW1hcmtzLFxuICAgICAgICAgICAgICAgIHZvZF9pZDogcGRmaCh4LCAiZGl2JiZhJiZocmVmIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuZmlsdGVyKHggPT4geCAhPT0gbnVsbCk7XG4gICAgJywKICAgIGNhdGVfZXhjbHVkZTogJ+mmlumhtXznlZnoqIB8QVBQfOS4i+i9vXzotYTorq985paw6Ze7fOWKqOaAgScsCiAgICB0YWJfZXhjbHVkZTogJ+eMnOS9oHzllpzmrKJ85LiL6L29fOWJp+aDhXzmppx86K+E6K66JywKICAgIOexu+WeizogJ+W9seinhicsCiAgICBob21lVXJsOiAnaHR0cHM6Ly93d3cuZXNvdWEuY29tLycsCiAgICDkuoznuqforr/pl67liY06ICcnLAogICAgZW5jb2Rpbmc6ICd1dGYtOCcsCiAgICBzZWFyY2hfZW5jb2Rpbmc6ICcnLAogICAg5Zu+54mH5p2l5rqQOiAnJywKICAgIOWbvueJh+abv+aNojogJycsCiAgICBwbGF5X2pzb246IFtdLAogICAgcGFnZWNvdW50OiB7fSwKICAgIHRhYl9yZW1vdmU6IFtdLAogICAgdGFiX29yZGVyOiBbXSwKICAgIHRhYl9yZW5hbWU6IHt9LAp9
\ No newline at end of file
diff --git a/潇洒/js/BK.js b/潇洒/js/BK.js
new file mode 100644
index 0000000..f07dda1
--- /dev/null
+++ b/潇洒/js/BK.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+eZvumFt+efreWJpycsCiAgICBob3N0OiAnaHR0cHM6Ly9hcGkua3VsZXUuY29tLycsCiAgICBob3N0SnM6ICcnLAogICAgaGVhZGVyczogewogICAgICAgICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMTsgUGl4ZWwgNSkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzkwLjAuNDQzMC45MSBNb2JpbGUgU2FmYXJpLzUzNy4zNicsCiAgICB9LAogICAg57yW56CBOiAndXRmLTgnLAogICAgdGltZW91dDogNTAwMCwKICAgIHVybDogJ2h0dHBzOi8vYXBpLmt1bGV1LmNvbS9meWNsYXNzJywKICAgIGZpbHRlcl91cmw6ICcnLAogICAgZGV0YWlsVXJsOiAnJywKICAgIHNlYXJjaFVybDogJ2h0dHBzOi8vYXBpLmt1bGV1LmNvbS9hcGkvYmRkaj90ZXh0PSoqJywKICAgIHNlYXJjaGFibGU6IDEsCiAgICBxdWlja1NlYXJjaDogMSwKICAgIGZpbHRlcmFibGU6IDEsCiAgICBjbGFzc19uYW1lOiAn5LuK5pel5pu05pawJueZvuW6puefreWJpybmr4/ml6Xmm7TmlrAm5aS45YWL55+t5YmnJuavj+aXpeabtOaWsCcsCiAgICBjbGFzc191cmw6ICdhcGkveWluZ3NoaSZhcGkvYmRkaj9saXN0JmFwaS9iZGRqP3RvZGF5JmFwaS9hY3Rpb24/bGlzdCZhcGkvYWN0aW9uP3RvZGF5JywKICAgIHByb3h5X3J1bGU6ICcnLAogICAgc25pZmZlcjogZmFsc2UsCiAgICBpc1ZpZGVvOiAnJywKICAgIHBsYXlfcGFyc2U6IHRydWUsCiAgICBwYXJzZV91cmw6ICcnLAogICAgbGF6eTogImpzOlxuICAgICAgICBpbnB1dCA9ICdwdXNoOi8vJyArIGlucHV0O1xuICAgICIsCiAgICBsaW1pdDogOSwKICAgIGRvdWJsZTogZmFsc2UsCiAgICAvLyDmjqjojZA6ICcqJywKICAgIOS4gOe6pzogJGpzLnRvU3RyaW5nKCgpID0+IHsKICAgIGxldCBjaWQgPSBNWV9DQVRFIHx8ICcxMDgnOwogICAgbGV0IHBnID0gTVlfUEFHRSB8fCAxOwogICAgbGV0IHVybCA9IGBodHRwczovL2FwaS5rdWxldS5jb20vJHtjaWR9YDsKICAgIGxldCBraHRtbCA9IGZldGNoKHVybCwge2hlYWRlcnM6IHJ1bGUuaGVhZGVyc30pOwogICAgbGV0IGtqc29uID0gSlNPTi5wYXJzZShraHRtbCk7CiAgICBWT0RTID0gW107CiAgICBranNvbi5kYXRhLmZvckVhY2goaXQgPT4gewogICAgICAgIFZPRFMucHVzaCh7CiAgICAgICAgICAgIHZvZF9uYW1lOiBpdC5uYW1lLAogICAgICAgICAgICB2b2RfcGljOiBgaHR0cHM6Ly90c2UzLW1tLmNuLmJpbmcubmV0L3RoL2lkL09JUC1DLnJsUU9ZdHNyaXdXS0h3b2ZHdWZKX0FIYVFkP3c9MTU3Jmg9MzUwJmM9NyZyPTAmbz03JmRwcj0zLjcmcGlkPTEuNyZybT0zYCwKICAgICAgICAgICAgdm9kX3JlbWFya3M6IGl0LmFkZHRpbWUsCiAgICAgICAgICAgIHZvZF9pZDogYHB1c2g6Ly8ke2l0LnZpZXdsaW5rfWAKICAgICAgICB9KTsKICAgIH0pOwp9KSwKICAgIOS6jOe6pzogJyonLAogICAg5pCc57SiOiRqcy50b1N0cmluZygoKSA9PiB7CiAgICBsZXQgdXJsID0gYGh0dHBzOi8vYXBpLmt1bGV1LmNvbS9hcGkvYmRkaj90ZXh0PSR7S0VZfWA7CiAgICBsZXQga2h0bWwgPSBmZXRjaCh1cmwpOwogICAgbGV0IGtqc29uID0gSlNPTi5wYXJzZShraHRtbCk7CiAgICBWT0RTID0gW107CiAgICBranNvbi5kYXRhLmZvckVhY2goaXQgPT4gewogICAgICAgIFZPRFMucHVzaCh7CiAgICAgICAgICAgIHZvZF9uYW1lOiBpdC5uYW1lLAogICAgICAgICAgICB2b2RfcGljOiBpdC5wUGljLAogICAgICAgICAgICB2b2RfcmVtYXJrczogaXQuYWRkdGltZSwKICAgICAgICAgICAgdm9kX2lkOiBgcHVzaDovLyR7aXQudmlld2xpbmt9YAogICAgICAgIH0pCiAgICB9KQp9KSwKICAgIGNhdGVfZXhjbHVkZTogJ+mmlumhtXznlZnoqIB8QVBQfOS4i+i9vXzotYTorq985paw6Ze7fOWKqOaAgScsCiAgICB0YWJfZXhjbHVkZTogJ+eMnOS9oHzllpzmrKJ85LiL6L29fOWJp+aDhXzmppx86K+E6K66JywKICAgIOexu+WeizogJ+W9seinhicsCiAgICBob21lVXJsOiAnaHR0cHM6Ly93d3cubHpwYW54LmNvbS8nLAogICAg5LqM57qn6K6/6Zeu5YmNOiAnJywKICAgIGVuY29kaW5nOiAndXRmLTgnLAogICAgc2VhcmNoX2VuY29kaW5nOiAnJywKICAgIOWbvueJh+adpea6kDogJycsCiAgICDlm77niYfmm7/mjaI6ICcnLAogICAgcGxheV9qc29uOiBbXSwKICAgIHBhZ2Vjb3VudDoge30sCiAgICB0YWJfcmVtb3ZlOiBbXSwKICAgIHRhYl9vcmRlcjogW10sCiAgICB0YWJfcmVuYW1lOiB7fSwKfQ==
\ No newline at end of file
diff --git a/潇洒/js/CJZW.js b/潇洒/js/CJZW.js
new file mode 100644
index 0000000..fc8dccc
--- /dev/null
+++ b/潇洒/js/CJZW.js
@@ -0,0 +1 @@
+Z2xvYmFsVGhpcy5nZXRSYW5kb21JdGVtID0gZnVuY3Rpb24gKGl0ZW1zKSB7CiAgICByZXR1cm4gaXRlbXNbTWF0aC5yYW5kb20oKSAqIGl0ZW1zLmxlbmd0aCB8IDBdOwp9CnZhciBydWxlID0gewogICAgdGl0bGU6ICfph4fpm4bkuYvnjotb5ZCIXScsCiAgICBhdXRob3I6ICfpgZPplb8nLAogICAgdmVyc2lvbjogJzIwMjQwNzA2IGJldGExNycsCiAgICB1cGRhdGVfaW5mbzogYGAudHJpbSgpLAogICAgaG9zdDogJycsCiAgICBob21lVGlkOiAnJywKICAgIGhvbWVVcmw6ICcvYXBpLnBocC9wcm92aWRlL3ZvZC8/YWM9ZGV0YWlsJnQ9e3tydWxlLmhvbWVUaWR9fScsCiAgICBkZXRhaWxVcmw6ICcvYXBpLnBocC9wcm92aWRlL3ZvZC8/YWM9ZGV0YWlsJmlkcz1meWlkJywKICAgIHNlYXJjaFVybDogJy9hcGkucGhwL3Byb3ZpZGUvdm9kLz93ZD0qKiZwZz0jVHJ1ZVBhZ2UjI3BhZ2U9ZnlwYWdlJywKICAgIGNsYXNzVXJsOiAnL2FwaS5waHAvcHJvdmlkZS92b2QvJywKICAgIHVybDogJy9hcGkucGhwL3Byb3ZpZGUvdm9kLz9hYz1kZXRhaWwmcGc9ZnlwYWdlJnQ9ZnlmaWx0ZXInLAogICAgZmlsdGVyX3VybDogJ3t7Zmwu57G75Z6LfX0nLAogICAgaGVhZGVyczogewogICAgICAgICdVc2VyLUFnZW50JzogJ01PQklMRV9VQScKICAgIH0sCiAgICB0aW1lb3V0OiA1MDAwLAogICAgbGltaXQ6IDIwLAogICAgc2VhcmNoX2xpbWl0OiAxMCwKICAgIHNlYXJjaGFibGU6IDEsCiAgICBxdWlja1NlYXJjaDogMCwKICAgIGZpbHRlcmFibGU6IDEsCiAgICBwbGF5X3BhcnNlOiB0cnVlLAogICAgcGFyc2VfdXJsOiAnJywKICAgIHNlYXJjaF9tYXRjaDogZmFsc2UsCiAgICBzZWFyY2hfcGljOiB0cnVlLAogICAg6aKE5aSE55CGOiAkanMudG9TdHJpbmcoKCkgPT4gewogICAgICAgIGZ1bmN0aW9uIGdldENsYXNzZXMoaXRlbSkgewogICAgICAgICAgICBsZXQgY2xhc3NlcyA9IFtdOwogICAgICAgICAgICBpZiAoaXRlbS5jbGFzc19uYW1lICYmIGl0ZW0uY2xhc3NfdXJsKSB7CiAgICAgICAgICAgICAgICBpZiAoIS8mfOeUteW9sXznlLXop4bliad857u86Im6fOWKqOa8q1tcdTRFMDAtXHU5RkE1XSsvLnRlc3QoaXRlbS5jbGFzc19uYW1lKSkgewogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY2xhc3NfbmFtZSA9IHVuZ3ppcChpdGVtLmNsYXNzX25hbWUpCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICBsb2coYOS4jeivhuWIq+eahGNsYXNzX25hbWXlr7zoh7Rnemlw6Kej56CB5aSx6LSlOiR7ZX1gKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NlcwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxldCBuYW1lcyA9IGl0ZW0uY2xhc3NfbmFtZS5zcGxpdCgnJicpOwogICAgICAgICAgICAgICAgbGV0IHVybHMgPSBpdGVtLmNsYXNzX3VybC5zcGxpdCgnJicpOwogICAgICAgICAgICAgICAgbGV0IGNudCA9IE1hdGgubWluKG5hbWVzLmxlbmd0aCwgdXJscy5sZW5ndGgpOwogICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbnQ7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlX2lkJzogdXJsc1tpXSwKICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGVfbmFtZSc6IG5hbWVzW2ldCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGNsYXNzZXMKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZihiYXRjaEZldGNoKSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgICBydWxlLnNlYXJjaF9saW1pdCA9IDE2OwogICAgICAgICAgICBsb2coJ+W9k+WJjeeoi+W6j+aUr+aMgeaJuemHj+ivt+axgltiYXRjaEZldGNoXSzmkJzntKLpmZDliLblt7Lorr7nva7kuLoxNicpOwogICAgICAgIH0KICAgICAgICBsZXQgX3VybCA9IHJ1bGUucGFyYW1zOwogICAgICAgIGxvZyhg5Lyg5YWl5Y+C5pWwOiR7X3VybH1gKTsKICAgICAgICBpZiAoX3VybCAmJiB0eXBlb2YoX3VybCkgPT09ICdzdHJpbmcnICYmIC9eKGh0dHB8ZmlsZSkvLnRlc3QoX3VybCkpIHsKICAgICAgICAgICAgaWYgKF91cmwuaW5jbHVkZXMoJyQnKSkgewogICAgICAgICAgICAgICAgbGV0IF91cmxfcGFyYW1zID0gX3VybC5zcGxpdCgnJCcpOwogICAgICAgICAgICAgICAgX3VybCA9IF91cmxfcGFyYW1zWzBdOwogICAgICAgICAgICAgICAgcnVsZS5zZWFyY2hfbWF0Y2ggPSAhIShfdXJsX3BhcmFtc1sxXSk7CiAgICAgICAgICAgICAgICBpZiAoX3VybF9wYXJhbXMubGVuZ3RoID4gMikgewogICAgICAgICAgICAgICAgICAgIHJ1bGUuc2VhcmNoX3BpYyA9ICEhKF91cmxfcGFyYW1zWzJdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoX3VybCk7CiAgICAgICAgICAgIGxldCBqc29uID0gSlNPTi5wYXJzZShodG1sKTsKICAgICAgICAgICAgbGV0IF9jbGFzc2VzID0gW107CiAgICAgICAgICAgIHJ1bGUuZmlsdGVyID0ge307CiAgICAgICAgICAgIHJ1bGUuZmlsdGVyX2RlZiA9IHt9OwogICAgICAgICAgICBqc29uLmZvckVhY2goaXQgPT4gewogICAgICAgICAgICAgICAgbGV0IF9vYmogPSB7CiAgICAgICAgICAgICAgICAgICAgdHlwZV9uYW1lOiBpdC5uYW1lLAogICAgICAgICAgICAgICAgICAgIHR5cGVfaWQ6IGl0LnVybCwKICAgICAgICAgICAgICAgICAgICBwYXJzZV91cmw6IGl0LnBhcnNlX3VybCB8fCAnJywKICAgICAgICAgICAgICAgICAgICBzZWFyY2hhYmxlOiBpdC5zZWFyY2hhYmxlICE9PSAwLAogICAgICAgICAgICAgICAgICAgIGFwaTogaXQuYXBpIHx8ICcnLAogICAgICAgICAgICAgICAgICAgIGNhdGVfZXhjbHVkZTogaXQuY2F0ZV9leGNsdWRlIHx8ICcnLAogICAgICAgICAgICAgICAgICAgIGNhdGVfZXhjbHVkZXM6IGl0LmNhdGVfZXhjbHVkZXMgfHwgW10sCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgX2NsYXNzZXMucHVzaChfb2JqKTsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IGpzb24xID0gW107CiAgICAgICAgICAgICAgICAgICAgaWYgKGl0LmNsYXNzX25hbWUgJiYgaXQuY2xhc3NfdXJsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24xID0gZ2V0Q2xhc3NlcyhpdCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAganNvbjEgPSBKU09OLnBhcnNlKHJlcXVlc3QodXJsam9pbihfb2JqLnR5cGVfaWQsIF9vYmouYXBpIHx8IHJ1bGUuY2xhc3NVcmwpKSkuY2xhc3M7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChfb2JqLmNhdGVfZXhjbHVkZXMgJiYgQXJyYXkuaXNBcnJheShfb2JqLmNhdGVfZXhjbHVkZXMpICYmIF9vYmouY2F0ZV9leGNsdWRlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24xID0ganNvbjEuZmlsdGVyKGNsID0+ICFfb2JqLmNhdGVfZXhjbHVkZXMuaW5jbHVkZXMoY2wudHlwZV9uYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfb2JqLmNhdGVfZXhjbHVkZSkgewogICAgICAgICAgICAgICAgICAgICAgICBqc29uMSA9IGpzb24xLmZpbHRlcihjbCA9PiAhbmV3IFJlZ0V4cChfb2JqLmNhdGVfZXhjbHVkZSwgJ2knKS50ZXN0KGNsLnR5cGVfbmFtZSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBydWxlLmZpbHRlcltfb2JqLnR5cGVfaWRdID0gW3sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXkiOiAi57G75Z6LIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIuexu+WeiyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiBqc29uMS5tYXAoaSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm4iOiBpLnR5cGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3YnOiBpLnR5cGVfaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICBpZiAoanNvbjEubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBydWxlLmZpbHRlcl9kZWZbaXQudXJsXSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICLnsbvlnosiOiBqc29uMVswXS50eXBlX2lkCiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIHJ1bGUuZmlsdGVyW2l0LnVybF0gPSBbewogICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleSI6ICLnsbvlnosiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAi57G75Z6LIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcnVsZS5jbGFzc2VzID0gX2NsYXNzZXM7CiAgICAgICAgfQogICAgfSksCiAgICBjbGFzc19wYXJzZTogJGpzLnRvU3RyaW5nKCgpID0+IHsKICAgICAgICBpbnB1dCA9IHJ1bGUuY2xhc3NlczsKICAgIH0pLAogICAg5o6o6I2QOiAkanMudG9TdHJpbmcoKCkgPT4gewogICAgICAgIFZPRFMgPSBbXTsKICAgICAgICBpZiAocnVsZS5jbGFzc2VzKSB7CiAgICAgICAgICAgIGxldCByYW5kb21DbGFzcyA9IGdldFJhbmRvbUl0ZW0ocnVsZS5jbGFzc2VzKTsKICAgICAgICAgICAgbGV0IF91cmwgPSB1cmxqb2luKHJhbmRvbUNsYXNzLnR5cGVfaWQsIGlucHV0KTsKICAgICAgICAgICAgaWYgKHJhbmRvbUNsYXNzLmFwaSkgewogICAgICAgICAgICAgICAgX3VybCA9IF91cmwucmVwbGFjZSgnL2FwaS5waHAvcHJvdmlkZS92b2QvJywgcmFuZG9tQ2xhc3MuYXBpKQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoX3VybCwgewogICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHJ1bGUudGltZW91dAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBsZXQganNvbiA9IEpTT04ucGFyc2UoaHRtbCk7CiAgICAgICAgICAgICAgICBWT0RTID0ganNvbi5saXN0OwogICAgICAgICAgICAgICAgVk9EUy5mb3JFYWNoKGl0ID0+IHsKICAgICAgICAgICAgICAgICAgICBpdC52b2RfaWQgPSByYW5kb21DbGFzcy50eXBlX2lkICsgJyQnICsgaXQudm9kX2lkOwogICAgICAgICAgICAgICAgICAgIGl0LnZvZF9yZW1hcmtzID0gaXQudm9kX3JlbWFya3MgKyAnfCcgKyByYW5kb21DbGFzcy50eXBlX25hbWU7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkge30KICAgICAgICB9CiAgICB9KSwKICAgIOS4gOe6pzogJGpzLnRvU3RyaW5nKCgpID0+IHsKICAgICAgICBWT0RTID0gW107CiAgICAgICAgaWYgKHJ1bGUuY2xhc3NlcykgewogICAgICAgICAgICBsZXQgX3VybCA9IHVybGpvaW4oTVlfQ0FURSwgaW5wdXQpOwogICAgICAgICAgICBsZXQgY3VycmVudF92b2QgPSBydWxlLmNsYXNzZXMuZmluZChpdGVtID0+IGl0ZW0udHlwZV9pZCA9PT0gTVlfQ0FURSk7CiAgICAgICAgICAgIGlmIChjdXJyZW50X3ZvZCAmJiBjdXJyZW50X3ZvZC5hcGkpIHsKICAgICAgICAgICAgICAgIF91cmwgPSBfdXJsLnJlcGxhY2UoJy9hcGkucGhwL3Byb3ZpZGUvdm9kLycsIGN1cnJlbnRfdm9kLmFwaSkKICAgICAgICAgICAgfQogICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoX3VybCk7CiAgICAgICAgICAgIGxldCBqc29uID0gSlNPTi5wYXJzZShodG1sKTsKICAgICAgICAgICAgVk9EUyA9IGpzb24ubGlzdDsKICAgICAgICAgICAgVk9EUy5mb3JFYWNoKGl0ID0+IHsKICAgICAgICAgICAgICAgIGl0LnZvZF9pZCA9IE1ZX0NBVEUgKyAnJCcgKyBpdC52b2RfaWQKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfSksCiAgICDkuoznuqc6ICRqcy50b1N0cmluZygoKSA9PiB7CiAgICAgICAgVk9EID0ge307CiAgICAgICAgaWYgKG9ySWQgPT09ICd1cGRhdGVfaW5mbycpIHsKICAgICAgICAgICAgVk9EID0gewogICAgICAgICAgICAgICAgdm9kX2NvbnRlbnQ6IHJ1bGUudXBkYXRlX2luZm8udHJpbSgpLAogICAgICAgICAgICAgICAgdm9kX25hbWU6ICfmm7TmlrDml6Xlv5cnLAogICAgICAgICAgICAgICAgdHlwZV9uYW1lOiAn5pu05paw5pel5b+XJywKICAgICAgICAgICAgICAgIHZvZF9waWM6ICdodHRwczovL3Jlc291cmNlLWNkbi50dXhpYW9iZWkuY29tL3ZpZGVvL0Z0V2hzMm1ld1hfN25FdUU1MV9rNnp2ZzZhd2wucG5nJywKICAgICAgICAgICAgICAgIHZvZF9yZW1hcmtzOiBg54mI5pysOiR7cnVsZS52ZXJzaW9ufWAsCiAgICAgICAgICAgICAgICB2b2RfcGxheV9mcm9tOiAn6YGT6ZW/5Zyo57q/JywKICAgICAgICAgICAgICAgIHZvZF9wbGF5X3VybDogJ+maj+acuuWwj+inhumikSRodHRwOi8vYXBpLnl1am4uY24vYXBpL3p6eGpqLnBocCcsCiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHJ1bGUuY2xhc3NlcykgewogICAgICAgICAgICAgICAgbGV0IF91cmwgPSB1cmxqb2luKGZ5Y2xhc3MsIGlucHV0KTsKICAgICAgICAgICAgICAgIGxldCBjdXJyZW50X3ZvZCA9IHJ1bGUuY2xhc3Nlcy5maW5kKGl0ZW0gPT4gaXRlbS50eXBlX2lkID09PSBmeWNsYXNzKTsKICAgICAgICAgICAgICAgIGlmIChjdXJyZW50X3ZvZCAmJiBjdXJyZW50X3ZvZC5hcGkpIHsKICAgICAgICAgICAgICAgICAgICBfdXJsID0gX3VybC5yZXBsYWNlKCcvYXBpLnBocC9wcm92aWRlL3ZvZC8nLCBjdXJyZW50X3ZvZC5hcGkpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoX3VybCk7CiAgICAgICAgICAgICAgICBsZXQganNvbiA9IEpTT04ucGFyc2UoaHRtbCk7CiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGpzb24ubGlzdDsKICAgICAgICAgICAgICAgIFZPRCA9IGRhdGFbMF07CiAgICAgICAgICAgICAgICBpZiAoY3VycmVudF92b2QgJiYgY3VycmVudF92b2QudHlwZV9uYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgVk9ELnZvZF9wbGF5X2Zyb20gPSBWT0Qudm9kX3BsYXlfZnJvbS5zcGxpdCgnJCQkJykubWFwKGl0ID0+IGN1cnJlbnRfdm9kLnR5cGVfbmFtZSArICd8JyArIGl0KS5qb2luKCckJCQnKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSksCiAgICDmkJzntKI6ICRqcy50b1N0cmluZygoKSA9PiB7CiAgICAgICAgVk9EUyA9IFtdOwogICAgICAgIGlmIChydWxlLmNsYXNzZXMpIHsKICAgICAgICAgICAgbGV0IGNhblNlYXJjaCA9IHJ1bGUuY2xhc3Nlcy5maWx0ZXIoaXQgPT4gaXQuc2VhcmNoYWJsZSk7CiAgICAgICAgICAgIGxldCBwYWdlID0gTnVtYmVyKE1ZX1BBR0UpOwogICAgICAgICAgICBwYWdlID0gKE1ZX1BBR0UgLSAxKSAlIE1hdGguY2VpbChjYW5TZWFyY2gubGVuZ3RoIC8gcnVsZS5zZWFyY2hfbGltaXQpICsgMTsKICAgICAgICAgICAgbGV0IHRydWVQYWdlID0gTWF0aC5jZWlsKE1ZX1BBR0UgLyBNYXRoLmNlaWwoY2FuU2VhcmNoLmxlbmd0aCAvIHJ1bGUuc2VhcmNoX2xpbWl0KSk7CiAgICAgICAgICAgIGlmIChydWxlLnNlYXJjaF9saW1pdCkgewogICAgICAgICAgICAgICAgbGV0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHJ1bGUuc2VhcmNoX2xpbWl0OwogICAgICAgICAgICAgICAgbGV0IGVuZCA9IHBhZ2UgKiBydWxlLnNlYXJjaF9saW1pdDsKICAgICAgICAgICAgICAgIGxldCB0MSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgICAgICAgICAgICAgbGV0IHNlYXJjaE1vZGUgPSB0eXBlb2YoYmF0Y2hGZXRjaCkgPT09ICdmdW5jdGlvbicgPyAn5om56YePJyA6ICfljZXkuKonOwogICAgICAgICAgICAgICAgbG9nKCdzdGFydDonICsgc3RhcnQpOwogICAgICAgICAgICAgICAgbG9nKCdlbmQ6JyArIGVuZCk7CiAgICAgICAgICAgICAgICBsb2coJ+aQnOe0ouaooeW8jzonICsgc2VhcmNoTW9kZSk7CiAgICAgICAgICAgICAgICBsb2coJ+eyvuWHhuaQnOe0ojonICsgcnVsZS5zZWFyY2hfbWF0Y2gpOwogICAgICAgICAgICAgICAgbG9nKCflvLrliLbojrflj5blm77niYc6JyArIHJ1bGUuc2VhcmNoX3BpYyk7CiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPCBjYW5TZWFyY2gubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IHNlYXJjaF9jbGFzc2VzID0gY2FuU2VhcmNoLnNsaWNlKHN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIGxldCB1cmxzID0gW107CiAgICAgICAgICAgICAgICAgICAgc2VhcmNoX2NsYXNzZXMuZm9yRWFjaChpdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBfdXJsID0gdXJsam9pbihpdC50eXBlX2lkLCBpbnB1dCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdC5hcGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF91cmwgPSBfdXJsLnJlcGxhY2UoJy9hcGkucGhwL3Byb3ZpZGUvdm9kLycsIGl0LmFwaSkKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBfdXJsID0gX3VybC5yZXBsYWNlKCIjVHJ1ZVBhZ2UjIiwgIiIgKyB0cnVlUGFnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHVybHMucHVzaChfdXJsKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0c19saXN0ID0gW107CiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKGJhdGNoRmV0Y2gpID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXFVcmxzID0gdXJscy5tYXAoaXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogcnVsZS50aW1lb3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldHMgPSBiYXRjaEZldGNoKHJlcVVybHMpOwogICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGV0YWlsVXJscyA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGV0YWlsVXJsQ291bnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICByZXRzLmZvckVhY2goKHJldCwgaWR4KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXQgPSBzZWFyY2hfY2xhc3Nlc1tpZHhdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqc29uID0gSlNPTi5wYXJzZShyZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGpzb24ubGlzdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5mb3JFYWNoKGkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaS5zaXRlX25hbWUgPSBpdC50eXBlX25hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLnZvZF9pZCA9IGl0LnR5cGVfaWQgKyAnJCcgKyBpLnZvZF9pZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkudm9kX3JlbWFya3MgPSBpLnZvZF9yZW1hcmtzICsgJ3wnICsgaXQudHlwZV9uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGUuc2VhcmNoX21hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLnZvZF9uYW1lICYmIChuZXcgUmVnRXhwKEtFWSwgJ2knKSkudGVzdChpdGVtLnZvZF9uYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5zZWFyY2hfcGljICYmICFkYXRhWzBdLnZvZF9waWMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coYOW9k+WJjeaQnOe0ouermeeCueOAkCR7aXQudHlwZV9uYW1lfeOAkeayoeWbvueJhyzlsJ3or5Xorr/pl67kuoznuqfljrvojrflj5blm77niYdgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGV0YWlsVXJsID0gdXJsc1tpZHhdLnNwbGl0KCd3ZD0nKVswXSArICdhYz1kZXRhaWwmaWRzPScgKyBkYXRhLm1hcChrID0+IGsudm9kX2lkLnNwbGl0KCckJylbMV0pLmpvaW4oJywnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxVcmxzLnB1c2goZGV0YWlsVXJsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzX2xpc3QucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19waWM6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxVcmxDb3VudDogZGV0YWlsVXJsQ291bnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxVcmxDb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzX2xpc3QucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19waWM6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKGDor7fmsYI6JHtpdC50eXBlX2lkfeWPkeeUn+mUmeivrzoke2UubWVzc2FnZX1gKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXFVcmxzMiA9IGRldGFpbFVybHMubWFwKGl0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHJ1bGUudGltZW91dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXRzMiA9IHJlcVVybHMyLmxlbmd0aCA+IDAgPyBiYXRjaEZldGNoKHJlcVVybHMyKSA6IFtdOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHJlc3VsdHNfbGlzdC5sZW5ndGg7IGsrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdF9kYXRhID0gcmVzdWx0c19saXN0W2tdLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdHNfbGlzdFtrXS5oYXNfcGljKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRldGFpbEpzb24gPSBKU09OLnBhcnNlKHJldHMyW3Jlc3VsdHNfbGlzdFtrXS5kZXRhaWxVcmxDb3VudF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+S6jOe6p+aVsOaNruWIl+ihqOWFg+e0oOaVsDonICsgZGV0YWlsSnNvbi5saXN0Lmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9kYXRhLmZvckVhY2goKGQsIF9zZXEpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkZXRhaWxWb2RQaWMgPSBkZXRhaWxKc29uLmxpc3QuZmluZCh2b2QgPT4gdm9kLnZvZF9pZC50b1N0cmluZygpID09PSBkLnZvZF9pZC5zcGxpdCgnJCcpWzFdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXRhaWxWb2RQaWMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGQsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9kX3BpYzogZGV0YWlsVm9kUGljLnZvZF9waWMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coYOW8uuWItuiOt+WPlue9keermSR7cmVzdWx0X2RhdGFbMF0uc2l0ZV9uYW1lfeeahOaQnOe0ouWbvueJh+Wksei0pToke2UubWVzc2FnZX1gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQocmVzdWx0X2RhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdXJscy5mb3JFYWNoKChfdXJsLCBpZHgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpdCA9IHNlYXJjaF9jbGFzc2VzW2lkeF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChfdXJsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQganNvbiA9IEpTT04ucGFyc2UoaHRtbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBqc29uLmxpc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5mb3JFYWNoKGkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLnZvZF9pZCA9IGl0LnR5cGVfaWQgKyAnJCcgKyBpLnZvZF9pZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaS52b2RfcmVtYXJrcyA9IGkudm9kX3JlbWFya3MgKyAnfCcgKyBpdC50eXBlX25hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGUuc2VhcmNoX21hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcihpdGVtID0+IGl0ZW0udm9kX25hbWUgJiYgKG5ldyBSZWdFeHAoS0VZLCAnaScpKS50ZXN0KGl0ZW0udm9kX25hbWUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLnNlYXJjaF9waWMgJiYgIWRhdGFbMF0udm9kX3BpYykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKGDlvZPliY3mkJzntKLnq5nngrnjgJAke2l0LnR5cGVfbmFtZX3jgJHmsqHlm77niYcs5bCd6K+V6K6/6Zeu5LqM57qn5Y676I635Y+W5Zu+54mHYCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGV0YWlsVXJsID0gdXJsc1tpZHhdLnNwbGl0KCd3ZD0nKVswXSArICdhYz1kZXRhaWwmaWRzPScgKyBkYXRhLm1hcChrID0+IGsudm9kX2lkLnNwbGl0KCckJylbMV0pLmpvaW4oJywnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRldGFpbEpzb24gPSBKU09OLnBhcnNlKHJlcXVlc3QoZGV0YWlsVXJsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCfkuoznuqfmlbDmja7liJfooajlhYPntKDmlbA6JyArIGRldGFpbEpzb24ubGlzdC5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZm9yRWFjaCgoZCwgX3NlcSkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGV0YWlsVm9kUGljID0gZGV0YWlsSnNvbi5saXN0LmZpbmQodm9kID0+IHZvZC52b2RfaWQudG9TdHJpbmcoKSA9PT0gZC52b2RfaWQuc3BsaXQoJyQnKVsxXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXRhaWxWb2RQaWMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZCwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvZF9waWM6IGRldGFpbFZvZFBpYy52b2RfcGljCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhg5by65Yi26I635Y+W572R56uZJHtpdC50eXBlX2lkfeeahOaQnOe0ouWbvueJh+Wksei0pToke2UubWVzc2FnZX1gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChkYXRhKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coYOivt+axgjoke2l0LnR5cGVfaWR95Y+R55Sf6ZSZ6K+vOiR7ZS5tZXNzYWdlfWApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBWT0RTID0gcmVzdWx0czsKICAgICAgICAgICAgICAgICAgICBsZXQgdDIgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKICAgICAgICAgICAgICAgICAgICBsb2coYCR7c2VhcmNoTW9kZX3mkJzntKI6JHt1cmxzLmxlbmd0aH3kuKrnq5nogJfml7Y6JHsoTnVtYmVyKHQyKSAtIE51bWJlcih0MSkpfW1zYCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pLAogICAgbGF6eTogJGpzLnRvU3RyaW5nKCgpID0+IHsKICAgICAgICBsZXQgcGFyc2VfdXJsID0gJyc7CiAgICAgICAgaWYgKGZsYWcgJiYgZmxhZy5pbmNsdWRlcygnfCcpKSB7CiAgICAgICAgICAgIGxldCB0eXBlX25hbWUgPSBmbGFnLnNwbGl0KCd8JylbMF07CiAgICAgICAgICAgIGxldCBjdXJyZW50X3ZvZCA9IHJ1bGUuY2xhc3Nlcy5maW5kKGl0ZW0gPT4gaXRlbS50eXBlX25hbWUgPT09IHR5cGVfbmFtZSk7CiAgICAgICAgICAgIGlmIChjdXJyZW50X3ZvZCAmJiBjdXJyZW50X3ZvZC5wYXJzZV91cmwpIHsKICAgICAgICAgICAgICAgIHBhcnNlX3VybCA9IGN1cnJlbnRfdm9kLnBhcnNlX3VybAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgvXC4obTN1OHxtcDQpLy50ZXN0KGlucHV0KSkgewogICAgICAgICAgICBpbnB1dCA9IHsKICAgICAgICAgICAgICAgIHBhcnNlOiAwLAogICAgICAgICAgICAgICAgdXJsOiBpbnB1dAogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHBhcnNlX3VybC5zdGFydHNXaXRoKCdqc29uOicpKSB7CiAgICAgICAgICAgICAgICBsZXQgcHVybCA9IHBhcnNlX3VybC5yZXBsYWNlKCdqc29uOicsICcnKSArIGlucHV0OwogICAgICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHB1cmwpOwogICAgICAgICAgICAgICAgaW5wdXQgPSB7CiAgICAgICAgICAgICAgICAgICAgcGFyc2U6IDAsCiAgICAgICAgICAgICAgICAgICAgdXJsOiBKU09OLnBhcnNlKGh0bWwpLnVybAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaW5wdXQgPSBwYXJzZV91cmwgKyBpbnB1dDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pLAp9Cg==
\ No newline at end of file
diff --git a/潇洒/js/DHPDQ.js b/潇洒/js/DHPDQ.js
new file mode 100644
index 0000000..45ecec1
--- /dev/null
+++ b/潇洒/js/DHPDQ.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+WKqOeUu+eJh+Wkp+WFqCcsCiAgICBob3N0OiAnaHR0cHM6Ly93d3cuZGhwZHEyLmNvbS8nLAogICAgdXJsOiAnaHR0cHM6Ly93d3cuZGhwZHEyLmNvbS9rYXRvbmcvZnljbGFzcy1meXBhZ2UvJywKICAgIHNlYXJjaFVybDogJy92b2RzZWFyY2gvKiotLS0tLS0tLS0tZnlwYWdlLS0tLycsCiAgICBjbGFzc19wYXJzZTogJy5jX2NsYXNzIGxpO2EmJlRleHQ7YSYmaHJlZjsuKi8oLio/KS8nLAogICAgc2VhcmNoYWJsZTogMiwKICAgIHF1aWNrU2VhcmNoOiAwLAogICAgZmlsdGVyYWJsZTogMCwKICAgIGhlYWRlcnM6IHsKICAgICAgICAnVXNlci1BZ2VudCc6ICdNT0JJTEVfVUEnLAogICAgfSwKICAgIHBsYXlfcGFyc2U6IHRydWUsCiAgICBsYXp5OiAnJywKICAgIGxpbWl0OiA2LAogICAg5o6o6I2QOiAnLnN0dWktdm9kbGlzdDtsaTthJiZ0aXRsZTthJiZkYXRhLW9yaWdpbmFsOy5waWMtdGV4dCYmVGV4dDthJiZocmVmJywKICAgIGRvdWJsZTogdHJ1ZSwKICAgIOS4gOe6pzogJy5zdHVpLXZvZGxpc3QgbGk7YSYmdGl0bGU7YSYmZGF0YS1vcmlnaW5hbDsucGljLXRleHQmJlRleHQ7YSYmaHJlZicsCiAgICDkuoznuqc6IHsKICAgICAgICB0aXRsZTogJ2gxJiZUZXh0Oy5kZXRhaWxfbGlzdCYmdWw6ZXEoMSkmJmxpJiZhOmVxKDIpJiZUZXh0JywKICAgICAgICBpbWc6ICcudm9kbGlzdF90aHVtYiYmZGF0YS1vcmlnaW5hbCcsCiAgICAgICAgZGVzYzogJy5wbGF5aW5mbyYmcDplcSgwKSYmVGV4dDsucGxheWluZm8mJnA6ZXEoMSkmJlRleHQ7LnBsYXlpbmZvJiZwOmVxKDIpJiZUZXh0Oy5wbGF5aW5mbyYmcDplcSgzKSYmVGV4dCcsCiAgICAgICAgY29udGVudDogJy5jb250ZW50OmVxKDEpJywKICAgICAgICB0YWJzOiAnLnJlbGF0ZXNkaCAudGl0bGUgaDMnLAogICAgICAgIGxpc3RzOiAnLnJlbGF0ZXNkaDplcSgjaWQpIGxpJywKICAgIH0sCiAgICDmkJzntKI6ICcqJywKfQ==
\ No newline at end of file
diff --git a/潇洒/js/DJDQ.js b/潇洒/js/DJDQ.js
new file mode 100644
index 0000000..cf012c5
--- /dev/null
+++ b/潇洒/js/DJDQ.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICDnsbvlnos6ICflvbHop4YnLCAvL+W9seinhnzlkKzkuaZ85ryr55S7fOWwj+ivtAogICAgdGl0bGU6ICfnn63liacnLAogICAgaG9zdDogJ2h0dHBzOi8vYWktaW1nLnljdWJicy5jbi8nLAogICAgaG9tZVVybDogJy9hcGkvZHVhbmp1L2xpc3QnLAogICAgdXJsOiAnL2FwaS9kdWFuanUvbGlzdCcsCiAgICBzZWFyY2hVcmw6ICdodHRwczovL2FwaS5rdWxldS5jb20vYXBpL2FjdGlvbj90ZXh0PSoqJywKICAgIHNlYXJjaGFibGU6IDEsCiAgICBxdWlja1NlYXJjaDogMCwKICAgIGZpbHRlcmFibGU6IDAsCiAgICBoZWFkZXJzOiB7CiAgICAgICAgJ1VzZXItQWdlbnQnOiAnTU9CSUxFX1VBJywKICAgIH0sCiAgICBoaWtlckxpc3RDb2w6ICJ0ZXh0XzEiLAogICAgaGlrZXJDbGFzc0xpc3RDb2w6ICJ0ZXh0XzEiLAogICAgdGltZW91dDogNTAwMCwKICAgIGNsYXNzX25hbWU6ICcnLAogICAgY2xhc3NfdXJsOiAnJywKICAgIHBsYXlfcGFyc2U6IHRydWUsCiAgICBsYXp5OiAkanMudG9TdHJpbmcoKCkgPT4gewogICAgICAgIGlucHV0ID0gInB1c2g6Ly8iICsgaW5wdXQ7CiAgICB9KSwKICAgIGRvdWJsZTogZmFsc2UsCiAgICDmjqjojZA6ICcqJywKICAgIOS4gOe6pzogJ2pzb246ZGF0YTtuYW1lOzs7dXJsJywKICAgIOS6jOe6pzogJyonLAogICAg5pCc57SiOiAnanNvbjpkYXRhO25hbWU7Ozt2aWV3bGluaycsCn0=
\ No newline at end of file
diff --git a/潇洒/js/DJHJ.js b/潇洒/js/DJHJ.js
new file mode 100644
index 0000000..953f3d3
--- /dev/null
+++ b/潇洒/js/DJHJ.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICDnsbvlnos6ICflvbHop4YnLCAvL+W9seinhnzlkKzkuaZ85ryr55S7fOWwj+ivtAogICAgdGl0bGU6ICfniLHnnIvnn63liadb55uYXScsCiAgICBob3N0OiAnaHR0cHM6Ly95cy4xMTB0LmNuLycsCiAgICBob21lVXJsOiAnL2FwaS9hamF4LnBocD9hY3Q9cmVjb21tZW5kJywKICAgIGhvbWVVcmw6ICcvYXBpL2FqYXgucGhwP2FjdD1EYWlseScsCiAgICB1cmw6ICcvYXBpL2FqYXgucGhwP2FjdD1meWNsYXNzJywKICAgIHNlYXJjaFVybDogJy9hcGkvYWpheC5waHA/YWN0PXNlYXJjaCZuYW1lPSoqJywKICAgIHNlYXJjaGFibGU6IDEsCiAgICBxdWlja1NlYXJjaDogMCwKICAgIGZpbHRlcmFibGU6IDAsCiAgICBoZWFkZXJzOiB7CiAgICAgICAgJ1VzZXItQWdlbnQnOiAnTU9CSUxFX1VBJywKICAgIH0sCiAgICBoaWtlckxpc3RDb2w6ICJ0ZXh0XzEiLAogICAgaGlrZXJDbGFzc0xpc3RDb2w6ICJ0ZXh0XzEiLAogICAgdGltZW91dDogNTAwMCwKICAgIGNsYXNzX25hbWU6ICflhajpg6gnLAogICAgY2xhc3NfdXJsOiAneWluZ3NoaWxpc3QnLAogICAgcGxheV9wYXJzZTogdHJ1ZSwKICAgIGxhenk6ICRqcy50b1N0cmluZygoKSA9PiB7CiAgICAgICAgaW5wdXQgPSAicHVzaDovLyIgKyBpbnB1dDsKICAgIH0pLAogICAgZG91YmxlOiBmYWxzZSwKICAgIOaOqOiNkDogJyonLAogICAg5LiA57qnOiAnanNvbjpkYXRhO25hbWU7O2FkZHRpbWU7dXJsJywKICAgIOS6jOe6pzogJyonLAogICAg5pCc57SiOiAnKicsCn0=
\ No newline at end of file
diff --git a/潇洒/js/DMD.js b/潇洒/js/DMD.js
new file mode 100644
index 0000000..f2acc72
--- /dev/null
+++ b/潇洒/js/DMD.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+WKqOa8q+WymycsCiAgICAvLyBob3N0OidodHRwOi8vd3d3LmRtZDg1LmNvbScsCiAgICAvLyBob3N0OidodHRwOi8vd3d3Ljg4ZG13LmNvbScsCiAgICBob3N0OiAnaHR0cDovL3d3dy5kbWFuZDUuY29tJywKICAgIC8vIHVybDonL3ZvZC1saXN0LWlkLWZ5Y2xhc3MtcGctZnlwYWdlLW9yZGVyLS1ieS17Ynl9LWNsYXNzLXtjbGFzc30teWVhci17eWVhcn0tbGV0dGVyLS1hcmVhLS1sYW5nLS5odG1sJywKICAgIHVybDogJy92b2QtbGlzdC1pZC1meWNsYXNzLXBnLWZ5cGFnZS1vcmRlci1meWZpbHRlci1hcmVhLS1sYW5nLS5odG1sJywKICAgIGZpbHRlcmFibGU6IDEsIC8v5piv5ZCm5ZCv55So5YiG57G7562b6YCJLAogICAgZmlsdGVyX3VybDogJy1ieS17e2ZsLmJ5fX0tY2xhc3Mte3tmbC5jbGFzc319LXllYXIte3tmbC55ZWFyfX0tbGV0dGVyLXt7ZmwubGV0dGVyfX0nLAogICAgZmlsdGVyOiB7CiAgICAgICAgIjEiOiBbewogICAgICAgICAgICAia2V5IjogImNsYXNzIiwKICAgICAgICAgICAgIm5hbWUiOiAi5Ymn5oOFIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWGkumZqSIsCiAgICAgICAgICAgICAgICAidiI6ICIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLng63ooYAiLAogICAgICAgICAgICAgICAgInYiOiAiMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5aWH5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaBi+eIsSIsCiAgICAgICAgICAgICAgICAidiI6ICI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmoKHlm60iLAogICAgICAgICAgICAgICAgInYiOiAiNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5ZCO5a6rIiwKICAgICAgICAgICAgICAgICJ2IjogIjYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaQnueskSIsCiAgICAgICAgICAgICAgICAidiI6ICI3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpnZLmmKUiLAogICAgICAgICAgICAgICAgInYiOiAiOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi55m+5ZCIIiwKICAgICAgICAgICAgICAgICJ2IjogIjkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuenkeW5uyIsCiAgICAgICAgICAgICAgICAidiI6ICIxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5o6o55CGIiwKICAgICAgICAgICAgICAgICJ2IjogIjEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLprZTms5UiLAogICAgICAgICAgICAgICAgInYiOiAiMTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuelnumtlCIsCiAgICAgICAgICAgICAgICAidiI6ICIxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5rK75oSIIiwKICAgICAgICAgICAgICAgICJ2IjogIjEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnq57mioAiLAogICAgICAgICAgICAgICAgInYiOiAiNTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaCrOeWkSIsCiAgICAgICAgICAgICAgICAidiI6ICI2MCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oiY5LqJIiwKICAgICAgICAgICAgICAgICJ2IjogIjYyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLokJ3ojokiLAogICAgICAgICAgICAgICAgInYiOiAiNjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumtlOW5uyIsCiAgICAgICAgICAgICAgICAidiI6ICI2NCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oiY5paXIiwKICAgICAgICAgICAgICAgICJ2IjogIjY1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrYzoiJ4iLAogICAgICAgICAgICAgICAgInYiOiAiOTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWOhuWPsiIsCiAgICAgICAgICAgICAgICAidiI6ICI5OSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Yqx5b+XIiwKICAgICAgICAgICAgICAgICJ2IjogIjEwOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YG25YOPIiwKICAgICAgICAgICAgICAgICJ2IjogIjExOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6IGM5Zy6IiwKICAgICAgICAgICAgICAgICJ2IjogIjEyMSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAieWVhciIsCiAgICAgICAgICAgICJuYW1lIjogIuW5tOS7vSIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDExIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDkiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA3IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDYiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDAyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAxIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwMCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAibGV0dGVyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5a2X5q+NIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkEiLAogICAgICAgICAgICAgICAgInYiOiAiQSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiQiIsCiAgICAgICAgICAgICAgICAidiI6ICJCIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJDIiwKICAgICAgICAgICAgICAgICJ2IjogIkMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkQiLAogICAgICAgICAgICAgICAgInYiOiAiRCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRSIsCiAgICAgICAgICAgICAgICAidiI6ICJFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJGIiwKICAgICAgICAgICAgICAgICJ2IjogIkYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkciLAogICAgICAgICAgICAgICAgInYiOiAiRyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSCIsCiAgICAgICAgICAgICAgICAidiI6ICJIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJJIiwKICAgICAgICAgICAgICAgICJ2IjogIkkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkoiLAogICAgICAgICAgICAgICAgInYiOiAiSiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSyIsCiAgICAgICAgICAgICAgICAidiI6ICJLIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJMIiwKICAgICAgICAgICAgICAgICJ2IjogIkwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIk0iLAogICAgICAgICAgICAgICAgInYiOiAiTSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTiIsCiAgICAgICAgICAgICAgICAidiI6ICJOIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJPIiwKICAgICAgICAgICAgICAgICJ2IjogIk8iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlAiLAogICAgICAgICAgICAgICAgInYiOiAiUCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUSIsCiAgICAgICAgICAgICAgICAidiI6ICJRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJSIiwKICAgICAgICAgICAgICAgICJ2IjogIlIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlMiLAogICAgICAgICAgICAgICAgInYiOiAiUyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVCIsCiAgICAgICAgICAgICAgICAidiI6ICJUIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJVIiwKICAgICAgICAgICAgICAgICJ2IjogIlUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlYiLAogICAgICAgICAgICAgICAgInYiOiAiViIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVyIsCiAgICAgICAgICAgICAgICAidiI6ICJXIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJYIiwKICAgICAgICAgICAgICAgICJ2IjogIlgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlkiLAogICAgICAgICAgICAgICAgInYiOiAiWSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiWiIsCiAgICAgICAgICAgICAgICAidiI6ICJaIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJieSIsCiAgICAgICAgICAgICJuYW1lIjogIuaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLmm7TmlrAiLAogICAgICAgICAgICAgICAgInYiOiAidGltZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5b6X5YiGIiwKICAgICAgICAgICAgICAgICJ2IjogInNjb3JlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgLvmjpLooYwiLAogICAgICAgICAgICAgICAgInYiOiAiaGl0cyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiMyI6IFt7CiAgICAgICAgICAgICJrZXkiOiAiY2xhc3MiLAogICAgICAgICAgICAibmFtZSI6ICLliafmg4UiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YaS6ZmpIiwKICAgICAgICAgICAgICAgICJ2IjogIjM2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLng63ooYAiLAogICAgICAgICAgICAgICAgInYiOiAiMzciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWlh+W5uyIsCiAgICAgICAgICAgICAgICAidiI6ICIzOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oGL54ixIiwKICAgICAgICAgICAgICAgICJ2IjogIjM5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgYvniLEiLAogICAgICAgICAgICAgICAgInYiOiAiNDAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaBi+eIsSIsCiAgICAgICAgICAgICAgICAidiI6ICI0MCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pCe56yRIiwKICAgICAgICAgICAgICAgICJ2IjogIjQyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmsrvmhIgiLAogICAgICAgICAgICAgICAgInYiOiAiNDMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuelnumtlCIsCiAgICAgICAgICAgICAgICAidiI6ICI0NCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6a2U5rOVIiwKICAgICAgICAgICAgICAgICJ2IjogIjQ1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnmb7lkIgiLAogICAgICAgICAgICAgICAgInYiOiAiNDYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaOqOeQhiIsCiAgICAgICAgICAgICAgICAidiI6ICI0NyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56eR5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIjQ4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnq57mioAiLAogICAgICAgICAgICAgICAgInYiOiAiNDkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaCrOeWkSIsCiAgICAgICAgICAgICAgICAidiI6ICI2NiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oiY5LqJIiwKICAgICAgICAgICAgICAgICJ2IjogIjY4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLokJ3ojokiLAogICAgICAgICAgICAgICAgInYiOiAiNjkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumtlOW5uyIsCiAgICAgICAgICAgICAgICAidiI6ICI3MCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oiY5paXIiwKICAgICAgICAgICAgICAgICJ2IjogIjcxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpnZLmmKUiLAogICAgICAgICAgICAgICAgInYiOiAiNzIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWOhuWPsiIsCiAgICAgICAgICAgICAgICAidiI6ICIxMDAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuatjOiIniIsCiAgICAgICAgICAgICAgICAidiI6ICIxMDEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaBkOaAliIsCiAgICAgICAgICAgICAgICAidiI6ICIxMDQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiBjOWcuiIsCiAgICAgICAgICAgICAgICAidiI6ICIxMDciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWKseW/lyIsCiAgICAgICAgICAgICAgICAidiI6ICIxMDkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWBtuWDjyIsCiAgICAgICAgICAgICAgICAidiI6ICIxMTkiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku70iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDAxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDAiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImxldHRlciIsCiAgICAgICAgICAgICJuYW1lIjogIuWtl+avjSIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJBIiwKICAgICAgICAgICAgICAgICJ2IjogIkEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkIiLAogICAgICAgICAgICAgICAgInYiOiAiQiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiQyIsCiAgICAgICAgICAgICAgICAidiI6ICJDIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJEIiwKICAgICAgICAgICAgICAgICJ2IjogIkQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkUiLAogICAgICAgICAgICAgICAgInYiOiAiRSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRiIsCiAgICAgICAgICAgICAgICAidiI6ICJGIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJHIiwKICAgICAgICAgICAgICAgICJ2IjogIkciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkgiLAogICAgICAgICAgICAgICAgInYiOiAiSCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSSIsCiAgICAgICAgICAgICAgICAidiI6ICJJIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJKIiwKICAgICAgICAgICAgICAgICJ2IjogIkoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIksiLAogICAgICAgICAgICAgICAgInYiOiAiSyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTCIsCiAgICAgICAgICAgICAgICAidiI6ICJMIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJNIiwKICAgICAgICAgICAgICAgICJ2IjogIk0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIk4iLAogICAgICAgICAgICAgICAgInYiOiAiTiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTyIsCiAgICAgICAgICAgICAgICAidiI6ICJPIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJQIiwKICAgICAgICAgICAgICAgICJ2IjogIlAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlEiLAogICAgICAgICAgICAgICAgInYiOiAiUSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUiIsCiAgICAgICAgICAgICAgICAidiI6ICJSIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJTIiwKICAgICAgICAgICAgICAgICJ2IjogIlMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlQiLAogICAgICAgICAgICAgICAgInYiOiAiVCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVSIsCiAgICAgICAgICAgICAgICAidiI6ICJVIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJWIiwKICAgICAgICAgICAgICAgICJ2IjogIlYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlciLAogICAgICAgICAgICAgICAgInYiOiAiVyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiWCIsCiAgICAgICAgICAgICAgICAidiI6ICJYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJZIiwKICAgICAgICAgICAgICAgICJ2IjogIlkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIloiLAogICAgICAgICAgICAgICAgInYiOiAiWiIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYnkiLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pu05pawIiwKICAgICAgICAgICAgICAgICJ2IjogInRpbWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuW+l+WIhiIsCiAgICAgICAgICAgICAgICAidiI6ICJzY29yZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oC75o6S6KGMIiwKICAgICAgICAgICAgICAgICJ2IjogImhpdHMiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIjQiOiBbewogICAgICAgICAgICAia2V5IjogImNsYXNzIiwKICAgICAgICAgICAgIm5hbWUiOiAi5Ymn5oOFIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWGkumZqSIsCiAgICAgICAgICAgICAgICAidiI6ICI1MCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54Ot6KGAIiwKICAgICAgICAgICAgICAgICJ2IjogIjUxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrabkvqAiLAogICAgICAgICAgICAgICAgInYiOiAiNTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWlh+W5uyIsCiAgICAgICAgICAgICAgICAidiI6ICI1MyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi546E5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIjU0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnq57mioAiLAogICAgICAgICAgICAgICAgInYiOiAiNTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumtlOW5uyIsCiAgICAgICAgICAgICAgICAidiI6ICI1NiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56eR5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIjU3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgYvniLEiLAogICAgICAgICAgICAgICAgInYiOiAiNTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWOhuWPsiIsCiAgICAgICAgICAgICAgICAidiI6ICI3MyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oiY5paXIiwKICAgICAgICAgICAgICAgICJ2IjogIjc0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmkJ7nrJEiLAogICAgICAgICAgICAgICAgInYiOiAiNzUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuelnumtlCIsCiAgICAgICAgICAgICAgICAidiI6ICI3NiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oiY5LqJIiwKICAgICAgICAgICAgICAgICJ2IjogIjk3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlj6Tpo44iLAogICAgICAgICAgICAgICAgInYiOiAiMTExIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlsJHlpbMiLAogICAgICAgICAgICAgICAgInYiOiAiMTEyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLokJ3ojokiLAogICAgICAgICAgICAgICAgInYiOiAiMTEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmsrvmhIgiLAogICAgICAgICAgICAgICAgInYiOiAiMTE0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLml6XluLgiLAogICAgICAgICAgICAgICAgInYiOiAiMTE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrYzoiJ4iLAogICAgICAgICAgICAgICAgInYiOiAiMTE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlgbblg48iLAogICAgICAgICAgICAgICAgInYiOiAiMTIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLogYzlnLoiLAogICAgICAgICAgICAgICAgInYiOiAiMTIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLku5nkvqAiLAogICAgICAgICAgICAgICAgInYiOiAiMTI1IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJ5ZWFyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5bm05Lu9IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDExIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDciLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDAzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDAwIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJsZXR0ZXIiLAogICAgICAgICAgICAibmFtZSI6ICLlrZfmr40iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiQSIsCiAgICAgICAgICAgICAgICAidiI6ICJBIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJCIiwKICAgICAgICAgICAgICAgICJ2IjogIkIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkMiLAogICAgICAgICAgICAgICAgInYiOiAiQyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRCIsCiAgICAgICAgICAgICAgICAidiI6ICJEIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJFIiwKICAgICAgICAgICAgICAgICJ2IjogIkUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkYiLAogICAgICAgICAgICAgICAgInYiOiAiRiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRyIsCiAgICAgICAgICAgICAgICAidiI6ICJHIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJIIiwKICAgICAgICAgICAgICAgICJ2IjogIkgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkkiLAogICAgICAgICAgICAgICAgInYiOiAiSSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSiIsCiAgICAgICAgICAgICAgICAidiI6ICJKIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJLIiwKICAgICAgICAgICAgICAgICJ2IjogIksiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkwiLAogICAgICAgICAgICAgICAgInYiOiAiTCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTSIsCiAgICAgICAgICAgICAgICAidiI6ICJNIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJOIiwKICAgICAgICAgICAgICAgICJ2IjogIk4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIk8iLAogICAgICAgICAgICAgICAgInYiOiAiTyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUCIsCiAgICAgICAgICAgICAgICAidiI6ICJQIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJRIiwKICAgICAgICAgICAgICAgICJ2IjogIlEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlIiLAogICAgICAgICAgICAgICAgInYiOiAiUiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUyIsCiAgICAgICAgICAgICAgICAidiI6ICJTIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJUIiwKICAgICAgICAgICAgICAgICJ2IjogIlQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlUiLAogICAgICAgICAgICAgICAgInYiOiAiVSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiViIsCiAgICAgICAgICAgICAgICAidiI6ICJWIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJXIiwKICAgICAgICAgICAgICAgICJ2IjogIlciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlgiLAogICAgICAgICAgICAgICAgInYiOiAiWCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiWSIsCiAgICAgICAgICAgICAgICAidiI6ICJZIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJaIiwKICAgICAgICAgICAgICAgICJ2IjogIloiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImJ5IiwKICAgICAgICAgICAgIm5hbWUiOiAi5o6S5bqPIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuabtOaWsCIsCiAgICAgICAgICAgICAgICAidiI6ICJ0aW1lIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlvpfliIYiLAogICAgICAgICAgICAgICAgInYiOiAic2NvcmUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaAu+aOkuihjCIsCiAgICAgICAgICAgICAgICAidiI6ICJoaXRzIgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICIxNiI6IFt7CiAgICAgICAgICAgICJrZXkiOiAiY2xhc3MiLAogICAgICAgICAgICAibmFtZSI6ICLliafmg4UiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YaS6ZmpIiwKICAgICAgICAgICAgICAgICJ2IjogIjc3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLng63ooYAiLAogICAgICAgICAgICAgICAgInYiOiAiNzgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWlh+W5uyIsCiAgICAgICAgICAgICAgICAidiI6ICI3OSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oGL54ixIiwKICAgICAgICAgICAgICAgICJ2IjogIjgwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmoKHlm60iLAogICAgICAgICAgICAgICAgInYiOiAiODEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWQjuWuqyIsCiAgICAgICAgICAgICAgICAidiI6ICI4MiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pCe56yRIiwKICAgICAgICAgICAgICAgICJ2IjogIjgzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpnZLmmKUiLAogICAgICAgICAgICAgICAgInYiOiAiODQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueZvuWQiCIsCiAgICAgICAgICAgICAgICAidiI6ICI4NSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5rK75oSIIiwKICAgICAgICAgICAgICAgICJ2IjogIjg2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnpZ7prZQiLAogICAgICAgICAgICAgICAgInYiOiAiODciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumtlOazlSIsCiAgICAgICAgICAgICAgICAidiI6ICI4OCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5o6o55CGIiwKICAgICAgICAgICAgICAgICJ2IjogIjg5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAiOTAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuernuaKgCIsCiAgICAgICAgICAgICAgICAidiI6ICI5MSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oKs55aRIiwKICAgICAgICAgICAgICAgICJ2IjogIjkyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjkuokiLAogICAgICAgICAgICAgICAgInYiOiAiOTMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiQneiOiSIsCiAgICAgICAgICAgICAgICAidiI6ICI5NCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6a2U5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIjk1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjmlpciLAogICAgICAgICAgICAgICAgInYiOiAiOTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWOhuWPsiIsCiAgICAgICAgICAgICAgICAidiI6ICIxMDIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuatjOiIniIsCiAgICAgICAgICAgICAgICAidiI6ICIxMDMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaBkOaAliIsCiAgICAgICAgICAgICAgICAidiI6ICIxMDUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiBjOWcuiIsCiAgICAgICAgICAgICAgICAidiI6ICIxMDYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWKseW/lyIsCiAgICAgICAgICAgICAgICAidiI6ICIxMTAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWBtuWDjyIsCiAgICAgICAgICAgICAgICAidiI6ICIxMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiBjOWcuiIsCiAgICAgICAgICAgICAgICAidiI6ICIxMjQiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku70iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDAxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDAiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImxldHRlciIsCiAgICAgICAgICAgICJuYW1lIjogIuWtl+avjSIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJBIiwKICAgICAgICAgICAgICAgICJ2IjogIkEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkIiLAogICAgICAgICAgICAgICAgInYiOiAiQiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiQyIsCiAgICAgICAgICAgICAgICAidiI6ICJDIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJEIiwKICAgICAgICAgICAgICAgICJ2IjogIkQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkUiLAogICAgICAgICAgICAgICAgInYiOiAiRSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRiIsCiAgICAgICAgICAgICAgICAidiI6ICJGIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJHIiwKICAgICAgICAgICAgICAgICJ2IjogIkciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkgiLAogICAgICAgICAgICAgICAgInYiOiAiSCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSSIsCiAgICAgICAgICAgICAgICAidiI6ICJJIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJKIiwKICAgICAgICAgICAgICAgICJ2IjogIkoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIksiLAogICAgICAgICAgICAgICAgInYiOiAiSyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTCIsCiAgICAgICAgICAgICAgICAidiI6ICJMIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJNIiwKICAgICAgICAgICAgICAgICJ2IjogIk0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIk4iLAogICAgICAgICAgICAgICAgInYiOiAiTiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTyIsCiAgICAgICAgICAgICAgICAidiI6ICJPIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJQIiwKICAgICAgICAgICAgICAgICJ2IjogIlAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlEiLAogICAgICAgICAgICAgICAgInYiOiAiUSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUiIsCiAgICAgICAgICAgICAgICAidiI6ICJSIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJTIiwKICAgICAgICAgICAgICAgICJ2IjogIlMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlQiLAogICAgICAgICAgICAgICAgInYiOiAiVCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVSIsCiAgICAgICAgICAgICAgICAidiI6ICJVIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJWIiwKICAgICAgICAgICAgICAgICJ2IjogIlYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlciLAogICAgICAgICAgICAgICAgInYiOiAiVyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiWCIsCiAgICAgICAgICAgICAgICAidiI6ICJYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJZIiwKICAgICAgICAgICAgICAgICJ2IjogIlkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIloiLAogICAgICAgICAgICAgICAgInYiOiAiWiIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYnkiLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pu05pawIiwKICAgICAgICAgICAgICAgICJ2IjogInRpbWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuW+l+WIhiIsCiAgICAgICAgICAgICAgICAidiI6ICJzY29yZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oC75o6S6KGMIiwKICAgICAgICAgICAgICAgICJ2IjogImhpdHMiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0KICAgIH0sCiAgICBzZWFyY2hVcmw6ICcvc2VhcmNoLXBnLWZ5cGFnZS13ZC0qKi5odG1sJywKICAgIHNlYXJjaGFibGU6IDIsIC8v5piv5ZCm5ZCv55So5YWo5bGA5pCc57SiLAogICAgcXVpY2tTZWFyY2g6IDAsIC8v5piv5ZCm5ZCv55So5b+r6YCf5pCc57SiLAogICAgaGVhZGVyczogewogICAgICAgICdVc2VyLUFnZW50JzogJ1BDX1VBJywKICAgIH0sCiAgICBjbGFzc19wYXJzZTogJy5zZWNOYWNVbCBsaTthJiZUZXh0O2EmJmhyZWY7LiovKFxcZCspLTEuaHRtbCcsCiAgICBwbGF5X3BhcnNlOiB0cnVlLAogICAgbGF6eTogJycsCiAgICBsaW1pdDogNiwKICAgIOaOqOiNkDogJy5jMV9sX3dhcF9jb250YWN0IGxpOyo7aW1nJiZzcmM7LnRpbWU6ZXEoMCkmJlRleHQ7KicsCiAgICDkuIDnuqc6ICcubGlzdDNfY25fYm94IC5jbl9ib3gyO2EmJnRpdGxlOy5saXN0X3BpYyYmc3JjOy5saXN0XzIwIGxpOmVxKDEpIHNwYW4mJlRleHQ7YSYmaHJlZicsCiAgICDkuoznuqc6IHsKICAgICAgICAidGl0bGUiOiAiaDEmJlRleHQ7Lm9fcl9jb250YWN0JiZsaTplcSgwKSYmVGV4dCIsCiAgICAgICAgImltZyI6ICIub19iaWdfaW1nX2JnX2IgaW1nJiZzcmMiLAogICAgICAgICJkZXNjIjogIi5vX3JfY29udGFjdCYmbGk6ZXEoNikmJlRleHQ7Lm9fcl9jb250YWN0JiZsaTplcSg1KSYmVGV4dDsub19yX2NvbnRhY3QmJmxpOmVxKDMpJiZUZXh0Oy5vX3JfY29udGFjdCYmbGk6ZXEoMikmJlRleHQ7Lm9fcl9jb250YWN0JiZsaTplcSgxKSYmVGV4dCIsCiAgICAgICAgImNvbnRlbnQiOiAiLmRlc19ib3gmJlRleHQiLAogICAgICAgICJ0YWJzIjogIi5mcm9tLXRhYnMmJmxhYmVsIiwKICAgICAgICAibGlzdHMiOiAiLm1uX2xpc3RfbGlfbW92aWU6ZXEoI2lkKSBsaSIKICAgIH0sCiAgICDmkJzntKI6ICcqJywKfQ==
\ No newline at end of file
diff --git a/潇洒/js/HKDM.js b/潇洒/js/HKDM.js
new file mode 100644
index 0000000..a02652e
--- /dev/null
+++ b/潇洒/js/HKDM.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+Wlveeci+WKqOa8qycsCiAgICBob3N0OiAnaHR0cHM6Ly93d3cueW91aml1bGEuY29tLycsCiAgICB1cmw6ICdodHRwczovL3d3dy55b3VqaXVsYS5jb20veW91aml1L2Z5Y2xhc3MtZnlwYWdlLmh0bWwnLAogICAgc2VhcmNoVXJsOiAnaHR0cHM6Ly93d3cueW91aml1bGEuY29tL3NlYXJjaC5waHA/cGFnZT1meXBhZ2Umc2VhcmNod29yZD0qKiZzZWFyY2h0eXBlPScsCiAgICBzZWFyY2hhYmxlOiAyLCAvL+aYr+WQpuWQr+eUqOWFqOWxgOaQnOe0oiwKICAgIHF1aWNrU2VhcmNoOiAwLCAvL+aYr+WQpuWQr+eUqOW/q+mAn+aQnOe0oiwKICAgIGZpbHRlcmFibGU6IDAsIC8v5piv5ZCm5ZCv55So5YiG57G7562b6YCJLAogICAgaGVhZGVyczogewogICAgICAgICdVc2VyLUFnZW50JzogJ1VDX1VBJywgLy8gIkNvb2tpZSI6ICIiCiAgICB9LCAvLyBjbGFzc19wYXJzZTonLnN0dWktaGVhZGVyX19tZW51IGxpOmd0KDApOmx0KDcpO2EmJlRleHQ7YSYmaHJlZjsvKFxcZCspLmh0bWwnLAogICAgY2xhc3NfcGFyc2U6ICcuc3R1aS1oZWFkZXJfX21lbnUgbGk6Z3QoMCk6bHQoNyk7YSYmVGV4dDthJiZocmVmOy4qLyguKj8pLmh0bWwnLAogICAgcGxheV9wYXJzZTogdHJ1ZSwKICAgIGxhenk6ICcnLAogICAgbGltaXQ6IDYsCiAgICDmjqjojZA6ICd1bC5zdHVpLXZvZGxpc3QuY2xlYXJmaXg7bGk7YSYmdGl0bGU7Lmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsOy5waWMtdGV4dCYmVGV4dDthJiZocmVmJywKICAgIGRvdWJsZTogdHJ1ZSwgLy8g5o6o6I2Q5YaF5a655piv5ZCm5Y+M5bGC5a6a5L2NCiAgICDkuIDnuqc6ICcuc3R1aS12b2RsaXN0IGxpO2EmJnRpdGxlO2EmJmRhdGEtb3JpZ2luYWw7LnBpYy10ZXh0JiZUZXh0O2EmJmhyZWYnLAogICAg5LqM57qnOiB7CiAgICAgICAgInRpdGxlIjogIi5zdHVpLWNvbnRlbnRfX2RldGFpbCAudGl0bGUmJlRleHQ7LnN0dWktY29udGVudF9fZGV0YWlsIHA6ZXEoLTIpJiZUZXh0IiwKICAgICAgICAiaW1nIjogIi5zdHVpLWNvbnRlbnRfX3RodW1iIC5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbCIsCiAgICAgICAgImRlc2MiOiAiLnN0dWktY29udGVudF9fZGV0YWlsIHA6ZXEoMCkmJlRleHQ7LnN0dWktY29udGVudF9fZGV0YWlsIHA6ZXEoMSkmJlRleHQ7LnN0dWktY29udGVudF9fZGV0YWlsIHA6ZXEoMikmJlRleHQiLAogICAgICAgICJjb250ZW50IjogIiNkZXNjJiZUZXh0IiwKICAgICAgICAidGFicyI6ICIuc3R1aS1wYW5uZWwtYm94IGgzIiwKICAgICAgICAibGlzdHMiOiAiLnN0dWktY29udGVudF9fcGxheWxpc3Q6ZXEoI2lkKSBsaSIKICAgIH0sCiAgICDmkJzntKI6ICd1bC5zdHVpLXZvZGxpc3QmJmxpO2EmJnRpdGxlOy5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbDsudGV4dC1tdXRlZCYmVGV4dDthJiZocmVmOy50ZXh0LW11dGVkOmVxKC0xKSYmVGV4dCcsCgp9
\ No newline at end of file
diff --git a/潇洒/js/HZDM.js b/潇洒/js/HZDM.js
new file mode 100644
index 0000000..93fe094
--- /dev/null
+++ b/潇洒/js/HZDM.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+iKseWtkOWKqOa8q1vmvKtdJywKICAgIGhvc3Q6ICdodHRwczovL3d3dy5odWF6aWRtLmNvbScsCiAgICBjbGFzc19uYW1lOiAnVFbliqjmvKsm5Ymn5Zy6JueJueaRhCcsCiAgICBjbGFzc191cmw6ICcxJjImMycsCiAgICBzZWFyY2hVcmw6ICcvaW5kZXgucGhwL2FqYXgvc3VnZ2VzdD9taWQ9MSZ3ZD0qKiZsaW1pdD01MCcsCiAgICBzZWFyY2hVcmw6ICcvdm9kc2VhcmNoLyoqLS0tLS0tLS0tLWZ5cGFnZS0tLS5odG1sJywKICAgIHNlYXJjaGFibGU6IDIsCiAgICBxdWlja1NlYXJjaDogMCwKICAgIGhlYWRlcnM6IHsKICAgICAgICAnVXNlci1BZ2VudCc6ICdNT0JJTEVfVUEnLAogICAgfSwKICAgIHVybDogJy9pbmRleC5waHAvYXBpL3ZvZCN0eXBlPWZ5Y2xhc3NmeWZpbHRlciZwYWdlPWZ5cGFnZScsCiAgICBmaWx0ZXJhYmxlOiAwLAogICAgZmlsdGVyX3VybDogJyZjbGFzcz17e2ZsLmNsYXNzfX0meWVhcj17e2ZsLnllYXJ9fSZsZXR0ZXI9e3tmbC5sZXR0ZXJ9fSZieT17e2ZsLmJ5fX0nLAogICAgZmlsdGVyOiB7CiAgICAgICAgIjEiOiBbewogICAgICAgICAgICAia2V5IjogImNsYXNzIiwKICAgICAgICAgICAgIm5hbWUiOiAi57G75Z6LIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuW8guS4lueVjCIsCiAgICAgICAgICAgICAgICAidiI6ICLlvILkuJbnlYwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueZvuWQiCIsCiAgICAgICAgICAgICAgICAidiI6ICLnmb7lkIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWQjuWuqyIsCiAgICAgICAgICAgICAgICAidiI6ICLlkI7lrqsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueDreihgCIsCiAgICAgICAgICAgICAgICAidiI6ICLng63ooYAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIue6r+eIsSIsCiAgICAgICAgICAgICAgICAidiI6ICLnuq/niLEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuepv+i2iiIsCiAgICAgICAgICAgICAgICAidiI6ICLnqb/otooiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWlh+W5uyIsCiAgICAgICAgICAgICAgICAidiI6ICLlpYflubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaImOaWlyIsCiAgICAgICAgICAgICAgICAidiI6ICLmiJjmlpciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWQjuWuqyIsCiAgICAgICAgICAgICAgICAidiI6ICLlkI7lrqsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaQnueskSIsCiAgICAgICAgICAgICAgICAidiI6ICLmkJ7nrJEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaXpeW4uCIsCiAgICAgICAgICAgICAgICAidiI6ICLml6XluLgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuenkeW5uyIsCiAgICAgICAgICAgICAgICAidiI6ICLnp5HlubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuayu+aEiCIsCiAgICAgICAgICAgICAgICAidiI6ICLmsrvmhIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuagoeWbrSIsCiAgICAgICAgICAgICAgICAidiI6ICLmoKHlm60iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaBi+eIsSIsCiAgICAgICAgICAgICAgICAidiI6ICLmgYvniLEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWGkumZqSIsCiAgICAgICAgICAgICAgICAidiI6ICLlhpLpmakiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaOqOeQhiIsCiAgICAgICAgICAgICAgICAidiI6ICLmjqjnkIYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacuuaImCIsCiAgICAgICAgICAgICAgICAidiI6ICLmnLrmiJgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumfs+S5kCIsCiAgICAgICAgICAgICAgICAidiI6ICLpn7PkuZAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiQneiOiSIsCiAgICAgICAgICAgICAgICAidiI6ICLokJ3ojokiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaBkOaAliIsCiAgICAgICAgICAgICAgICAidiI6ICLmgZDmgJYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaDiuaCmiIsCiAgICAgICAgICAgICAgICAidiI6ICLmg4rmgpoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuazoemdoueVqiIsCiAgICAgICAgICAgICAgICAidiI6ICLms6HpnaLnlaoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIua4uOaIj+aUuSIsCiAgICAgICAgICAgICAgICAidiI6ICLmuLjmiI/mlLkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWwj+ivtOaUuSIsCiAgICAgICAgICAgICAgICAidiI6ICLlsI/or7TmlLkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIua8q+eUu+aUuSIsCiAgICAgICAgICAgICAgICAidiI6ICLmvKvnlLvmlLkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiFkCIsCiAgICAgICAgICAgICAgICAidiI6ICLohZAiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku70iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDAxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5OTkiLAogICAgICAgICAgICAgICAgInYiOiAiMTk5OSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk5OCIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTk4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTk3IiwKICAgICAgICAgICAgICAgICJ2IjogIjE5OTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5OTYiLAogICAgICAgICAgICAgICAgInYiOiAiMTk5NiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk5NSIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTk1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTk0IiwKICAgICAgICAgICAgICAgICJ2IjogIjE5OTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5OTMiLAogICAgICAgICAgICAgICAgInYiOiAiMTk5MyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk5MiIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTkyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTkxIiwKICAgICAgICAgICAgICAgICJ2IjogIjE5OTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5OTAiLAogICAgICAgICAgICAgICAgInYiOiAiMTk5MCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk4OSIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTg5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTg4IiwKICAgICAgICAgICAgICAgICJ2IjogIjE5ODgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5ODciLAogICAgICAgICAgICAgICAgInYiOiAiMTk4NyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk4NiIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTg2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTg1IiwKICAgICAgICAgICAgICAgICJ2IjogIjE5ODUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5ODQiLAogICAgICAgICAgICAgICAgInYiOiAiMTk4NCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk4MyIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTgzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTgyIiwKICAgICAgICAgICAgICAgICJ2IjogIjE5ODIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5ODEiLAogICAgICAgICAgICAgICAgInYiOiAiMTk4MSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk4MCIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTgwIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJsZXR0ZXIiLAogICAgICAgICAgICAibmFtZSI6ICLlrZfmr40iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiQSIsCiAgICAgICAgICAgICAgICAidiI6ICJBIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJCIiwKICAgICAgICAgICAgICAgICJ2IjogIkIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkMiLAogICAgICAgICAgICAgICAgInYiOiAiQyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRCIsCiAgICAgICAgICAgICAgICAidiI6ICJEIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJFIiwKICAgICAgICAgICAgICAgICJ2IjogIkUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkYiLAogICAgICAgICAgICAgICAgInYiOiAiRiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRyIsCiAgICAgICAgICAgICAgICAidiI6ICJHIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJIIiwKICAgICAgICAgICAgICAgICJ2IjogIkgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkkiLAogICAgICAgICAgICAgICAgInYiOiAiSSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSiIsCiAgICAgICAgICAgICAgICAidiI6ICJKIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJLIiwKICAgICAgICAgICAgICAgICJ2IjogIksiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkwiLAogICAgICAgICAgICAgICAgInYiOiAiTCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTSIsCiAgICAgICAgICAgICAgICAidiI6ICJNIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJOIiwKICAgICAgICAgICAgICAgICJ2IjogIk4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIk8iLAogICAgICAgICAgICAgICAgInYiOiAiTyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUCIsCiAgICAgICAgICAgICAgICAidiI6ICJQIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJRIiwKICAgICAgICAgICAgICAgICJ2IjogIlEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlIiLAogICAgICAgICAgICAgICAgInYiOiAiUiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUyIsCiAgICAgICAgICAgICAgICAidiI6ICJTIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJUIiwKICAgICAgICAgICAgICAgICJ2IjogIlQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlUiLAogICAgICAgICAgICAgICAgInYiOiAiVSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiViIsCiAgICAgICAgICAgICAgICAidiI6ICJWIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJXIiwKICAgICAgICAgICAgICAgICJ2IjogIlciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlgiLAogICAgICAgICAgICAgICAgInYiOiAiWCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiWSIsCiAgICAgICAgICAgICAgICAidiI6ICJZIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJaIiwKICAgICAgICAgICAgICAgICJ2IjogIloiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjAtOSIsCiAgICAgICAgICAgICAgICAidiI6ICIwLTkiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImJ5IiwKICAgICAgICAgICAgIm5hbWUiOiAi5pe26Ze0IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuaMieacgOaWsCIsCiAgICAgICAgICAgICAgICAidiI6ICJ0aW1lIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmjInmnIDng60iLAogICAgICAgICAgICAgICAgInYiOiAiaGl0cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oyJ6K+E5YiGIiwKICAgICAgICAgICAgICAgICJ2IjogInNjb3JlIgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICIyIjogW3sKICAgICAgICAgICAgImtleSI6ICJjbGFzcyIsCiAgICAgICAgICAgICJuYW1lIjogIuexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlvILkuJbnlYwiLAogICAgICAgICAgICAgICAgInYiOiAi5byC5LiW55WMIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnmb7lkIgiLAogICAgICAgICAgICAgICAgInYiOiAi55m+5ZCIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLng63ooYAiLAogICAgICAgICAgICAgICAgInYiOiAi54Ot6KGAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnqb/otooiLAogICAgICAgICAgICAgICAgInYiOiAi56m/6LaKIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpYflubsiLAogICAgICAgICAgICAgICAgInYiOiAi5aWH5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjmlpciLAogICAgICAgICAgICAgICAgInYiOiAi5oiY5paXIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmkJ7nrJEiLAogICAgICAgICAgICAgICAgInYiOiAi5pCe56yRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLml6XluLgiLAogICAgICAgICAgICAgICAgInYiOiAi5pel5bi4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAi56eR5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmsrvmhIgiLAogICAgICAgICAgICAgICAgInYiOiAi5rK75oSIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmoKHlm60iLAogICAgICAgICAgICAgICAgInYiOiAi5qCh5ZutIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgYvniLEiLAogICAgICAgICAgICAgICAgInYiOiAi5oGL54ixIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpLpmakiLAogICAgICAgICAgICAgICAgInYiOiAi5YaS6ZmpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnLrmiJgiLAogICAgICAgICAgICAgICAgInYiOiAi5py65oiYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpn7PkuZAiLAogICAgICAgICAgICAgICAgInYiOiAi6Z+z5LmQIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJ5ZWFyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5bm05Lu9IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDExIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDciLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDAzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDAwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTk5IiwKICAgICAgICAgICAgICAgICJ2IjogIjE5OTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5OTgiLAogICAgICAgICAgICAgICAgInYiOiAiMTk5OCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk5NyIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTk3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTk2IiwKICAgICAgICAgICAgICAgICJ2IjogIjE5OTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5OTUiLAogICAgICAgICAgICAgICAgInYiOiAiMTk5NSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk5NCIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTk0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTkzIiwKICAgICAgICAgICAgICAgICJ2IjogIjE5OTMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5OTIiLAogICAgICAgICAgICAgICAgInYiOiAiMTk5MiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk5MSIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTkxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTkwIiwKICAgICAgICAgICAgICAgICJ2IjogIjE5OTAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5ODkiLAogICAgICAgICAgICAgICAgInYiOiAiMTk4OSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk4OCIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTg4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTg3IiwKICAgICAgICAgICAgICAgICJ2IjogIjE5ODciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5ODYiLAogICAgICAgICAgICAgICAgInYiOiAiMTk4NiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk4NSIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTg1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTg0IiwKICAgICAgICAgICAgICAgICJ2IjogIjE5ODQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5ODMiLAogICAgICAgICAgICAgICAgInYiOiAiMTk4MyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk4MiIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTgyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTgxIiwKICAgICAgICAgICAgICAgICJ2IjogIjE5ODEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5ODAiLAogICAgICAgICAgICAgICAgInYiOiAiMTk4MCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAibGV0dGVyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5a2X5q+NIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkEiLAogICAgICAgICAgICAgICAgInYiOiAiQSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiQiIsCiAgICAgICAgICAgICAgICAidiI6ICJCIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJDIiwKICAgICAgICAgICAgICAgICJ2IjogIkMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkQiLAogICAgICAgICAgICAgICAgInYiOiAiRCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRSIsCiAgICAgICAgICAgICAgICAidiI6ICJFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJGIiwKICAgICAgICAgICAgICAgICJ2IjogIkYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkciLAogICAgICAgICAgICAgICAgInYiOiAiRyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSCIsCiAgICAgICAgICAgICAgICAidiI6ICJIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJJIiwKICAgICAgICAgICAgICAgICJ2IjogIkkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkoiLAogICAgICAgICAgICAgICAgInYiOiAiSiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSyIsCiAgICAgICAgICAgICAgICAidiI6ICJLIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJMIiwKICAgICAgICAgICAgICAgICJ2IjogIkwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIk0iLAogICAgICAgICAgICAgICAgInYiOiAiTSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTiIsCiAgICAgICAgICAgICAgICAidiI6ICJOIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJPIiwKICAgICAgICAgICAgICAgICJ2IjogIk8iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlAiLAogICAgICAgICAgICAgICAgInYiOiAiUCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUSIsCiAgICAgICAgICAgICAgICAidiI6ICJRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJSIiwKICAgICAgICAgICAgICAgICJ2IjogIlIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlMiLAogICAgICAgICAgICAgICAgInYiOiAiUyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVCIsCiAgICAgICAgICAgICAgICAidiI6ICJUIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJVIiwKICAgICAgICAgICAgICAgICJ2IjogIlUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlYiLAogICAgICAgICAgICAgICAgInYiOiAiViIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVyIsCiAgICAgICAgICAgICAgICAidiI6ICJXIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJYIiwKICAgICAgICAgICAgICAgICJ2IjogIlgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlkiLAogICAgICAgICAgICAgICAgInYiOiAiWSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiWiIsCiAgICAgICAgICAgICAgICAidiI6ICJaIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIwLTkiLAogICAgICAgICAgICAgICAgInYiOiAiMC05IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJieSIsCiAgICAgICAgICAgICJuYW1lIjogIuaXtumXtCIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLmjInmnIDmlrAiLAogICAgICAgICAgICAgICAgInYiOiAidGltZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oyJ5pyA54OtIiwKICAgICAgICAgICAgICAgICJ2IjogImhpdHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaMieivhOWIhiIsCiAgICAgICAgICAgICAgICAidiI6ICJzY29yZSIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiMyI6IFt7CiAgICAgICAgICAgICJrZXkiOiAiY2xhc3MiLAogICAgICAgICAgICAibmFtZSI6ICLnsbvlnosiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Yqo5L2cIiwKICAgICAgICAgICAgICAgICJ2IjogIuWKqOS9nCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5aWH5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIuWlh+W5uyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56eR5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIuenkeW5uyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAieWVhciIsCiAgICAgICAgICAgICJuYW1lIjogIuW5tOS7vSIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDExIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDkiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA3IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDYiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDAyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAxIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk5OSIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTk5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTk4IiwKICAgICAgICAgICAgICAgICJ2IjogIjE5OTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5OTciLAogICAgICAgICAgICAgICAgInYiOiAiMTk5NyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk5NiIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTk2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTk1IiwKICAgICAgICAgICAgICAgICJ2IjogIjE5OTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5OTQiLAogICAgICAgICAgICAgICAgInYiOiAiMTk5NCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk5MyIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTkzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTkyIiwKICAgICAgICAgICAgICAgICJ2IjogIjE5OTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5OTEiLAogICAgICAgICAgICAgICAgInYiOiAiMTk5MSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk5MCIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTkwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTg5IiwKICAgICAgICAgICAgICAgICJ2IjogIjE5ODkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5ODgiLAogICAgICAgICAgICAgICAgInYiOiAiMTk4OCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk4NyIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTg3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTg2IiwKICAgICAgICAgICAgICAgICJ2IjogIjE5ODYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5ODUiLAogICAgICAgICAgICAgICAgInYiOiAiMTk4NSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk4NCIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTg0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTgzIiwKICAgICAgICAgICAgICAgICJ2IjogIjE5ODMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5ODIiLAogICAgICAgICAgICAgICAgInYiOiAiMTk4MiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk4MSIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTgxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTgwIiwKICAgICAgICAgICAgICAgICJ2IjogIjE5ODAiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImxldHRlciIsCiAgICAgICAgICAgICJuYW1lIjogIuWtl+avjSIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJBIiwKICAgICAgICAgICAgICAgICJ2IjogIkEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkIiLAogICAgICAgICAgICAgICAgInYiOiAiQiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiQyIsCiAgICAgICAgICAgICAgICAidiI6ICJDIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJEIiwKICAgICAgICAgICAgICAgICJ2IjogIkQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkUiLAogICAgICAgICAgICAgICAgInYiOiAiRSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRiIsCiAgICAgICAgICAgICAgICAidiI6ICJGIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJHIiwKICAgICAgICAgICAgICAgICJ2IjogIkciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkgiLAogICAgICAgICAgICAgICAgInYiOiAiSCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSSIsCiAgICAgICAgICAgICAgICAidiI6ICJJIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJKIiwKICAgICAgICAgICAgICAgICJ2IjogIkoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIksiLAogICAgICAgICAgICAgICAgInYiOiAiSyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTCIsCiAgICAgICAgICAgICAgICAidiI6ICJMIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJNIiwKICAgICAgICAgICAgICAgICJ2IjogIk0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIk4iLAogICAgICAgICAgICAgICAgInYiOiAiTiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTyIsCiAgICAgICAgICAgICAgICAidiI6ICJPIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJQIiwKICAgICAgICAgICAgICAgICJ2IjogIlAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlEiLAogICAgICAgICAgICAgICAgInYiOiAiUSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUiIsCiAgICAgICAgICAgICAgICAidiI6ICJSIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJTIiwKICAgICAgICAgICAgICAgICJ2IjogIlMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlQiLAogICAgICAgICAgICAgICAgInYiOiAiVCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVSIsCiAgICAgICAgICAgICAgICAidiI6ICJVIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJWIiwKICAgICAgICAgICAgICAgICJ2IjogIlYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlciLAogICAgICAgICAgICAgICAgInYiOiAiVyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiWCIsCiAgICAgICAgICAgICAgICAidiI6ICJYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJZIiwKICAgICAgICAgICAgICAgICJ2IjogIlkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIloiLAogICAgICAgICAgICAgICAgInYiOiAiWiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMC05IiwKICAgICAgICAgICAgICAgICJ2IjogIjAtOSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYnkiLAogICAgICAgICAgICAibmFtZSI6ICLml7bpl7QiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5oyJ5pyA5pawIiwKICAgICAgICAgICAgICAgICJ2IjogInRpbWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaMieacgOeDrSIsCiAgICAgICAgICAgICAgICAidiI6ICJoaXRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmjInor4TliIYiLAogICAgICAgICAgICAgICAgInYiOiAic2NvcmUiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0KICAgIH0sCiAgICBmaWx0ZXJfZGVmOiB7fSwKICAgIGRldGFpbFVybDogJy92b2RkZXRhaWwvZnlpZC5odG1sJywKICAgIHBsYXlfcGFyc2U6IHRydWUsCiAgICBzbmlmZmVyOiAxLAogICAgaXNfdmlkZW86ICdvYmovdG9zfGJkLnhoc2NkbnwvdWdjLycsCiAgICBsYXp5OiAkanMudG9TdHJpbmcoKCkgPT4gewogICAgICAgIGlucHV0ID0gewogICAgICAgICAgICBwYXJzZTogMSwKICAgICAgICAgICAgdXJsOiBpbnB1dCwKICAgICAgICAgICAgLy9qczondHJ5e2xldCB1cmxzPUFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiaWZyYW1lIikpLmZpbHRlcih4PT54LnNyYy5pbmNsdWRlcygiP3VybD0iKSk7aWYodXJscyl7bG9jYXRpb24uaHJlZj11cmxzWzBdLnNyY319Y2F0Y2h7fWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJ1dHRvbiIpLmNsaWNrKCknLAogICAgICAgICAgICBqczogJ3RyeXtsb2NhdGlvbi5ocmVmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNwbGF5bGVmdCBpZnJhbWUiKS5zcmN9Y2F0Y2h7fWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJ1dHRvbi5zd2FsLWJ1dHRvbi0tY29uZmlybSIpLmNsaWNrKCknLAogICAgICAgICAgICBwYXJzZV9leHRyYTogJyZpc19wYz0xJmN1c3RvbV9yZWdleD0nICsgcnVsZS5pc192aWRlbywKICAgICAgICB9CiAgICB9KSwKICAgIGxpbWl0OiA2LAogICAg5o6o6I2QOiAnLmxpc3Qtdm9kLmZsZXggLnB1YmxpYy1saXN0LWJveDthJiZ0aXRsZTsubGF6eSYmZGF0YS1vcmlnaW5hbDsucHVibGljLWxpc3QtcHJiJiZUZXh0O2EmJmhyZWYnLAogICAg5LiA57qnOiAkanMudG9TdHJpbmcoKCkgPT4gewogICAgICAgIGxldCBib2R5ID0gaW5wdXQuc3BsaXQoIiMiKVsxXTsKICAgICAgICBsZXQgdCA9IE1hdGgucm91bmQobmV3IERhdGUgLyAxZTMpLnRvU3RyaW5nKCk7CiAgICAgICAgbGV0IGtleSA9IG1kNSgiRFMiICsgdCArICJEQ0MxNDdEMTE5NDNBRjc1Iik7CiAgICAgICAgbGV0IHVybCA9IGlucHV0LnNwbGl0KCIjIilbMF07CiAgICAgICAgYm9keSA9IGJvZHkgKyAiJnRpbWU9IiArIHQgKyAiJmtleT0iICsga2V5OwogICAgICAgIHByaW50KGJvZHkpOwogICAgICAgIGZldGNoX3BhcmFtcy5ib2R5ID0gYm9keTsKICAgICAgICBsZXQgaHRtbCA9IHBvc3QodXJsLCBmZXRjaF9wYXJhbXMpOwogICAgICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShodG1sKTsKICAgICAgICBWT0RTID0gZGF0YS5saXN0Lm1hcChmdW5jdGlvbihpdCkgewogICAgICAgICAgICBpdC52b2RfcGljID0gdXJsam9pbjIoaW5wdXQuc3BsaXQoIi9pIilbMF0sIGl0LnZvZF9waWMpOwogICAgICAgICAgICByZXR1cm4gaXQKICAgICAgICB9KTsKICAgIH0pLAogICAg5LqM57qnOiB7CiAgICAgICAgdGl0bGU6ICcuc2xpZGUtaW5mby10aXRsZSYmVGV4dDsuc2xpZGUtaW5mbzplcSgzKS0tc3Ryb25nJiZUZXh0JywKICAgICAgICBpbWc6ICcuZGV0YWlsLXBpYyYmZGF0YS1vcmlnaW5hbCcsCiAgICAgICAgZGVzYzogJy5mcmFjdGlvbiYmVGV4dDsuc2xpZGUtaW5mby1yZW1hcmtzOmVxKDEpJiZUZXh0Oy5zbGlkZS1pbmZvLXJlbWFya3M6ZXEoMikmJlRleHQ7LnNsaWRlLWluZm86ZXEoMiktLXN0cm9uZyYmVGV4dDsuc2xpZGUtaW5mbzplcSgxKS0tc3Ryb25nJiZUZXh0JywKICAgICAgICBjb250ZW50OiAnI2hlaWdodF9saW1pdCYmVGV4dCcsCiAgICAgICAgdGFiczogJy5hbnRob2xvZ3kud293LmZhZGVJblVwLmFuaW1hdGVkJiYuc3dpcGVyLXdyYXBwZXImJmEnLAogICAgICAgIHRhYl90ZXh0OiAnLnN3aXBlci1zbGlkZSYmVGV4dCcsCiAgICAgICAgbGlzdHM6ICcuYW50aG9sb2d5LWxpc3QtYm94OmVxKCNpZCkgbGknLAogICAgfSwKICAgIOaQnOe0ojogJ2pzb246bGlzdDtuYW1lO3BpYzs7aWQnLAogICAg5pCc57SiOiAkanMudG9TdHJpbmcoKCkgPT4gewogICAgICAgIGxldCBodG1sID0gZmV0Y2goaW5wdXQpOwogICAgICAgIGxldCBsaXN0ID0gcGRmYShodG1sLCAiLnB1YmxpYy1saXN0LWJveCIpOwogICAgICAgIFZPRFMgPSBsaXN0Lm1hcCh4ID0+IHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHZvZF9uYW1lOiBwZGZoKHgsICIudGh1bWItdHh0JiZUZXh0IiksCiAgICAgICAgICAgICAgICB2b2RfcGljOiBwZGZoKHgsICIubGF6eSYmZGF0YS1zcmMiKSwKICAgICAgICAgICAgICAgIHZvZF9yZW1hcmtzOiBwZGZoKHgsICIucHVibGljLWxpc3QtcHJiJiZUZXh0IiksCiAgICAgICAgICAgICAgICB2b2RfY29udGVudDogcGRmaCh4LCAiLnRodW1iLWJsdXJiJiZUZXh0IiksCiAgICAgICAgICAgICAgICB2b2RfaWQ6IHBkZmgoeCwgImEmJmhyZWYiKQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KSwKICAgIOWbvueJh+abv+aNojogJyZhbXA7PT4mJwp9
\ No newline at end of file
diff --git a/潇洒/js/JQQ.js b/潇洒/js/JQQ.js
new file mode 100644
index 0000000..2646d89
--- /dev/null
+++ b/潇洒/js/JQQ.js
@@ -0,0 +1 @@
+T2JqZWN0LmFzc2lnbihtdWJhbi5teHByby7kuoznuqcsIHsKICAgIHRhYl90ZXh0OiAnZGl2LS1zbWFsbCYmVGV4dCcsCn0pOwp2YXIgcnVsZSA9IHsKICAgIOaooeadvzogJ214cHJvJywKICAgIHRpdGxlOiAn5Ymn5ZyI5ZyIJywKICAgIGhvc3Q6ICdodHRwczovL3d3dy5qcXF6eC5jYy8nLAogICAgdXJsOiAnL3ZvZHNob3cvaWQvZnljbGFzcy9wYWdlL2Z5cGFnZS5odG1sJywKICAgIHNlYXJjaFVybDogJy92b2RzZWFyY2gqKi9wYWdlL2Z5cGFnZS5odG1sJywKICAgIGNsYXNzX3BhcnNlOiAnLm5hdmJhci1pdGVtcyBsaTpndCgyKTpsdCg4KTthJiZUZXh0O2EmJmhyZWY7LiovKC4qPylcLmh0bWwnLAogICAgY2F0ZV9leGNsdWRlOiAn5LuK5pel5pu05pawfOeDreamnCcsCn0=
\ No newline at end of file
diff --git a/潇洒/js/夸克盘搜.js b/潇洒/js/KKPS.js
similarity index 66%
rename from 潇洒/js/夸克盘搜.js
rename to 潇洒/js/KKPS.js
index 5242c32..9855768 100644
--- a/潇洒/js/夸克盘搜.js
+++ b/潇洒/js/KKPS.js
@@ -10,7 +10,7 @@ var rule = {
url: 'https://qkpanso.com/search?q=fyclass&format=video&page=fypage',
filter_url: '',
detailUrl: '',
- searchUrl: 'https://qkpanso.com/search?q=**&format=video&exact=true&page=fypage',
+ searchUrl: 'https://qkpanso.com/search?q=**&exact=true&format=video&page=fypage',
searchable: 1,
quickSearch: 1,
filterable: 1,
@@ -25,7 +25,7 @@ var rule = {
limit: 9,
double: false,
// 推荐: '*',
- 一级: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'http://pic-smzy.oss-cn-beijing.aliyuncs.com/images/5e/2a/1410241152a3eca2eca7ace140ed1c0c01b12a5e.png\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
+ 一级: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'http://pic-smzy.oss-cn-beijing.aliyuncs.com/images/5e/2a/1410241152a3eca2eca7ace140ed1c0c01b12a5e.png\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
二级: {
title: 'h1&&Text',
img: 'img&&src',
@@ -34,7 +34,7 @@ var rule = {
tabs: "js:TABS = ['夸克盘搜']",
lists: "js:\n LISTS = [];\n let lists1 = pdfa(html, 'body&&.semi-space-loose-vertical').map(it => {\n let _tt = pdfh(it, 'span&&title');\n let _uu = pdfh(it, 'a&&href');\n return _tt + '$' + _uu;\n });\n LISTS.push(lists1);\n ",
},
- 搜索: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'http://pic-smzy.oss-cn-beijing.aliyuncs.com/images/5e/2a/1410241152a3eca2eca7ace140ed1c0c01b12a5e.png\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
+ 搜索: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'http://pic-smzy.oss-cn-beijing.aliyuncs.com/images/5e/2a/1410241152a3eca2eca7ace140ed1c0c01b12a5e.png\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
cate_exclude: '首页|留言|APP|下载|资讯|新闻|动态',
tab_exclude: '猜你|喜欢|下载|剧情|榜|评论',
类型: '影视',
diff --git a/潇洒/js/LMM.js b/潇洒/js/LMM.js
new file mode 100644
index 0000000..764011d
--- /dev/null
+++ b/潇洒/js/LMM.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogIui3r+a8q+a8qyIsCiAgICBob3N0OiAiaHR0cDovL3d3dy5sbW0zNi5jb20iLAogICAgdXJsOiAiL3ZvZC9zaG93L2lkL2Z5Y2xhc3NmeWZpbHRlci5odG1sIiwKICAgIHNlYXJjaFVybDogJy92b2Qvc2VhcmNoL3BhZ2UvZnlwYWdlL3dkLyoqLmh0bWwnLAogICAgc2VhcmNoYWJsZTogMiwKICAgIHF1aWNrU2VhcmNoOiAwLAogICAgZmlsdGVyYWJsZTogMSwKICAgIGZpbHRlcjogewogICAgICAgICIzIjogW3sKICAgICAgICAgICAgImtleSI6ICLlubTku6MiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku6MiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuabtOaXqSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE0LTE5ODAiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogIuaOkuW6jyIsCiAgICAgICAgICAgICJuYW1lIjogIuaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDov5Hmm7TmlrAiLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L3RpbWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOmrmOS6uuawlCIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvaGl0cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA6auY6K+E5YiGIiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS9zY29yZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5aSa54K56LWeIiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS91cCIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiNCI6IFt7CiAgICAgICAgICAgICJrZXkiOiAi5bm05LujIiwKICAgICAgICAgICAgIm5hbWUiOiAi5bm05LujIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmm7Tml6kiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNC0xOTgwIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICLmjpLluo8iLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pyA6L+R5pu05pawIiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS90aW1lIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDpq5jkurrmsJQiLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L2hpdHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOmrmOivhOWIhiIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvc2NvcmUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOWkmueCuei1niIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvdXAiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIjUiOiBbewogICAgICAgICAgICAia2V5IjogIuW5tOS7oyIsCiAgICAgICAgICAgICJuYW1lIjogIuW5tOS7oyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI1IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjQiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIyIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjEiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE5IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTgiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE2IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTUiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pu05pepIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTQtMTk4MCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAi5o6S5bqPIiwKICAgICAgICAgICAgIm5hbWUiOiAi5o6S5bqPIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuacgOi/keabtOaWsCIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvdGltZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA6auY5Lq65rCUIiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS9oaXRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDpq5jor4TliIYiLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L3Njb3JlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDlpJrngrnotZ4iLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L3VwIgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICI2IjogW3sKICAgICAgICAgICAgImtleSI6ICLlubTku6MiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku6MiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuabtOaXqSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE0LTE5ODAiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogIuaOkuW6jyIsCiAgICAgICAgICAgICJuYW1lIjogIuaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDov5Hmm7TmlrAiLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L3RpbWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOmrmOS6uuawlCIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvaGl0cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA6auY6K+E5YiGIiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS9zY29yZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5aSa54K56LWeIiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS91cCIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiNyI6IFt7CiAgICAgICAgICAgICJrZXkiOiAi5bm05LujIiwKICAgICAgICAgICAgIm5hbWUiOiAi5bm05LujIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmm7Tml6kiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNC0xOTgwIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICLmjpLluo8iLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pyA6L+R5pu05pawIiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS90aW1lIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDpq5jkurrmsJQiLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L2hpdHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOmrmOivhOWIhiIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvc2NvcmUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOWkmueCuei1niIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvdXAiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIjgiOiBbewogICAgICAgICAgICAia2V5IjogIuW5tOS7oyIsCiAgICAgICAgICAgICJuYW1lIjogIuW5tOS7oyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI1IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjQiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIyIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjEiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE5IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTgiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE2IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTUiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pu05pepIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTQtMTk4MCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAi5o6S5bqPIiwKICAgICAgICAgICAgIm5hbWUiOiAi5o6S5bqPIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuacgOi/keabtOaWsCIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvdGltZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA6auY5Lq65rCUIiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS9oaXRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDpq5jor4TliIYiLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L3Njb3JlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDlpJrngrnotZ4iLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L3VwIgogICAgICAgICAgICB9XQogICAgICAgIH1dCiAgICB9LAogICAgZmlsdGVyX3VybDogInt7Zmwu5o6S5bqPfX17e2ZsLuW5tOS7o319L3BhZ2UvZnlwYWdlIiwKICAgIGZpbHRlcl9kZWY6ICIiLAogICAgaGVhZGVyczogewogICAgICAgICJVc2VyLUFnZW50IjogIk1PQklMRV9VQSIKICAgIH0sCiAgICB0aW1lb3V0OiA1MDAwLAogICAgY2xhc3NfbmFtZTogIuaXpeacrOWKqOa8qyblm73kuqfliqjmvKsm5qyn576O5Yqo5ryrJuaXpeacrOWKqOeUu+eUteW9sSblm73kuqfliqjnlLvnlLXlvbEm5qyn576O5Yqo55S755S15b2xIiwKICAgIGNsYXNzX3VybDogIjYmNyY4JjMmNCY1IiwKICAgIGNsYXNzX3BhcnNlOiAiIiwKICAgIGNhdGVfZXhjbHVkZTogIiIsCiAgICBwbGF5X3BhcnNlOiB0cnVlLAogICAgbGF6eTogJGpzLnRvU3RyaW5nKCgpID0+IHsKICAgICAgICBmdW5jdGlvbiBnZXREQWVzU3RyaW5nKHRva2VuKSB7CiAgICAgICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7CiAgICAgICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSgiZWpqb29vcHBwcXFxcnd3dyIpOwoKICAgICAgICAgICAgdmFyIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoIjEzNDg5ODc2MzU2ODQ2NTEiKTsKCiAgICAgICAgICAgIHZhciB0b2tlbiA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHRva2VuLCBrZXksIHsKICAgICAgICAgICAgICAgIGl2OiBpdiwKICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLAogICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3LAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIHJldHVybiB0b2tlbi50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7CiAgICAgICAgfQoKICAgICAgICB2YXIgaHRtbCA9IEpTT04ucGFyc2UocmVxdWVzdChpbnB1dCkubWF0Y2goL3IgcGxheWVyXy4qPz0oLio/KTwvKVsxXSk7CiAgICAgICAgdmFyIHVybCA9IGh0bWwudXJsOwogICAgICAgIHZhciBmcm9tID0gaHRtbC5mcm9tOwogICAgICAgIGlmIChodG1sLmVuY3J5cHQgPT0gIjEiKSB7CiAgICAgICAgICAgIHVybCA9IHVuZXNjYXBlKHVybCk7CiAgICAgICAgfSBlbHNlIGlmIChodG1sLmVuY3J5cHQgPT0gIjIiKSB7CiAgICAgICAgICAgIHVybCA9IHVuZXNjYXBlKGJhc2U2NERlY29kZSh1cmwpKTsKICAgICAgICB9CiAgICAgICAgaWYgKC9cLm1wNHxcLm0zdTh8XC5mbHYvLnRlc3QodXJsKSkgewogICAgICAgICAgICBpbnB1dCA9IHsKICAgICAgICAgICAgICAgIHBhcnNlOiAwLAogICAgICAgICAgICAgICAgdXJsOiB1cmwuc3BsaXQoIiYiKVswXSwKICAgICAgICAgICAgICAgIGpzOiAnJwogICAgICAgICAgICB9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBqc2ggPSByZXF1ZXN0KEhPU1QgKyAiL3N0YXRpYy9wbGF5ZXIvIiArIGZyb20gKyAiLmpzIiwgewogICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgIFJlZmVyZXI6IGlucHV0CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9KS5tYXRjaCgvXC5zcmNccyo9XHMqKC4qPyk7LylbMV07CiAgICAgICAgICAgIC8vbG9nKE1ZX0hPTUUpOwogICAgICAgICAgICBpZiAoL3R5cGU9Ly50ZXN0KGpzaCkpIHsKICAgICAgICAgICAgICAgIGpzaCA9IGpzaAogICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXCtccyddL2csICIiKQogICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9NYWNQbGF5ZXIuUGFyc2UvLCAiIikKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvTWFjUGxheWVyLlBsYXlVcmwvLCB1cmwpCiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL3dpbmRvdy5sb2NhdGlvbi5ocmVmLywgaW5wdXQpOwogICAgICAgICAgICAgICAgdmFyIHBsYXlodCA9IGZldGNoKGpzaCwgewogICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlcjogSE9TVAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAganNoID0ganNoCiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcK1xzJ10vZywgIiIpCiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL01hY1BsYXllci5QYXJzZS8sICIiKQogICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9NYWNQbGF5ZXIuUGxheVVybC8sIHVybCkKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvd2luZG93LmxvY2F0aW9uLmhyZWYvLCBpbnB1dCk7CgogICAgICAgICAgICAgICAganNoID0gSlNPTi5wYXJzZSgKICAgICAgICAgICAgICAgICAgICBmZXRjaChqc2gsIHsKICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlcjogSE9TVAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBvbmx5SGVhZGVyczogdHJ1ZQogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICApLnVybDsKICAgICAgICAgICAgICAgIHZhciBwbGF5aHQgPSBmZXRjaChqc2gsIHsKICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZXI6IEhPU1QKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHBvc3RhcGkgPSBqc2gubWF0Y2goL14oLio/XC9cLy4qP1wvLio/XC8pLylbMV07CgogICAgICAgICAgICB2YXIgcG9zdHVybCA9IHBvc3RhcGkgKyBwbGF5aHQubWF0Y2goL3Bvc3RcKCIoLio/KSIvKVsxXTsKICAgICAgICAgICAgaWYgKC9hY3Rccyo9Ly50ZXN0KHBsYXlodCkpIHsKICAgICAgICAgICAgICAgIHZhciB2aWQgPSBwbGF5aHQubWF0Y2goL3ZpZFxzKj1ccyoiKC4qPykiLylbMV07CiAgICAgICAgICAgICAgICB2YXIgdCA9IHBsYXlodC5tYXRjaCgvdmFyXHMqdFxzKj1ccyoiKC4qPykiLylbMV07CiAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBwbGF5aHQubWF0Y2goL3Rva2VuXHMqPVxzKiIoLio/KSIvKVsxXTsKICAgICAgICAgICAgICAgIHZhciBhY3QgPSBwbGF5aHQubWF0Y2goL2FjdFxzKj1ccyoiKC4qPykiLylbMV07CiAgICAgICAgICAgICAgICB2YXIgcGxheSA9IHBsYXlodC5tYXRjaCgvcGxheVxzKj1ccyoiKC4qPykiLylbMV07CiAgICAgICAgICAgICAgICB0b2tlbiA9IGdldERBZXNTdHJpbmcodG9rZW4pOwoKICAgICAgICAgICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZSgKICAgICAgICAgICAgICAgICAgICBwb3N0KHBvc3R1cmwsIHsKICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlcjogSE9TVAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBib2R5OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWQ6IHZpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Q6IGFjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXk6IHBsYXksCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDUwMDAKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlucHV0ID0gewogICAgICAgICAgICAgICAgICAgIHBhcnNlOiAwLAogICAgICAgICAgICAgICAgICAgIHVybDogZGF0YS51cmwsCiAgICAgICAgICAgICAgICAgICAganM6ICcnCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGtleSA9ICIiOwoKICAgICAgICAgICAgICAgIHBsYXlodC5tYXRjaCgvdmFyIChcdyspPSIoLio/KSI7L2cpLmZvckVhY2goZnVuY3Rpb24obGlzdCkgewogICAgICAgICAgICAgICAgICAgIGtleSArPSBsaXN0Lm1hdGNoKC8iKC4qPykiLylbMV07CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGNvbnN0IGJvZHlzID0gSlNPTi5wYXJzZSgKICAgICAgICAgICAgICAgICAgICBwbGF5aHQKICAgICAgICAgICAgICAgICAgICAubWF0Y2goL3Bvc3RcKC4qPywoLio/KSxcbi8pWzFdCiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyJrZXl5eSJccyo6XHMqJycuKj8nJy8sICcia2V5eXkiIDogIicgKyBrZXkgKyAnIicpCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKAogICAgICAgICAgICAgICAgICAgIHBvc3QocG9zdHVybCwgewogICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVyOiBIT1NUCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGJvZHlzCiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoZGF0YS5leHQgPT0gInhncGxheWVyIikgewogICAgICAgICAgICAgICAgICAgIHZhciBkYXRhdXJsID0KICAgICAgICAgICAgICAgICAgICAgICAgImh0dHBzOi8veXVuLjM2NmRheS5zaXRlL21wNGhscy94Z3BsYXllci5waHA/dmlkPSIgKyBkYXRhLnVybDsKICAgICAgICAgICAgICAgICAgICB2YXIgdmlkZW8gPSBmZXRjaChkYXRhdXJsLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZXI6IGpzaAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSkubWF0Y2goCiAgICAgICAgICAgICAgICAgICAgICAgIC8idXJsIjogIiguKj8pIi8KICAgICAgICAgICAgICAgICAgICApWzFdOwogICAgICAgICAgICAgICAgICAgIGlucHV0ID0gewogICAgICAgICAgICAgICAgICAgICAgICBwYXJzZTogMCwKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB2aWRlbywKICAgICAgICAgICAgICAgICAgICAgICAganM6ICcnCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5leHQgPT0gImhscyIgfHwgZGF0YS5leHQgPT0gImhsc19saXN0IikgewogICAgICAgICAgICAgICAgICAgIGlucHV0ID0gewogICAgICAgICAgICAgICAgICAgICAgICBwYXJzZTogMCwKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBkZWNvZGVVUklDb21wb25lbnQoZGF0YS51cmwpLAogICAgICAgICAgICAgICAgICAgICAgICBqczogJycKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2U6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogZGF0YS51cmwsCiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAnJwogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KSwKICAgIGRvdWJsZTogZmFsc2UsCiAgICDmjqjojZA6ICIqIiwKICAgIOS4gOe6pzogIi52aWRlby1pbWctYm94O2g2LnRpdGxlJiZUZXh0Oy5sYXp5bG9hZCYmZGF0YS1zcmM7LmxhYmVsJiZUZXh0O2EmJmhyZWYiLAogICAg5LqM57qnOiB7CiAgICAgICAgdGl0bGU6ICIucGFnZS10aXRsZSYmVGV4dDsudGFnLWxpbmsmJlRleHQiLAogICAgICAgIGltZzogIi5tb2R1bGUtaXRlbS1waWMmJi5sYXp5bG9hZCYmc3JjIiwKICAgICAgICBkZXNjOiAiLnZpZGVvLWluZm8taXRlbXM6ZXEoMykmJlRleHQ7LnZpZGVvLWluZm8taXRlbXM6ZXEoMikmJlRleHQ7Oy52aWRlby1pbmZvLWl0ZW1zOmVxKDEpJiZUZXh0Oy52aWRlby1pbmZvLWl0ZW1zOmVxKDApJiZUZXh0IiwKICAgICAgICBjb250ZW50OiAiLnZpZGVvLWluZm8tY29udGVudCYmVGV4dCIsCiAgICAgICAgdGFiczogIi5tb2R1bGUtdGFiLWl0ZW0udGFiLWl0ZW0iLAogICAgICAgIGxpc3RzOiAiLm1vZHVsZS1wbGF5ZXItbGlzdDplcSgjaWQpIGEiLAogICAgICAgIHRhYl90ZXh0OiAiYm9keSYmVGV4dCIsCiAgICAgICAgbGlzdF90ZXh0OiAiYm9keSYmVGV4dCIsCiAgICAgICAgbGlzdF91cmw6ICJhJiZocmVmIgogICAgfSwKICAgIGRldGFpbFVybDogIiIsCiAgICDmkJzntKI6ICIqIgp9
\ No newline at end of file
diff --git a/潇洒/js/LP.js b/潇洒/js/LP.js
new file mode 100644
index 0000000..fea1aa7
--- /dev/null
+++ b/潇洒/js/LP.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+aHkuebmOaQnCcsCiAgICBob3N0OiAnaHR0cHM6Ly93d3cubHpwYW54LmNvbS8nLAogICAgaG9zdEpzOiAnJywKICAgIGhlYWRlcnM6IHsKICAgICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTE7IFBpeGVsIDUpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS85MC4wLjQ0MzAuOTEgTW9iaWxlIFNhZmFyaS81MzcuMzYnLAogICAgfSwKICAgIOe8lueggTogJ3V0Zi04JywKICAgIHRpbWVvdXQ6IDUwMDAsCiAgICB1cmw6ICdodHRwczovL3d3dy5senBhbnguY29tL3NlYXJjaD9xPWZ5Y2xhc3MmZm9ybWF0PXZpZGVvJnBhZ2U9ZnlwYWdlJywKICAgIGZpbHRlcl91cmw6ICcnLAogICAgZGV0YWlsVXJsOiAnJywKICAgIHNlYXJjaFVybDogJ2h0dHBzOi8vd3d3Lmx6cGFueC5jb20vc2VhcmNoP3E9KiomZm9ybWF0PXZpZGVvJnBhZ2U9ZnlwYWdlJywKICAgIHNlYXJjaGFibGU6IDEsCiAgICBxdWlja1NlYXJjaDogMSwKICAgIGZpbHRlcmFibGU6IDEsCiAgICBjbGFzc19uYW1lOiAn5Ymn6ZuGJueUteW9sSbnn63liacm5Yqo5ryrJue7vOiJuicsCiAgICBjbGFzc191cmw6ICfliafpm4Ym55S15b2xJuefree9keWJpybliqjmvKsm57u86Im6JywKICAgIHByb3h5X3J1bGU6ICcnLAogICAgc25pZmZlcjogZmFsc2UsCiAgICBpc1ZpZGVvOiAnJywKICAgIHBsYXlfcGFyc2U6IHRydWUsCiAgICBwYXJzZV91cmw6ICcnLAogICAgbGF6eTogImpzOlxuICAgICAgICBpbnB1dCA9ICdwdXNoOi8vJyArIGlucHV0O1xuICAgICIsCiAgICBsaW1pdDogOSwKICAgIGRvdWJsZTogZmFsc2UsCiAgICAvLyDmjqjojZA6ICcqJywKICAgIOS4gOe6pzogJ2pzOlxuICAgICAgICBsZXQgaHRtbCA9IGZldGNoKGlucHV0KTtcbiAgICAgICAgbGV0IGxpc3QgPSBwZGZhKGh0bWwsICJib2R5JiYuc2VtaS1zcGFjZS1tZWRpdW0tdmVydGljYWwiKTtcbiAgICAgICAgVk9EUyA9IGxpc3QubWFwKHggPT4ge1xuICAgICAgICAgICAgbGV0IHJlbWFya3MgPSBwZGZoKHgsICJkaXYmJmltZyYmYWx0Iik7XG4gICAgICAgICAgICAvLyDov4fmu6TmjonljIXlkKsi6L+F6Zu35LqR55uYIueahOWGheWuuVxuICAgICAgICAgICAgaWYocmVtYXJrcy5pbmNsdWRlcygi6L+F6Zu35LqR55uYIikpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2b2RfbmFtZTogcGRmaCh4LCAiZGl2JiZhJiZ0aXRsZSIpLFxuICAgICAgICAgICAgICAgIHZvZF9waWM6IFwnaHR0cHM6Ly93dzEuc2luYWltZy5jbi9tdzY5MC8wMDZmYU1uZGx5MWh0bWIxbTA4YWRqMzBlMjBlMnEzbS5qcGdcJyxcbiAgICAgICAgICAgICAgICB2b2RfcmVtYXJrczogcmVtYXJrcyxcbiAgICAgICAgICAgICAgICB2b2RfY29udGVudDogcmVtYXJrcyxcbiAgICAgICAgICAgICAgICB2b2RfaWQ6IHBkZmgoeCwgImRpdiYmYSYmaHJlZiIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmZpbHRlcih4ID0+IHggIT09IG51bGwpO1xuICAgICcsCiAgICDkuoznuqc6IHsKICAgICAgICB0aXRsZTogJ2gxJiZUZXh0JywKICAgICAgICBpbWc6ICdpbWcmJnNyYycsCiAgICAgICAgZGVzYzogJy5jYXJkLXRleHQ6ZXEoMikmJlRleHQ7Ozs7JywKICAgICAgICBjb250ZW50OiAnYm9keSYmLnNlbWktc3BhY2UtbG9vc2UtdmVydGljYWwmJmEmJmhyZWYnLAogICAgICAgIHRhYnM6ICJqczpUQUJTID0gWyfmh5Lnm5gnXSIsCiAgICAgICAgbGlzdHM6ICJqczpcbiAgICAgICAgICAgIExJU1RTID0gW107XG4gICAgICAgICAgICBsZXQgbGlzdHMxID0gcGRmYShodG1sLCAnYm9keSYmLnNlbWktc3BhY2UtbG9vc2UtdmVydGljYWwnKS5tYXAoaXQgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBfdHQgPSBwZGZoKGl0LCAnc3BhbiYmdGl0bGUnKTtcbiAgICAgICAgICAgICAgICBsZXQgX3V1ID0gcGRmaChpdCwgJ2EmJmhyZWYnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3R0ICsgJyQnICsgX3V1O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBMSVNUUy5wdXNoKGxpc3RzMSk7XG4gICAgICAgICIsCiAgICB9LAogICAg5pCc57SiOiAnanM6XG4gICAgICAgIGxldCBodG1sID0gZmV0Y2goaW5wdXQpO1xuICAgICAgICBsZXQgbGlzdCA9IHBkZmEoaHRtbCwgImJvZHkmJi5zZW1pLXNwYWNlLW1lZGl1bS12ZXJ0aWNhbCIpO1xuICAgICAgICBWT0RTID0gbGlzdC5tYXAoeCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVtYXJrcyA9IHBkZmgoeCwgImRpdiYmaW1nJiZhbHQiKTtcbiAgICAgICAgICAgIC8vIOi/h+a7pOaOieWMheWQqyLov4Xpm7fkupHnm5gi55qE5YaF5a65XG4gICAgICAgICAgICBpZihyZW1hcmtzLmluY2x1ZGVzKCLov4Xpm7fkupHnm5giKSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZvZF9uYW1lOiBwZGZoKHgsICJkaXYmJmEmJnRpdGxlIiksXG4gICAgICAgICAgICAgICAgdm9kX3BpYzogXCdodHRwczovL3d3MS5zaW5haW1nLmNuL213NjkwLzAwNmZhTW5kbHkxaHRtYjFtMDhhZGozMGUyMGUycTNtLmpwZ1wnLFxuICAgICAgICAgICAgICAgIHZvZF9yZW1hcmtzOiByZW1hcmtzLFxuICAgICAgICAgICAgICAgIHZvZF9jb250ZW50OiByZW1hcmtzLFxuICAgICAgICAgICAgICAgIHZvZF9pZDogcGRmaCh4LCAiZGl2JiZhJiZocmVmIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuZmlsdGVyKHggPT4geCAhPT0gbnVsbCk7XG4gICAgJywKICAgIGNhdGVfZXhjbHVkZTogJ+mmlumhtXznlZnoqIB8QVBQfOS4i+i9vXzotYTorq985paw6Ze7fOWKqOaAgScsCiAgICB0YWJfZXhjbHVkZTogJ+eMnOS9oHzllpzmrKJ85LiL6L29fOWJp+aDhXzmppx86K+E6K66JywKICAgIOexu+WeizogJ+W9seinhicsCiAgICBob21lVXJsOiAnaHR0cHM6Ly93d3cubHpwYW54LmNvbS8nLAogICAg5LqM57qn6K6/6Zeu5YmNOiAnJywKICAgIGVuY29kaW5nOiAndXRmLTgnLAogICAgc2VhcmNoX2VuY29kaW5nOiAnJywKICAgIOWbvueJh+adpea6kDogJycsCiAgICDlm77niYfmm7/mjaI6ICcnLAogICAgcGxheV9qc29uOiBbXSwKICAgIHBhZ2Vjb3VudDoge30sCiAgICB0YWJfcmVtb3ZlOiBbXSwKICAgIHRhYl9vcmRlcjogW10sCiAgICB0YWJfcmVuYW1lOiB7fSwKfQ==
\ No newline at end of file
diff --git a/潇洒/js/MGSP.js b/潇洒/js/MGSP.js
new file mode 100644
index 0000000..32301fe
--- /dev/null
+++ b/潇洒/js/MGSP.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+eZvuW/meaXoOaenFvlrphdJywKICAgIGhvc3Q6ICdodHRwczovL3BpYW5rdS5hcGkuJTZkJTY3JTc0JTc2LmNvbScsCiAgICBob21lVXJsOiAnJywKICAgIC8vIHNlYXJjaFVybDogJ2h0dHBzOi8vbW9iaWxlc28uYnouJTZkJTY3JTc0JTc2LmNvbS9wYy9zZWFyY2gvdjE/cT0qKiZwbj1meXBhZ2UmcGM9MTAnLAogICAgLy8g5paw54mI5o6l5Y+j5pCc57Si5Y+Y5oiQdjLlubbkuJTliqDkuobpqozor4HvvIzom4vnlrwKICAgIC8vIHNlYXJjaFVybDogJ2h0dHBzOi8vbW9iaWxlc28uYnoubWd0di5jb20vcGMvc2VhcmNoL3YyP2FsbG93ZWRSQz0xJnNyYz1tZ3R2JmRpZD1jZjAzYjk1OS02OTQ1LTRjYjYtYmNiMy04ODc2MjQ1OTM1NGQmdGltZXN0YW1wPTIwMjQtMDYtMjFUMTUlM0E1MiUzQTU1WiZzaWduVmVyc2lvbj0xJnNpZ25Ob25jZT04ZGFlNjdhMWZhZmM0YmRhOTg0ZWM4ZGViNDc2NjZhZCZxPSoqJnBuPWZ5cGFnZSZwYz0xMCZjb3JyPTEmX3N1cHBvcnQ9MTAwMDAwMDAmc2lnbmF0dXJlPTRlMjdmZGRjZDJhMWE2NmQ2YzE3NjRlZDZiNzRiYWI3JywKICAgIC8vIOeUqOaJi+acuueahOWQp++8jOaQnuS4jeWumui/meS4qgogICAgc2VhcmNoVXJsOiAnaHR0cHM6Ly9tb2JpbGVzby5iei4lNmQlNjclNzQlNzYuY29tL21zaXRlL3NlYXJjaC92Mj9xPSoqJnBuPWZ5cGFnZSZwYz0xMCcsCiAgICBkZXRhaWxVcmw6ICdodHRwczovL3Bjd2ViLmFwaS5tZ3R2LmNvbS9lcGlzb2RlL2xpc3Q/cGFnZT0xJnNpemU9NTAmdmlkZW9faWQ9ZnlpZCcsCiAgICBzZWFyY2hhYmxlOiAyLAogICAgcXVpY2tTZWFyY2g6IDAsCiAgICBmaWx0ZXJhYmxlOiAxLAogICAgbXVsdGk6IDEsCiAgICAvLyDliIbnsbvpk77mjqVmeXBhZ2Xlj4LmlbDmlK/mjIEx5LiqKCnooajovr7lvI8KICAgIC8vIGh0dHBzOi8vd3d3Lm1ndHYuY29tL2xpYi8zP2xhc3RwPWxpc3RfaW5kZXgma2luZD1hMSZ5ZWFyPWFsbCZjaGFyZ2VJbmZvPWExJnNvcnQ9YzIKICAgIHVybDogJy9yaWRlci9saXN0L3Bjd2ViL3YzP3BsYXRmb3JtPXBjd2ViJmNoYW5uZWxJZD1meWNsYXNzJnBuPWZ5cGFnZSZwYz04MCZodWRvbmc9MSZfc3VwcG9ydD0xMDAwMDAwMCZraW5kPWExJmFyZWE9YTEnLAogICAgZmlsdGVyX3VybDogJ3llYXI9e3tmbC55ZWFyIG9yICJhbGwifX0mc29ydD17e2ZsLnNvcnQgb3IgImFsbCJ9fSZjaGFyZ2VJbmZvPXt7ZmwuY2hhcmdlSW5mbyBvciAiYWxsIn19JywKICAgIGhlYWRlcnM6IHsKICAgICAgICAnVXNlci1BZ2VudCc6ICdQQ19VQScKICAgIH0sCiAgICB0aW1lb3V0OiA1MDAwLAogICAgY2xhc3NfbmFtZTogJ+eUteinhuWJpybnlLXlvbEm57u86Im6JuWKqOa8qybnuqrlvZXniYcm5pWZ6IKyJuWwkeWEvycsCiAgICBjbGFzc191cmw6ICcyJjMmMSY1MCY1MSYxMTUmMTAnLAogICAgZmlsdGVyOiB7CiAgICAgICAgIjEiOiBbewogICAgICAgICAgICAia2V5IjogImNoYXJnZUluZm8iLAogICAgICAgICAgICAibmFtZSI6ICLku5jotLnnsbvlnosiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogImFsbCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YWN6LS5IiwKICAgICAgICAgICAgICAgICJ2IjogImIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJ2aXAiLAogICAgICAgICAgICAgICAgInYiOiAiYjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlZJUOeUqOWIuCIsCiAgICAgICAgICAgICAgICAidiI6ICJiMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5LuY6LS554K55pKtIiwKICAgICAgICAgICAgICAgICJ2IjogImI0IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJzb3J0IiwKICAgICAgICAgICAgIm5hbWUiOiAi5o6S5bqPIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuacgOaWsCIsCiAgICAgICAgICAgICAgICAidiI6ICJjMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA54OtIiwKICAgICAgICAgICAgICAgICJ2IjogImMyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnn6XkuY7pq5jliIYiLAogICAgICAgICAgICAgICAgInYiOiAiYzQiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku6MiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogImFsbCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA0IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICIyIjogW3sKICAgICAgICAgICAgImtleSI6ICJjaGFyZ2VJbmZvIiwKICAgICAgICAgICAgIm5hbWUiOiAi5LuY6LS557G75Z6LIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICJhbGwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWFjei0uSIsCiAgICAgICAgICAgICAgICAidiI6ICJiMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAidmlwIiwKICAgICAgICAgICAgICAgICJ2IjogImIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJWSVDnlKjliLgiLAogICAgICAgICAgICAgICAgInYiOiAiYjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS7mOi0ueeCueaSrSIsCiAgICAgICAgICAgICAgICAidiI6ICJiNCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAic29ydCIsCiAgICAgICAgICAgICJuYW1lIjogIuaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDmlrAiLAogICAgICAgICAgICAgICAgInYiOiAiYzEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOeDrSIsCiAgICAgICAgICAgICAgICAidiI6ICJjMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi55+l5LmO6auY5YiGIiwKICAgICAgICAgICAgICAgICJ2IjogImM0IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJ5ZWFyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5bm05LujIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICJhbGwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDExIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDciLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNCIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiMyI6IFt7CiAgICAgICAgICAgICJrZXkiOiAiY2hhcmdlSW5mbyIsCiAgICAgICAgICAgICJuYW1lIjogIuS7mOi0ueexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiYWxsIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhY3otLkiLAogICAgICAgICAgICAgICAgInYiOiAiYjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogInZpcCIsCiAgICAgICAgICAgICAgICAidiI6ICJiMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVklQ55So5Yi4IiwKICAgICAgICAgICAgICAgICJ2IjogImIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLku5jotLnngrnmkq0iLAogICAgICAgICAgICAgICAgInYiOiAiYjQiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInNvcnQiLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5pawIiwKICAgICAgICAgICAgICAgICJ2IjogImMxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDng60iLAogICAgICAgICAgICAgICAgInYiOiAiYzIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuefpeS5jumrmOWIhiIsCiAgICAgICAgICAgICAgICAidiI6ICJjNCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAieWVhciIsCiAgICAgICAgICAgICJuYW1lIjogIuW5tOS7oyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiYWxsIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDExIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDkiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA3IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDYiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDQiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIjUwIjogW3sKICAgICAgICAgICAgImtleSI6ICJjaGFyZ2VJbmZvIiwKICAgICAgICAgICAgIm5hbWUiOiAi5LuY6LS557G75Z6LIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICJhbGwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWFjei0uSIsCiAgICAgICAgICAgICAgICAidiI6ICJiMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAidmlwIiwKICAgICAgICAgICAgICAgICJ2IjogImIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJWSVDnlKjliLgiLAogICAgICAgICAgICAgICAgInYiOiAiYjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS7mOi0ueeCueaSrSIsCiAgICAgICAgICAgICAgICAidiI6ICJiNCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAic29ydCIsCiAgICAgICAgICAgICJuYW1lIjogIuaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDmlrAiLAogICAgICAgICAgICAgICAgInYiOiAiYzEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOeDrSIsCiAgICAgICAgICAgICAgICAidiI6ICJjMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi55+l5LmO6auY5YiGIiwKICAgICAgICAgICAgICAgICJ2IjogImM0IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJ5ZWFyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5bm05LujIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICJhbGwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDExIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDciLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNCIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiNTEiOiBbewogICAgICAgICAgICAia2V5IjogImNoYXJnZUluZm8iLAogICAgICAgICAgICAibmFtZSI6ICLku5jotLnnsbvlnosiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogImFsbCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YWN6LS5IiwKICAgICAgICAgICAgICAgICJ2IjogImIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJ2aXAiLAogICAgICAgICAgICAgICAgInYiOiAiYjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlZJUOeUqOWIuCIsCiAgICAgICAgICAgICAgICAidiI6ICJiMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5LuY6LS554K55pKtIiwKICAgICAgICAgICAgICAgICJ2IjogImI0IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJzb3J0IiwKICAgICAgICAgICAgIm5hbWUiOiAi5o6S5bqPIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuacgOaWsCIsCiAgICAgICAgICAgICAgICAidiI6ICJjMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA54OtIiwKICAgICAgICAgICAgICAgICJ2IjogImMyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnn6XkuY7pq5jliIYiLAogICAgICAgICAgICAgICAgInYiOiAiYzQiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku6MiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogImFsbCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA0IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICIxMTUiOiBbewogICAgICAgICAgICAia2V5IjogImNoYXJnZUluZm8iLAogICAgICAgICAgICAibmFtZSI6ICLku5jotLnnsbvlnosiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogImFsbCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YWN6LS5IiwKICAgICAgICAgICAgICAgICJ2IjogImIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJ2aXAiLAogICAgICAgICAgICAgICAgInYiOiAiYjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlZJUOeUqOWIuCIsCiAgICAgICAgICAgICAgICAidiI6ICJiMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5LuY6LS554K55pKtIiwKICAgICAgICAgICAgICAgICJ2IjogImI0IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJzb3J0IiwKICAgICAgICAgICAgIm5hbWUiOiAi5o6S5bqPIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuacgOaWsCIsCiAgICAgICAgICAgICAgICAidiI6ICJjMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA54OtIiwKICAgICAgICAgICAgICAgICJ2IjogImMyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnn6XkuY7pq5jliIYiLAogICAgICAgICAgICAgICAgInYiOiAiYzQiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku6MiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogImFsbCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA0IgogICAgICAgICAgICB9XQogICAgICAgIH1dCiAgICB9LAogICAgbGltaXQ6IDIwLAogICAgcGxheV9wYXJzZTogdHJ1ZSwKICAgIGxhenk6ICRqcy50b1N0cmluZygoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbGV0IGFwaSA9ICIiICsgaW5wdXQuc3BsaXQoIj8iKVswXTsKICAgICAgICAgICAgY29uc29sZS5sb2coYXBpKTsKICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gZmV0Y2goYXBpLCB7CiAgICAgICAgICAgICAgICBtZXRob2Q6ICdnZXQnLAogICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ29raHR0cC8zLjE0LjknLAogICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgbGV0IGJhdGEgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTsKICAgICAgICAgICAgaWYgKGJhdGEudXJsLmluY2x1ZGVzKCJtZ3R2IikpIHsKICAgICAgICAgICAgICAgIGlucHV0ID0gewogICAgICAgICAgICAgICAgICAgIHBhcnNlOiAwLAogICAgICAgICAgICAgICAgICAgIHVybDogYmF0YS51cmwsCiAgICAgICAgICAgICAgICAgICAgang6IDAsCiAgICAgICAgICAgICAgICAgICAgZGFubWFrdTogImh0dHA6Ly8xMjcuMC4wLjE6OTk3OC9wcm94eT9kbz1kYW5tdSZzaXRlPWpzJnVybD1odHRwOi8vZG0ucXhxNi5jb20venkvYXBpLnBocD91cmw9IiArIGlucHV0LnNwbGl0KCI/IilbMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpbnB1dCA9IHsKICAgICAgICAgICAgICAgICAgICBwYXJzZTogMCwKICAgICAgICAgICAgICAgICAgICB1cmw6IGlucHV0LnNwbGl0KCI/IilbMF0sCiAgICAgICAgICAgICAgICAgICAgang6IDEsCiAgICAgICAgICAgICAgICAgICAgZGFubWFrdTogImh0dHA6Ly8xMjcuMC4wLjE6OTk3OC9wcm94eT9kbz1kYW5tdSZzaXRlPWpzJnVybD1odHRwOi8vZG0ucXhxNi5jb20venkvYXBpLnBocD91cmw9IiArIGlucHV0LnNwbGl0KCI/IilbMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgaW5wdXQgPSB7CiAgICAgICAgICAgICAgICBwYXJzZTogMCwKICAgICAgICAgICAgICAgIHVybDogaW5wdXQuc3BsaXQoIj8iKVswXSwKICAgICAgICAgICAgICAgIGp4OiAxLAogICAgICAgICAgICAgICAgZGFubWFrdTogImh0dHA6Ly8xMjcuMC4wLjE6OTk3OC9wcm94eT9kbz1kYW5tdSZzaXRlPWpzJnVybD1odHRwOi8vZG0ucXhxNi5jb20venkvYXBpLnBocD91cmw9IiArIGlucHV0LnNwbGl0KCI/IilbMF0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KSwKICAgIC8vIOaJi+WKqOiwg+eUqOino+aekOivt+axgmpzb27nmoR1cmws5q2kbGF6eeS4jeaWueS+vwogICAgLy8gbGF6eTonanM6cHJpbnQoaW5wdXQpO2ZldGNoX3BhcmFtcy5oZWFkZXJzWyJ1c2VyLWFnZW50Il09TU9CSUxFX1VBO2xldCBodG1sPXJlcXVlc3QoaW5wdXQpO2xldCBydXJsPWh0bWwubWF0Y2goL3dpbmRvd1xcLm9wZW5cXChcJyguKj8pXCcsLylbMV07cnVybD11cmxEZWFsKHJ1cmwpO2lucHV0PXtwYXJzZToxLHVybDpydXJsfTsnLAogICAgLy8g5o6o6I2QOicubGlzdF9pdGVtO2ltZyYmYWx0O2ltZyYmc3JjO2EmJlRleHQ7YSYmZGF0YS1mbG9hdCcsCiAgICDkuIDnuqc6ICdqc29uOmRhdGEuaGl0RG9jczt0aXRsZTtpbWc7dXBkYXRlSW5mb3x8cmlnaHRDb3JuZXIudGV4dDtwbGF5UGFydElkJywKICAgIC8vIOS4gOe6pzonanNvbjpkYXRhLmhpdERvY3M7dGl0bGU7aW1nO3VwZGF0ZUluZm87cGxheVBhcnRJZCcsCiAgICDkuoznuqc6ICRqcy50b1N0cmluZygoKSA9PiB7CiAgICAgICAgZmV0Y2hfcGFyYW1zLmhlYWRlcnMuUmVmZXJlciA9ICJodHRwczovL3d3dy5tZ3R2LmNvbSI7CiAgICAgICAgZmV0Y2hfcGFyYW1zLmhlYWRlcnNbIlVzZXItQWdlbnQiXSA9IE1PQklMRV9VQTsKICAgICAgICBwZGZoID0ganNwLnBkZmg7CiAgICAgICAgcGRmYSA9IGpzcC5wZGZhOwogICAgICAgIHBkID0ganNwLnBkOwogICAgICAgIFZPRCA9IHt9OwogICAgICAgIGxldCBkID0gW107CiAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGlucHV0KTsKICAgICAgICBsZXQganNvbiA9IEpTT04ucGFyc2UoaHRtbCk7CiAgICAgICAgbGV0IGhvc3QgPSAiaHR0cHM6Ly93d3cubWd0di5jb20iOwogICAgICAgIGxldCBvdXJsID0ganNvbi5kYXRhLmxpc3QubGVuZ3RoID4gMCA/IGpzb24uZGF0YS5saXN0WzBdLnVybCA6IGpzb24uZGF0YS5zZXJpZXNbMF0udXJsOwogICAgICAgIGlmICghL15odHRwLy50ZXN0KG91cmwpKSB7CiAgICAgICAgICAgIG91cmwgPSBob3N0ICsgb3VybAogICAgICAgIH0KICAgICAgICBmZXRjaF9wYXJhbXMuaGVhZGVyc1siVXNlci1BZ2VudCJdID0gTU9CSUxFX1VBOwogICAgICAgIGh0bWwgPSByZXF1ZXN0KG91cmwpOwogICAgICAgIGlmIChodG1sLmluY2x1ZGVzKCJ3aW5kb3cubG9jYXRpb24gPSIpKSB7CiAgICAgICAgICAgIHByaW50KCLlvIDlp4vojrflj5ZvdXJsIik7CiAgICAgICAgICAgIG91cmwgPSBwZGZoKGh0bWwsICJtZXRhW2h0dHAtZXF1aXY9cmVmcmVzaF0mJmNvbnRlbnQiKS5zcGxpdCgidXJsPSIpWzFdOwogICAgICAgICAgICBwcmludCgi6I635Y+W5Yiwb3VybDoiICsgb3VybCk7CiAgICAgICAgICAgIGh0bWwgPSByZXF1ZXN0KG91cmwpCiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGxldCBkZXRhaWxzID0gcGRmaChodG1sLCAiLm0tZGV0YWlscyYmSHRtbCIpLnJlcGxhY2UoL2gxPi8sICJoNj4iKS5yZXBsYWNlKC9kaXYvZywgImJyIik7CiAgICAgICAgICAgIHByaW50KGRldGFpbHMpOwogICAgICAgICAgICBsZXQgYWN0b3IgPSAiIiwKICAgICAgICAgICAgICAgIGRpcmVjdG9yID0gIiIsCiAgICAgICAgICAgICAgICB0aW1lID0gIiI7CiAgICAgICAgICAgIGlmICgv5pKt5Ye65pe26Ze0Ly50ZXN0KGRldGFpbHMpKSB7CiAgICAgICAgICAgICAgICBhY3RvciA9IHBkZmgoaHRtbCwgInA6ZXEoNSkmJlRleHQiKS5zdWJzdHIoMCwgMjUpOwogICAgICAgICAgICAgICAgZGlyZWN0b3IgPSBwZGZoKGh0bWwsICJwOmVxKDQpJiZUZXh0Iik7CiAgICAgICAgICAgICAgICB0aW1lID0gcGRmaChodG1sLCAicDplcSgzKSYmVGV4dCIpCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhY3RvciA9IHBkZmgoaHRtbCwgInA6ZXEoNCkmJlRleHQiKS5zdWJzdHIoMCwgMjUpOwogICAgICAgICAgICAgICAgZGlyZWN0b3IgPSBwZGZoKGh0bWwsICJwOmVxKDMpJiZUZXh0Iik7CiAgICAgICAgICAgICAgICB0aW1lID0gIuW3suWujOe7kyIKICAgICAgICAgICAgfQogICAgICAgICAgICBsZXQgX2ltZyA9IHBkKGh0bWwsICIudmlkZW8taW1nJiZpbWcmJnNyYyIpOwogICAgICAgICAgICBsZXQgSkogPSBwZGZoKGh0bWwsICIuZGVzYyYmVGV4dCIpLnNwbGl0KCLnroDku4vvvJoiKVsxXTsKICAgICAgICAgICAgbGV0IF9kZXNjID0gdGltZTsKICAgICAgICAgICAgVk9ELnZvZF9uYW1lID0gcGRmaChodG1sLCAiLnZ0LXR4dCYmVGV4dCIpOwogICAgICAgICAgICBWT0QudHlwZV9uYW1lID0gcGRmaChodG1sLCAicDplcSgwKSYmVGV4dCIpLnN1YnN0cigwLCA2KTsKICAgICAgICAgICAgVk9ELnZvZF9hcmVhID0gcGRmaChodG1sLCAicDplcSgxKSYmVGV4dCIpOwogICAgICAgICAgICBWT0Qudm9kX2FjdG9yID0gYWN0b3I7CiAgICAgICAgICAgIFZPRC52b2RfZGlyZWN0b3IgPSBkaXJlY3RvcjsKICAgICAgICAgICAgVk9ELnZvZF9yZW1hcmtzID0gX2Rlc2M7CiAgICAgICAgICAgIFZPRC52b2RfcGljID0gX2ltZzsKICAgICAgICAgICAgVk9ELnZvZF9jb250ZW50ID0gSko7CiAgICAgICAgICAgIGlmICghVk9ELnZvZF9uYW1lKSB7CiAgICAgICAgICAgICAgICBWT0Qudm9kX25hbWUgPSBWT0QudHlwZV9uYW1lOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICBsb2coIuiOt+WPluW9seeJh+S/oeaBr+WPkeeUn+mUmeivrzoiICsgZS5tZXNzYWdlKQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZ2V0UmpwZyhpbWdVcmwsIHhzKSB7CiAgICAgICAgICAgIHhzID0geHMgfHwgMzsKICAgICAgICAgICAgbGV0IHBpY1NpemUgPSAvanBnXy8udGVzdChpbWdVcmwpID8gaW1nVXJsLnNwbGl0KCJqcGdfIilbMV0uc3BsaXQoIi4iKVswXSA6IGZhbHNlOwogICAgICAgICAgICBsZXQgcmpwZyA9IGZhbHNlOwogICAgICAgICAgICBpZiAocGljU2l6ZSkgewogICAgICAgICAgICAgICAgbGV0IGEgPSBwYXJzZUludChwaWNTaXplLnNwbGl0KCJ4IilbMF0pICogeHM7CiAgICAgICAgICAgICAgICBsZXQgYiA9IHBhcnNlSW50KHBpY1NpemUuc3BsaXQoIngiKVsxXSkgKiB4czsKICAgICAgICAgICAgICAgIHJqcGcgPSBhICsgIngiICsgYiArICIuanBnIgogICAgICAgICAgICB9CiAgICAgICAgICAgIGxldCBpbWcgPSAvanBnXy8udGVzdChpbWdVcmwpICYmIHJqcGcgPyBpbWdVcmwucmVwbGFjZShpbWdVcmwuc3BsaXQoImpwZ18iKVsxXSwgcmpwZykgOiBpbWdVcmw7CiAgICAgICAgICAgIHJldHVybiBpbWcKICAgICAgICB9CgogICAgICAgIGlmIChqc29uLmRhdGEudG90YWwgPT09IDEgJiYganNvbi5kYXRhLmxpc3QubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgIGxldCBkYXRhID0ganNvbi5kYXRhLmxpc3RbMF07CiAgICAgICAgICAgIGxldCB1cmwgPSAiaHR0cHM6Ly93d3cubWd0di5jb20iICsgZGF0YS51cmw7CiAgICAgICAgICAgIGQucHVzaCh7CiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS50NCwKICAgICAgICAgICAgICAgIGRlc2M6IGRhdGEudDIsCiAgICAgICAgICAgICAgICBwaWNfdXJsOiBnZXRSanBnKGRhdGEuaW1nKSwKICAgICAgICAgICAgICAgIHVybDogdXJsCiAgICAgICAgICAgIH0pCiAgICAgICAgfSBlbHNlIGlmIChqc29uLmRhdGEubGlzdC5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGpzb24uZGF0YS50b3RhbF9wYWdlOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChpID4gMSkgewogICAgICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGZldGNoKGlucHV0LnJlcGxhY2UoInBhZ2U9MSIsICJwYWdlPSIgKyBpKSwge30pKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAganNvbi5kYXRhLmxpc3QuZm9yRWFjaChmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9ICJodHRwczovL3d3dy5tZ3R2LmNvbSIgKyBkYXRhLnVybDsKICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5pc0ludGFjdCA9PSAiMSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnQ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogZGF0YS50MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGdldFJqcGcoZGF0YS5pbWcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwKICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcHJpbnQoaW5wdXQgKyAi5pqC5peg54mH5rqQIikKICAgICAgICB9CiAgICAgICAgVk9ELnZvZF9wbGF5X2Zyb20gPSAibWd0diI7CiAgICAgICAgVk9ELnZvZF9wbGF5X3VybCA9IGQubWFwKGZ1bmN0aW9uKGl0KSB7CiAgICAgICAgICAgIHJldHVybiBpdC50aXRsZSArICIkIiArIGl0LnVybAogICAgICAgIH0pLmpvaW4oIiMiKTsKICAgICAgICBzZXRSZXN1bHQoZCk7CiAgICB9KSwKCiAgICDmkJzntKI6ICRqcy50b1N0cmluZygoKSA9PiB7CiAgICAgICAgZmV0Y2hfcGFyYW1zLmhlYWRlcnMuUmVmZXJlciA9ICJodHRwczovL3d3dy5tZ3R2LmNvbSI7CiAgICAgICAgZmV0Y2hfcGFyYW1zLmhlYWRlcnNbIlVzZXItQWdlbnQiXSA9IE1PQklMRV9VQTsKICAgICAgICBsZXQgZCA9IFtdOwogICAgICAgIGxldCBodG1sID0gcmVxdWVzdChpbnB1dCk7CiAgICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGh0bWwpOwogICAgICAgIGpzb24uZGF0YS5jb250ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICAgICAgaWYgKGRhdGEudHlwZSAmJiBkYXRhLnR5cGUgPT0gJ21lZGlhJykgewogICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSBkYXRhLmRhdGFbMF07CiAgICAgICAgICAgICAgICBsZXQgZGVzYyA9IGl0ZW0uZGVzYy5qb2luKCcsJyk7CiAgICAgICAgICAgICAgICBsZXQgZnljbGFzcyA9ICcnOwogICAgICAgICAgICAgICAgaWYgKGl0ZW0uc291cmNlID09PSAiaW1nbyIpIHsKICAgICAgICAgICAgICAgICAgICBsZXQgaW1nID0gaXRlbS5pbWcgPyBpdGVtLmltZyA6ICcnOwogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZ5Y2xhc3MgPSBpdGVtLnJwdC5tYXRjaCgvaWR4PSguKj8pJi8pWzFdICsgJyQnOwogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nKGUubWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZ5Y2xhc3MgPSAnJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbG9nKGZ5Y2xhc3MpOwogICAgICAgICAgICAgICAgICAgIGQucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLnJlcGxhY2UoLzxCPnw8XC9CPi9nLCAnJyksCiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaW1nLAogICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogZGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBmeWNsYXNzICsgaXRlbS51cmwubWF0Y2goLy4qXC8oLio/KVwuaHRtbC8pWzFdCiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHNldFJlc3VsdChkKTsKICAgIH0pLAp9
\ No newline at end of file
diff --git a/潇洒/js/MS.js b/潇洒/js/MS.js
new file mode 100644
index 0000000..9ec24f9
--- /dev/null
+++ b/潇洒/js/MS.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+exs+aQnCcsCiAgICBob3N0OiAnaHR0cHM6Ly9taXNvc28uY2MvJywKICAgIGhvc3RKczogJycsCiAgICBoZWFkZXJzOiB7CiAgICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDExOyBQaXhlbCA1KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvOTAuMC40NDMwLjkxIE1vYmlsZSBTYWZhcmkvNTM3LjM2JywKICAgIH0sCiAgICDnvJbnoIE6ICd1dGYtOCcsCiAgICB0aW1lb3V0OiA1MDAwLAogICAgdXJsOiAnaHR0cHM6Ly9taXNvc28uY2Mvc2VhcmNoP3E9ZnljbGFzcyZmb3JtYXQ9dmlkZW8mcGFnZT1meXBhZ2UnLAogICAgZmlsdGVyX3VybDogJycsCiAgICBkZXRhaWxVcmw6ICcnLAogICAgc2VhcmNoVXJsOiAnaHR0cHM6Ly9taXNvc28uY2Mvc2VhcmNoP3E9KiomZm9ybWF0PXZpZGVvJnBhZ2U9ZnlwYWdlJywKICAgIHNlYXJjaGFibGU6IDEsCiAgICBxdWlja1NlYXJjaDogMSwKICAgIGZpbHRlcmFibGU6IDEsCiAgICBjbGFzc19uYW1lOiAnJywKICAgIGNsYXNzX3VybDogJycsCiAgICBwcm94eV9ydWxlOiAnJywKICAgIHNuaWZmZXI6IGZhbHNlLAogICAgaXNWaWRlbzogJycsCiAgICBwbGF5X3BhcnNlOiB0cnVlLAogICAgcGFyc2VfdXJsOiAnJywKICAgIGxhenk6ICJqczpcbiAgICAgICAgaW5wdXQgPSAncHVzaDovLycgKyBpbnB1dDtcbiAgICAiLAogICAgbGltaXQ6IDksCiAgICBkb3VibGU6IGZhbHNlLAogICAgLy8g5o6o6I2QOiAnKicsCiAgICDkuIDnuqc6ICdqczpcbiAgICAgICAgbGV0IGh0bWwgPSBmZXRjaChpbnB1dCk7XG4gICAgICAgIGxldCBsaXN0ID0gcGRmYShodG1sLCAiYm9keSYmLnNlbWktc3BhY2UtbWVkaXVtLXZlcnRpY2FsIik7XG4gICAgICAgIFZPRFMgPSBsaXN0Lm1hcCh4ID0+IHtcbiAgICAgICAgICAgIGxldCByZW1hcmtzID0gcGRmaCh4LCAiZGl2JiZpbWcmJmFsdCIpO1xuICAgICAgICAgICAgLy8g6L+H5ruk5o6J5YyF5ZCrIui/hembt+S6keebmCLnmoTlhoXlrrlcbiAgICAgICAgICAgIGlmKHJlbWFya3MuaW5jbHVkZXMoIui/hembt+S6keebmCIpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdm9kX25hbWU6IHBkZmgoeCwgImRpdiYmYSYmdGl0bGUiKSxcbiAgICAgICAgICAgICAgICB2b2RfcGljOiBcJ2h0dHBzOi8vaXMyLXNzbC5tenN0YXRpYy5jb20vaW1hZ2UvdGh1bWIvUHVycGxlMTIzL3Y0LzQ5LzI1Lzk3LzQ5MjU5Nzc1LTFhNmItYmE2Mi0zYzI4LWIyN2JmNjcxMmFkZS9zb3VyY2UvMTAyNHgxMDI0YmIuanBnXCcsXG4gICAgICAgICAgICAgICAgdm9kX3JlbWFya3M6IHJlbWFya3MsXG4gICAgICAgICAgICAgICAgdm9kX2NvbnRlbnQ6IHJlbWFya3MsXG4gICAgICAgICAgICAgICAgdm9kX2lkOiBwZGZoKHgsICJkaXYmJmEmJmhyZWYiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KS5maWx0ZXIoeCA9PiB4ICE9PSBudWxsKTtcbiAgICAnLAogICAg5LqM57qnOiB7CiAgICAgICAgdGl0bGU6ICdoMSYmVGV4dCcsCiAgICAgICAgaW1nOiAnaW1nJiZzcmMnLAogICAgICAgIGRlc2M6ICcuY2FyZC10ZXh0OmVxKDIpJiZUZXh0Ozs7OycsCiAgICAgICAgY29udGVudDogJ2JvZHkmJi5zZW1pLXNwYWNlLWxvb3NlLXZlcnRpY2FsJiZhJiZocmVmJywKICAgICAgICB0YWJzOiAianM6VEFCUyA9IFsn57Gz5pCcJ10iLAogICAgICAgIGxpc3RzOiAianM6XG4gICAgICAgICAgICBMSVNUUyA9IFtdO1xuICAgICAgICAgICAgbGV0IGxpc3RzMSA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5zZW1pLXNwYWNlLWxvb3NlLXZlcnRpY2FsJykubWFwKGl0ID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgX3R0ID0gcGRmaChpdCwgJ3NwYW4mJnRpdGxlJyk7XG4gICAgICAgICAgICAgICAgbGV0IF91dSA9IHBkZmgoaXQsICdhJiZocmVmJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90dCArICckJyArIF91dTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgTElTVFMucHVzaChsaXN0czEpO1xuICAgICAgICAiLAogICAgfSwKICAgIOaQnOe0ojogJ2pzOlxuICAgICAgICBsZXQgaHRtbCA9IGZldGNoKGlucHV0KTtcbiAgICAgICAgbGV0IGxpc3QgPSBwZGZhKGh0bWwsICJib2R5JiYuc2VtaS1zcGFjZS1tZWRpdW0tdmVydGljYWwiKTtcbiAgICAgICAgVk9EUyA9IGxpc3QubWFwKHggPT4ge1xuICAgICAgICAgICAgbGV0IHJlbWFya3MgPSBwZGZoKHgsICJkaXYmJmltZyYmYWx0Iik7XG4gICAgICAgICAgICAvLyDov4fmu6TmjonljIXlkKsi6L+F6Zu35LqR55uYIueahOWGheWuuVxuICAgICAgICAgICAgaWYocmVtYXJrcy5pbmNsdWRlcygi6L+F6Zu35LqR55uYIikpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2b2RfbmFtZTogcGRmaCh4LCAiZGl2JiZhJiZ0aXRsZSIpLFxuICAgICAgICAgICAgICAgIHZvZF9waWM6IFwnaHR0cHM6Ly9pczItc3NsLm16c3RhdGljLmNvbS9pbWFnZS90aHVtYi9QdXJwbGUxMjMvdjQvNDkvMjUvOTcvNDkyNTk3NzUtMWE2Yi1iYTYyLTNjMjgtYjI3YmY2NzEyYWRlL3NvdXJjZS8xMDI0eDEwMjRiYi5qcGdcJyxcbiAgICAgICAgICAgICAgICB2b2RfcmVtYXJrczogcmVtYXJrcyxcbiAgICAgICAgICAgICAgICB2b2RfY29udGVudDogcmVtYXJrcyxcbiAgICAgICAgICAgICAgICB2b2RfaWQ6IHBkZmgoeCwgImRpdiYmYSYmaHJlZiIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmZpbHRlcih4ID0+IHggIT09IG51bGwpO1xuICAgICcsCiAgICBjYXRlX2V4Y2x1ZGU6ICfpppbpobV855WZ6KiAfEFQUHzkuIvovb186LWE6K6vfOaWsOmXu3zliqjmgIEnLAogICAgdGFiX2V4Y2x1ZGU6ICfnjJzkvaB85Zac5qyifOS4i+i9vXzliafmg4V85qacfOivhOiuuicsCiAgICDnsbvlnos6ICflvbHop4YnLAogICAgaG9tZVVybDogJ2h0dHBzOi8vbWlzb3NvLmNjLycsCiAgICDkuoznuqforr/pl67liY06ICcnLAogICAgZW5jb2Rpbmc6ICd1dGYtOCcsCiAgICBzZWFyY2hfZW5jb2Rpbmc6ICcnLAogICAg5Zu+54mH5p2l5rqQOiAnJywKICAgIOWbvueJh+abv+aNojogJycsCiAgICBwbGF5X2pzb246IFtdLAogICAgcGFnZWNvdW50OiB7fSwKICAgIHRhYl9yZW1vdmU6IFtdLAogICAgdGFiX29yZGVyOiBbXSwKICAgIHRhYl9yZW5hbWU6IHt9LAp9
\ No newline at end of file
diff --git a/潇洒/js/NTDM.js b/潇洒/js/NTDM.js
new file mode 100644
index 0000000..9abe665
--- /dev/null
+++ b/潇洒/js/NTDM.js
@@ -0,0 +1 @@
+Ly8gaHR0cDovL3d3dy5udGRtLnR2CnZhciBydWxlID0gewogICAgdGl0bGU6ICdOVOWKqOa8qycsCiAgICBob3N0OiAnaHR0cDovL3d3dy5udGRtOC5jb20nLAogICAgaG9tZVVybDogJy90eXBlL3JpYmVuLmh0bWwnLAogICAgLy8gdXJsOicvc2hvdy9meWNsYXNzLS0tLS0tLS1meXBhZ2UtLS0uaHRtbCcsCiAgICB1cmw6ICcvc2hvdy9meWNsYXNzZnlmaWx0ZXIuaHRtbCcsCiAgICBmaWx0ZXJhYmxlOiAxLCAvL+aYr+WQpuWQr+eUqOWIhuexu+etm+mAiSwKICAgIGZpbHRlcl91cmw6ICctLXt7ZmwuYnl9fS17e2ZsLmNsYXNzfX0tLXt7ZmwubGV0dGVyfX0tLS1meXBhZ2UtLS17e2ZsLnllYXJ9fScsCiAgICBmaWx0ZXI6IHsKICAgICAgICAicmliZW4iOiBbewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku73vvJoiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDAxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAw5Lul5YmNIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDDku6XliY0iCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImNsYXNzIiwKICAgICAgICAgICAgIm5hbWUiOiAi57G75Z6L77yaIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaQnueskSIsCiAgICAgICAgICAgICAgICAidiI6ICLmkJ7nrJEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIui/kOWKqCIsCiAgICAgICAgICAgICAgICAidiI6ICLov5DliqgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWKseW/lyIsCiAgICAgICAgICAgICAgICAidiI6ICLlirHlv5ciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueDreihgCIsCiAgICAgICAgICAgICAgICAidiI6ICLng63ooYAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaImOaWlyIsCiAgICAgICAgICAgICAgICAidiI6ICLmiJjmlpciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuernuaKgCIsCiAgICAgICAgICAgICAgICAidiI6ICLnq57mioAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuagoeWbrSIsCiAgICAgICAgICAgICAgICAidiI6ICLmoKHlm60iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumdkuaYpSIsCiAgICAgICAgICAgICAgICAidiI6ICLpnZLmmKUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueIseaDhSIsCiAgICAgICAgICAgICAgICAidiI6ICLniLHmg4UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWGkumZqSIsCiAgICAgICAgICAgICAgICAidiI6ICLlhpLpmakiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWQjuWuqyIsCiAgICAgICAgICAgICAgICAidiI6ICLlkI7lrqsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueZvuWQiCIsCiAgICAgICAgICAgICAgICAidiI6ICLnmb7lkIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuayu+aEiCIsCiAgICAgICAgICAgICAgICAidiI6ICLmsrvmhIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiQneiOiSIsCiAgICAgICAgICAgICAgICAidiI6ICLokJ3ojokiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumtlOazlSIsCiAgICAgICAgICAgICAgICAidiI6ICLprZTms5UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaCrOeWkSIsCiAgICAgICAgICAgICAgICAidiI6ICLmgqznlpEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaOqOeQhiIsCiAgICAgICAgICAgICAgICAidiI6ICLmjqjnkIYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWlh+W5uyIsCiAgICAgICAgICAgICAgICAidiI6ICLlpYflubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuenkeW5uyIsCiAgICAgICAgICAgICAgICAidiI6ICLnp5HlubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIua4uOaIjyIsCiAgICAgICAgICAgICAgICAidiI6ICLmuLjmiI8iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuelnumtlCIsCiAgICAgICAgICAgICAgICAidiI6ICLnpZ7prZQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaBkOaAliIsCiAgICAgICAgICAgICAgICAidiI6ICLmgZDmgJYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuihgOiFpSIsCiAgICAgICAgICAgICAgICAidiI6ICLooYDohaUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacuuaImCIsCiAgICAgICAgICAgICAgICAidiI6ICLmnLrmiJgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaImOS6iSIsCiAgICAgICAgICAgICAgICAidiI6ICLmiJjkuokiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueKr+e9qiIsCiAgICAgICAgICAgICAgICAidiI6ICLniq/nvaoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWOhuWPsiIsCiAgICAgICAgICAgICAgICAidiI6ICLljoblj7IiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuekvuS8miIsCiAgICAgICAgICAgICAgICAidiI6ICLnpL7kvJoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiBjOWcuiIsCiAgICAgICAgICAgICAgICAidiI6ICLogYzlnLoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWJp+aDhSIsCiAgICAgICAgICAgICAgICAidiI6ICLliafmg4UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS8quWomCIsCiAgICAgICAgICAgICAgICAidiI6ICLkvKrlqJgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiAvee+jiIsCiAgICAgICAgICAgICAgICAidiI6ICLogL3nvo4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuerpeW5tCIsCiAgICAgICAgICAgICAgICAidiI6ICLnq6XlubQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaVmeiCsiIsCiAgICAgICAgICAgICAgICAidiI6ICLmlZnogrIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS6suWtkCIsCiAgICAgICAgICAgICAgICAidiI6ICLkurLlrZAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuecn+S6uiIsCiAgICAgICAgICAgICAgICAidiI6ICLnnJ/kuroiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuatjOiIniIsCiAgICAgICAgICAgICAgICAidiI6ICLmrYzoiJ4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiCieeVqiIsCiAgICAgICAgICAgICAgICAidiI6ICLogonnlaoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIue+juWwkeWlsyIsCiAgICAgICAgICAgICAgICAidiI6ICLnvo7lsJHlpbMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIui9u+Wwj+ivtCIsCiAgICAgICAgICAgICAgICAidiI6ICLovbvlsI/or7QiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWQuOihgOmsvCIsCiAgICAgICAgICAgICAgICAidiI6ICLlkLjooYDprLwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWls+aAp+WQkSIsCiAgICAgICAgICAgICAgICAidiI6ICLlpbPmgKflkJEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuazoemdoueVqiIsCiAgICAgICAgICAgICAgICAidiI6ICLms6HpnaLnlaoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuasouS5kOWQkSIsCiAgICAgICAgICAgICAgICAidiI6ICLmrKLkuZDlkJEiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImxldHRlciIsCiAgICAgICAgICAgICJuYW1lIjogIuWtl+avje+8miIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJBIiwKICAgICAgICAgICAgICAgICJ2IjogIkEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkIiLAogICAgICAgICAgICAgICAgInYiOiAiQiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiQyIsCiAgICAgICAgICAgICAgICAidiI6ICJDIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJEIiwKICAgICAgICAgICAgICAgICJ2IjogIkQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkUiLAogICAgICAgICAgICAgICAgInYiOiAiRSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRiIsCiAgICAgICAgICAgICAgICAidiI6ICJGIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJHIiwKICAgICAgICAgICAgICAgICJ2IjogIkciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkgiLAogICAgICAgICAgICAgICAgInYiOiAiSCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSSIsCiAgICAgICAgICAgICAgICAidiI6ICJJIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJKIiwKICAgICAgICAgICAgICAgICJ2IjogIkoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIksiLAogICAgICAgICAgICAgICAgInYiOiAiSyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTCIsCiAgICAgICAgICAgICAgICAidiI6ICJMIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJNIiwKICAgICAgICAgICAgICAgICJ2IjogIk0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIk4iLAogICAgICAgICAgICAgICAgInYiOiAiTiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTyIsCiAgICAgICAgICAgICAgICAidiI6ICJPIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJQIiwKICAgICAgICAgICAgICAgICJ2IjogIlAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlEiLAogICAgICAgICAgICAgICAgInYiOiAiUSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUiIsCiAgICAgICAgICAgICAgICAidiI6ICJSIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJTIiwKICAgICAgICAgICAgICAgICJ2IjogIlMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlQiLAogICAgICAgICAgICAgICAgInYiOiAiVCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVSIsCiAgICAgICAgICAgICAgICAidiI6ICJVIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJWIiwKICAgICAgICAgICAgICAgICJ2IjogIlYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlciLAogICAgICAgICAgICAgICAgInYiOiAiVyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiWCIsCiAgICAgICAgICAgICAgICAidiI6ICJYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJZIiwKICAgICAgICAgICAgICAgICJ2IjogIlkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIloiLAogICAgICAgICAgICAgICAgInYiOiAiWiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMH45IiwKICAgICAgICAgICAgICAgICJ2IjogIjB+OSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYnkiLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo/vvJoiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pu05paw5pe26Ze0IiwKICAgICAgICAgICAgICAgICJ2IjogInRpbWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS6uuawlCIsCiAgICAgICAgICAgICAgICAidiI6ICJoaXRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLor4TliIYiLAogICAgICAgICAgICAgICAgInYiOiAic2NvcmUiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgInpob25nZ3VvIjogW3sKICAgICAgICAgICAgImtleSI6ICJ5ZWFyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5bm05Lu977yaIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDExIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDciLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDAzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMOS7peWJjSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDAw5Lul5YmNIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJjbGFzcyIsCiAgICAgICAgICAgICJuYW1lIjogIuexu+Wei++8miIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmkJ7nrJEiLAogICAgICAgICAgICAgICAgInYiOiAi5pCe56yRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLov5DliqgiLAogICAgICAgICAgICAgICAgInYiOiAi6L+Q5YqoIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlirHlv5ciLAogICAgICAgICAgICAgICAgInYiOiAi5Yqx5b+XIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLng63ooYAiLAogICAgICAgICAgICAgICAgInYiOiAi54Ot6KGAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjmlpciLAogICAgICAgICAgICAgICAgInYiOiAi5oiY5paXIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnq57mioAiLAogICAgICAgICAgICAgICAgInYiOiAi56ue5oqAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmoKHlm60iLAogICAgICAgICAgICAgICAgInYiOiAi5qCh5ZutIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpnZLmmKUiLAogICAgICAgICAgICAgICAgInYiOiAi6Z2S5pilIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLniLHmg4UiLAogICAgICAgICAgICAgICAgInYiOiAi54ix5oOFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpLpmakiLAogICAgICAgICAgICAgICAgInYiOiAi5YaS6ZmpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlkI7lrqsiLAogICAgICAgICAgICAgICAgInYiOiAi5ZCO5a6rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnmb7lkIgiLAogICAgICAgICAgICAgICAgInYiOiAi55m+5ZCIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmsrvmhIgiLAogICAgICAgICAgICAgICAgInYiOiAi5rK75oSIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLokJ3ojokiLAogICAgICAgICAgICAgICAgInYiOiAi6JCd6I6JIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLprZTms5UiLAogICAgICAgICAgICAgICAgInYiOiAi6a2U5rOVIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgqznlpEiLAogICAgICAgICAgICAgICAgInYiOiAi5oKs55aRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmjqjnkIYiLAogICAgICAgICAgICAgICAgInYiOiAi5o6o55CGIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpYflubsiLAogICAgICAgICAgICAgICAgInYiOiAi5aWH5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAi56eR5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmuLjmiI8iLAogICAgICAgICAgICAgICAgInYiOiAi5ri45oiPIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnpZ7prZQiLAogICAgICAgICAgICAgICAgInYiOiAi56We6a2UIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgZDmgJYiLAogICAgICAgICAgICAgICAgInYiOiAi5oGQ5oCWIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLooYDohaUiLAogICAgICAgICAgICAgICAgInYiOiAi6KGA6IWlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnLrmiJgiLAogICAgICAgICAgICAgICAgInYiOiAi5py65oiYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjkuokiLAogICAgICAgICAgICAgICAgInYiOiAi5oiY5LqJIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLniq/nvaoiLAogICAgICAgICAgICAgICAgInYiOiAi54qv572qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLljoblj7IiLAogICAgICAgICAgICAgICAgInYiOiAi5Y6G5Y+yIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnpL7kvJoiLAogICAgICAgICAgICAgICAgInYiOiAi56S+5LyaIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLogYzlnLoiLAogICAgICAgICAgICAgICAgInYiOiAi6IGM5Zy6IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliafmg4UiLAogICAgICAgICAgICAgICAgInYiOiAi5Ymn5oOFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkvKrlqJgiLAogICAgICAgICAgICAgICAgInYiOiAi5Lyq5aiYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLogL3nvo4iLAogICAgICAgICAgICAgICAgInYiOiAi6IC9576OIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnq6XlubQiLAogICAgICAgICAgICAgICAgInYiOiAi56ul5bm0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmlZnogrIiLAogICAgICAgICAgICAgICAgInYiOiAi5pWZ6IKyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkurLlrZAiLAogICAgICAgICAgICAgICAgInYiOiAi5Lqy5a2QIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnnJ/kuroiLAogICAgICAgICAgICAgICAgInYiOiAi55yf5Lq6IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrYzoiJ4iLAogICAgICAgICAgICAgICAgInYiOiAi5q2M6IieIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLogonnlaoiLAogICAgICAgICAgICAgICAgInYiOiAi6IKJ55WqIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnvo7lsJHlpbMiLAogICAgICAgICAgICAgICAgInYiOiAi576O5bCR5aWzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLovbvlsI/or7QiLAogICAgICAgICAgICAgICAgInYiOiAi6L275bCP6K+0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlkLjooYDprLwiLAogICAgICAgICAgICAgICAgInYiOiAi5ZC46KGA6ay8IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpbPmgKflkJEiLAogICAgICAgICAgICAgICAgInYiOiAi5aWz5oCn5ZCRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLms6HpnaLnlaoiLAogICAgICAgICAgICAgICAgInYiOiAi5rOh6Z2i55WqIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrKLkuZDlkJEiLAogICAgICAgICAgICAgICAgInYiOiAi5qyi5LmQ5ZCRIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJsZXR0ZXIiLAogICAgICAgICAgICAibmFtZSI6ICLlrZfmr43vvJoiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiQSIsCiAgICAgICAgICAgICAgICAidiI6ICJBIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJCIiwKICAgICAgICAgICAgICAgICJ2IjogIkIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkMiLAogICAgICAgICAgICAgICAgInYiOiAiQyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRCIsCiAgICAgICAgICAgICAgICAidiI6ICJEIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJFIiwKICAgICAgICAgICAgICAgICJ2IjogIkUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkYiLAogICAgICAgICAgICAgICAgInYiOiAiRiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRyIsCiAgICAgICAgICAgICAgICAidiI6ICJHIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJIIiwKICAgICAgICAgICAgICAgICJ2IjogIkgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkkiLAogICAgICAgICAgICAgICAgInYiOiAiSSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSiIsCiAgICAgICAgICAgICAgICAidiI6ICJKIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJLIiwKICAgICAgICAgICAgICAgICJ2IjogIksiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkwiLAogICAgICAgICAgICAgICAgInYiOiAiTCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTSIsCiAgICAgICAgICAgICAgICAidiI6ICJNIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJOIiwKICAgICAgICAgICAgICAgICJ2IjogIk4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIk8iLAogICAgICAgICAgICAgICAgInYiOiAiTyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUCIsCiAgICAgICAgICAgICAgICAidiI6ICJQIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJRIiwKICAgICAgICAgICAgICAgICJ2IjogIlEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlIiLAogICAgICAgICAgICAgICAgInYiOiAiUiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUyIsCiAgICAgICAgICAgICAgICAidiI6ICJTIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJUIiwKICAgICAgICAgICAgICAgICJ2IjogIlQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlUiLAogICAgICAgICAgICAgICAgInYiOiAiVSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiViIsCiAgICAgICAgICAgICAgICAidiI6ICJWIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJXIiwKICAgICAgICAgICAgICAgICJ2IjogIlciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlgiLAogICAgICAgICAgICAgICAgInYiOiAiWCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiWSIsCiAgICAgICAgICAgICAgICAidiI6ICJZIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJaIiwKICAgICAgICAgICAgICAgICJ2IjogIloiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjB+OSIsCiAgICAgICAgICAgICAgICAidiI6ICIwfjkiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImJ5IiwKICAgICAgICAgICAgIm5hbWUiOiAi5o6S5bqP77yaIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuabtOaWsOaXtumXtCIsCiAgICAgICAgICAgICAgICAidiI6ICJ0aW1lIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkurrmsJQiLAogICAgICAgICAgICAgICAgInYiOiAiaGl0cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6K+E5YiGIiwKICAgICAgICAgICAgICAgICJ2IjogInNjb3JlIgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICJvbWVpIjogW3sKICAgICAgICAgICAgImtleSI6ICJ5ZWFyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5bm05Lu977yaIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDExIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDciLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDA2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDAzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMDIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMOS7peWJjSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDAw5Lul5YmNIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJjbGFzcyIsCiAgICAgICAgICAgICJuYW1lIjogIuexu+Wei++8miIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmkJ7nrJEiLAogICAgICAgICAgICAgICAgInYiOiAi5pCe56yRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLov5DliqgiLAogICAgICAgICAgICAgICAgInYiOiAi6L+Q5YqoIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlirHlv5ciLAogICAgICAgICAgICAgICAgInYiOiAi5Yqx5b+XIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLng63ooYAiLAogICAgICAgICAgICAgICAgInYiOiAi54Ot6KGAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjmlpciLAogICAgICAgICAgICAgICAgInYiOiAi5oiY5paXIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnq57mioAiLAogICAgICAgICAgICAgICAgInYiOiAi56ue5oqAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmoKHlm60iLAogICAgICAgICAgICAgICAgInYiOiAi5qCh5ZutIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpnZLmmKUiLAogICAgICAgICAgICAgICAgInYiOiAi6Z2S5pilIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLniLHmg4UiLAogICAgICAgICAgICAgICAgInYiOiAi54ix5oOFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpLpmakiLAogICAgICAgICAgICAgICAgInYiOiAi5YaS6ZmpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlkI7lrqsiLAogICAgICAgICAgICAgICAgInYiOiAi5ZCO5a6rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnmb7lkIgiLAogICAgICAgICAgICAgICAgInYiOiAi55m+5ZCIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmsrvmhIgiLAogICAgICAgICAgICAgICAgInYiOiAi5rK75oSIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLokJ3ojokiLAogICAgICAgICAgICAgICAgInYiOiAi6JCd6I6JIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLprZTms5UiLAogICAgICAgICAgICAgICAgInYiOiAi6a2U5rOVIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgqznlpEiLAogICAgICAgICAgICAgICAgInYiOiAi5oKs55aRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmjqjnkIYiLAogICAgICAgICAgICAgICAgInYiOiAi5o6o55CGIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpYflubsiLAogICAgICAgICAgICAgICAgInYiOiAi5aWH5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAi56eR5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmuLjmiI8iLAogICAgICAgICAgICAgICAgInYiOiAi5ri45oiPIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnpZ7prZQiLAogICAgICAgICAgICAgICAgInYiOiAi56We6a2UIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgZDmgJYiLAogICAgICAgICAgICAgICAgInYiOiAi5oGQ5oCWIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLooYDohaUiLAogICAgICAgICAgICAgICAgInYiOiAi6KGA6IWlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnLrmiJgiLAogICAgICAgICAgICAgICAgInYiOiAi5py65oiYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjkuokiLAogICAgICAgICAgICAgICAgInYiOiAi5oiY5LqJIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLniq/nvaoiLAogICAgICAgICAgICAgICAgInYiOiAi54qv572qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLljoblj7IiLAogICAgICAgICAgICAgICAgInYiOiAi5Y6G5Y+yIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnpL7kvJoiLAogICAgICAgICAgICAgICAgInYiOiAi56S+5LyaIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLogYzlnLoiLAogICAgICAgICAgICAgICAgInYiOiAi6IGM5Zy6IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliafmg4UiLAogICAgICAgICAgICAgICAgInYiOiAi5Ymn5oOFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkvKrlqJgiLAogICAgICAgICAgICAgICAgInYiOiAi5Lyq5aiYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLogL3nvo4iLAogICAgICAgICAgICAgICAgInYiOiAi6IC9576OIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnq6XlubQiLAogICAgICAgICAgICAgICAgInYiOiAi56ul5bm0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmlZnogrIiLAogICAgICAgICAgICAgICAgInYiOiAi5pWZ6IKyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkurLlrZAiLAogICAgICAgICAgICAgICAgInYiOiAi5Lqy5a2QIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnnJ/kuroiLAogICAgICAgICAgICAgICAgInYiOiAi55yf5Lq6IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrYzoiJ4iLAogICAgICAgICAgICAgICAgInYiOiAi5q2M6IieIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLogonnlaoiLAogICAgICAgICAgICAgICAgInYiOiAi6IKJ55WqIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnvo7lsJHlpbMiLAogICAgICAgICAgICAgICAgInYiOiAi576O5bCR5aWzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLovbvlsI/or7QiLAogICAgICAgICAgICAgICAgInYiOiAi6L275bCP6K+0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlkLjooYDprLwiLAogICAgICAgICAgICAgICAgInYiOiAi5ZC46KGA6ay8IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpbPmgKflkJEiLAogICAgICAgICAgICAgICAgInYiOiAi5aWz5oCn5ZCRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLms6HpnaLnlaoiLAogICAgICAgICAgICAgICAgInYiOiAi5rOh6Z2i55WqIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrKLkuZDlkJEiLAogICAgICAgICAgICAgICAgInYiOiAi5qyi5LmQ5ZCRIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJsZXR0ZXIiLAogICAgICAgICAgICAibmFtZSI6ICLlrZfmr43vvJoiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiQSIsCiAgICAgICAgICAgICAgICAidiI6ICJBIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJCIiwKICAgICAgICAgICAgICAgICJ2IjogIkIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkMiLAogICAgICAgICAgICAgICAgInYiOiAiQyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRCIsCiAgICAgICAgICAgICAgICAidiI6ICJEIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJFIiwKICAgICAgICAgICAgICAgICJ2IjogIkUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkYiLAogICAgICAgICAgICAgICAgInYiOiAiRiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRyIsCiAgICAgICAgICAgICAgICAidiI6ICJHIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJIIiwKICAgICAgICAgICAgICAgICJ2IjogIkgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkkiLAogICAgICAgICAgICAgICAgInYiOiAiSSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSiIsCiAgICAgICAgICAgICAgICAidiI6ICJKIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJLIiwKICAgICAgICAgICAgICAgICJ2IjogIksiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkwiLAogICAgICAgICAgICAgICAgInYiOiAiTCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTSIsCiAgICAgICAgICAgICAgICAidiI6ICJNIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJOIiwKICAgICAgICAgICAgICAgICJ2IjogIk4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIk8iLAogICAgICAgICAgICAgICAgInYiOiAiTyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUCIsCiAgICAgICAgICAgICAgICAidiI6ICJQIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJRIiwKICAgICAgICAgICAgICAgICJ2IjogIlEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlIiLAogICAgICAgICAgICAgICAgInYiOiAiUiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUyIsCiAgICAgICAgICAgICAgICAidiI6ICJTIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJUIiwKICAgICAgICAgICAgICAgICJ2IjogIlQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlUiLAogICAgICAgICAgICAgICAgInYiOiAiVSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiViIsCiAgICAgICAgICAgICAgICAidiI6ICJWIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJXIiwKICAgICAgICAgICAgICAgICJ2IjogIlciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlgiLAogICAgICAgICAgICAgICAgInYiOiAiWCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiWSIsCiAgICAgICAgICAgICAgICAidiI6ICJZIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJaIiwKICAgICAgICAgICAgICAgICJ2IjogIloiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjB+OSIsCiAgICAgICAgICAgICAgICAidiI6ICIwfjkiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImJ5IiwKICAgICAgICAgICAgIm5hbWUiOiAi5o6S5bqP77yaIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuabtOaWsOaXtumXtCIsCiAgICAgICAgICAgICAgICAidiI6ICJ0aW1lIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkurrmsJQiLAogICAgICAgICAgICAgICAgInYiOiAiaGl0cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6K+E5YiGIiwKICAgICAgICAgICAgICAgICJ2IjogInNjb3JlIgogICAgICAgICAgICB9XQogICAgICAgIH1dCiAgICB9LAogICAgc2VhcmNoVXJsOiAnL3NlYXJjaC8qKi0tLS0tLS0tLS1meXBhZ2UtLS0uaHRtbCcsCiAgICBzZWFyY2hhYmxlOiAyLCAvL+aYr+WQpuWQr+eUqOWFqOWxgOaQnOe0oiwKICAgIHF1aWNrU2VhcmNoOiAwLCAvL+aYr+WQpuWQr+eUqOW/q+mAn+aQnOe0oiwKICAgIGhlYWRlcnM6IHsgLy/nvZHnq5nnmoTor7fmsYLlpLQs5a6M5pW05pSv5oyB5omA5pyJ55qELOW4uOW4pnVh5ZKMY29va2llcwogICAgICAgICdVc2VyLUFnZW50JzogJ01PQklMRV9VQScsCiAgICB9LAogICAgY2xhc3NfcGFyc2U6ICcuc2VhcmNoLXRhZyBsaTthJiZUZXh0O2EmJmhyZWY7LiovKFxcdyspLmh0bWwnLAogICAgcGxheV9wYXJzZTogdHJ1ZSwKICAgIGRldGFpbFVybDogJycsCiAgICBsYXp5OiAiIiwKICAgIGxpbWl0OiA2LAogICAg5o6o6I2QOiAnKicsCiAgICDkuIDnuqc6ICcuYmxvY2tjb250ZW50MSYmLmJsb2NrZGlmMjtpbWcmJmFsdDtpbWcmJnNyYzsubmV3bmFtZSYmVGV4dDthJiZocmVmJywKICAgIOS6jOe6p+iuv+mXruWJjTogJycsCiAgICDkuoznuqc6IHsKICAgICAgICAidGl0bGUiOiAiaDQmJlRleHQ7LmRldGFpbF9pbWZvcm1fdmFsdWU6ZXEoNikmJlRleHQiLAogICAgICAgICJpbWciOiAiLnBvc3RlciYmc3JjIiwKICAgICAgICAiZGVzYyI6ICIuZGV0YWlsX2ltZm9ybV9rdjplcSgwKSYmVGV4dDsuZGV0YWlsX2ltZm9ybV92YWx1ZTplcSg1KSYmVGV4dDsuZGV0YWlsX2ltZm9ybV92YWx1ZTplcSgyKSYmVGV4dDsuZGV0YWlsX2ltZm9ybV9rdjplcSgwKSYmVGV4dDsuZGV0YWlsX2ltZm9ybV9rdjplcSgzKSYmVGV4dCIsCiAgICAgICAgImNvbnRlbnQiOiAiLmRldGFpbF9pbWZvcm1fZGVzY19wcmUmJlRleHQiLAogICAgICAgICJ0YWJzIjogIiNtZW51MCYmbGkiLAogICAgICAgICJsaXN0cyI6ICIubW92dXJsOmVxKCNpZCkmJmxpIgogICAgfSwKICAgIOaQnOe0ojogJyonLAp9
\ No newline at end of file
diff --git a/潇洒/js/NT动漫.js b/潇洒/js/NT动漫.js
deleted file mode 100644
index 4dde948..0000000
--- a/潇洒/js/NT动漫.js
+++ /dev/null
@@ -1,1013 +0,0 @@
-// http://www.ntdm.tv
-var rule = {
- title: 'NT动漫',
- host: 'http://www.ntdm8.com',
- homeUrl: '/type/riben.html',
- // url:'/show/fyclass--------fypage---.html',
- url: '/show/fyclassfyfilter.html',
- filterable: 1, //是否启用分类筛选,
- filter_url: '--{{fl.by}}-{{fl.class}}--{{fl.letter}}---fypage---{{fl.year}}',
- filter: {
- "riben": [{
- "key": "year",
- "name": "年份:",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }, {
- "n": "2009",
- "v": "2009"
- }, {
- "n": "2008",
- "v": "2008"
- }, {
- "n": "2007",
- "v": "2007"
- }, {
- "n": "2006",
- "v": "2006"
- }, {
- "n": "2005",
- "v": "2005"
- }, {
- "n": "2004",
- "v": "2004"
- }, {
- "n": "2003",
- "v": "2003"
- }, {
- "n": "2002",
- "v": "2002"
- }, {
- "n": "2001",
- "v": "2001"
- }, {
- "n": "2000以前",
- "v": "2000以前"
- }]
- }, {
- "key": "class",
- "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": "欢乐向"
- }]
- }, {
- "key": "letter",
- "name": "字母:",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "A",
- "v": "A"
- }, {
- "n": "B",
- "v": "B"
- }, {
- "n": "C",
- "v": "C"
- }, {
- "n": "D",
- "v": "D"
- }, {
- "n": "E",
- "v": "E"
- }, {
- "n": "F",
- "v": "F"
- }, {
- "n": "G",
- "v": "G"
- }, {
- "n": "H",
- "v": "H"
- }, {
- "n": "I",
- "v": "I"
- }, {
- "n": "J",
- "v": "J"
- }, {
- "n": "K",
- "v": "K"
- }, {
- "n": "L",
- "v": "L"
- }, {
- "n": "M",
- "v": "M"
- }, {
- "n": "N",
- "v": "N"
- }, {
- "n": "O",
- "v": "O"
- }, {
- "n": "P",
- "v": "P"
- }, {
- "n": "Q",
- "v": "Q"
- }, {
- "n": "R",
- "v": "R"
- }, {
- "n": "S",
- "v": "S"
- }, {
- "n": "T",
- "v": "T"
- }, {
- "n": "U",
- "v": "U"
- }, {
- "n": "V",
- "v": "V"
- }, {
- "n": "W",
- "v": "W"
- }, {
- "n": "X",
- "v": "X"
- }, {
- "n": "Y",
- "v": "Y"
- }, {
- "n": "Z",
- "v": "Z"
- }, {
- "n": "0~9",
- "v": "0~9"
- }]
- }, {
- "key": "by",
- "name": "排序:",
- "value": [{
- "n": "更新时间",
- "v": "time"
- }, {
- "n": "人气",
- "v": "hits"
- }, {
- "n": "评分",
- "v": "score"
- }]
- }],
- "zhongguo": [{
- "key": "year",
- "name": "年份:",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }, {
- "n": "2009",
- "v": "2009"
- }, {
- "n": "2008",
- "v": "2008"
- }, {
- "n": "2007",
- "v": "2007"
- }, {
- "n": "2006",
- "v": "2006"
- }, {
- "n": "2005",
- "v": "2005"
- }, {
- "n": "2004",
- "v": "2004"
- }, {
- "n": "2003",
- "v": "2003"
- }, {
- "n": "2002",
- "v": "2002"
- }, {
- "n": "2001",
- "v": "2001"
- }, {
- "n": "2000以前",
- "v": "2000以前"
- }]
- }, {
- "key": "class",
- "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": "欢乐向"
- }]
- }, {
- "key": "letter",
- "name": "字母:",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "A",
- "v": "A"
- }, {
- "n": "B",
- "v": "B"
- }, {
- "n": "C",
- "v": "C"
- }, {
- "n": "D",
- "v": "D"
- }, {
- "n": "E",
- "v": "E"
- }, {
- "n": "F",
- "v": "F"
- }, {
- "n": "G",
- "v": "G"
- }, {
- "n": "H",
- "v": "H"
- }, {
- "n": "I",
- "v": "I"
- }, {
- "n": "J",
- "v": "J"
- }, {
- "n": "K",
- "v": "K"
- }, {
- "n": "L",
- "v": "L"
- }, {
- "n": "M",
- "v": "M"
- }, {
- "n": "N",
- "v": "N"
- }, {
- "n": "O",
- "v": "O"
- }, {
- "n": "P",
- "v": "P"
- }, {
- "n": "Q",
- "v": "Q"
- }, {
- "n": "R",
- "v": "R"
- }, {
- "n": "S",
- "v": "S"
- }, {
- "n": "T",
- "v": "T"
- }, {
- "n": "U",
- "v": "U"
- }, {
- "n": "V",
- "v": "V"
- }, {
- "n": "W",
- "v": "W"
- }, {
- "n": "X",
- "v": "X"
- }, {
- "n": "Y",
- "v": "Y"
- }, {
- "n": "Z",
- "v": "Z"
- }, {
- "n": "0~9",
- "v": "0~9"
- }]
- }, {
- "key": "by",
- "name": "排序:",
- "value": [{
- "n": "更新时间",
- "v": "time"
- }, {
- "n": "人气",
- "v": "hits"
- }, {
- "n": "评分",
- "v": "score"
- }]
- }],
- "omei": [{
- "key": "year",
- "name": "年份:",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }, {
- "n": "2009",
- "v": "2009"
- }, {
- "n": "2008",
- "v": "2008"
- }, {
- "n": "2007",
- "v": "2007"
- }, {
- "n": "2006",
- "v": "2006"
- }, {
- "n": "2005",
- "v": "2005"
- }, {
- "n": "2004",
- "v": "2004"
- }, {
- "n": "2003",
- "v": "2003"
- }, {
- "n": "2002",
- "v": "2002"
- }, {
- "n": "2001",
- "v": "2001"
- }, {
- "n": "2000以前",
- "v": "2000以前"
- }]
- }, {
- "key": "class",
- "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": "欢乐向"
- }]
- }, {
- "key": "letter",
- "name": "字母:",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "A",
- "v": "A"
- }, {
- "n": "B",
- "v": "B"
- }, {
- "n": "C",
- "v": "C"
- }, {
- "n": "D",
- "v": "D"
- }, {
- "n": "E",
- "v": "E"
- }, {
- "n": "F",
- "v": "F"
- }, {
- "n": "G",
- "v": "G"
- }, {
- "n": "H",
- "v": "H"
- }, {
- "n": "I",
- "v": "I"
- }, {
- "n": "J",
- "v": "J"
- }, {
- "n": "K",
- "v": "K"
- }, {
- "n": "L",
- "v": "L"
- }, {
- "n": "M",
- "v": "M"
- }, {
- "n": "N",
- "v": "N"
- }, {
- "n": "O",
- "v": "O"
- }, {
- "n": "P",
- "v": "P"
- }, {
- "n": "Q",
- "v": "Q"
- }, {
- "n": "R",
- "v": "R"
- }, {
- "n": "S",
- "v": "S"
- }, {
- "n": "T",
- "v": "T"
- }, {
- "n": "U",
- "v": "U"
- }, {
- "n": "V",
- "v": "V"
- }, {
- "n": "W",
- "v": "W"
- }, {
- "n": "X",
- "v": "X"
- }, {
- "n": "Y",
- "v": "Y"
- }, {
- "n": "Z",
- "v": "Z"
- }, {
- "n": "0~9",
- "v": "0~9"
- }]
- }, {
- "key": "by",
- "name": "排序:",
- "value": [{
- "n": "更新时间",
- "v": "time"
- }, {
- "n": "人气",
- "v": "hits"
- }, {
- "n": "评分",
- "v": "score"
- }]
- }]
- },
- searchUrl: '/search/**----------fypage---.html',
- searchable: 2, //是否启用全局搜索,
- quickSearch: 0, //是否启用快速搜索,
- headers: { //网站的请求头,完整支持所有的,常带ua和cookies
- 'User-Agent': 'MOBILE_UA',
- },
- class_parse: '.search-tag li;a&&Text;a&&href;.*/(\\w+).html',
- play_parse: true,
- detailUrl: '',
- lazy: "",
- limit: 6,
- 推荐: '*',
- 一级: '.blockcontent1&&.blockdif2;img&&alt;img&&src;.newname&&Text;a&&href',
- 二级访问前: '',
- 二级: {
- "title": "h4&&Text;.detail_imform_value:eq(6)&&Text",
- "img": ".poster&&src",
- "desc": ".detail_imform_kv:eq(0)&&Text;.detail_imform_value:eq(5)&&Text;.detail_imform_value:eq(2)&&Text;.detail_imform_kv:eq(0)&&Text;.detail_imform_kv:eq(3)&&Text",
- "content": ".detail_imform_desc_pre&&Text",
- "tabs": "#menu0&&li",
- "lists": ".movurl:eq(#id)&&li"
- },
- 搜索: '*',
-}
\ No newline at end of file
diff --git a/潇洒/js/NyaFun.js b/潇洒/js/NyaFun.js
deleted file mode 100644
index 16b21a2..0000000
--- a/潇洒/js/NyaFun.js
+++ /dev/null
@@ -1,13 +0,0 @@
-muban.短视2.二级.img = '.detail-pic&&img&&data-src';
-var rule = {
- title: 'NyaFun',
- 模板:'短视2',
- host: 'https://www.nyafun.net',
- homeUrl:'/map.html',
- url: '/index.php/api/vod#type=fyclass&page=fypage',
- class_name:'番剧&剧场',
- class_url:'2&1',
- detailUrl:'/bangumi/fyid.html',
- 推荐:'.border-box .public-list-box;a&&title;.lazy&&data-src;.public-list-prb&&Text;a&&href',
- double: false, // 推荐内容是否双层定位
-}
\ No newline at end of file
diff --git a/潇洒/js/QKB.js b/潇洒/js/QKB.js
new file mode 100644
index 0000000..54ab080
--- /dev/null
+++ b/潇洒/js/QKB.js
@@ -0,0 +1 @@
+bXViYW4udmZlZC7kuoznuqcudGl0bGUgPSAnaDEmJlRleHQ7LmZlZC1jb2wtbWQzLS1zcGFuOmVxKDApJiZUZXh0JzsKbXViYW4udmZlZC7kuoznuqcuZGVzYyA9ICcuZmVkLWNvbC1tZDM6ZXEoMykmJlRleHQ7OzsuZmVkLWNvbC1tZDY6ZXEoMCkmJlRleHQ7LmZlZC1jb2wtbWQ2LS1zcGFuOmVxKDEpJiZUZXh0JzsKdmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+WOu+eci+WQpycsCiAgICDmqKHmnb86ICd2ZmVkJywKICAgIGhvc3Q6ICdodHRwczovL3d3dy5rOWRtLmNvbScsCiAgICAvLyB1cmw6ICcvaW5kZXgucGhwL3ZvZC9zaG93L2lkL2Z5Y2xhc3MvcGFnZS9meXBhZ2UuaHRtbCcsCiAgICB1cmw6ICcvaW5kZXgucGhwL3ZvZC9zaG93L2lkL2Z5Y2xhc3NmeWZpbHRlci5odG1sJywKICAgIGZpbHRlcmFibGU6IDEsIC8v5piv5ZCm5ZCv55So5YiG57G7562b6YCJLAogICAgZmlsdGVyX3VybDogJ3t7ZmwuYXJlYX19e3tmbC5ieX19e3tmbC5jbGFzc319L3BhZ2UvZnlwYWdle3tmbC55ZWFyfX0nLAogICAgZmlsdGVyOiB7CiAgICAgICAgIjMzIjogW3sKICAgICAgICAgICAgImtleSI6ICJjbGFzcyIsCiAgICAgICAgICAgICJuYW1lIjogIuexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmkJ7nrJEiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aQnueskSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi57uP5YW4IiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/nu4/lhbgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueDreihgCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv54Ot6KGAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlgqzms6oiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+WCrOazqiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5rK75oSIIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/msrvmhIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueMjuWlhyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv54yO5aWHIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlirHlv5ciLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+WKseW/lyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oiY5paXIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/miJjmlpciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWQjuWuqyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5ZCO5a6rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnLrmiJgiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+acuuaImCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oGL54ixIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/mgYvniLEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueZvuWQiCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv55m+5ZCIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+enkeW5uyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5aWH5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/lpYflubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaOqOeQhiIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5o6o55CGIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmoKHlm60iLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+agoeWbrSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6L+Q5YqoIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/ov5DliqgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumtlOazlSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv6a2U5rOVIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLljoblj7IiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+WOhuWPsiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Lyq5aiYIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/kvKrlqJgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIue+juWwkeWlsyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv576O5bCR5aWzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLokJ3ojokiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+iQneiOiSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Lqy5a2QIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/kurLlrZAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumdkuaYpSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv6Z2S5pilIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpLpmakiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+WGkumZqSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56ue5oqAIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/nq57mioAiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku6MiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEyIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTEiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA5IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDgiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA2IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDUiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAzIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDIiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDAxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAwIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5OTkiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMTk5OSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk5OCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8xOTk4IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJieSIsCiAgICAgICAgICAgICJuYW1lIjogIuaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLml7bpl7QiLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L3RpbWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS6uuawlCIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvaGl0cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6K+E5YiGIiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS9zY29yZSIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiMjEiOiBbewogICAgICAgICAgICAia2V5IjogImNsYXNzIiwKICAgICAgICAgICAgIm5hbWUiOiAi57G75Z6LIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaQnueskSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5pCe56yRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnu4/lhbgiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+e7j+WFuCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54Ot6KGAIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/ng63ooYAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWCrOazqiIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5YKs5rOqIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmsrvmhIgiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+ayu+aEiCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54yO5aWHIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/njI7lpYciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWKseW/lyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5Yqx5b+XIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjmlpciLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aImOaWlyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5ZCO5a6rIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/lkI7lrqsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacuuaImCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5py65oiYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgYvniLEiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aBi+eIsSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi55m+5ZCIIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/nmb7lkIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuenkeW5uyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv56eR5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpYflubsiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+Wlh+W5uyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5o6o55CGIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/mjqjnkIYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuagoeWbrSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5qCh5ZutIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLov5DliqgiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+i/kOWKqCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6a2U5rOVIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/prZTms5UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWOhuWPsiIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5Y6G5Y+yIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkvKrlqJgiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+S8quWomCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi576O5bCR5aWzIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/nvo7lsJHlpbMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiQneiOiSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv6JCd6I6JIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkurLlrZAiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+S6suWtkCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6Z2S5pilIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/pnZLmmKUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWGkumZqSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5YaS6ZmpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnq57mioAiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+ernuaKgCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYXJlYSIsCiAgICAgICAgICAgICJuYW1lIjogIuWcsOWMuiIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpKfpmYYiLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5aSn6ZmGIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnvo7lm70iLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv576O5Zu9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpn6nlm70iLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv6Z+p5Zu9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLml6XmnKwiLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5pel5pysIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLms7Dlm70iLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5rOw5Zu9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmlrDliqDlnaEiLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5paw5Yqg5Z2hIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpqazmnaXopb/kupoiLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv6ams5p2l6KW/5LqaIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLljbDluqYiLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5Y2w5bqmIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLoi7Hlm70iLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv6Iux5Zu9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLms5Xlm70iLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5rOV5Zu9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliqDmi7/lpKciLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5Yqg5ou/5aSnIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLopb/nj63niZkiLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv6KW/54+t54mZIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkv4TnvZfmlq8iLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5L+E572X5pavIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhbblroMiLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5YW25a6DIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJ5ZWFyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5bm05LujIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE0IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTMiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDEyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDExIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTAiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA4IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDciLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA1IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDQiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDAzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAyIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDEiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDAwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTk5IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzE5OTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5OTgiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMTk5OCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYnkiLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pe26Ze0IiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS90aW1lIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkurrmsJQiLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L2hpdHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuivhOWIhiIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvc2NvcmUiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIjUwIjogW3sKICAgICAgICAgICAgImtleSI6ICJjbGFzcyIsCiAgICAgICAgICAgICJuYW1lIjogIuexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmkJ7nrJEiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aQnueskSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi57uP5YW4IiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/nu4/lhbgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueDreihgCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv54Ot6KGAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlgqzms6oiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+WCrOazqiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5rK75oSIIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/msrvmhIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueMjuWlhyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv54yO5aWHIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlirHlv5ciLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+WKseW/lyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oiY5paXIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/miJjmlpciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWQjuWuqyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5ZCO5a6rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnLrmiJgiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+acuuaImCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oGL54ixIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/mgYvniLEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueZvuWQiCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv55m+5ZCIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+enkeW5uyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5aWH5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/lpYflubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaOqOeQhiIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5o6o55CGIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmoKHlm60iLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+agoeWbrSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6L+Q5YqoIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/ov5DliqgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumtlOazlSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv6a2U5rOVIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLljoblj7IiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+WOhuWPsiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Lyq5aiYIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/kvKrlqJgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIue+juWwkeWlsyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv576O5bCR5aWzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLokJ3ojokiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+iQneiOiSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Lqy5a2QIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/kurLlrZAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumdkuaYpSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv6Z2S5pilIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpLpmakiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+WGkumZqSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56ue5oqAIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/nq57mioAiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImFyZWEiLAogICAgICAgICAgICAibmFtZSI6ICLlnLDljLoiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5aSn6ZmGIiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+Wkp+mZhiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi576O5Zu9IiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+e+juWbvSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6Z+p5Zu9IiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+mfqeWbvSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pel5pysIiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+aXpeacrCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5rOw5Zu9IiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+azsOWbvSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5paw5Yqg5Z2hIiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+aWsOWKoOWdoSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6ams5p2l6KW/5LqaIiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+mprOadpeilv+S6miIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Y2w5bqmIiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+WNsOW6piIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6Iux5Zu9IiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+iLseWbvSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5rOV5Zu9IiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+azleWbvSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Yqg5ou/5aSnIiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+WKoOaLv+WkpyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6KW/54+t54mZIiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+ilv+ePreeJmSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5L+E572X5pavIiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+S/hOe9l+aWryIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YW25a6DIiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+WFtuWugyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAieWVhciIsCiAgICAgICAgICAgICJuYW1lIjogIuW5tOS7oyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI1IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjQiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIyIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjEiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE5IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTgiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE2IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTUiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEzIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTIiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDExIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEwIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDkiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA3IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDYiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA0IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDMiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDAyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAxIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDAiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk5OSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8xOTk5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTk4IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzE5OTgiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImJ5IiwKICAgICAgICAgICAgIm5hbWUiOiAi5o6S5bqPIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuaXtumXtCIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvdGltZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Lq65rCUIiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS9oaXRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLor4TliIYiLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L3Njb3JlIgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICIyNCI6IFt7CiAgICAgICAgICAgICJrZXkiOiAiY2xhc3MiLAogICAgICAgICAgICAibmFtZSI6ICLnsbvlnosiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pCe56yRIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/mkJ7nrJEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIue7j+WFuCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv57uP5YW4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLng63ooYAiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+eDreihgCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YKs5rOqIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/lgqzms6oiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuayu+aEiCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5rK75oSIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnjI7lpYciLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+eMjuWlhyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Yqx5b+XIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/lirHlv5ciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaImOaWlyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5oiY5paXIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlkI7lrqsiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+WQjuWuqyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5py65oiYIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/mnLrmiJgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaBi+eIsSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5oGL54ixIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnmb7lkIgiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+eZvuWQiCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56eR5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/np5HlubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWlh+W5uyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5aWH5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmjqjnkIYiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aOqOeQhiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5qCh5ZutIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/moKHlm60iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIui/kOWKqCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv6L+Q5YqoIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLprZTms5UiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+mtlOazlSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Y6G5Y+yIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/ljoblj7IiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS8quWomCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5Lyq5aiYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnvo7lsJHlpbMiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+e+juWwkeWlsyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6JCd6I6JIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/okJ3ojokiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS6suWtkCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5Lqy5a2QIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpnZLmmKUiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+mdkuaYpSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YaS6ZmpIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/lhpLpmakiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuernuaKgCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv56ue5oqAIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJhcmVhIiwKICAgICAgICAgICAgIm5hbWUiOiAi5Zyw5Yy6IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWkp+mZhiIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/lpKfpmYYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIue+juWbvSIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/nvo7lm70iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumfqeWbvSIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/pn6nlm70iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaXpeacrCIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/ml6XmnKwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuazsOWbvSIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/ms7Dlm70iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaWsOWKoOWdoSIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/mlrDliqDlnaEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumprOadpeilv+S6miIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/pqazmnaXopb/kupoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWNsOW6piIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/ljbDluqYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiLseWbvSIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/oi7Hlm70iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuazleWbvSIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/ms5Xlm70iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWKoOaLv+WkpyIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/liqDmi7/lpKciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuilv+ePreeJmSIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/opb/nj63niZkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS/hOe9l+aWryIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/kv4TnvZfmlq8iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWFtuWugyIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/lhbblroMiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku6MiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEyIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTEiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA5IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDgiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA2IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDUiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAzIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDIiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDAxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAwIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5OTkiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMTk5OSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTk5OCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8xOTk4IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJieSIsCiAgICAgICAgICAgICJuYW1lIjogIuaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLml7bpl7QiLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L3RpbWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS6uuawlCIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvaGl0cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6K+E5YiGIiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS9zY29yZSIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiMjIiOiBbewogICAgICAgICAgICAia2V5IjogImNsYXNzIiwKICAgICAgICAgICAgIm5hbWUiOiAi57G75Z6LIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaQnueskSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5pCe56yRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnu4/lhbgiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+e7j+WFuCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54Ot6KGAIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/ng63ooYAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWCrOazqiIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5YKs5rOqIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmsrvmhIgiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+ayu+aEiCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54yO5aWHIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/njI7lpYciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWKseW/lyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5Yqx5b+XIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjmlpciLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aImOaWlyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5ZCO5a6rIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/lkI7lrqsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacuuaImCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5py65oiYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgYvniLEiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aBi+eIsSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi55m+5ZCIIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/nmb7lkIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuenkeW5uyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv56eR5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpYflubsiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+Wlh+W5uyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5o6o55CGIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/mjqjnkIYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuagoeWbrSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5qCh5ZutIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLov5DliqgiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+i/kOWKqCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6a2U5rOVIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/prZTms5UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWOhuWPsiIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5Y6G5Y+yIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkvKrlqJgiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+S8quWomCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi576O5bCR5aWzIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/nvo7lsJHlpbMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiQneiOiSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv6JCd6I6JIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkurLlrZAiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+S6suWtkCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6Z2S5pilIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/pnZLmmKUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWGkumZqSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5YaS6ZmpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnq57mioAiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+ernuaKgCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYXJlYSIsCiAgICAgICAgICAgICJuYW1lIjogIuWcsOWMuiIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLml6XmnKwiLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5pel5pysIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrKfnvo4iLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5qyn576OIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhbbku5YiLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5YW25LuWIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJ5ZWFyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5bm05LujIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE0IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTMiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDEyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDExIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTAiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA4IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDciLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA1IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDQiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDAzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAyIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDEiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDAwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxOTk5IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzE5OTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjE5OTgiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMTk5OCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYnkiLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pe26Ze0IiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS90aW1lIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkurrmsJQiLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L2hpdHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuivhOWIhiIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvc2NvcmUiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0KICAgIH0sCiAgICBjbGFzc19wYXJzZTogJy5mZWQtcG9wcy1saXN0OmVxKDApJiZsaTpndCgwKTpsdCg2KTthJiZUZXh0O2EmJmhyZWY7LiovKC4qPykuaHRtbCcsCn0=
\ No newline at end of file
diff --git a/潇洒/js/QMDM.js b/潇洒/js/QMDM.js
new file mode 100644
index 0000000..f20effd
--- /dev/null
+++ b/潇洒/js/QMDM.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+Wlh+exs+WKqOa8qycsCiAgICBob3N0OiAnaHR0cDovL3d3dy5xaW1pcWltaS5uZXQnLAogICAgdXJsOiAnL3Nob3cvZnljbGFzc2Z5ZmlsdGVyLmh0bWwnLAogICAgZmlsdGVyYWJsZTogMSwgLy/mmK/lkKblkK/nlKjliIbnsbvnrZvpgIksCiAgICBmaWx0ZXJfdXJsOiAne3tmbC5hcmVhfX17e2ZsLmJ5fX17e2ZsLmNsYXNzfX17e2ZsLmxldHRlcn19L3BhZ2UvZnlwYWdle3tmbC55ZWFyfX0nLAogICAgZmlsdGVyOiB7CiAgICAgICAgInhpbmZhbiI6IFt7CiAgICAgICAgICAgICJrZXkiOiAiY2xhc3MiLAogICAgICAgICAgICAibmFtZSI6ICLnsbvlnosiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YaS6ZmpIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/lhpLpmakiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueDreihgCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv54Ot6KGAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpYflubsiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+Wlh+W5uyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oGL54ixIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/mgYvniLEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuagoeWbrSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5qCh5ZutIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlkI7lrqsiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+WQjuWuqyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pCe56yRIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/mkJ7nrJEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuayu+aEiCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5rK75oSIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnpZ7prZQiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+elnumtlCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6a2U5rOVIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/prZTms5UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueZvuWQiCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv55m+5ZCIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmjqjnkIYiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aOqOeQhiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56eR5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/np5HlubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuernuaKgCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv56ue5oqAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgqznlpEiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aCrOeWkSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6Z2S5pilIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/pnZLmmKUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaImOS6iSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5oiY5LqJIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLokJ3ojokiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+iQneiOiSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6a2U5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/prZTlubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaImOaWlyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5oiY5paXIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLml6XluLgiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aXpeW4uCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYXJlYSIsCiAgICAgICAgICAgICJuYW1lIjogIuWcsOWMuiIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLml6XmnKwiLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5pel5pysLyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5aSn6ZmGIiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+S4reWbvS8iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuasp+e+jiIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/mrKfnvo4vIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpn6nlm70iLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv6Z+p5Zu9LyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5riv5Y+wIiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+a4r+WPsC8iCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku70iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEyIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTEiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA5IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDgiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA2IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDUiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAzIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDIiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDAxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAwIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDAiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImxldHRlciIsCiAgICAgICAgICAgICJuYW1lIjogIuWtl+avjSIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlrZfmr40iLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJBIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvQSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiQiIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL0IiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkMiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9DIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJEIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvRCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRSIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL0UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkYiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9GIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJHIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvRyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSCIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL0giCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkkiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9JIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJKIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvSiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSyIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL0siCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkwiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9MIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJNIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvTSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTiIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL04iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIk8iLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9PIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJQIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvUCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUSIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL1EiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlIiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9SIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJTIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvUyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVCIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL1QiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlUiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9VIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJWIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvViIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVyIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL1ciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlgiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9YIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJZIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvWSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiWiIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL1oiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjAtOSIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyLzAtOSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYnkiLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pe26Ze0IiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS90aW1lIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkurrmsJQiLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L2hpdHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuivhOWIhiIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvc2NvcmUiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgInJpbWFuIjogW3sKICAgICAgICAgICAgImtleSI6ICJjbGFzcyIsCiAgICAgICAgICAgICJuYW1lIjogIuexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpLpmakiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+WGkumZqSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54Ot6KGAIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/ng63ooYAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWlh+W5uyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5aWH5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgYvniLEiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aBi+eIsSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5qCh5ZutIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/moKHlm60iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWQjuWuqyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5ZCO5a6rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmkJ7nrJEiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aQnueskSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5rK75oSIIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/msrvmhIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuelnumtlCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv56We6a2UIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLprZTms5UiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+mtlOazlSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi55m+5ZCIIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/nmb7lkIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaOqOeQhiIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5o6o55CGIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+enkeW5uyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56ue5oqAIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/nq57mioAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaCrOeWkSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5oKs55aRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpnZLmmKUiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+mdkuaYpSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oiY5LqJIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/miJjkuokiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiQneiOiSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv6JCd6I6JIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLprZTlubsiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+mtlOW5uyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oiY5paXIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/miJjmlpciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaXpeW4uCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5pel5bi4IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJhcmVhIiwKICAgICAgICAgICAgIm5hbWUiOiAi5Zyw5Yy6IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaXpeacrCIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/ml6XmnKwvIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpKfpmYYiLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5Lit5Zu9LyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5qyn576OIiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+asp+e+ji8iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumfqeWbvSIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/pn6nlm70vIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmuK/lj7AiLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5riv5Y+wLyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAieWVhciIsCiAgICAgICAgICAgICJuYW1lIjogIuW5tOS7vSIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI1IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjQiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIyIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjEiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE5IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTgiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE2IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTUiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEzIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTIiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDExIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEwIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDkiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA3IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDYiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA0IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDMiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDAyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAxIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDAiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwMCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAibGV0dGVyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5a2X5q+NIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWtl+avjSIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkEiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9BIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJCIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvQiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiQyIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL0MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkQiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9EIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJFIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvRSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRiIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL0YiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkciLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9HIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJIIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvSCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSSIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL0kiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkoiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9KIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJLIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvSyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTCIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL0wiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIk0iLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9NIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJOIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvTiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTyIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL08iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlAiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9QIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJRIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvUSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUiIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL1IiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlMiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9TIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJUIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvVCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVSIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL1UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlYiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9WIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJXIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvVyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiWCIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL1giCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlkiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9ZIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJaIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvWiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMC05IiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvMC05IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJieSIsCiAgICAgICAgICAgICJuYW1lIjogIuaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLml7bpl7QiLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L3RpbWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS6uuawlCIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvaGl0cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6K+E5YiGIiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS9zY29yZSIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiZ3VvbWFuIjogW3sKICAgICAgICAgICAgImtleSI6ICJjbGFzcyIsCiAgICAgICAgICAgICJuYW1lIjogIuexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpLpmakiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+WGkumZqSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54Ot6KGAIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/ng63ooYAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWlh+W5uyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5aWH5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgYvniLEiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aBi+eIsSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5qCh5ZutIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/moKHlm60iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWQjuWuqyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5ZCO5a6rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmkJ7nrJEiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aQnueskSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5rK75oSIIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/msrvmhIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuelnumtlCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv56We6a2UIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLprZTms5UiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+mtlOazlSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi55m+5ZCIIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/nmb7lkIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaOqOeQhiIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5o6o55CGIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+enkeW5uyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56ue5oqAIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/nq57mioAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaCrOeWkSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5oKs55aRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpnZLmmKUiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+mdkuaYpSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oiY5LqJIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/miJjkuokiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiQneiOiSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv6JCd6I6JIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLprZTlubsiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+mtlOW5uyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oiY5paXIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/miJjmlpciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaXpeW4uCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5pel5bi4IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJhcmVhIiwKICAgICAgICAgICAgIm5hbWUiOiAi5Zyw5Yy6IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaXpeacrCIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/ml6XmnKwvIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpKfpmYYiLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5Lit5Zu9LyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5qyn576OIiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+asp+e+ji8iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumfqeWbvSIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/pn6nlm70vIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmuK/lj7AiLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5riv5Y+wLyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAieWVhciIsCiAgICAgICAgICAgICJuYW1lIjogIuW5tOS7vSIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI1IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjQiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIyIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjEiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE5IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTgiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE2IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTUiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEzIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTIiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDExIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEwIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDkiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA3IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDYiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA0IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDMiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDAyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAxIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDAiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwMCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAibGV0dGVyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5a2X5q+NIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWtl+avjSIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkEiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9BIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJCIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvQiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiQyIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL0MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkQiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9EIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJFIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvRSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRiIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL0YiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkciLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9HIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJIIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvSCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSSIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL0kiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkoiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9KIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJLIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvSyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTCIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL0wiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIk0iLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9NIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJOIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvTiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTyIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL08iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlAiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9QIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJRIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvUSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUiIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL1IiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlMiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9TIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJUIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvVCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVSIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL1UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlYiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9WIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJXIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvVyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiWCIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL1giCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlkiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9ZIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJaIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvWiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMC05IiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvMC05IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJieSIsCiAgICAgICAgICAgICJuYW1lIjogIuaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLml7bpl7QiLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L3RpbWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS6uuawlCIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvaGl0cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6K+E5YiGIiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS9zY29yZSIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiamNkbSI6IFt7CiAgICAgICAgICAgICJrZXkiOiAiY2xhc3MiLAogICAgICAgICAgICAibmFtZSI6ICLnsbvlnosiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YaS6ZmpIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/lhpLpmakiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueDreihgCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv54Ot6KGAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpYflubsiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+Wlh+W5uyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oGL54ixIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/mgYvniLEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuagoeWbrSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5qCh5ZutIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlkI7lrqsiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+WQjuWuqyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pCe56yRIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/mkJ7nrJEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuayu+aEiCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5rK75oSIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnpZ7prZQiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+elnumtlCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6a2U5rOVIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/prZTms5UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueZvuWQiCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv55m+5ZCIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmjqjnkIYiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aOqOeQhiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56eR5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/np5HlubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuernuaKgCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv56ue5oqAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgqznlpEiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aCrOeWkSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6Z2S5pilIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/pnZLmmKUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaImOS6iSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5oiY5LqJIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLokJ3ojokiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+iQneiOiSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6a2U5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/prZTlubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaImOaWlyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5oiY5paXIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLml6XluLgiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aXpeW4uCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYXJlYSIsCiAgICAgICAgICAgICJuYW1lIjogIuWcsOWMuiIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLml6XmnKwiLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv5pel5pysLyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5aSn6ZmGIiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+S4reWbvS8iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuasp+e+jiIsCiAgICAgICAgICAgICAgICAidiI6ICIvYXJlYS/mrKfnvo4vIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpn6nlm70iLAogICAgICAgICAgICAgICAgInYiOiAiL2FyZWEv6Z+p5Zu9LyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5riv5Y+wIiwKICAgICAgICAgICAgICAgICJ2IjogIi9hcmVhL+a4r+WPsC8iCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku70iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEyIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTEiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA5IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDgiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNyIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA2IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDUiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwNCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAzIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDIiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAwMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwMSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDAxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDAwIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDAiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImxldHRlciIsCiAgICAgICAgICAgICJuYW1lIjogIuWtl+avjSIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlrZfmr40iLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJBIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvQSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiQiIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL0IiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkMiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9DIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJEIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvRCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiRSIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL0UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkYiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9GIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJHIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvRyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSCIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL0giCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkkiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9JIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJKIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvSiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiSyIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL0siCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkwiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9MIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJNIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvTSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTiIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL04iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIk8iLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9PIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJQIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvUCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiUSIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL1EiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlIiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9SIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJTIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvUyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVCIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL1QiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlUiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9VIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJWIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvViIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVyIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL1ciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlgiLAogICAgICAgICAgICAgICAgInYiOiAiL2xldHRlci9YIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJZIiwKICAgICAgICAgICAgICAgICJ2IjogIi9sZXR0ZXIvWSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiWiIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyL1oiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjAtOSIsCiAgICAgICAgICAgICAgICAidiI6ICIvbGV0dGVyLzAtOSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYnkiLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pe26Ze0IiwKICAgICAgICAgICAgICAgICJ2IjogIi9ieS90aW1lIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkurrmsJQiLAogICAgICAgICAgICAgICAgInYiOiAiL2J5L2hpdHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuivhOWIhiIsCiAgICAgICAgICAgICAgICAidiI6ICIvYnkvc2NvcmUiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0KICAgIH0sCiAgICBzZWFyY2hhYmxlOiAyLCAvL+aYr+WQpuWQr+eUqOWFqOWxgOaQnOe0oiwKICAgIGhlYWRlcnM6IHsgLy/nvZHnq5nnmoTor7fmsYLlpLQs5a6M5pW05pSv5oyB5omA5pyJ55qELOW4uOW4pnVh5ZKMY29va2llcwogICAgICAgICdVc2VyLUFnZW50JzogJ1BDX1VBJywKICAgIH0sCiAgICBjbGFzc19wYXJzZTogJyNuYXYgbGk7YSYmVGV4dDthJiZocmVmOy4qLyhcXHcrKS5odG1sJywKICAgIGNhdGVfZXhjbHVkZTogJ+eVque7hOS4k+mimHzmnIDov5Hmm7TmlrAnLAogICAgcGxheV9wYXJzZTogdHJ1ZSwKICAgIGxhenk6IGBqczoKCQl2YXIgaHRtbCA9IEpTT04ucGFyc2UocmVxdWVzdChpbnB1dCkubWF0Y2goL3IgcGxheWVyXy4qPz0oLio/KTwvKVsxXSk7CgkJdmFyIHVybCA9IGh0bWwudXJsOwoJCWlmIChodG1sLmVuY3J5cHQgPT0gJzEnKSB7CgkJCXVybCA9IHVuZXNjYXBlKHVybCkKCQl9IGVsc2UgaWYgKGh0bWwuZW5jcnlwdCA9PSAnMicpIHsKCQkJdXJsID0gdW5lc2NhcGUoYmFzZTY0RGVjb2RlKHVybCkpCgkJfQoJCWlmICgvXFwubTN1OHxcXC5tcDQvLnRlc3QodXJsKSkgewoJCQlpbnB1dCA9IHsKCQkJCWp4OiAwLAoJCQkJdXJsOiB1cmwsCgkJCQlwYXJzZTogMAoJCQl9CgkJfSBlbHNlIHsKCQkJaW5wdXQKCQl9CglgLAogICAgbGltaXQ6IDYsCiAgICDmjqjojZA6ICcqOyo7KjsudGV4dCYmVGV4dDsqJywKICAgIOS4gOe6pzogJy5pbWctbGlzdCBsaTthJiZ0aXRsZTtpbWcmJnNyYztpJiZUZXh0O2EmJmhyZWYnLAogICAg5LqM57qnOiB7CiAgICAgICAgInRpdGxlIjogImgxJiZUZXh0O2RsLmZuLWxlZnQ6ZXEoMykmJlRleHQiLAogICAgICAgICJpbWciOiAiLmRldGFpbC1waWMmJmltZyYmc3JjIiwKICAgICAgICAiZGVzYyI6ICJkbC5mbi1sZWZ0OmVxKDIpJiZUZXh0Ozs7Lm55emh1eS0tZHQmJlRleHQ7LmZuLXJpZ2h0OmVxKDApLS1kdCYmVGV4dCIsCiAgICAgICAgImNvbnRlbnQiOiAiLnRqdXFpbmcmJlRleHQiLAogICAgICAgICJ0YWJzIjogIi5kb3duLXRpdGxlIGgyIiwKICAgICAgICAibGlzdHMiOiAiLnZpZGVvX2xpc3Q6ZXEoI2lkKSBhIgogICAgfSwKICAgIHNlYXJjaFVybDogJy9pbmRleC5waHAvYWpheC9zdWdnZXN0P21pZD0xJndkPSoqJmxpbWl0PTUwJywKICAgIGRldGFpbFVybDogJy9kZXRhaWwvZnlpZC5odG1sJywgLy/pnZ7lv4Xloass5LqM57qn6K+m5oOF5ou85o6l6ZO+5o6lCiAgICDmkJzntKI6ICdqc29uOmxpc3Q7bmFtZTtwaWM7O2lkJywKfQ==
\ No newline at end of file
diff --git a/潇洒/js/全盘.js b/潇洒/js/QP.js
similarity index 66%
rename from 潇洒/js/全盘.js
rename to 潇洒/js/QP.js
index aefdd85..3509e7e 100644
--- a/潇洒/js/全盘.js
+++ b/潇洒/js/QP.js
@@ -10,7 +10,7 @@ var rule = {
url: 'https://so.yuneu.com/search?q=fyclass&format=video&page=fypage',
filter_url: '',
detailUrl: '',
- searchUrl: 'https://so.yuneu.com/search?q=**&format=video&exact=true&page=fypage',
+ searchUrl: 'https://so.yuneu.com/search?q=**&format=video&page=fypage',
searchable: 1,
quickSearch: 1,
filterable: 1,
@@ -25,7 +25,7 @@ var rule = {
limit: 9,
double: false,
// 推荐: '*',
- 一级: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'https://img0.baidu.com/it/u=2841223652,2325996620&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
+ 一级: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'https://img0.baidu.com/it/u=2841223652,2325996620&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
二级: {
title: 'h1&&Text',
img: 'img&&src',
@@ -34,7 +34,7 @@ var rule = {
tabs: "js:TABS = ['全盘搜']",
lists: "js:\n LISTS = [];\n let lists1 = pdfa(html, 'body&&.semi-space-loose-vertical').map(it => {\n let _tt = pdfh(it, 'span&&title');\n let _uu = pdfh(it, 'a&&href');\n return _tt + '$' + _uu;\n });\n LISTS.push(lists1);\n ",
},
- 搜索: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'https://img0.baidu.com/it/u=2841223652,2325996620&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
+ 搜索: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'https://img0.baidu.com/it/u=2841223652,2325996620&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
cate_exclude: '首页|留言|APP|下载|资讯|新闻|动态',
tab_exclude: '猜你|喜欢|下载|剧情|榜|评论',
类型: '影视',
diff --git a/潇洒/js/人人分享站.js b/潇洒/js/RR.js
similarity index 100%
rename from 潇洒/js/人人分享站.js
rename to 潇洒/js/RR.js
diff --git a/潇洒/js/人人电影网.js b/潇洒/js/RRDYW.js
similarity index 100%
rename from 潇洒/js/人人电影网.js
rename to 潇洒/js/RRDYW.js
diff --git a/潇洒/js/SX.js b/潇洒/js/SX.js
new file mode 100644
index 0000000..7d06c85
--- /dev/null
+++ b/潇洒/js/SX.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+WPjOWtkOaYnycsCiAgICBob3N0OiAnaHR0cHM6Ly8xLnN0YXIyLmNuJywKICAgIGhvc3RKczogJycsCiAgICBoZWFkZXJzOiB7CiAgICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDExOyBQaXhlbCA1KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvOTAuMC40NDMwLjkxIE1vYmlsZSBTYWZhcmkvNTM3LjM2JywKICAgIH0sCiAgICDnvJbnoIE6ICd1dGYtOCcsCiAgICB0aW1lb3V0OiA1MDAwLAogICAgdXJsOiAnaHR0cHM6Ly8xLnN0YXIyLmNuL2Z5Y2xhc3MvJywKICAgIGZpbHRlcl91cmw6ICcnLAogICAgZGV0YWlsVXJsOiAnJywKICAgIHNlYXJjaFVybDogJ2h0dHBzOi8vMS5zdGFyMi5jbi9zZWFyY2gvP2tleXdvcmQ9KionLAogICAgc2VhcmNoYWJsZTogMSwKICAgIHF1aWNrU2VhcmNoOiAxLAogICAgZmlsdGVyYWJsZTogMSwKICAgIGNsYXNzX25hbWU6ICfnn63liacm5Zu95YmnJue7vOiJuibnlLXlvbEm6Z+p5pelJuiLsee+jiblpJbliacm5Yqo5ryrJywKICAgIGNsYXNzX3VybDogJ2RqJmp1Jnp5Jm12JnJoJnltJndqJmRtJywKICAgIHByb3h5X3J1bGU6ICcnLAogICAgc25pZmZlcjogZmFsc2UsCiAgICBpc1ZpZGVvOiAnJywKICAgIHBsYXlfcGFyc2U6IHRydWUsCiAgICBwYXJzZV91cmw6ICcnLAogICAgbGF6eTogImpzOlxuICAgICAgICBpbnB1dCA9ICdwdXNoOi8vJyArIGlucHV0O1xuICAgICIsCiAgICBsaW1pdDogOSwKICAgIGRvdWJsZTogZmFsc2UsCiAgICDmjqjojZA6ICcqJywKICAgIOS4gOe6pzogJ2pzOlxuICAgICAgICBsZXQgaHRtbCA9IGZldGNoKGlucHV0KTtcbiAgICAgICAgbGV0IGxpc3QgPSBwZGZhKGh0bWwsICIuZXJ4LWxpc3QmJmxpIik7XG4gICAgICAgIFZPRFMgPSBsaXN0Lm1hcCh4ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdm9kX25hbWU6IHBkZmgoeCwgImEmJlRleHQiKSxcbiAgICAgICAgICAgICAgICB2b2RfcGljOiBcJ2h0dHBzOi8vZnMtaW0ta2VmdS43bW9vci1mczEuY29tL2x5LzRkMmMzZjAwLTdkNGMtMTFlNS1hZjE1LTQxYmY2M2FlNGVhMC8xNzQ2MjY5ODI3MTIwLzEuanBlZ1wnLFxuICAgICAgICAgICAgICAgIHZvZF9yZW1hcmtzOiBwZGZoKHgsICJhJiZUZXh0IiksXG4gICAgICAgICAgICAgICAgdm9kX2NvbnRlbnQ6IHBkZmgoeCwgImEmJlRleHQiKSxcbiAgICAgICAgICAgICAgICB2b2RfaWQ6IHBkZmgoeCwgImEmJmhyZWYiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAnLAogICAg5LqM57qnOiB7CiAgICAgICAgdGl0bGU6ICdoMSYmVGV4dCcsCiAgICAgICAgaW1nOiAnaHR0cHM6Ly9mcy1pbS1rZWZ1Ljdtb29yLWZzMS5jb20vbHkvNGQyYzNmMDAtN2Q0Yy0xMWU1LWFmMTUtNDFiZjYzYWU0ZWEwLzE3NDYyNjk4MjcxMjAvMS5qcGVnJywKICAgICAgICBkZXNjOiAnLmNhcmQtdGV4dDplcSgyKSYmVGV4dDs7OzsnLAogICAgICAgIGNvbnRlbnQ6ICcuY2FyZC10ZXh0OmVxKDApJiZUZXh0JywKICAgICAgICB0YWJzOiAianM6VEFCUyA9IFsn5Y+M5pifJ10iLAogICAgICAgIGxpc3RzOiAianM6XG4gICAgICAgICAgICBMSVNUUyA9IFtdO1xuICAgICAgICAgICAgbGV0IGxpc3RzMSA9IHBkZmEoaHRtbCwgJy5kbGlwcC1jb250LWJkJykubWFwKGl0ID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgX3R0ID0gcGRmaChpdCwgJ2EmJlRleHQnKTtcbiAgICAgICAgICAgICAgICBsZXQgX3V1ID0gcGRmaChpdCwgJ2EmJmhyZWYnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3R0ICsgJyQnICsgX3V1O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBMSVNUUy5wdXNoKGxpc3RzMSk7XG4gICAgICAgICIsCiAgICB9LAogICAg5pCc57SiOiAnanM6XG4gICAgICAgIGxldCBodG1sID0gZmV0Y2goaW5wdXQpO1xuICAgICAgICBsZXQgbGlzdCA9IHBkZmEoaHRtbCwgIi5lcngtbGlzdCYmbGkiKTtcbiAgICAgICAgVk9EUyA9IGxpc3QubWFwKHggPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2b2RfbmFtZTogcGRmaCh4LCAiYSYmVGV4dCIpLFxuICAgICAgICAgICAgICAgIHZvZF9waWM6IFwnaHR0cHM6Ly9mcy1pbS1rZWZ1Ljdtb29yLWZzMS5jb20vbHkvNGQyYzNmMDAtN2Q0Yy0xMWU1LWFmMTUtNDFiZjYzYWU0ZWEwLzE3NDYyNjk4MjcxMjAvMS5qcGVnXCcsIFxuICAgICAgICAgICAgICAgIHZvZF9yZW1hcmtzOiBwZGZoKHgsICJhJiZUZXh0IiksXG4gICAgICAgICAgICAgICAgdm9kX2NvbnRlbnQ6IHBkZmgoeCwgImEmJlRleHQiKSxcbiAgICAgICAgICAgICAgICB2b2RfaWQ6IHBkZmgoeCwgImEmJmhyZWYiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAnLAogICAgY2F0ZV9leGNsdWRlOiAn6aaW6aG1fOeVmeiogHxBUFB85LiL6L29fOi1hOiur3zmlrDpl7t85Yqo5oCBJywKICAgIHRhYl9leGNsdWRlOiAn54yc5L2gfOWWnOasonzkuIvovb185Ymn5oOFfOamnHzor4TorronLAogICAg57G75Z6LOiAn5b2x6KeGJywKICAgIGhvbWVVcmw6ICdodHRwczovLzEuc3RhcjIuY24nLAogICAg5LqM57qn6K6/6Zeu5YmNOiAnJywKICAgIGVuY29kaW5nOiAndXRmLTgnLAogICAgc2VhcmNoX2VuY29kaW5nOiAnJywKICAgIOWbvueJh+adpea6kDogJycsCiAgICDlm77niYfmm7/mjaI6ICcnLAogICAgcGxheV9qc29uOiBbXSwKICAgIHBhZ2Vjb3VudDoge30sCiAgICB0YWJfcmVtb3ZlOiBbXSwKICAgIHRhYl9vcmRlcjogW10sCiAgICB0YWJfcmVuYW1lOiB7fSwKfQ==
\ No newline at end of file
diff --git a/潇洒/js/TT.js b/潇洒/js/TT.js
new file mode 100644
index 0000000..167e5b9
--- /dev/null
+++ b/潇洒/js/TT.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+ebmOaQnOWkqeWggicsCiAgICBob3N0OiAnaHR0cHM6Ly9wYW5zb3R0LmNvbS8nLAogICAgaG9zdEpzOiAnJywKICAgIGhlYWRlcnM6IHsKICAgICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTE7IFBpeGVsIDUpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS85MC4wLjQ0MzAuOTEgTW9iaWxlIFNhZmFyaS81MzcuMzYnLAogICAgfSwKICAgIOe8lueggTogJ3V0Zi04JywKICAgIHRpbWVvdXQ6IDUwMDAsCiAgICB1cmw6ICdodHRwczovL3BhbnNvdHQuY29tL3NlYXJjaD9xPWZ5Y2xhc3MmZm9ybWF0PXZpZGVvJnBhZ2U9ZnlwYWdlJywKICAgIGZpbHRlcl91cmw6ICcnLAogICAgZGV0YWlsVXJsOiAnJywKICAgIHNlYXJjaFVybDogJ2h0dHBzOi8vcGFuc290dC5jb20vc2VhcmNoP3E9KiomZm9ybWF0PXZpZGVvJmV4YWN0PXRydWUmcGFnZT1meXBhZ2UnLAogICAgc2VhcmNoYWJsZTogMSwKICAgIHF1aWNrU2VhcmNoOiAxLAogICAgZmlsdGVyYWJsZTogMSwKICAgIGNsYXNzX25hbWU6ICfliafpm4Ym55S15b2xJuefreWJpybliqjmvKsm57u86Im6JywKICAgIGNsYXNzX3VybDogJ+WJp+mbhibnlLXlvbEm55+t572R5YmnJuWKqOa8qybnu7zoibonLAogICAgcHJveHlfcnVsZTogJycsCiAgICBzbmlmZmVyOiBmYWxzZSwKICAgIGlzVmlkZW86ICcnLAogICAgcGxheV9wYXJzZTogdHJ1ZSwKICAgIHBhcnNlX3VybDogJycsCiAgICBsYXp5OiAianM6XG4gICAgICAgIGlucHV0ID0gJ3B1c2g6Ly8nICsgaW5wdXQ7XG4gICAgIiwKICAgIGxpbWl0OiA5LAogICAgZG91YmxlOiBmYWxzZSwKICAgIC8vIOaOqOiNkDogJyonLAogICAg5LiA57qnOiAnanM6XG4gICAgICAgIGxldCBodG1sID0gZmV0Y2goaW5wdXQpO1xuICAgICAgICBsZXQgbGlzdCA9IHBkZmEoaHRtbCwgImJvZHkmJi5zZW1pLXNwYWNlLW1lZGl1bS12ZXJ0aWNhbCIpO1xuICAgICAgICBWT0RTID0gbGlzdC5tYXAoeCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVtYXJrcyA9IHBkZmgoeCwgImRpdiYmaW1nJiZhbHQiKTtcbiAgICAgICAgICAgIC8vIOi/h+a7pOaOieWMheWQqyLov4Xpm7fkupHnm5gi5oiWIjExNSLnmoTlhoXlrrlcbiAgICAgICAgICAgIGlmKHJlbWFya3MuaW5jbHVkZXMoIui/hembt+S6keebmCIpIHx8IHJlbWFya3MuaW5jbHVkZXMoIjExNSIpIHx8IHJlbWFya3MuaW5jbHVkZXMoIumYv+mHjCIpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdm9kX25hbWU6IHBkZmgoeCwgImRpdiYmYSYmdGl0bGUiKSxcbiAgICAgICAgICAgICAgICB2b2RfcGljOiBcJ1wnLFxuICAgICAgICAgICAgICAgIHZvZF9yZW1hcmtzOiByZW1hcmtzLFxuICAgICAgICAgICAgICAgIHZvZF9jb250ZW50OiByZW1hcmtzLFxuICAgICAgICAgICAgICAgIHZvZF9pZDogcGRmaCh4LCAiZGl2JiZhJiZocmVmIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuZmlsdGVyKHggPT4geCAhPT0gbnVsbCk7XG4gICAgJywKICAgIOS6jOe6pzogewogICAgICAgIHRpdGxlOiAnaDEmJlRleHQnLAogICAgICAgIGltZzogJ2ltZyYmc3JjJywKICAgICAgICBkZXNjOiAnLmNhcmQtdGV4dDplcSgyKSYmVGV4dDs7OzsnLAogICAgICAgIGNvbnRlbnQ6ICdib2R5JiYuc2VtaS1zcGFjZS1sb29zZS12ZXJ0aWNhbCYmYSYmaHJlZicsCiAgICAgICAgdGFiczogImpzOlRBQlMgPSBbJ+WkqeWggiddIiwKICAgICAgICBsaXN0czogImpzOlxuICAgICAgICAgICAgTElTVFMgPSBbXTtcbiAgICAgICAgICAgIGxldCBsaXN0czEgPSBwZGZhKGh0bWwsICdib2R5JiYuc2VtaS1zcGFjZS1sb29zZS12ZXJ0aWNhbCcpLm1hcChpdCA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IF90dCA9IHBkZmgoaXQsICdzcGFuJiZ0aXRsZScpO1xuICAgICAgICAgICAgICAgIGxldCBfdXUgPSBwZGZoKGl0LCAnYSYmaHJlZicpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfdHQgKyAnJCcgKyBfdXU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIExJU1RTLnB1c2gobGlzdHMxKTtcbiAgICAgICAgIiwKICAgIH0sCiAgICDmkJzntKI6ICdqczpcbiAgICAgICAgbGV0IGh0bWwgPSBmZXRjaChpbnB1dCk7XG4gICAgICAgIGxldCBsaXN0ID0gcGRmYShodG1sLCAiYm9keSYmLnNlbWktc3BhY2UtbWVkaXVtLXZlcnRpY2FsIik7XG4gICAgICAgIFZPRFMgPSBsaXN0Lm1hcCh4ID0+IHtcbiAgICAgICAgICAgIGxldCByZW1hcmtzID0gcGRmaCh4LCAiZGl2JiZpbWcmJmFsdCIpO1xuICAgICAgICAgICAgLy8g6L+H5ruk5o6J5YyF5ZCrIui/hembt+S6keebmCLmiJYiMTE1IueahOWGheWuuVxuICAgICAgICAgICAgaWYocmVtYXJrcy5pbmNsdWRlcygi6L+F6Zu35LqR55uYIikgfHwgcmVtYXJrcy5pbmNsdWRlcygiMTE1IikgfHwgcmVtYXJrcy5pbmNsdWRlcygi6Zi/6YeMIikpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2b2RfbmFtZTogcGRmaCh4LCAiZGl2JiZhJiZ0aXRsZSIpLFxuICAgICAgICAgICAgICAgIHZvZF9waWM6IFwnXCcsXG4gICAgICAgICAgICAgICAgdm9kX3JlbWFya3M6IHJlbWFya3MsXG4gICAgICAgICAgICAgICAgdm9kX2NvbnRlbnQ6IHJlbWFya3MsXG4gICAgICAgICAgICAgICAgdm9kX2lkOiBwZGZoKHgsICJkaXYmJmEmJmhyZWYiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KS5maWx0ZXIoeCA9PiB4ICE9PSBudWxsKTtcbiAgICAnLAogICAgY2F0ZV9leGNsdWRlOiAn6aaW6aG1fOeVmeiogHxBUFB85LiL6L29fOi1hOiur3zmlrDpl7t85Yqo5oCBJywKICAgIHRhYl9leGNsdWRlOiAn54yc5L2gfOWWnOasonzkuIvovb185Ymn5oOFfOamnHzor4TorronLAogICAg57G75Z6LOiAn5b2x6KeGJywKICAgIGhvbWVVcmw6ICdodHRwczovL3BhbnNvdHQuY29tLycsCiAgICDkuoznuqforr/pl67liY06ICcnLAogICAgZW5jb2Rpbmc6ICd1dGYtOCcsCiAgICBzZWFyY2hfZW5jb2Rpbmc6ICcnLAogICAg5Zu+54mH5p2l5rqQOiAnJywKICAgIOWbvueJh+abv+aNojogJycsCiAgICBwbGF5X2pzb246IFtdLAogICAgcGFnZWNvdW50OiB7fSwKICAgIHRhYl9yZW1vdmU6IFtdLAogICAgdGFiX29yZGVyOiBbXSwKICAgIHRhYl9yZW5hbWU6IHt9LAp9
\ No newline at end of file
diff --git a/潇洒/js/TXSP.js b/潇洒/js/TXSP.js
new file mode 100644
index 0000000..aaa6050
--- /dev/null
+++ b/潇洒/js/TXSP.js
@@ -0,0 +1 @@
+Z2xvYmFsVGhpcy52b2QxID0gZnVuY3Rpb24oaWRzKSB7CiAgICBsZXQgaHRtbDEgPSByZXF1ZXN0KCdodHRwczovL3BiYWNjZXNzLnZpZGVvLnFxLmNvbS90cnBjLnZpZGVvc2VhcmNoLm1vYmlsZV9zZWFyY2guTXVsdGlUZXJtaW5hbFNlYXJjaC9NYlNlYXJjaD92cGxhdGZvcm09MicsIHsKICAgICAgICBib2R5OiB7CiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjI1MDQyMjAxIiwKICAgICAgICAgICAgImNsaWVudFR5cGUiOiAxLAogICAgICAgICAgICAiZmlsdGVyVmFsdWUiOiAiIiwKICAgICAgICAgICAgInV1aWQiOiAiQjFFNTA4NDctRDI1Ri00QzRCLUJCQTAtMzZGMDA5MzQ4N0Y2IiwKICAgICAgICAgICAgInJldHJ5IjogMCwKICAgICAgICAgICAgInF1ZXJ5IjogaWRzLAogICAgICAgICAgICAicGFnZW51bSI6IDAsCiAgICAgICAgICAgICJpc1ByZWZldGNoIjogdHJ1ZSwKICAgICAgICAgICAgInBhZ2VzaXplIjogMzAsCiAgICAgICAgICAgICJxdWVyeUZyb20iOiAwLAogICAgICAgICAgICAic2VhcmNoRGF0YWtleSI6ICIiLAogICAgICAgICAgICAidHJhbnNJbmZvIjogIiIsCiAgICAgICAgICAgICJpc25lZWRRYyI6IHRydWUsCiAgICAgICAgICAgICJwcmVRaWQiOiAiIiwKICAgICAgICAgICAgImFkQ2xpZW50SW5mbyI6ICIiLAogICAgICAgICAgICAiZXh0cmFJbmZvIjogewogICAgICAgICAgICAgICAgImlzTmV3TWFya0xhYmVsIjogIjEiLAogICAgICAgICAgICAgICAgIm11bHRpX3Rlcm1pbmFsX3BjIjogIjEiLAogICAgICAgICAgICAgICAgInRoZW1lVHlwZSI6ICIxIiwKICAgICAgICAgICAgICAgICJzdWdSZWxhdGVkSWRzIjogInt9IiwKICAgICAgICAgICAgICAgICJhcHBWZXJzaW9uIjogIiIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvOTguMC40NzU4LjEzOSBTYWZhcmkvNTM3LjM2JywKICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgJ29yaWdpbic6ICdodHRwczovL3YucXEuY29tJywKICAgICAgICAgICAgJ3JlZmVyZXInOiAnaHR0cHM6Ly92LnFxLmNvbS8nCiAgICAgICAgfSwKICAgICAgICAnbWV0aG9kJzogJ1BPU1QnCiAgICB9LCB0cnVlKTsKICAgIHJldHVybiBodG1sMTsKfQp2YXIgcnVsZSA9IHsKICAgIHRpdGxlOiAn6IW+5LqR6am+6Zu+W+WumF0nLAogICAgaG9zdDogJ2h0dHBzOi8vdi4lNzElNzEuY29tJywKICAgIC8vIGhvbWVVcmw6ICcveC9idS9wYWdlc2hlZXQvbGlzdD9fYWxsPTEmYXBwZW5kPTEmY2hhbm5lbD1jaG9pY2UmbGlzdHBhZ2U9MSZvZmZzZXQ9MCZwYWdlc2l6ZT0yMSZpYXJlYT0tMSZzb3J0PTE4JywKICAgIGhvbWVVcmw6ICcveC9idS9wYWdlc2hlZXQvbGlzdD9fYWxsPTEmYXBwZW5kPTEmY2hhbm5lbD1jYXJ0b29uJmxpc3RwYWdlPTEmb2Zmc2V0PTAmcGFnZXNpemU9MjEmaWFyZWE9LTEmc29ydD0xOCcsCiAgICBkZXRhaWxVcmw6ICdodHRwczovL25vZGUudmlkZW8uJTcxJTcxLmNvbS94L2FwaS9mbG9hdF92aW5mbzI/Y2lkPWZ5aWQnLAogICAgc2VhcmNoVXJsOiAnL3gvc2VhcmNoLz9xPSoqJnN0YWc9ZnlwYWdlJywKICAgIHNlYXJjaFVybDogJ2h0dHBzOi8vcGJhY2Nlc3MudmlkZW8uJTcxJTcxLmNvbS90cnBjLnZpZGVvc2VhcmNoLnNtYXJ0Ym94U2VydmVyLkh0dHBSb3VudFJlY2FsbC9TbWFydGJveD9xdWVyeT0qKiZhcHBJRD0zMTcyJmFwcEtleT1sR2hGSVBlRDNIc085eEVwJnBhZ2VOdW09KGZ5cGFnZS0xKSZwYWdlU2l6ZT0xMCcsCiAgICBzZWFyY2hVcmw6ICcqKicsCiAgICBzZWFyY2hhYmxlOiAyLAogICAgZmlsdGVyYWJsZTogMSwKICAgIG11bHRpOiAxLAogICAgLy8gdXJsOicvY2hhbm5lbC9meWNsYXNzP2xpc3RwYWdlPWZ5cGFnZSZjaGFubmVsPWZ5Y2xhc3Mmc29ydD0xOCZfYWxsPTEnLAogICAgdXJsOiAnL3gvYnUvcGFnZXNoZWV0L2xpc3Q/X2FsbD0xJmFwcGVuZD0xJmNoYW5uZWw9ZnljbGFzcyZsaXN0cGFnZT0xJm9mZnNldD0oKGZ5cGFnZS0xKSoyMSkmcGFnZXNpemU9MjEmaWFyZWE9LTEnLAogICAgLy8gZmlsdGVyX3VybDogJ3NvcnQ9e3tmbC5zb3J0IG9yIDE4fX0meWVhcj17e2ZsLnllYXJ9fSZwYXk9e3tmbC5wYXl9fScsCiAgICAvLyBmaWx0ZXJfdXJsOiAnc29ydD17e2ZsLnNvcnQgb3IgNzV9fSZ5ZWFyPXt7ZmwueWVhcn19JnBheT17e2ZsLnBheX19JywKICAgIGZpbHRlcl91cmw6ICdzb3J0PXt7Zmwuc29ydCBvciA3NX19Jml5ZWFyPXt7ZmwuaXllYXJ9fSZ5ZWFyPXt7ZmwueWVhcn19Jml0eXBlPXt7ZmwudHlwZX19JmlmZWF0dXJlPXt7ZmwuZmVhdHVyZX19JmlhcmVhPXt7ZmwuYXJlYX19Jml0cmFpbGVyPXt7ZmwuaXRyYWlsZXJ9fSZnZW5kZXI9e3tmbC5zZXh9fScsCiAgICAvLyBmaWx0ZXI6ICdINHNJQUFBQUFBQUFBKzJVelVyRFFCQ0EzMlhPRVpMVUpyR3ZJajBzYWFEQk5pc3hCa0lKQ0czRmk0b2VwSWczRVFvaWVxaUgrdk0yM1pxK2hSdWFaTFo0Y2U5ejIvbG1kMmQyK05nUitIMGUrZ0YwRGtkd0ZHVFFnUk1lSjJCQXhJYVN3dnJxVm54Y3l6aGxnOVB0dHFqRUQyYy80NWNTeThEeUlEY2F2cjU3cS9sQnc4WFRkL0U2cWJuVDhNM3pURnljNzJSdEMvSnVtZCsyYzh3eTdLWjRueFNMNVo5dXhIUytHYytyODNzV1ZwMWVWdHRsNERsdWsxaDkzWXViV1pWd2R1cGxBWXV4b0ZndVZwK1AveTVvbS9aKy9ZeHlxZkFXOHBiS2JlUzJ5aTNrTy9lYnlFMkZ5MW5YWEJtN0REemtuc3BkNUs3S0hlU095dHZJMitYQXVnWWtLV2xEMm1ock0rUnBTQjhPbWFOdlRzcmlNRWd5Y29mYzBYYkhaM0hDZVVUdWtEdjY3dlREUVkvTUlYTzB6ZWx4bjVNNEpJNm1PUGt2Z3N3U0VwZ1BBQUE9JywKICAgIGZpbHRlcjogewogICAgICAgICJjaG9pY2UiOiBbewogICAgICAgICAgICAia2V5IjogInNvcnQiLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pyA54OtIiwKICAgICAgICAgICAgICAgICJ2IjogIjc1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDmlrAiLAogICAgICAgICAgICAgICAgInYiOiAiODMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWlveivhCIsCiAgICAgICAgICAgICAgICAidiI6ICI4MSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiaXllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku6MiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIi0xIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNSIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAidHYiOiBbewogICAgICAgICAgICAia2V5IjogInNvcnQiLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pyA54OtIiwKICAgICAgICAgICAgICAgICJ2IjogIjc1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDmlrAiLAogICAgICAgICAgICAgICAgInYiOiAiNzkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWlveivhCIsCiAgICAgICAgICAgICAgICAidiI6ICIxNiIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiZmVhdHVyZSIsCiAgICAgICAgICAgICJuYW1lIjogIuexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiLTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueIseaDhSIsCiAgICAgICAgICAgICAgICAidiI6ICIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlj6Too4UiLAogICAgICAgICAgICAgICAgInYiOiAiMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oKs55aRIiwKICAgICAgICAgICAgICAgICJ2IjogIjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumDveW4giIsCiAgICAgICAgICAgICAgICAidiI6ICI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlrrbluq0iLAogICAgICAgICAgICAgICAgInYiOiAiNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Zac5YmnIiwKICAgICAgICAgICAgICAgICJ2IjogIjYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS8oOWlhyIsCiAgICAgICAgICAgICAgICAidiI6ICI3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrabkvqAiLAogICAgICAgICAgICAgICAgInYiOiAiOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Yab5peFIiwKICAgICAgICAgICAgICAgICJ2IjogIjkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuadg+iwiyIsCiAgICAgICAgICAgICAgICAidiI6ICIxMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6Z2p5ZG9IiwKICAgICAgICAgICAgICAgICJ2IjogIjExIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnjrDlrp4iLAogICAgICAgICAgICAgICAgInYiOiAiMTMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumdkuaYpSIsCiAgICAgICAgICAgICAgICAidiI6ICIxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54yO5aWHIiwKICAgICAgICAgICAgICAgICJ2IjogIjE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAiMTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuernuaKgCIsCiAgICAgICAgICAgICAgICAidiI6ICIxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi546E5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIjE4IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJpeWVhciIsCiAgICAgICAgICAgICJuYW1lIjogIuW5tOS7oyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiLTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE1IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICJtb3ZpZSI6IFt7CiAgICAgICAgICAgICJrZXkiOiAic29ydCIsCiAgICAgICAgICAgICJuYW1lIjogIuaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDng60iLAogICAgICAgICAgICAgICAgInYiOiAiNzUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOaWsCIsCiAgICAgICAgICAgICAgICAidiI6ICI4MyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5aW96K+EIiwKICAgICAgICAgICAgICAgICJ2IjogIjgxIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJ0eXBlIiwKICAgICAgICAgICAgIm5hbWUiOiAi57G75Z6LIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICItMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54qv572qIiwKICAgICAgICAgICAgICAgICJ2IjogIjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWKseW/lyIsCiAgICAgICAgICAgICAgICAidiI6ICIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLllpzliaciLAogICAgICAgICAgICAgICAgInYiOiAiMTAwMDA0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLng63ooYAiLAogICAgICAgICAgICAgICAgInYiOiAiMTAwMDYxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgqznlpEiLAogICAgICAgICAgICAgICAgInYiOiAiMTAwMDA5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLniLHmg4UiLAogICAgICAgICAgICAgICAgInYiOiAiMTAwMDA1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAiMTAwMDEyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgZDmgJYiLAogICAgICAgICAgICAgICAgInYiOiAiMTAwMDEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliqjnlLsiLAogICAgICAgICAgICAgICAgInYiOiAiMTAwMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjkuokiLAogICAgICAgICAgICAgICAgInYiOiAiMTAwMDA2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlrrbluq0iLAogICAgICAgICAgICAgICAgInYiOiAiMTAwMDE3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliafmg4UiLAogICAgICAgICAgICAgICAgInYiOiAiMTAwMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpYflubsiLAogICAgICAgICAgICAgICAgInYiOiAiMTAwMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrabkvqAiLAogICAgICAgICAgICAgICAgInYiOiAiMTAwMDExIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLljoblj7IiLAogICAgICAgICAgICAgICAgInYiOiAiMTAwMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLogIHniYciLAogICAgICAgICAgICAgICAgInYiOiAiMTAwMDEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLopb/pg6giLAogICAgICAgICAgICAgICAgInYiOiAiMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6K6w5b2V54mHIiwKICAgICAgICAgICAgICAgICJ2IjogIjEwMDAyMCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAieWVhciIsCiAgICAgICAgICAgICJuYW1lIjogIuW5tOS7oyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiLTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE1IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICJ2YXJpZXR5IjogW3sKICAgICAgICAgICAgImtleSI6ICJzb3J0IiwKICAgICAgICAgICAgIm5hbWUiOiAi5o6S5bqPIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuacgOeDrSIsCiAgICAgICAgICAgICAgICAidiI6ICI3NSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5pawIiwKICAgICAgICAgICAgICAgICJ2IjogIjIzIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJpeWVhciIsCiAgICAgICAgICAgICJuYW1lIjogIuW5tOS7oyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiLTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE1IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICJjYXJ0b29uIjogW3sKICAgICAgICAgICAgImtleSI6ICJzb3J0IiwKICAgICAgICAgICAgIm5hbWUiOiAi5o6S5bqPIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuacgOeDrSIsCiAgICAgICAgICAgICAgICAidiI6ICI3NSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5pawIiwKICAgICAgICAgICAgICAgICJ2IjogIjgzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpb3or4QiLAogICAgICAgICAgICAgICAgInYiOiAiODEiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImFyZWEiLAogICAgICAgICAgICAibmFtZSI6ICLlnLDljLoiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIi0xIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhoXlnLAiLAogICAgICAgICAgICAgICAgInYiOiAiMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pel5pysIiwKICAgICAgICAgICAgICAgICJ2IjogIjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuasp+e+jiIsCiAgICAgICAgICAgICAgICAidiI6ICIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhbbku5YiLAogICAgICAgICAgICAgICAgInYiOiAiNCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAidHlwZSIsCiAgICAgICAgICAgICJuYW1lIjogIuexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiLTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueOhOW5uyIsCiAgICAgICAgICAgICAgICAidiI6ICI5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAiNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5q2m5L6gIiwKICAgICAgICAgICAgICAgICJ2IjogIjEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpLpmakiLAogICAgICAgICAgICAgICAgInYiOiAiMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oiY5paXIiwKICAgICAgICAgICAgICAgICJ2IjogIjUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaQnueskSIsCiAgICAgICAgICAgICAgICAidiI6ICIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgYvniLEiLAogICAgICAgICAgICAgICAgInYiOiAiNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6a2U5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIjYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuernuaKgCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oKs55aRIiwKICAgICAgICAgICAgICAgICJ2IjogIjE3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLml6XluLgiLAogICAgICAgICAgICAgICAgInYiOiAiMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuagoeWbrSIsCiAgICAgICAgICAgICAgICAidiI6ICIxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi55yf5Lq6IiwKICAgICAgICAgICAgICAgICJ2IjogIjE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmjqjnkIYiLAogICAgICAgICAgICAgICAgInYiOiAiMTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWOhuWPsiIsCiAgICAgICAgICAgICAgICAidiI6ICIxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi57uP5YW4IiwKICAgICAgICAgICAgICAgICJ2IjogIjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWFtuS7liIsCiAgICAgICAgICAgICAgICAidiI6ICIxMiIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiaXllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku6MiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIi0xIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNSIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiY2hpbGQiOiBbewogICAgICAgICAgICAia2V5IjogInNvcnQiLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pyA54OtIiwKICAgICAgICAgICAgICAgICJ2IjogIjc1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDmlrAiLAogICAgICAgICAgICAgICAgInYiOiAiNzYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWlveivhCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAic2V4IiwKICAgICAgICAgICAgIm5hbWUiOiAi5oCn5YirIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICItMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5aWz5a2pIiwKICAgICAgICAgICAgICAgICJ2IjogIjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueUt+WtqSIsCiAgICAgICAgICAgICAgICAidiI6ICIyIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJhcmVhIiwKICAgICAgICAgICAgIm5hbWUiOiAi5Zyw5Yy6IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICItMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YaF5ZywIiwKICAgICAgICAgICAgICAgICJ2IjogIjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaXpeacrCIsCiAgICAgICAgICAgICAgICAidiI6ICIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhbbku5YiLAogICAgICAgICAgICAgICAgInYiOiAiMSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiaXllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTpvoTmrrUiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIi0xIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIwLTPlsoEiLAogICAgICAgICAgICAgICAgInYiOiAiMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiNC025bKBIiwKICAgICAgICAgICAgICAgICJ2IjogIjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjctOeWygSIsCiAgICAgICAgICAgICAgICAidiI6ICIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIxMOWygeS7peS4iiIsCiAgICAgICAgICAgICAgICAidiI6ICI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhajlubTpvoTmrrUiLAogICAgICAgICAgICAgICAgInYiOiAiNyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiZG9jbyI6IFt7CiAgICAgICAgICAgICJrZXkiOiAic29ydCIsCiAgICAgICAgICAgICJuYW1lIjogIuaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDng60iLAogICAgICAgICAgICAgICAgInYiOiAiNzUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOaWsCIsCiAgICAgICAgICAgICAgICAidiI6ICI3NCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiaXRyYWlsZXIiLAogICAgICAgICAgICAibmFtZSI6ICLlh7rlk4HmlrkiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIi0xIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJCQkMiLAogICAgICAgICAgICAgICAgInYiOiAiMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Zu95a625Zyw55CGIiwKICAgICAgICAgICAgICAgICJ2IjogIjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkhCTyIsCiAgICAgICAgICAgICAgICAidiI6ICIzMTc1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJOSEsiLAogICAgICAgICAgICAgICAgInYiOiAiMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Y6G5Y+y6aKR6YGTIiwKICAgICAgICAgICAgICAgICJ2IjogIjciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIklUViIsCiAgICAgICAgICAgICAgICAidiI6ICIzNTMwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmjqLntKLpopHpgZMiLAogICAgICAgICAgICAgICAgInYiOiAiMzE3NCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiWkRGIiwKICAgICAgICAgICAgICAgICJ2IjogIjMxNzYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiFvuiur+iHquWItiIsCiAgICAgICAgICAgICAgICAidiI6ICIxNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5ZCI5L2c5py65p6EIiwKICAgICAgICAgICAgICAgICJ2IjogIjYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWFtuS7liIsCiAgICAgICAgICAgICAgICAidiI6ICI1IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJ0eXBlIiwKICAgICAgICAgICAgIm5hbWUiOiAi57G75Z6LIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICItMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6Ieq54S2IiwKICAgICAgICAgICAgICAgICJ2IjogIjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIue+jumjnyIsCiAgICAgICAgICAgICAgICAidiI6ICIxMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56S+5LyaIiwKICAgICAgICAgICAgICAgICJ2IjogIjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS6uuaWhyIsCiAgICAgICAgICAgICAgICAidiI6ICI2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLljoblj7IiLAogICAgICAgICAgICAgICAgInYiOiAiMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Yab5LqLIiwKICAgICAgICAgICAgICAgICJ2IjogIjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuenkeaKgCIsCiAgICAgICAgICAgICAgICAidiI6ICI4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLotKLnu48iLAogICAgICAgICAgICAgICAgInYiOiAiMTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaOoumZqSIsCiAgICAgICAgICAgICAgICAidiI6ICIxNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi572q5qGIIiwKICAgICAgICAgICAgICAgICJ2IjogIjciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuernuaKgCIsCiAgICAgICAgICAgICAgICAidiI6ICIxMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5peF5ri4IiwKICAgICAgICAgICAgICAgICJ2IjogIjExIgogICAgICAgICAgICB9XQogICAgICAgIH1dCiAgICB9LAogICAgaGVhZGVyczogewogICAgICAgICdVc2VyLUFnZW50JzogJ1BDX1VBJwogICAgfSwKICAgIHRpbWVvdXQ6IDUwMDAsCiAgICAvLyBjbGFzc19wYXJzZTonLnNpdGVfY2hhbm5lbCBhO2EmJlRleHQ7YSYmaHJlZjtjaGFubmVsLyguKiknLAogICAgY2F0ZV9leGNsdWRlOiAn5Lya5ZGYfOa4uOaIj3zlhajpg6gnLAogICAgLy8gY2xhc3NfbmFtZTogJ+eyvumAiSbnlLXop4bliacm55S15b2xJue7vOiJuibliqjmvKsm5bCR5YS/Jue6quW9leeJhycsCiAgICAvLyBjbGFzc191cmw6ICdjaG9pY2UmdHYmbW92aWUmdmFyaWV0eSZjYXJ0b29uJmNoaWxkJmRvY28nLAogICAgY2xhc3NfbmFtZTogJ+eyvumAiSbnlLXlvbEm55S16KeG5YmnJue7vOiJuibliqjmvKsm5bCR5YS/Jue6quW9leeJhycsCiAgICBjbGFzc191cmw6ICdjaG9pY2UmbW92aWUmdHYmdmFyaWV0eSZjYXJ0b29uJmNoaWxkJmRvY28nLAogICAgbGltaXQ6IDIwLAogICAgLy8gcGxheV9wYXJzZTp0cnVlLAogICAgLy8g5omL5Yqo6LCD55So6Kej5p6Q6K+35rGCanNvbueahHVybCzmraRsYXp55LiN5pa55L6/CiAgICBwbGF5X3BhcnNlOiB0cnVlLAogICAgbGF6eTogJGpzLnRvU3RyaW5nKCgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgICBsZXQgYXBpID0gImh0dHA6Ly8xMjcuMC4wLjE6OTk3OC9wcm94eT9kbz1zZWFjaGRhbm11JmdvPWdldHVzZXJqeCZ1cmw9IiArIGlucHV0LnNwbGl0KCI/IilbMF07CiAgICAgICAgICAgIGNvbnNvbGUubG9nKGFwaSk7CiAgICAgICAgICAgIGxldCByZXNwb25zZSA9IGZldGNoKGFwaSwgewogICAgICAgICAgICAgICAgbWV0aG9kOiAnZ2V0JywKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdva2h0dHAvMy4xNC45JywKICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBsZXQgYmF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2UpOwogICAgICAgICAgICBsb2coYmF0YSkKICAgICAgICAgICAgaWYgKGJhdGEudXJsLmluY2x1ZGVzKCJodHRwIikpIHsKICAgICAgICAgICAgICAgIGlucHV0ID0gewogICAgICAgICAgICAgICAgICAgIGhlYWRlcjogewogICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICIiCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBwYXJzZTogMCwKICAgICAgICAgICAgICAgICAgICB1cmw6IGJhdGEudXJsLAogICAgICAgICAgICAgICAgICAgIGp4OiAwLAogICAgICAgICAgICAgICAgICAgIGRhbm1ha3U6ICdodHRwOi8vMTI3LjAuMC4xOjk5NzgvcHJveHk/ZG89ZGFubXUmc2l0ZT1qcyZ1cmw9aHR0cDovL2RtLnF4cTYuY29tL3p5L2FwaS5waHA/dXJsPScgKyBpbnB1dC5zcGxpdCgiPyIpWzBdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgICAgIGlucHV0ID0gewogICAgICAgICAgICAgICAgICAgIGhlYWRlcjogewogICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICIiCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBwYXJzZTogMCwKICAgICAgICAgICAgICAgICAgICB1cmw6IGlucHV0LnNwbGl0KCI/IilbMF0sCiAgICAgICAgICAgICAgICAgICAgang6IDEsCiAgICAgICAgICAgICAgICAgICAgZGFubWFrdTogJ2h0dHA6Ly8xMjcuMC4wLjE6OTk3OC9wcm94eT9kbz1kYW5tdSZzaXRlPWpzJnVybD1odHRwOi8vZG0ucXhxNi5jb20venkvYXBpLnBocD91cmw9JyArIGlucHV0LnNwbGl0KCI/IilbMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgaW5wdXQgPSB7CiAgICAgICAgICAgICAgICBoZWFkZXI6IHsKICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcGFyc2U6IDAsCiAgICAgICAgICAgICAgICB1cmw6IGlucHV0LnNwbGl0KCI/IilbMF0sCiAgICAgICAgICAgICAgICBqeDogMSwKICAgICAgICAgICAgICAgIGRhbm1ha3U6ICdodHRwOi8vMTI3LjAuMC4xOjk5NzgvcHJveHk/ZG89ZGFubXUmc2l0ZT1qcyZ1cmw9aHR0cDovL2RtLnF4cTYuY29tL3p5L2FwaS5waHA/dXJsPScgKyBpbnB1dC5zcGxpdCgiPyIpWzBdCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfSksCiAgICDmjqjojZA6ICcubGlzdF9pdGVtO2ltZyYmYWx0O2ltZyYmc3JjO2EmJlRleHQ7YSYmZGF0YS1mbG9hdCcsCiAgICDkuIDnuqc6ICcubGlzdF9pdGVtO2ltZyYmYWx0O2ltZyYmc3JjO2EmJlRleHQ7YSYmZGF0YS1mbG9hdCcsCiAgICDkuoznuqc6ICRqcy50b1N0cmluZygoKSA9PiB7CiAgICAgICAgVk9EID0ge307CiAgICAgICAgbGV0IGQgPSBbXTsKICAgICAgICBsZXQgdmlkZW9fbGlzdCA9IFtdOwogICAgICAgIGxldCB2aWRlb19saXN0cyA9IFtdOwogICAgICAgIGxldCBsaXN0ID0gW107CiAgICAgICAgbGV0IFFaT3V0cHV0SnNvbjsKICAgICAgICBsZXQgaHRtbCA9IGZldGNoKGlucHV0LCBmZXRjaF9wYXJhbXMpOwogICAgICAgIGxldCBzb3VyY2VJZCA9IC9nZXRfcGxheXNvdXJjZS8udGVzdChpbnB1dCkgPyBpbnB1dC5tYXRjaCgvaWQ9KFxkKj8pJi8pWzFdIDogaW5wdXQuc3BsaXQoImNpZD0iKVsxXTsKICAgICAgICBsZXQgY2lkID0gc291cmNlSWQ7CiAgICAgICAgbGV0IGRldGFpbFVybCA9ICJodHRwczovL3YuJTcxJTcxLmNvbS9kZXRhaWwvbS8iICsgY2lkICsgIi5odG1sIjsKICAgICAgICBsb2coIuivpuaDhemhtToiICsgZGV0YWlsVXJsKTsKICAgICAgICBwZGZoID0ganNwLnBkZmg7CiAgICAgICAgcGQgPSBqc3AucGQ7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGh0bWwpOwogICAgICAgICAgICBWT0QgPSB7CiAgICAgICAgICAgICAgICB2b2RfdXJsOiBpbnB1dCwKICAgICAgICAgICAgICAgIHZvZF9uYW1lOiBqc29uLmMudGl0bGUsCiAgICAgICAgICAgICAgICB0eXBlX25hbWU6IGpzb24udHlwLmpvaW4oIiwiKSwKICAgICAgICAgICAgICAgIHZvZF9hY3RvcjoganNvbi5uYW0uam9pbigiLCIpLAogICAgICAgICAgICAgICAgdm9kX3llYXI6IGpzb24uYy55ZWFyLAogICAgICAgICAgICAgICAgdm9kX2NvbnRlbnQ6IGpzb24uYy5kZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgIHZvZF9yZW1hcmtzOiBqc29uLnJlYywKICAgICAgICAgICAgICAgIHZvZF9waWM6IHVybGpvaW4yKGlucHV0LCBqc29uLmMucGljKQogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICBsb2coIuino+aekOeJh+WQjea1t+aKpeetieWfuuehgOS/oeaBr+WPkeeUn+mUmeivrzoiICsgZS5tZXNzYWdlKQogICAgICAgIH0KICAgICAgICBpZiAoL2dldF9wbGF5c291cmNlLy50ZXN0KGlucHV0KSkgewogICAgICAgICAgICBldmFsKGh0bWwpOwogICAgICAgICAgICBsZXQgaW5kZXhMaXN0ID0gUVpPdXRwdXRKc29uLlBsYXlsaXN0SXRlbS5pbmRleExpc3Q7CiAgICAgICAgICAgIGluZGV4TGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGl0KSB7CiAgICAgICAgICAgICAgICBsZXQgZGF0YVVybCA9ICJodHRwczovL3MudmlkZW8ucXEuY29tL2dldF9wbGF5c291cmNlP2lkPSIgKyBzb3VyY2VJZCArICImcGxhdD0yJnR5cGU9NCZkYXRhX3R5cGU9MyZyYW5nZT0iICsgaXQgKyAiJnZpZGVvX3R5cGU9MTAmcGxuYW1lPXFxJm90eXBlPWpzb24iOwogICAgICAgICAgICAgICAgZXZhbChmZXRjaChkYXRhVXJsLCBmZXRjaF9wYXJhbXMpKTsKICAgICAgICAgICAgICAgIGxldCB2ZGF0YSA9IFFaT3V0cHV0SnNvbi5QbGF5bGlzdEl0ZW0udmlkZW9QbGF5TGlzdDsKICAgICAgICAgICAgICAgIHZkYXRhLmZvckVhY2goZnVuY3Rpb24oaXRlbSkgewogICAgICAgICAgICAgICAgICAgIGQucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpdGVtLnBpYywKICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogaXRlbS5lcGlzb2RlX251bWJlciArICJcdFx0XHTmkq3mlL7ph4/vvJoiICsgaXRlbS50aGlyZExpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXRlbS5wbGF5VXJsCiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgdmlkZW9fbGlzdHMgPSB2aWRlb19saXN0cy5jb25jYXQodmRhdGEpCiAgICAgICAgICAgIH0pCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGh0bWwpOwogICAgICAgICAgICB2aWRlb19saXN0cyA9IGpzb24uYy52aWRlb19pZHM7CiAgICAgICAgICAgIGxldCB1cmwgPSAiaHR0cHM6Ly92LnFxLmNvbS94L2NvdmVyLyIgKyBzb3VyY2VJZCArICIuaHRtbCI7CiAgICAgICAgICAgIGlmICh2aWRlb19saXN0cy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgICAgIGxldCB2aWQgPSB2aWRlb19saXN0c1swXTsKICAgICAgICAgICAgICAgIHVybCA9ICJodHRwczovL3YucXEuY29tL3gvY292ZXIvIiArIGNpZCArICIvIiArIHZpZCArICIuaHRtbCI7CiAgICAgICAgICAgICAgICBkLnB1c2goewogICAgICAgICAgICAgICAgICAgIHRpdGxlOiAi5Zyo57q/5pKt5pS+IiwKICAgICAgICAgICAgICAgICAgICB1cmw6IHVybAogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfSBlbHNlIGlmICh2aWRlb19saXN0cy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZpZGVvX2xpc3RzLmxlbmd0aDsgaSArPSAzMCkgewogICAgICAgICAgICAgICAgICAgIHZpZGVvX2xpc3QucHVzaCh2aWRlb19saXN0cy5zbGljZShpLCBpICsgMzApKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmlkZW9fbGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGl0LCBpZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IG9fdXJsID0gImh0dHBzOi8vdW5pb24udmlkZW8ucXEuY29tL2ZjZ2ktYmluL2RhdGE/b3R5cGU9anNvbiZ0aWQ9MTgwNCZhcHBpZD0yMDAwMTIzOCZhcHBrZXk9NmMwM2JiZTk2NTg0NDhhNCZ1bmlvbl9wbGF0Zm9ybT0xJmlkbGlzdD0iICsgaXQuam9pbigiLCIpOwogICAgICAgICAgICAgICAgICAgIGxldCBvX2h0bWwgPSBmZXRjaChvX3VybCwgZmV0Y2hfcGFyYW1zKTsKICAgICAgICAgICAgICAgICAgICBldmFsKG9faHRtbCk7CiAgICAgICAgICAgICAgICAgICAgUVpPdXRwdXRKc29uLnJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbihpdDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaXQxID0gaXQxLmZpZWxkczsKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9ICJodHRwczovL3YucXEuY29tL3gvY292ZXIvIiArIGNpZCArICIvIiArIGl0MS52aWQgKyAiLmh0bWwiOwogICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0MS50aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGl0MS5waWMxNjB4OTAucmVwbGFjZSgiLzE2MCIsICIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGl0MS52aWRlb19jaGVja3VwX3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGl0MS5jYXRlZ29yeV9tYXAgJiYgaXQxLmNhdGVnb3J5X21hcC5sZW5ndGggPiAxID8gaXQxLmNhdGVnb3J5X21hcFsxXSA6ICIiCiAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGV0IHlnID0gZC5maWx0ZXIoZnVuY3Rpb24oaXQpIHsKICAgICAgICAgICAgcmV0dXJuIGl0LnR5cGUgJiYgaXQudHlwZSAhPT0gIuato+eJhyIKICAgICAgICB9KTsKICAgICAgICBsZXQgenAgPSBkLmZpbHRlcihmdW5jdGlvbihpdCkgewogICAgICAgICAgICByZXR1cm4gIShpdC50eXBlICYmIGl0LnR5cGUgIT09ICLmraPniYciKQogICAgICAgIH0pOwogICAgICAgIFZPRC52b2RfcGxheV9mcm9tID0geWcubGVuZ3RoIDwgMSA/ICJxcSIgOiAicXEkJCRxcSDpooTlkYrlj4roirHnta4iOwogICAgICAgIFZPRC52b2RfcGxheV91cmwgPSB5Zy5sZW5ndGggPCAxID8gZC5tYXAoZnVuY3Rpb24oaXQpIHsKICAgICAgICAgICAgcmV0dXJuIGl0LnRpdGxlICsgIiQiICsgaXQudXJsCiAgICAgICAgfSkuam9pbigiIyIpIDogW3pwLCB5Z10ubWFwKGZ1bmN0aW9uKGl0KSB7CiAgICAgICAgICAgIHJldHVybiBpdC5tYXAoZnVuY3Rpb24oaXRzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaXRzLnRpdGxlICsgIiQiICsgaXRzLnVybAogICAgICAgICAgICB9KS5qb2luKCIjIikKICAgICAgICB9KS5qb2luKCIkJCQiKTsKICAgIH0pLAogICAg5pCc57SiOiAkanMudG9TdHJpbmcoKCkgPT4gewogICAgICAgIGxldCBkID0gW107CiAgICAgICAgcGRmYSA9IGpzcC5wZGZhOwogICAgICAgIHBkZmggPSBqc3AucGRmaDsKICAgICAgICBwZCA9IGpzcC5wZDsKICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoaW5wdXQpOwogICAgICAgIGxldCBiYXNlTGlzdCA9IHBkZmEoaHRtbCwgImJvZHkmJi5yZXN1bHRfaXRlbV92Iik7CiAgICAgICAgbG9nKGJhc2VMaXN0Lmxlbmd0aCk7CiAgICAgICAgYmFzZUxpc3QuZm9yRWFjaChmdW5jdGlvbihpdCkgewogICAgICAgICAgICBsZXQgbG9uZ1RleHQgPSBwZGZoKGl0LCAiLnJlc3VsdF90aXRsZSYmYSYmVGV4dCIpOwogICAgICAgICAgICBsZXQgc2hvcnRUZXh0ID0gcGRmaChpdCwgIi50eXBlJiZUZXh0Iik7CiAgICAgICAgICAgIGxldCBmcm9tVGFnID0gcGRmaChpdCwgIi5yZXN1bHRfc291cmNlJiZUZXh0Iik7CiAgICAgICAgICAgIGxldCBzY29yZSA9IHBkZmgoaXQsICIuZmlndXJlX2luZm8mJlRleHQiKTsKICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBwZGZoKGl0LCAiLmRlc2NfdGV4dCYmVGV4dCIpOwogICAgICAgICAgICAvLyBsZXQgdXJsID0gcGRmaChpdCwgIi5yZXN1bHRfdGl0bGUmJmEmJmhyZWYiKTsKICAgICAgICAgICAgbGV0IHVybCA9IHBkZmgoaXQsICJkaXYmJnItZGF0YSIpOwogICAgICAgICAgICAvLyBsb2cobG9uZ1RleHQpOwogICAgICAgICAgICAvLyBsb2coc2hvcnRUZXh0KTsKICAgICAgICAgICAgLy8gbG9nKCd1cmw6Jyt1cmwpOwogICAgICAgICAgICBsZXQgaW1nID0gcGQoaXQsICIuZmlndXJlX3BpYyYmc3JjIik7CiAgICAgICAgICAgIHVybCA9ICJodHRwczovL25vZGUudmlkZW8ucXEuY29tL3gvYXBpL2Zsb2F0X3ZpbmZvMj9jaWQ9IiArIHVybC5tYXRjaCgvLipcLyguKj8pXC5odG1sLylbMV07CiAgICAgICAgICAgIGxvZyhzaG9ydFRleHQgKyAifCIgKyB1cmwpOwogICAgICAgICAgICBpZiAoZnJvbVRhZy5tYXRjaCgv6IW+6K6vLykpIHsKICAgICAgICAgICAgICAgIGQucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxvbmdUZXh0LnNwbGl0KHNob3J0VGV4dClbMF0sCiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsCiAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsCiAgICAgICAgICAgICAgICAgICAgY29udGVudDogY29udGVudCwKICAgICAgICAgICAgICAgICAgICBkZXNjOiBzaG9ydFRleHQgKyAiICIgKyBzY29yZQogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHNldFJlc3VsdChkKTsKICAgIH0pLAogICAg5pCc57SiOiAkanMudG9TdHJpbmcoKCkgPT4gewogICAgICAgIGxldCBkID0gW107CiAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGlucHV0KTsKICAgICAgICBsZXQganNvbiA9IEpTT04ucGFyc2UoaHRtbCk7CiAgICAgICAgaWYgKGpzb24uZGF0YS5zbWFydGJveEl0ZW1MaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgbGV0IGNpZCA9IGpzb24uZGF0YS5zbWFydGJveEl0ZW1MaXN0WzBdLmJhc2ljRG9jLmlkOwogICAgICAgICAgICBsZXQgdXJsID0gJ2h0dHBzOi8vbm9kZS52aWRlby5xcS5jb20veC9hcGkvZmxvYXRfdmluZm8yP2NpZD0nICsgY2lkOwogICAgICAgICAgICBsZXQgaHRtbDEgPSByZXF1ZXN0KHVybCk7CiAgICAgICAgICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShodG1sMSk7CgogICAgICAgICAgICBkLnB1c2goewogICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEuYy50aXRsZSwKICAgICAgICAgICAgICAgIGltZzogZGF0YS5jLnBpYywKICAgICAgICAgICAgICAgIHVybDogdXJsLAogICAgICAgICAgICAgICAgY29udGVudDogZGF0YS5jLmRlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgZGVzYzogZGF0YS5yZWMKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHNldFJlc3VsdChkKTsKICAgIH0pLAogICAg5pCc57SiOiAkanMudG9TdHJpbmcoKCkgPT4gewogICAgICAgIGxldCBkID0gW107CiAgICAgICAgbGV0IG1hbWUgPSAoaW5wdXQuc3BsaXQoIi8iKVszXSk7CiAgICAgICAgbGV0IGh0bWwgPSB2b2QxKGlucHV0LnNwbGl0KCIvIilbM10pOwogICAgICAgIGxldCBqc29uID0gSlNPTi5wYXJzZShodG1sKTsKCiAgICAgICAgbGV0IGxpc3QgPSBqc29uLmRhdGEubm9ybWFsTGlzdC5pdGVtTGlzdDsKICAgICAgICBjb25zb2xlLmxvZyhqc29uKTsKICAgICAgICBsb2cobGlzdFswXS52aWRlb0luZm8udGl0bGUpOwogICAgICAgIGxpc3QuZm9yRWFjaChmdW5jdGlvbihpdCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgaWYgKGl0LmRvYy5pZC5sZW5ndGggPiAxMSkgewogICAgICAgICAgICAgICAgICAgIGQucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdC52aWRlb0luZm8udGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaXQudmlkZW9JbmZvLmltZ1VybCwKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC5kb2MuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRlbnQ6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAvL2Rlc2M6ICJkYXRhLnJlYyIKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCB7CgogICAgICAgICAgICB9CgogICAgICAgIH0pOwogICAgICAgIGxldCBsaXN0MiA9IGpzb24uZGF0YS5hcmVhQm94TGlzdFswXS5pdGVtTGlzdDsKICAgICAgICBsaXN0Mi5mb3JFYWNoKGZ1bmN0aW9uKGl0KSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBpZiAoaXQuZG9jLmlkLmxlbmd0aCA+IDExICYmIGl0LnZpZGVvSW5mby50aXRsZS5tYXRjaChtYW1lKSkgewogICAgICAgICAgICAgICAgICAgIGQucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdC52aWRlb0luZm8udGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaXQudmlkZW9JbmZvLmltZ1VybCwKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC5kb2MuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRlbnQ6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAvL2Rlc2M6ICJkYXRhLnJlYyIKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCB7CgogICAgICAgICAgICB9CgogICAgICAgIH0pOwogICAgICAgIHNldFJlc3VsdChkKTsKICAgIH0pCn0=
\ No newline at end of file
diff --git a/潇洒/js/校长.js b/潇洒/js/XZ.js
similarity index 99%
rename from 潇洒/js/校长.js
rename to 潇洒/js/XZ.js
index e5ceea9..c42e054 100644
--- a/潇洒/js/校长.js
+++ b/潇洒/js/XZ.js
@@ -1,6 +1,6 @@
var rule = {
title: '校长影视[云盘]',
- host: 'https://xzyshd.com',
+ host: 'https://xzys.fun',
homeUrl: '/',
url: '/fyclass.html?page=fypage',
filter_url: '{{fl.class}}',
diff --git a/潇洒/js/YKSP.js b/潇洒/js/YKSP.js
new file mode 100644
index 0000000..6a62137
--- /dev/null
+++ b/潇洒/js/YKSP.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+S8mOmFt1vlrphdJywKICAgIGhvc3Q6ICdodHRwczovL3d3dy4lNzklNmYlNzUlNmIlNzUuY29tJywKICAgIGhvbWVVcmw6ICcnLAogICAgc2VhcmNoVXJsOiAnaHR0cHM6Ly9zZWFyY2guJTc5JTZmJTc1JTZiJTc1LmNvbS9hcGkvc2VhcmNoP3BnPWZ5cGFnZSZrZXl3b3JkPSoqJywKICAgIHNlYXJjaGFibGU6IDIsCiAgICBxdWlja1NlYXJjaDogMCwKICAgIGZpbHRlcmFibGU6IDEsCiAgICBtdWx0aTogMSwKICAgIHVybDogJy9jYXRlZ29yeS9kYXRhP29wdGlvblJlZnJlc2g9MSZwYWdlTm89ZnlwYWdlJnBhcmFtcz1meWZpbHRlcicsCiAgICBmaWx0ZXJfdXJsOiAne3tmbH19JywKICAgIGZpbHRlcjogewogICAgICAgICLnlLXop4bliaciOiBbewogICAgICAgICAgICAia2V5IjogIm1haW5fYXJlYSIsCiAgICAgICAgICAgICJuYW1lIjogIuWFqOmDqOWcsOWMuiIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6jlnLDljLoiLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhoXlnLDliaciLAogICAgICAgICAgICAgICAgInYiOiAi5Lit5Zu95YaF5ZywIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmuK/liaciLAogICAgICAgICAgICAgICAgInYiOiAi5Lit5Zu96aaZ5rivIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlj7DliaciLAogICAgICAgICAgICAgICAgInYiOiAi5Lit5Zu95Y+w5rm+IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpn6nliaciLAogICAgICAgICAgICAgICAgInYiOiAi6Z+p5Zu9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnvo7liaciLAogICAgICAgICAgICAgICAgInYiOiAi576O5Zu9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLoi7HliaciLAogICAgICAgICAgICAgICAgInYiOiAi6Iux5Zu9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLml6XliaciLAogICAgICAgICAgICAgICAgInYiOiAi5pel5pysIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLms7DliaciLAogICAgICAgICAgICAgICAgInYiOiAi5rOw5Zu9IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJ0YWdzIiwKICAgICAgICAgICAgIm5hbWUiOiAi5YWo6YOo57G75Z6LIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqOexu+WeiyIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumdkuaYpSIsCiAgICAgICAgICAgICAgICAidiI6ICLpnZLmmKUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWPpOijhSIsCiAgICAgICAgICAgICAgICAidiI6ICLlj6Too4UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueIseaDhSIsCiAgICAgICAgICAgICAgICAidiI6ICLniLHmg4UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumDveW4giIsCiAgICAgICAgICAgICAgICAidiI6ICLpg73luIIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWWnOWJpyIsCiAgICAgICAgICAgICAgICAidiI6ICLllpzliacs5pCe56yRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjkuokiLAogICAgICAgICAgICAgICAgInYiOiAi5oiY5LqJIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpvml4UiLAogICAgICAgICAgICAgICAgInYiOiAi5Yab5peFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLosI3miJgiLAogICAgICAgICAgICAgICAgInYiOiAi6LCN5oiYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlgbblg48iLAogICAgICAgICAgICAgICAgInYiOiAi5YG25YOPIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLorabljKoiLAogICAgICAgICAgICAgICAgInYiOiAi6K2m5YyqIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpLpmakiLAogICAgICAgICAgICAgICAgInYiOiAi5YaS6ZmpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnqb/otooiLAogICAgICAgICAgICAgICAgInYiOiAi56m/6LaKIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLku5nkvqAiLAogICAgICAgICAgICAgICAgInYiOiAi5LuZ5L6gIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrabkvqAiLAogICAgICAgICAgICAgICAgInYiOiAi5q2m5L6gIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgqznlpEiLAogICAgICAgICAgICAgICAgInYiOiAi5oKs55aRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnvarmoYgiLAogICAgICAgICAgICAgICAgInYiOiAi572q5qGIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlrrbluq0iLAogICAgICAgICAgICAgICAgInYiOiAi5a625bqtIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLljoblj7IiLAogICAgICAgICAgICAgICAgInYiOiAi5Y6G5Y+yIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlubTku6MiLAogICAgICAgICAgICAgICAgInYiOiAi5bm05LujIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpzmnZEiLAogICAgICAgICAgICAgICAgInYiOiAi5Yac5p2RIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJ5ZWFyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5YWo6YOo5bm05Lu9IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqOW5tOS7vSIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE0LTIwMTEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMS0yMDE0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmm7Tml6kiLAogICAgICAgICAgICAgICAgInYiOiAiLTIwMTAiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInN0YXR1cyIsCiAgICAgICAgICAgICJuYW1lIjogIuWFqOmDqOinhOagvCIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6jop4TmoLwiLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhajnvZHni6zmkq0iLAogICAgICAgICAgICAgICAgInYiOiAiMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5LyY6YW36Ieq5Yi2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuW3suWujOe7kyIsCiAgICAgICAgICAgICAgICAidiI6ICIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLljbPlsIbkuIrnur8iLAogICAgICAgICAgICAgICAgInYiOiAiNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi55+t5YmnIiwKICAgICAgICAgICAgICAgICJ2IjogIjUiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInBheV90eXBlIiwKICAgICAgICAgICAgIm5hbWUiOiAi5LuY6LS557G75Z6LIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuS7mOi0ueexu+WeiyIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWFjei0uSIsCiAgICAgICAgICAgICAgICAidiI6ICIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJWSVAiLAogICAgICAgICAgICAgICAgInYiOiAiMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5LuY6LS5IiwKICAgICAgICAgICAgICAgICJ2IjogIjEiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInNvcnQiLAogICAgICAgICAgICAibmFtZSI6ICLnu7zlkIjmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi57u85ZCI5o6S5bqPIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54Ot5bqm5pyA6auYIiwKICAgICAgICAgICAgICAgICJ2IjogIjciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOaWsOS4iue6vyIsCiAgICAgICAgICAgICAgICAidiI6ICIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDlpb3or4QiLAogICAgICAgICAgICAgICAgInYiOiAiMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5aSa5pKt5pS+IiwKICAgICAgICAgICAgICAgICJ2IjogIjIiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIueUteW9sSI6IFt7CiAgICAgICAgICAgICJrZXkiOiAibWFpbl9hcmVhIiwKICAgICAgICAgICAgIm5hbWUiOiAi5YWo6YOo5Zyw5Yy6IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqOWcsOWMuiIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWGheWcsCIsCiAgICAgICAgICAgICAgICAidiI6ICLkuK3lm73lhoXlnLAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS4reWbvemmmea4ryIsCiAgICAgICAgICAgICAgICAidiI6ICLkuK3lm73pppnmuK8iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS4reWbveWPsOa5viIsCiAgICAgICAgICAgICAgICAidiI6ICLkuK3lm73lj7Dmub4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIue+juWbvSIsCiAgICAgICAgICAgICAgICAidiI6ICLnvo7lm70iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWNsOW6piIsCiAgICAgICAgICAgICAgICAidiI6ICLljbDluqYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaXpemfqSIsCiAgICAgICAgICAgICAgICAidiI6ICLpn6nlm70s5pel5pysIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLms7Dlm70iLAogICAgICAgICAgICAgICAgInYiOiAi5rOw5Zu9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrKfmtLIiLAogICAgICAgICAgICAgICAgInYiOiAi5qyn5rSyIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJ0YWdzIiwKICAgICAgICAgICAgIm5hbWUiOiAi5YWo6YOo57G75Z6LIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqOexu+WeiyIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWWnOWJpyIsCiAgICAgICAgICAgICAgICAidiI6ICLllpzliacs5pCe56yRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliqjkvZwiLAogICAgICAgICAgICAgICAgInYiOiAi5Yqo5L2cIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgKrlhb0iLAogICAgICAgICAgICAgICAgInYiOiAi5oCq5YW9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjkuokiLAogICAgICAgICAgICAgICAgInYiOiAi5oiY5LqJIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLniLHmg4UiLAogICAgICAgICAgICAgICAgInYiOiAi54ix5oOFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgqznlpEiLAogICAgICAgICAgICAgICAgInYiOiAi5oKs55aRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrabkvqAiLAogICAgICAgICAgICAgICAgInYiOiAi5q2m5L6gIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpYflubsiLAogICAgICAgICAgICAgICAgInYiOiAi5aWH5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAi56eR5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpLpmakiLAogICAgICAgICAgICAgICAgInYiOiAi5YaS6ZmpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLorabljKoiLAogICAgICAgICAgICAgICAgInYiOiAi6K2m5YyqIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliqjnlLsiLAogICAgICAgICAgICAgICAgInYiOiAi5Yqo55S7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmg4rmgpoiLAogICAgICAgICAgICAgICAgInYiOiAi5oOK5oKaIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLniq/nvaoiLAogICAgICAgICAgICAgICAgInYiOiAi54qv572qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgZDmgJYiLAogICAgICAgICAgICAgICAgInYiOiAi5oGQ5oCWIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliafmg4UiLAogICAgICAgICAgICAgICAgInYiOiAi5Ymn5oOFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLljoblj7IiLAogICAgICAgICAgICAgICAgInYiOiAi5Y6G5Y+yIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnuqrlvZXniYciLAogICAgICAgICAgICAgICAgInYiOiAi57qq5b2V54mHIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkvKDorrAiLAogICAgICAgICAgICAgICAgInYiOiAi5Lyg6K6wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrYzoiJ4iLAogICAgICAgICAgICAgICAgInYiOiAi5q2M6IieIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnn63niYciLAogICAgICAgICAgICAgICAgInYiOiAi55+t54mHIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhbbku5YiLAogICAgICAgICAgICAgICAgInYiOiAi5YW25LuWIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJzb3VyY2UiLAogICAgICAgICAgICAibmFtZSI6ICLlhajpg6jop4TmoLwiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOo6KeE5qC8IiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6Zmi57q/IiwKICAgICAgICAgICAgICAgICJ2IjogIjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIue9kee7nOeUteW9sSIsCiAgICAgICAgICAgICAgICAidiI6ICIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLni6zmkq0iLAogICAgICAgICAgICAgICAgInYiOiAiMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6auY5riF5L+u5aSNIiwKICAgICAgICAgICAgICAgICJ2IjogIjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjEwODBQIiwKICAgICAgICAgICAgICAgICJ2IjogIjQiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlhajpg6jlubTku70iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOo5bm05Lu9IiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQtMjAxMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEwLTIwMTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMDktMjAwMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDAwLTIwMDkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjkw5bm05LujIiwKICAgICAgICAgICAgICAgICJ2IjogIjE5OTAtMTk5OSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiODDlubTku6MiLAogICAgICAgICAgICAgICAgInYiOiAiMTk4MC0xOTg5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICI3MOW5tOS7oyIsCiAgICAgICAgICAgICAgICAidiI6ICIxOTcwLTE5NzkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuabtOaXqSIsCiAgICAgICAgICAgICAgICAidiI6ICItMTk2OSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAicGF5X3R5cGUiLAogICAgICAgICAgICAibmFtZSI6ICLku5jotLnnsbvlnosiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5LuY6LS557G75Z6LIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YWN6LS5IiwKICAgICAgICAgICAgICAgICJ2IjogIjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS8muWRmCIsCiAgICAgICAgICAgICAgICAidiI6ICIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLngrnmkq0iLAogICAgICAgICAgICAgICAgInYiOiAiMSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAic29ydCIsCiAgICAgICAgICAgICJuYW1lIjogIue7vOWQiOaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLnu7zlkIjmjpLluo8iLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLng63luqbmnIDpq5giLAogICAgICAgICAgICAgICAgInYiOiAiNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5aSa5pKt5pS+IiwKICAgICAgICAgICAgICAgICJ2IjogIjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOaWsOS4iue6vyIsCiAgICAgICAgICAgICAgICAidiI6ICIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDlpb3or4QiLAogICAgICAgICAgICAgICAgInYiOiAiMyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAidGFnX2xhYmVsX25hbWUiLAogICAgICAgICAgICAibmFtZSI6ICLkuLrkvaDmjqjojZAiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5Li65L2g5o6o6I2QIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6auY5YiG5b+F55yLIiwKICAgICAgICAgICAgICAgICJ2IjogIumrmOWIhuW/heeciyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Y2W5bqn55S15b2xIiwKICAgICAgICAgICAgICAgICJ2IjogIuWNluW6p+eUteW9sSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5bCP6K+05pS557yWIiwKICAgICAgICAgICAgICAgICJ2IjogIuWwj+ivtOaUuee8liIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6ZOB6KGA56Gs5rGJIiwKICAgICAgICAgICAgICAgICJ2IjogIumTgeihgOehrOaxiSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6KeG5pWI5aSn54mHIiwKICAgICAgICAgICAgICAgICJ2IjogIuinhuaViOWkp+eJhyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5ryr55S75pS557yWIiwKICAgICAgICAgICAgICAgICJ2IjogIua8q+eUu+aUuee8liIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi57ud5Zyw5rGC55SfIiwKICAgICAgICAgICAgICAgICJ2IjogIue7neWcsOaxgueUnyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi55yf5Lq655yf5LqL5pS557yWIiwKICAgICAgICAgICAgICAgICJ2IjogIuecn+S6uuecn+S6i+aUuee8liIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6IyD5LyfIiwKICAgICAgICAgICAgICAgICJ2IjogIuiMg+S8nyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54Gr54iG5p6q5oiYIiwKICAgICAgICAgICAgICAgICJ2IjogIueBq+eIhuaequaImCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5b2x5Y+y57uP5YW4IiwKICAgICAgICAgICAgICAgICJ2IjogIuW9seWPsue7j+WFuCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5ouv5pWR5LiW55WMIiwKICAgICAgICAgICAgICAgICJ2IjogIuaLr+aVkeS4lueVjCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5LiH6IycIiwKICAgICAgICAgICAgICAgICJ2IjogIuS4h+iMnCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6ams5oCd57qvIiwKICAgICAgICAgICAgICAgICJ2IjogIumprOaAnee6ryIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi546L5L+K5YevIiwKICAgICAgICAgICAgICAgICJ2IjogIueOi+S/iuWHryIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6LGq5Y2O6Zi15a65IiwKICAgICAgICAgICAgICAgICJ2IjogIuixquWNjumYteWuuSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5p2O546JIiwKICAgICAgICAgICAgICAgICJ2IjogIuadjueOiSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5peg5Y6Y5aS05Zac5YmnIiwKICAgICAgICAgICAgICAgICJ2IjogIuaXoOWOmOWktOWWnOWJpyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6LaF6IO95YqbIiwKICAgICAgICAgICAgICAgICJ2IjogIui2heiDveWKmyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5qyi5Zac5pCt5qGjIiwKICAgICAgICAgICAgICAgICJ2IjogIuasouWWnOaQreahoyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAi57u86Im6IjogW3sKICAgICAgICAgICAgImtleSI6ICJtYWluX2FyZWEiLAogICAgICAgICAgICAibmFtZSI6ICLlhajpg6jlnLDljLoiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOo5Zyw5Yy6IiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YaF5ZywIiwKICAgICAgICAgICAgICAgICJ2IjogIuS4reWbveWGheWcsCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Lit5Zu95Y+w5rm+IiwKICAgICAgICAgICAgICAgICJ2IjogIuS4reWbveWPsOa5viIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi576O5Zu9IiwKICAgICAgICAgICAgICAgICJ2IjogIue+juWbvSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6Iux5Zu9IiwKICAgICAgICAgICAgICAgICJ2IjogIuiLseWbvSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAidGFncyIsCiAgICAgICAgICAgICJuYW1lIjogIuWFqOmDqOexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6jnsbvlnosiLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlgbblg48iLAogICAgICAgICAgICAgICAgInYiOiAi5YG25YOPIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLoiJ7ouYgiLAogICAgICAgICAgICAgICAgInYiOiAi6Iie6LmIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpn7PkuZAiLAogICAgICAgICAgICAgICAgInYiOiAi6Z+z5LmQIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmg4XmhJ8iLAogICAgICAgICAgICAgICAgInYiOiAi5oOF5oSfIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLllpzliaciLAogICAgICAgICAgICAgICAgInYiOiAi5Zac5YmnLOaQnueskSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5L2T6IKyIiwKICAgICAgICAgICAgICAgICJ2IjogIuS9k+iCsiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5ri45oiPIiwKICAgICAgICAgICAgICAgICJ2IjogIua4uOaIjyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi55u45aOwIiwKICAgICAgICAgICAgICAgICJ2IjogIuebuOWjsCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5ama5oGLIiwKICAgICAgICAgICAgICAgICJ2IjogIuWpmuaBiyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pe25bCaIiwKICAgICAgICAgICAgICAgICJ2IjogIuaXtuWwmiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pma5LyaIiwKICAgICAgICAgICAgICAgICJ2IjogIuaZmuS8miIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5piO5pif6K6/6LCIIiwKICAgICAgICAgICAgICAgICJ2IjogIuaYjuaYn+iuv+iwiCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Lqy5a2QIiwKICAgICAgICAgICAgICAgICJ2IjogIuS6suWtkCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi55Sf5rS7IiwKICAgICAgICAgICAgICAgICJ2IjogIueUn+a0uyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5paH5YyWIiwKICAgICAgICAgICAgICAgICJ2IjogIuaWh+WMliIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi576O6aOfIiwKICAgICAgICAgICAgICAgICJ2IjogIue+jumjnyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5peF5ri4IiwKICAgICAgICAgICAgICAgICJ2IjogIuaXhea4uCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi55uK5pm6IiwKICAgICAgICAgICAgICAgICJ2IjogIuebiuaZuiIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAieWVhciIsCiAgICAgICAgICAgICJuYW1lIjogIuWFqOmDqOW5tOS7vSIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6jlubTku70iLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNC0yMDExIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTEtMjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pu05pepIiwKICAgICAgICAgICAgICAgICJ2IjogIi0yMDEwIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJzdGF0dXMiLAogICAgICAgICAgICAibmFtZSI6ICLlhajpg6jop4TmoLwiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOo6KeE5qC8IiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5LyY6YW36Ieq5Yi2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS8mOmFt+eLrOaSrSIsCiAgICAgICAgICAgICAgICAidiI6ICIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnlLXop4bnu7zoiboiLAogICAgICAgICAgICAgICAgInYiOiAiNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5bey5a6M57uTIiwKICAgICAgICAgICAgICAgICJ2IjogIjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWNs+WwhuS4iue6vyIsCiAgICAgICAgICAgICAgICAidiI6ICI0IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJwYXlfdHlwZSIsCiAgICAgICAgICAgICJuYW1lIjogIuS7mOi0ueexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLku5jotLnnsbvlnosiLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhY3otLkiLAogICAgICAgICAgICAgICAgInYiOiAiMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVklQIiwKICAgICAgICAgICAgICAgICJ2IjogIjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS7mOi0uSIsCiAgICAgICAgICAgICAgICAidiI6ICIxIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJzb3J0IiwKICAgICAgICAgICAgIm5hbWUiOiAi54Ot5bqm5pyA6auYIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIueDreW6puacgOmrmCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOaWsOabtOaWsCIsCiAgICAgICAgICAgICAgICAidiI6ICI4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDov5HlvIDmkq0iLAogICAgICAgICAgICAgICAgInYiOiAiOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5aSa6K+E6K66IiwKICAgICAgICAgICAgICAgICJ2IjogIjQiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInRhZ19sYWJlbF9uYW1lIiwKICAgICAgICAgICAgIm5hbWUiOiAi5Li65L2g5o6o6I2QIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuS4uuS9oOaOqOiNkCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiInuWPsOernua8lCIsCiAgICAgICAgICAgICAgICAidiI6ICLoiJ7lj7Dnq57mvJQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWImOmbqOaYlSIsCiAgICAgICAgICAgICAgICAidiI6ICLliJjpm6jmmJUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueOi+S4gOWNmiIsCiAgICAgICAgICAgICAgICAidiI6ICLnjovkuIDljZoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumfqeW6miIsCiAgICAgICAgICAgICAgICAidiI6ICLpn6nlupoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuadjuaJv+mTiSIsCiAgICAgICAgICAgICAgICAidiI6ICLmnY7mib/pk4kiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaIt+WkluernuaKgCIsCiAgICAgICAgICAgICAgICAidiI6ICLmiLflpJbnq57mioAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIua1meaxn+WNq+inhiIsCiAgICAgICAgICAgICAgICAidiI6ICLmtZnmsZ/ljavop4YiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS4nOaWueWNq+inhiIsCiAgICAgICAgICAgICAgICAidiI6ICLkuJzmlrnljavop4YiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWys+S6kem5jyIsCiAgICAgICAgICAgICAgICAidiI6ICLlsrPkupHpuY8iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueOi+i/hSIsCiAgICAgICAgICAgICAgICAidiI6ICLnjovov4UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuadqOi/qiIsCiAgICAgICAgICAgICAgICAidiI6ICLmnajov6oiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuadqOi2hei2iiIsCiAgICAgICAgICAgICAgICAidiI6ICLmnajotoXotooiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIum7hOaYjuaYiiIsCiAgICAgICAgICAgICAgICAidiI6ICLpu4TmmI7mmIoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumDreS6rOmjniIsCiAgICAgICAgICAgICAgICAidiI6ICLpg63kuqzpo54iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuasp+mYs+WonOWonCIsCiAgICAgICAgICAgICAgICAidiI6ICLmrKfpmLPlqJzlqJwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuW+t+S6keekviIsCiAgICAgICAgICAgICAgICAidiI6ICLlvrfkupHnpL4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumDkeaBuiIsCiAgICAgICAgICAgICAgICAidiI6ICLpg5HmgboiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWNjuWwkSIsCiAgICAgICAgICAgICAgICAidiI6ICLljY7lsJEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumDreW+t+e6siIsCiAgICAgICAgICAgICAgICAidiI6ICLpg63lvrfnurIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIui0vueOsiIsCiAgICAgICAgICAgICAgICAidiI6ICLotL7njrIiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIuWKqOa8qyI6IFt7CiAgICAgICAgICAgICJrZXkiOiAic29ydCIsCiAgICAgICAgICAgICJuYW1lIjogIue7vOWQiOaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLnu7zlkIjmjpLluo8iLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDlpJrmkq3mlL4iLAogICAgICAgICAgICAgICAgInYiOiAiMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5aW96K+EIiwKICAgICAgICAgICAgICAgICJ2IjogIjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOaWsOS4iue6vyIsCiAgICAgICAgICAgICAgICAidiI6ICIxIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJtYWluX2FyZWEiLAogICAgICAgICAgICAibmFtZSI6ICLlhajpg6jlnLDljLoiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOo5Zyw5Yy6IiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YaF5ZywIiwKICAgICAgICAgICAgICAgICJ2IjogIuS4reWbveWGheWcsCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pel5pysIiwKICAgICAgICAgICAgICAgICJ2IjogIuaXpeacrCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi576O5Zu9IiwKICAgICAgICAgICAgICAgICJ2IjogIue+juWbvSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Lit5Zu95Y+w5rm+IiwKICAgICAgICAgICAgICAgICJ2IjogIuS4reWbveWPsOa5viIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YW25LuWIiwKICAgICAgICAgICAgICAgICJ2IjogIuWFtuS7liIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAidGFncyIsCiAgICAgICAgICAgICJuYW1lIjogIuWFqOmDqOexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6jnsbvlnosiLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLng63ooYAiLAogICAgICAgICAgICAgICAgInYiOiAi54Ot6KGALOaImOaWlyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Yqx5b+XIiwKICAgICAgICAgICAgICAgICJ2IjogIuWKseW/lyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi546E5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIueOhOW5uyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Y+k6aOOIiwKICAgICAgICAgICAgICAgICJ2IjogIuWOhuWPsizlj6Tpo44iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaBi+eIsSIsCiAgICAgICAgICAgICAgICAidiI6ICLmgYvniLEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumdkuaYpSIsCiAgICAgICAgICAgICAgICAidiI6ICLpnZLmmKUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuagoeWbrSIsCiAgICAgICAgICAgICAgICAidiI6ICLmoKHlm60iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIui/kOWKqCIsCiAgICAgICAgICAgICAgICAidiI6ICLnpL7lm6Is6L+Q5YqoIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAi56eR5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpLpmakiLAogICAgICAgICAgICAgICAgInYiOiAi5YaS6ZmpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLprZTms5UiLAogICAgICAgICAgICAgICAgInYiOiAi6a2U5rOVIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLml6XluLgiLAogICAgICAgICAgICAgICAgInYiOiAi5pel5bi4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmsrvmhIgiLAogICAgICAgICAgICAgICAgInYiOiAi5rK75oSIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnLrmiJgiLAogICAgICAgICAgICAgICAgInYiOiAi5py65oiYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmjqjnkIYiLAogICAgICAgICAgICAgICAgInYiOiAi5o6o55CGIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpg73luIIiLAogICAgICAgICAgICAgICAgInYiOiAi6YO95biCIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlsI/or7TmlLkiLAogICAgICAgICAgICAgICAgInYiOiAi5bCP6K+05pS557yWIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmuLjmiI/mlLkiLAogICAgICAgICAgICAgICAgInYiOiAi5ri45oiP5pS557yWIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmvKvnlLvmlLkiLAogICAgICAgICAgICAgICAgInYiOiAi5ryr55S75pS557yWIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliqjmgIHmvKsiLAogICAgICAgICAgICAgICAgInYiOiAi5Yqo5oCB5ryr55S7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnibnmkYQiLAogICAgICAgICAgICAgICAgInYiOiAi54m55pGEIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLluIPooovmiI8iLAogICAgICAgICAgICAgICAgInYiOiAi5biD6KKL5oiPIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJjb21wbGV0ZWQiLAogICAgICAgICAgICAibmFtZSI6ICLov57ovb3mg4XlhrUiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi6L+e6L295oOF5Ya1IiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pu05paw5LitIiwKICAgICAgICAgICAgICAgICJ2IjogIjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuW3suWujOe7kyIsCiAgICAgICAgICAgICAgICAidiI6ICIxIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJwYXlfdHlwZSIsCiAgICAgICAgICAgICJuYW1lIjogIuS7mOi0ueexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLku5jotLnnsbvlnosiLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhY3otLkiLAogICAgICAgICAgICAgICAgInYiOiAiMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Lya5ZGYIiwKICAgICAgICAgICAgICAgICJ2IjogIjIiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlhajpg6jlubTku70iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOo5bm05Lu9IiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMDDlubTku6MiLAogICAgICAgICAgICAgICAgInYiOiAiMjAwMC0yMDEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmm7Tml6kiLAogICAgICAgICAgICAgICAgInYiOiAiLTE5OTkiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInRhZ19sYWJlbF9uYW1lIiwKICAgICAgICAgICAgIm5hbWUiOiAi5Li65L2g5o6o6I2QIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuS4uuS9oOaOqOiNkCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjNE5Yqo55S7IiwKICAgICAgICAgICAgICAgICJ2IjogIjNE5Yqo55S7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmkJ7nrJHml6XluLgiLAogICAgICAgICAgICAgICAgInYiOiAi5pCe56yR5pel5bi4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpKfnlLfkuLsiLAogICAgICAgICAgICAgICAgInYiOiAi5aSn55S35Li7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpq5jnh4MiLAogICAgICAgICAgICAgICAgInYiOiAi6auY54eDIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLokIzns7siLAogICAgICAgICAgICAgICAgInYiOiAi6JCM57O7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkv67nnJ8iLAogICAgICAgICAgICAgICAgInYiOiAi5L+u55yfIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgIDml6ciLAogICAgICAgICAgICAgICAgInYiOiAi5oCA5penIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLotoXnuqfoi7Hpm4QiLAogICAgICAgICAgICAgICAgInYiOiAi6LaF57qn6Iux6ZuEIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmsLTmoJHlpYjlpYgiLAogICAgICAgICAgICAgICAgInYiOiAi5rC05qCR5aWI5aWIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlvKDmnbAiLAogICAgICAgICAgICAgICAgInYiOiAi5byg5p2wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnn7PnlLDlvbAiLAogICAgICAgICAgICAgICAgInYiOiAi55+z55Sw5b2wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlrojmiqTlnLDnkIMiLAogICAgICAgICAgICAgICAgInYiOiAi5a6I5oqk5Zyw55CDIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlnIbosLciLAogICAgICAgICAgICAgICAgInYiOiAi5ZyG6LC3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlsbHmlrAiLAogICAgICAgICAgICAgICAgInYiOiAi5bGx5pawIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpI3ku4ciLAogICAgICAgICAgICAgICAgInYiOiAi5aSN5LuHIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlup/mn7TpgIbooq0iLAogICAgICAgICAgICAgICAgInYiOiAi5bqf5p+06YCG6KKtIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkvqbmjqIiLAogICAgICAgICAgICAgICAgInYiOiAi5L6m5o6iIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLml6DljpjlpLQiLAogICAgICAgICAgICAgICAgInYiOiAi5peg5Y6Y5aS0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpnZLlsbHliJrmmIwiLAogICAgICAgICAgICAgICAgInYiOiAi6Z2S5bGx5Yia5piMIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgqznlpEiLAogICAgICAgICAgICAgICAgInYiOiAi5oKs55aRIgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICLlsJHlhL8iOiBbewogICAgICAgICAgICAia2V5IjogIm1haW5fYXJlYSIsCiAgICAgICAgICAgICJuYW1lIjogIuWFqOmDqOWcsOWMuiIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6jlnLDljLoiLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkuK3lm70iLAogICAgICAgICAgICAgICAgInYiOiAi5Lit5Zu9LOmmmea4ryzlj7Dmub4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIue+juWbvSIsCiAgICAgICAgICAgICAgICAidiI6ICLnvo7lm70iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiLseWbvSIsCiAgICAgICAgICAgICAgICAidiI6ICLoi7Hlm70iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWFtuS7luWbveWutiIsCiAgICAgICAgICAgICAgICAidiI6ICLlhbbku5YiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInNob3dfbGFiZWxfdHlwZSIsCiAgICAgICAgICAgICJuYW1lIjogIuWFqOmDqOexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6jnsbvlnosiLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliqjnlLsiLAogICAgICAgICAgICAgICAgInYiOiAi5Yqo55S7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhL/mrYwiLAogICAgICAgICAgICAgICAgInYiOiAi5YS/5q2MIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnjqnlhbciLAogICAgICAgICAgICAgICAgInYiOiAi546p5YW3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliqjnlLvnlLXlvbEiLAogICAgICAgICAgICAgICAgInYiOiAi55S15b2xIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnu5jmnKzmlYXkuosiLAogICAgICAgICAgICAgICAgInYiOiAi57uY5pys5pWF5LqLIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnnJ/kuroiLAogICAgICAgICAgICAgICAgInYiOiAi55yf5Lq6IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlsJHlhL/nu7zoiboiLAogICAgICAgICAgICAgICAgInYiOiAi5bCR5YS/57u86Im6IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkurLlrZAiLAogICAgICAgICAgICAgICAgInYiOiAi5Lqy5a2QIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmjqLntKLnuqrlrp4iLAogICAgICAgICAgICAgICAgInYiOiAi5o6i57Si57qq5a6eIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpn7PpopEiLAogICAgICAgICAgICAgICAgInYiOiAi6Z+z6aKRIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJjaGlsZF90YWdzIiwKICAgICAgICAgICAgIm5hbWUiOiAi5YWo6YOo5YiG57G7IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqOWIhuexuyIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuebiuaZuiIsCiAgICAgICAgICAgICAgICAidiI6ICLnm4rmmboiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWGkumZqSIsCiAgICAgICAgICAgICAgICAidiI6ICLlhpLpmakiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuW5vem7mCIsCiAgICAgICAgICAgICAgICAidiI6ICLlub3pu5giCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacuueUsiIsCiAgICAgICAgICAgICAgICAidiI6ICLmnLrnlLIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWFrOS4u+mtlOazlSIsCiAgICAgICAgICAgICAgICAidiI6ICLlhazkuLss6a2U5rOVIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkuqTpgJrlt6XlhbciLAogICAgICAgICAgICAgICAgInYiOiAi5Lqk6YCa5bel5YW3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgZDpvpkiLAogICAgICAgICAgICAgICAgInYiOiAi5oGQ6b6ZIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliqjniakiLAogICAgICAgICAgICAgICAgInYiOiAi5Yqo54mpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlirHlv5ciLAogICAgICAgICAgICAgICAgInYiOiAi5Yqx5b+XIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlj4vmg4UiLAogICAgICAgICAgICAgICAgInYiOiAi5Y+L5oOFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjmlpciLAogICAgICAgICAgICAgICAgInYiOiAi5oiY5paXIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmoKHlm60iLAogICAgICAgICAgICAgICAgInYiOiAi5qCh5ZutIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmraPkuYkiLAogICAgICAgICAgICAgICAgInYiOiAi5q2j5LmJIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLng63ooYAiLAogICAgICAgICAgICAgICAgInYiOiAi54Ot6KGAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAi56eR5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnq6Xor50iLAogICAgICAgICAgICAgICAgInYiOiAi56ul6K+dIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLov5DliqgiLAogICAgICAgICAgICAgICAgInYiOiAi6L+Q5YqoIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkuJPms6jlipsiLAogICAgICAgICAgICAgICAgInYiOiAi5LiT5rOo5YqbIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliJvpgKDlipsiLAogICAgICAgICAgICAgICAgInYiOiAi5Yib6YCg5YqbIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmg7PosaHlipsiLAogICAgICAgICAgICAgICAgInYiOiAi5oOz6LGh5YqbIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5Hmma4iLAogICAgICAgICAgICAgICAgInYiOiAi56eR5pmuIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmg4XllYYiLAogICAgICAgICAgICAgICAgInYiOiAi5oOF5ZWGIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgJ3nu7TpgLvovpEiLAogICAgICAgICAgICAgICAgInYiOiAi5oCd57u06YC76L6RIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhbTotqPln7nlhbsiLAogICAgICAgICAgICAgICAgInYiOiAi5YW06Laj5Z+55YW7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLor63mlociLAogICAgICAgICAgICAgICAgInYiOiAi6K+t5paHIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLoi7Hor60iLAogICAgICAgICAgICAgICAgInYiOiAi6Iux6K+tIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmlbDlraYiLAogICAgICAgICAgICAgICAgInYiOiAi5pWw5a2mIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLor77nqIvovoXlr7wiLAogICAgICAgICAgICAgICAgInYiOiAi6K++56iL6L6F5a+8IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJhZ2UiLAogICAgICAgICAgICAibmFtZSI6ICLlhajpg6jlubTpvoQiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOo5bm06b6EIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMC0y5bKBIiwKICAgICAgICAgICAgICAgICJ2IjogIjAtMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMy005bKBIiwKICAgICAgICAgICAgICAgICJ2IjogIjMtNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiNS025bKBIiwKICAgICAgICAgICAgICAgICJ2IjogIjUtNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiN+WygeS7peS4iiIsCiAgICAgICAgICAgICAgICAidiI6ICI3LSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAicGF5X3R5cGUiLAogICAgICAgICAgICAibmFtZSI6ICLku5jotLnnsbvlnosiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5LuY6LS557G75Z6LIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YWN6LS5IiwKICAgICAgICAgICAgICAgICJ2IjogIjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS7mOi0uSIsCiAgICAgICAgICAgICAgICAidiI6ICIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJWSVAiLAogICAgICAgICAgICAgICAgInYiOiAiMiIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAic29ydCIsCiAgICAgICAgICAgICJuYW1lIjogIue7vOWQiOaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLnu7zlkIjmjpLluo8iLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDmlrDkuIrnur8iLAogICAgICAgICAgICAgICAgInYiOiAiMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5aSa5pKt5pS+IiwKICAgICAgICAgICAgICAgICJ2IjogIjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOWkmuivhOiuuiIsCiAgICAgICAgICAgICAgICAidiI6ICI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDlpJrmlLbol48iLAogICAgICAgICAgICAgICAgInYiOiAiNSIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAi57qq5b2V54mHIjogW3sKICAgICAgICAgICAgImtleSI6ICJ0YWdzIiwKICAgICAgICAgICAgIm5hbWUiOiAi5YWo6YOo57G75Z6LIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqOexu+WeiyIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIue+jumjnyIsCiAgICAgICAgICAgICAgICAidiI6ICLnvo7po58iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiHqueEtiIsCiAgICAgICAgICAgICAgICAidiI6ICLoh6rnhLYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWOhuWPsiIsCiAgICAgICAgICAgICAgICAidiI6ICLljoblj7IiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaOoumZqSIsCiAgICAgICAgICAgICAgICAidiI6ICLmjqLpmakiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWGm+S6iyIsCiAgICAgICAgICAgICAgICAidiI6ICLlhpvkuosiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS6uueJqSIsCiAgICAgICAgICAgICAgICAidiI6ICLkurrniakiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWuh+WumSIsCiAgICAgICAgICAgICAgICAidiI6ICLlroflrpkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWIkeS+piIsCiAgICAgICAgICAgICAgICAidiI6ICLliJHkvqYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuekvuS8miIsCiAgICAgICAgICAgICAgICAidiI6ICLnpL7kvJoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuenkeaKgCIsCiAgICAgICAgICAgICAgICAidiI6ICLnp5HmioAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaXhea4uCIsCiAgICAgICAgICAgICAgICAidiI6ICLml4XmuLgiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImNvbXBhbnkiLAogICAgICAgICAgICAibmFtZSI6ICLlhajpg6jlh7rlk4EiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOo5Ye65ZOBIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiQkJDIiwKICAgICAgICAgICAgICAgICJ2IjogImJiYyxicml0aXNoIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpK7op4YiLAogICAgICAgICAgICAgICAgInYiOiAi5aSu6KeGLOS4reWkrueUteinhuWPsCxjY3R2LOS4reWbveW5v+aSreeUteW9seeUteinhuiKguebruS6pOaYk+S4reW/gyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Zu95a625Zyw55CGIiwKICAgICAgICAgICAgICAgICJ2IjogIuWbveWutuWcsOeQhiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiTG92ZSBOYXR1cmUiLAogICAgICAgICAgICAgICAgInYiOiAibG92ZSBuYXR1cmUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIkxHSSIsCiAgICAgICAgICAgICAgICAidiI6ICJsb29raW5nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJBJkUiLAogICAgICAgICAgICAgICAgInYiOiAiYWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIk9URiIsCiAgICAgICAgICAgICAgICAidiI6ICJmZW5jZSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAieWVhciIsCiAgICAgICAgICAgICJuYW1lIjogIuWFqOmDqOW5tOS7vSIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6jlubTku70iLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjQiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIyIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjEiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMCIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE5IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTgiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNyIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE2IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTUiLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNC0yMDExIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTEtMjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pu05pepIiwKICAgICAgICAgICAgICAgICJ2IjogIi0yMDEwIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJwYXlfdHlwZSIsCiAgICAgICAgICAgICJuYW1lIjogIuS7mOi0ueexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLku5jotLnnsbvlnosiLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhY3otLkiLAogICAgICAgICAgICAgICAgInYiOiAiMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Lya5ZGYIiwKICAgICAgICAgICAgICAgICJ2IjogIjIiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInNvcnQiLAogICAgICAgICAgICAibmFtZSI6ICLng63luqbmnIDpq5giLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi54Ot5bqm5pyA6auYIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi57u85ZCI5o6S5bqPIiwKICAgICAgICAgICAgICAgICJ2IjogIjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOaWsOS4iue6vyIsCiAgICAgICAgICAgICAgICAidiI6ICIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDlpb3or4QiLAogICAgICAgICAgICAgICAgInYiOiAiMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5aSa5pS26JePIiwKICAgICAgICAgICAgICAgICJ2IjogIjUiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIuaWh+WMliI6IFt7CiAgICAgICAgICAgICJrZXkiOiAidGFncyIsCiAgICAgICAgICAgICJuYW1lIjogIuWFqOmDqOexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6jnsbvlnosiLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLosIjor50iLAogICAgICAgICAgICAgICAgInYiOiAi6LCI6K+dIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLohLHlj6Pnp4AiLAogICAgICAgICAgICAgICAgInYiOiAi6ISx5Y+j56eAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLorr/osIgiLAogICAgICAgICAgICAgICAgInYiOiAi6K6/6LCIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLorrLluqforrrlnZsiLAogICAgICAgICAgICAgICAgInYiOiAi6K6y5bqn6K665Z2bIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiI/mm7Lmm7LoiboiLAogICAgICAgICAgICAgICAgInYiOiAi5oiP5puyLOabsuiJuiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6Iie5Y+w5YmnIiwKICAgICAgICAgICAgICAgICJ2IjogIuiInuWPsOWJpyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5paH5a2mIiwKICAgICAgICAgICAgICAgICJ2IjogIuaWh+WtpiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Zu95a2mIiwKICAgICAgICAgICAgICAgICJ2IjogIuWbveWtpiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6Im65pyvIiwKICAgICAgICAgICAgICAgICJ2IjogIuiJuuacryIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Z+56K6t6K++56iLIiwKICAgICAgICAgICAgICAgICJ2IjogIuWfueiureivvueoiyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyJ5aOw5LmmIiwKICAgICAgICAgICAgICAgICJ2IjogIuacieWjsOS5piIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAicGVvcGxlIiwKICAgICAgICAgICAgIm5hbWUiOiAi5paH5YyW5aSn5ZKWIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuaWh+WMluWkp+WSliIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueqpuaWh+a2myIsCiAgICAgICAgICAgICAgICAidiI6ICLnqqbmlofmtpsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumprOacqumDvSIsCiAgICAgICAgICAgICAgICAidiI6ICLpqazmnKrpg70iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueZveWyqeadviIsCiAgICAgICAgICAgICAgICAidiI6ICLnmb3lsqnmnb4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaiheavhSIsCiAgICAgICAgICAgICAgICAidiI6ICLmooXmr4UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumZiOmygeixqyIsCiAgICAgICAgICAgICAgICAidiI6ICLpmYjpsoHosasiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaoiueZuyIsCiAgICAgICAgICAgICAgICAidiI6ICLmqIrnmbsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIue9l+aMr+WuhyIsCiAgICAgICAgICAgICAgICAidiI6ICLnvZfmjK/lrociCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiSi+aWueiInyIsCiAgICAgICAgICAgICAgICAidiI6ICLokovmlrnoiJ8iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWFtuS7liIsCiAgICAgICAgICAgICAgICAidiI6ICLlhbbku5YiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlhajpg6jlubTku70iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOo5bm05Lu9IiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAiMjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAiMjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogIjIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQtMjAxMSIsCiAgICAgICAgICAgICAgICAidiI6ICIyMDExLTIwMTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuabtOaXqSIsCiAgICAgICAgICAgICAgICAidiI6ICItMjAxMCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAicGF5X3R5cGUiLAogICAgICAgICAgICAibmFtZSI6ICLku5jotLnnsbvlnosiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5LuY6LS557G75Z6LIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YWN6LS5IiwKICAgICAgICAgICAgICAgICJ2IjogIjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS8muWRmCIsCiAgICAgICAgICAgICAgICAidiI6ICIyIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJzb3J0IiwKICAgICAgICAgICAgIm5hbWUiOiAi54Ot5bqm5pyA6auYIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIueDreW6puacgOmrmCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIue7vOWQiOaOkuW6jyIsCiAgICAgICAgICAgICAgICAidiI6ICIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDmlrDkuIrnur8iLAogICAgICAgICAgICAgICAgInYiOiAiMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5aW96K+EIiwKICAgICAgICAgICAgICAgICJ2IjogIjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOWkmuaUtuiXjyIsCiAgICAgICAgICAgICAgICAidiI6ICI1IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICLkurLlrZAiOiBbewogICAgICAgICAgICAia2V5IjogInFpbnppX2dlbnJlIiwKICAgICAgICAgICAgIm5hbWUiOiAi5YWo6YOo57G75Z6LIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqOexu+WeiyIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWtleS6pyIsCiAgICAgICAgICAgICAgICAidiI6ICLlrZXkuqciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiCsuWEv+efpeivhiIsCiAgICAgICAgICAgICAgICAidiI6ICLogrLlhL/nn6Xor4Ys6IKy5YS/6L6+5Lq6LOiCsuWEv+S4k+WutizniLjniLjogrLlhL8s6ZqU5Luj6IKy5YS/LOiCsuWEv+aYjuaYnyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5aW954mp56eN6I2JIiwKICAgICAgICAgICAgICAgICJ2IjogIuavjeWptOeUqOWTgSzmtYvor4Qs5q+N5am055So5ZOB56eN6I2JIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnvo7po58iLAogICAgICAgICAgICAgICAgInYiOiAi5YS/56ul576O6aOfLOi+hemjnyzlrZXmnJ/ppa7po58iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaJi+W3pURJWSIsCiAgICAgICAgICAgICAgICAidiI6ICLmiYvlt6VkaXkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaVmeiCsuinguW/tSIsCiAgICAgICAgICAgICAgICAidiI6ICLmlZnogrLop4Llv7UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS6suWtkOe7vOiJuiIsCiAgICAgICAgICAgICAgICAidiI6ICLkurLlrZDnu7zoiboiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS6suWtkOS6kuWKqCIsCiAgICAgICAgICAgICAgICAidiI6ICLkurLlrZDml4XmuLgs5Lqy5a2Q5ri45oiPLOS6suWtkOmYheivuyznjqnlhbcs5pep5pWZLOWQr+iSmSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6JCM5aiDIiwKICAgICAgICAgICAgICAgICJ2IjogIuiQjOWogyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pCe56yRIiwKICAgICAgICAgICAgICAgICJ2IjogIuaQnueskSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi576O5aaGIiwKICAgICAgICAgICAgICAgICJ2IjogIue+juWmhiIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAicHJlZ25hbmN5X3N0YWdlIiwKICAgICAgICAgICAgIm5hbWUiOiAi5YWo6YOo6Zi25q61IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqOmYtuautSIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWkh+WtlSIsCiAgICAgICAgICAgICAgICAidiI6ICLlpIflrZUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWtleaXqeacnyIsCiAgICAgICAgICAgICAgICAidiI6ICLlrZXml6kiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWtleS4reacnyIsCiAgICAgICAgICAgICAgICAidiI6ICLlrZXkuK0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWtleaZmuacnyIsCiAgICAgICAgICAgICAgICAidiI6ICLlrZXmmZoiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInNob3dfbGFiZWxfYmFieV9hZ2UiLAogICAgICAgICAgICAibmFtZSI6ICLlhajpg6jliIbpvoQiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOo5YiG6b6EIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMC0x5bKBIiwKICAgICAgICAgICAgICAgICJ2IjogIjAtMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMS0z5bKBIiwKICAgICAgICAgICAgICAgICJ2IjogIjEtMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMy025bKBIiwKICAgICAgICAgICAgICAgICJ2IjogIjMtNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiNuWygSsiLAogICAgICAgICAgICAgICAgInYiOiAiNi0iCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInBheV90eXBlIiwKICAgICAgICAgICAgIm5hbWUiOiAi5YWo6YOoIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWFjei0uSIsCiAgICAgICAgICAgICAgICAidiI6ICIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkvJrlkZjlhY3otLkiLAogICAgICAgICAgICAgICAgInYiOiAiMiIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAic29ydCIsCiAgICAgICAgICAgICJuYW1lIjogIueDreW6puacgOmrmCIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLng63luqbmnIDpq5giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnu7zlkIjmjpLluo8iLAogICAgICAgICAgICAgICAgInYiOiAiMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5paw5LiK57q/IiwKICAgICAgICAgICAgICAgICJ2IjogIjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOWkmuaSreaUviIsCiAgICAgICAgICAgICAgICAidiI6ICIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDlpJror4TorroiLAogICAgICAgICAgICAgICAgInYiOiAiMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5aSa5pS26JePIiwKICAgICAgICAgICAgICAgICJ2IjogIjUiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIuaVmeiCsiI6IFt7CiAgICAgICAgICAgICJrZXkiOiAidGFncyIsCiAgICAgICAgICAgICJuYW1lIjogIuWFqOmDqOexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6jnsbvlnosiLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhazlvIDor74iLAogICAgICAgICAgICAgICAgInYiOiAi5YWs5byA6K++IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlkI3kurrlkI3lmLQiLAogICAgICAgICAgICAgICAgInYiOiAi5ZCN5Lq65ZCN5Zi0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmlofljJYiLAogICAgICAgICAgICAgICAgInYiOiAi5paH5YyWIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLoibrmnK8iLAogICAgICAgICAgICAgICAgInYiOiAi6Im65pyvIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkvKbnkIbnpL7kvJoiLAogICAgICAgICAgICAgICAgInYiOiAi5Lym55CG56S+5LyaIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnkIblt6UiLAogICAgICAgICAgICAgICAgInYiOiAi55CG5belIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLljoblj7IiLAogICAgICAgICAgICAgICAgInYiOiAi5Y6G5Y+yIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlv4PnkIblraYiLAogICAgICAgICAgICAgICAgInYiOiAi5b+D55CG5a2mIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnu4/mtY4iLAogICAgICAgICAgICAgICAgInYiOiAi57uP5rWOIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnrqHnkIblraYiLAogICAgICAgICAgICAgICAgInYiOiAi566h55CG5a2mIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpJbor60iLAogICAgICAgICAgICAgICAgInYiOiAi5aSW6K+tIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLms5XlvosiLAogICAgICAgICAgICAgICAgInYiOiAi5rOV5b6LIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLorqHnrpfmnLoiLAogICAgICAgICAgICAgICAgInYiOiAi6K6h566X5py6IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlk7LlraYiLAogICAgICAgICAgICAgICAgInYiOiAi5ZOy5a2mIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLogYzkuJrln7norq0iLAogICAgICAgICAgICAgICAgInYiOiAi6IGM5Lia5Z+56K6tIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlrrbluq3mlZnogrIiLAogICAgICAgICAgICAgICAgInYiOiAi5a625bqt5pWZ6IKyIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJjb21wYW55IiwKICAgICAgICAgICAgIm5hbWUiOiAi5YWo6YOo5Ye65ZOBIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqOWHuuWTgSIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlRFRCIsCiAgICAgICAgICAgICAgICAidiI6ICJ0ZWQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiAtumygeWkp+WtpiIsCiAgICAgICAgICAgICAgICAidiI6ICLogLbpsoHlpKflraYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWTiOS9m+Wkp+WtpiIsCiAgICAgICAgICAgICAgICAidiI6ICLlk4jkvZvlpKflraYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaWr+Wdpuemj+Wkp+WtpiIsCiAgICAgICAgICAgICAgICAidiI6ICLmlq/lnabnpo/lpKflraYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIum6u+ecgeeQhuW3peWtpumZoiIsCiAgICAgICAgICAgICAgICAidiI6ICLpurvnnIHnkIblt6XlrabpmaIiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInBheV90eXBlIiwKICAgICAgICAgICAgIm5hbWUiOiAi5YWo6YOo6IqC55uuIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqOiKguebriIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWFjei0uSIsCiAgICAgICAgICAgICAgICAidiI6ICIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLku5jotLkiLAogICAgICAgICAgICAgICAgInYiOiAiMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiVklQIiwKICAgICAgICAgICAgICAgICJ2IjogIjIiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInNvcnQiLAogICAgICAgICAgICAibmFtZSI6ICLnu7zlkIjmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi57u85ZCI5o6S5bqPIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5aSa5pKt5pS+IiwKICAgICAgICAgICAgICAgICJ2IjogIjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOWkmuaUtuiXjyIsCiAgICAgICAgICAgICAgICAidiI6ICI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDlpb3or4QiLAogICAgICAgICAgICAgICAgInYiOiAiMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5paw5LiK57q/IiwKICAgICAgICAgICAgICAgICJ2IjogIjEiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIuaQnueskSI6IFt7CiAgICAgICAgICAgICJrZXkiOiAiZGl2aXNpb24iLAogICAgICAgICAgICAibmFtZSI6ICLlhajpg6jkuJPljLoiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOo5LiT5Yy6IiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTA4MFAiLAogICAgICAgICAgICAgICAgInYiOiAiMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54us5pKtIiwKICAgICAgICAgICAgICAgICJ2IjogIjYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWFjei0uSIsCiAgICAgICAgICAgICAgICAidiI6ICI1IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJzb3J0IiwKICAgICAgICAgICAgIm5hbWUiOiAi57u85ZCI5o6S5bqPIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIue7vOWQiOaOkuW6jyIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOWkmuaSreaUviIsCiAgICAgICAgICAgICAgICAidiI6ICIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDlpb3or4QiLAogICAgICAgICAgICAgICAgInYiOiAiMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5paw5LiK57q/IiwKICAgICAgICAgICAgICAgICJ2IjogIjEiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIueUn+a0uyI6IFt7CiAgICAgICAgICAgICJrZXkiOiAiZGl2aXNpb24iLAogICAgICAgICAgICAibmFtZSI6ICLlhajpg6jkuJPljLoiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOo5LiT5Yy6IiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTA4MFAiLAogICAgICAgICAgICAgICAgInYiOiAiMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54us5pKtIiwKICAgICAgICAgICAgICAgICJ2IjogIjYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlZJUCIsCiAgICAgICAgICAgICAgICAidiI6ICI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhY3otLkiLAogICAgICAgICAgICAgICAgInYiOiAiNSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAic29ydCIsCiAgICAgICAgICAgICJuYW1lIjogIue7vOWQiOaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLnu7zlkIjmjpLluo8iLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDlpJrmkq3mlL4iLAogICAgICAgICAgICAgICAgInYiOiAiMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5aW96K+EIiwKICAgICAgICAgICAgICAgICJ2IjogIjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOaWsOS4iue6vyIsCiAgICAgICAgICAgICAgICAidiI6ICIxIgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICLkvZPogrIiOiBbewogICAgICAgICAgICAia2V5IjogImRpdmlzaW9uIiwKICAgICAgICAgICAgIm5hbWUiOiAi5YWo6YOo5LiT5Yy6IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqOS4k+WMuiIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjEwODBQIiwKICAgICAgICAgICAgICAgICJ2IjogIjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueLrOaSrSIsCiAgICAgICAgICAgICAgICAidiI6ICI2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJWSVAiLAogICAgICAgICAgICAgICAgInYiOiAiNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YWN6LS5IiwKICAgICAgICAgICAgICAgICJ2IjogIjUiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInRhZ3MiLAogICAgICAgICAgICAibmFtZSI6ICLlhajpg6jnsbvlnosiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOo57G75Z6LIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56+u55CDIiwKICAgICAgICAgICAgICAgICJ2IjogIuevrueQgyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6Laz55CDIiwKICAgICAgICAgICAgICAgICJ2IjogIui2s+eQgyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Y+w55CDIiwKICAgICAgICAgICAgICAgICJ2IjogIuWPsOeQgyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiQ0JBIiwKICAgICAgICAgICAgICAgICJ2IjogIkNCQSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6ZKT6bG8IiwKICAgICAgICAgICAgICAgICJ2IjogIumSk+mxvCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAic29ydCIsCiAgICAgICAgICAgICJuYW1lIjogIue7vOWQiOaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLnu7zlkIjmjpLluo8iLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDlpJrmkq3mlL4iLAogICAgICAgICAgICAgICAgInYiOiAiMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5aW96K+EIiwKICAgICAgICAgICAgICAgICJ2IjogIjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOaWsOS4iue6vyIsCiAgICAgICAgICAgICAgICAidiI6ICIxIgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICLpn7PkuZAiOiBbewogICAgICAgICAgICAia2V5IjogImRpdmlzaW9uIiwKICAgICAgICAgICAgIm5hbWUiOiAi5YWo6YOo5LiT5Yy6IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqOS4k+WMuiIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjEwODBQIiwKICAgICAgICAgICAgICAgICJ2IjogIjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueLrOaSrSIsCiAgICAgICAgICAgICAgICAidiI6ICI2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhY3otLkiLAogICAgICAgICAgICAgICAgInYiOiAiNSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAibWFpbl9hcmVhIiwKICAgICAgICAgICAgIm5hbWUiOiAi5YWo6YOo5Zyw5Yy6IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqOWcsOWMuiIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS4reWbvSIsCiAgICAgICAgICAgICAgICAidiI6ICLkuK3lm70iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS4reWbveWPsOa5viIsCiAgICAgICAgICAgICAgICAidiI6ICLkuK3lm73lj7Dmub4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS4reWbvemmmea4ryIsCiAgICAgICAgICAgICAgICAidiI6ICLkuK3lm73pppnmuK8iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIue+juWbvSIsCiAgICAgICAgICAgICAgICAidiI6ICLnvo7lm70iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWFtuS7liIsCiAgICAgICAgICAgICAgICAidiI6ICLlhbbku5YiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogIm11c2ljX3Nob3dfdHlwZSIsCiAgICAgICAgICAgICJuYW1lIjogIuWFqOmDqOexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6jnsbvlnosiLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmvJTllLHkvJoiLAogICAgICAgICAgICAgICAgInYiOiAi5ryU5ZSx5LyaIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJsaXZl546w5Zy6IiwKICAgICAgICAgICAgICAgICJ2IjogImxpdmXnjrDlnLoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumigeWlluWFuOekvCIsCiAgICAgICAgICAgICAgICAidiI6ICLpooHlpZblhbjnpLwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiInui5iCIsCiAgICAgICAgICAgICAgICAidiI6ICLoiJ7ouYgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuW9seinhuWOn+WjsCIsCiAgICAgICAgICAgICAgICAidiI6ICLlvbHop4bljp/lo7AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumfs+S5kOi+vuS6uiIsCiAgICAgICAgICAgICAgICAidiI6ICLpn7PkuZDovr7kuroiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumfs+S5kOaVmeWtpiIsCiAgICAgICAgICAgICAgICAidiI6ICLpn7PkuZDmlZnlraYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumfs+S5kOe6quW9leeJhyIsCiAgICAgICAgICAgICAgICAidiI6ICLpn7PkuZDnuqrlvZXniYciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIumfs+S5kG12IiwKICAgICAgICAgICAgICAgICJ2IjogIumfs+S5kG12IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpn7PkuZDoh6rliLYiLAogICAgICAgICAgICAgICAgInYiOiAi6Z+z5LmQ6Ieq5Yi2IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJzb3J0IiwKICAgICAgICAgICAgIm5hbWUiOiAi57u85ZCI5o6S5bqPIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIue7vOWQiOaOkuW6jyIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOWkmuaSreaUviIsCiAgICAgICAgICAgICAgICAidiI6ICIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDlpb3or4QiLAogICAgICAgICAgICAgICAgInYiOiAiMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5paw5LiK57q/IiwKICAgICAgICAgICAgICAgICJ2IjogIjEiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIua4uOaIjyI6IFt7CiAgICAgICAgICAgICJrZXkiOiAiZGl2aXNpb24iLAogICAgICAgICAgICAibmFtZSI6ICLlhajpg6jkuJPljLoiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOo5LiT5Yy6IiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMTA4MFAiLAogICAgICAgICAgICAgICAgInYiOiAiMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54us5pKtIiwKICAgICAgICAgICAgICAgICJ2IjogIjYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIlZJUCIsCiAgICAgICAgICAgICAgICAidiI6ICI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhY3otLkiLAogICAgICAgICAgICAgICAgInYiOiAiNSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiZ2FtZV9icmFuZCIsCiAgICAgICAgICAgICJuYW1lIjogIuWFqOmDqOiKguebriIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6joioLnm64iLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnjovogIXojaPogIAiLAogICAgICAgICAgICAgICAgInYiOiAi546L6ICF6I2j6ICAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlkozlubPnsr7oi7EiLAogICAgICAgICAgICAgICAgInYiOiAi5ZKM5bmz57K+6IuxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnu53lnLDmsYLnlJ8iLAogICAgICAgICAgICAgICAgInYiOiAi57ud5Zyw5rGC55SfIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLov7fkvaDkuJbnlYwiLAogICAgICAgICAgICAgICAgInYiOiAi6L+35L2g5LiW55WMIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJHnmoTkuJbnlYwiLAogICAgICAgICAgICAgICAgInYiOiAi5oiR55qE5LiW55WMIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmpI3nianlpKfmiJjlg7XlsLgiLAogICAgICAgICAgICAgICAgInYiOiAi5qSN54mp5aSn5oiY5YO15bC4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmlrnoiJ/nlJ/lrZjov5vljJYiLAogICAgICAgICAgICAgICAgInYiOiAi5pa56Iif55Sf5a2Y6L+b5YyWIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnrKzkupTkurrmoLwiLAogICAgICAgICAgICAgICAgInYiOiAi56ys5LqU5Lq65qC8IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnjKvlkozogIHpvKAiLAogICAgICAgICAgICAgICAgInYiOiAi54yr5ZKM6ICB6bygIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLpppnogqDmtL7lr7kiLAogICAgICAgICAgICAgICAgInYiOiAi6aaZ6IKg5rS+5a+5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnqb/otorngavnur8iLAogICAgICAgICAgICAgICAgInYiOiAi56m/6LaK54Gr57q/IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLoi7Hpm4TogZTnm58iLAogICAgICAgICAgICAgICAgInYiOiAi6Iux6ZuE6IGU55ufIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJ0YWdzIiwKICAgICAgICAgICAgIm5hbWUiOiAi5YWo6YOo57G75Z6LIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqOexu+WeiyIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIui1hOiuryIsCiAgICAgICAgICAgICAgICAidiI6ICLotYTorq8iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuino+ivtCIsCiAgICAgICAgICAgICAgICAidiI6ICLop6Por7QiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS4u+aSrSIsCiAgICAgICAgICAgICAgICAidiI6ICLkuLvmkq0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaymeebkiIsCiAgICAgICAgICAgICAgICAidiI6ICLmspnnm5IiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuebiuaZuiIsCiAgICAgICAgICAgICAgICAidiI6ICLnm4rmmboiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueUn+WtmCIsCiAgICAgICAgICAgICAgICAidiI6ICLnlJ/lrZgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueUteWtkOernuaKgCIsCiAgICAgICAgICAgICAgICAidiI6ICLnlLXlrZDnq57mioAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWNleacuuS4u+acuiIsCiAgICAgICAgICAgICAgICAidiI6ICLljZXmnLrkuLvmnLoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuecn+S6uuengCIsCiAgICAgICAgICAgICAgICAidiI6ICLnnJ/kurrnp4AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWKqOeUuyIsCiAgICAgICAgICAgICAgICAidiI6ICLliqjnlLsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuebmOeCuSIsCiAgICAgICAgICAgICAgICAidiI6ICLnm5jngrkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIua4uOaIj+aWh+WMliIsCiAgICAgICAgICAgICAgICAidiI6ICLmuLjmiI/mlofljJYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIua4uOaIj+iKguebriIsCiAgICAgICAgICAgICAgICAidiI6ICLmuLjmiI/oioLnm64iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuivhOa1iyIsCiAgICAgICAgICAgICAgICAidiI6ICLor4TmtYsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWwhOWHuyIsCiAgICAgICAgICAgICAgICAidiI6ICLlsITlh7siCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuetlueVpSIsCiAgICAgICAgICAgICAgICAidiI6ICLnrZbnlaUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWGkumZqSIsCiAgICAgICAgICAgICAgICAidiI6ICLlhpLpmakiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWNs+aXtuaImOeVpSIsCiAgICAgICAgICAgICAgICAidiI6ICLljbPml7bmiJjnlaUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWNoeeJjCIsCiAgICAgICAgICAgICAgICAidiI6ICLljaHniYwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuinkuiJsuaJrua8lCIsCiAgICAgICAgICAgICAgICAidiI6ICLop5LoibI+5omu5ryUIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJzb3J0IiwKICAgICAgICAgICAgIm5hbWUiOiAi57u85ZCI5o6S5bqPIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIue7vOWQiOaOkuW6jyIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacgOWkmuaSreaUviIsCiAgICAgICAgICAgICAgICAidiI6ICIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnIDlpb3or4QiLAogICAgICAgICAgICAgICAgInYiOiAiMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyA5paw5LiK57q/IiwKICAgICAgICAgICAgICAgICJ2IjogIjEiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0KICAgIH0sCiAgICBoZWFkZXJzOiB7CiAgICAgICAgJ1VzZXItQWdlbnQnOiAnUENfVUEnLAogICAgICAgICdDb29raWUnOiAnY25hPVZ2TnZHWDNlMHl3Q0FhdlZFWGxuQTJiZzsgX195c3VpZD0xNjI2Njc2MjI4MzQ1UmwxOyBfX2F5ZnQ9MTY1MjQzNDA0ODY0NzsgX19hcnljaWQ9ZG0tMS0wMDsgX19hcmNtcz1kbS0xLTAwOyBfX2F5dnN0cD04NTsgX19hcnB2aWQ9MTY2NzIwNDAyMzEwMGNXV2RnTS0xNjY3MjA0MDIzMTEyOyBfX2F5c2NudD0xMDsgX19heXBzdHA9NjA7IGlzZz1CQndjcXh2dmszQnhrV1FHdWdiTHBVU2Y3VHJPbGNDX1U3R0FqX1lkZllmdlFiekxIcVlHVDRIZ3A2bTVUdmdYOyB0ZnN0az1jM0pPQnlZVUgyMGlsVnVjTE9oaDBwQ3RFNDBsWmZHYy1QakxITExmdVg3U1dOeUFpUXZrZU1Cc0l3N1BXREMuLjsgbD1lQlFndVMtUGpkSkZHSlQtQk9md291cnphNzdPU0lSQV91UHphTmJNaU9DUE9iMUI1VXhmVzZ5SHA0VDZDM0dWaHNHSlIzcnAydW1IQmVZQnFRZC1ueHZPRjhxbVNWRG1uJywKICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3d3dy55b3VrdS5jb20nLAogICAgfSwKICAgIHRpbWVvdXQ6IDUwMDAsCiAgICBjbGFzc19uYW1lOiAn55S16KeG5YmnJueUteW9sSbnu7zoibom5Yqo5ryrJuWwkeWEvybnuqrlvZXniYcm5paH5YyWJuS6suWtkCbmlZnogrIm5pCe56yRJueUn+a0uybkvZPogrIm6Z+z5LmQJua4uOaIjycsCiAgICBjbGFzc191cmw6ICfnlLXop4bliacm55S15b2xJue7vOiJuibliqjmvKsm5bCR5YS/Jue6quW9leeJhybmlofljJYm5Lqy5a2QJuaVmeiCsibmkJ7nrJEm55Sf5rS7JuS9k+iCsibpn7PkuZAm5ri45oiPJywKICAgIGxpbWl0OiAyMCwKICAgIHBsYXlfcGFyc2U6IHRydWUsCiAgICBsYXp5OiAkanMudG9TdHJpbmcoKCkgPT4gewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGxldCBhcGkgPSAiIiArIGlucHV0LnNwbGl0KCI/IilbMF07CiAgICAgICAgICAgIGNvbnNvbGUubG9nKGFwaSk7CiAgICAgICAgICAgIGxldCByZXNwb25zZSA9IGZldGNoKGFwaSwgewogICAgICAgICAgICAgICAgbWV0aG9kOiAnZ2V0JywKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdva2h0dHAvMy4xNC45JywKICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGxldCBiYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZSk7CiAgICAgICAgICAgIGlmIChiYXRhLnVybC5pbmNsdWRlcygiaHR0cCIpKSB7CiAgICAgICAgICAgICAgICBpbnB1dCA9IHsKICAgICAgICAgICAgICAgICAgICBwYXJzZTogMCwKICAgICAgICAgICAgICAgICAgICB1cmw6IGJhdGEudXJsLAogICAgICAgICAgICAgICAgICAgIGp4OiAwLAogICAgICAgICAgICAgICAgICAgIGRhbm1ha3U6ICJodHRwOi8vMTI3LjAuMC4xOjk5NzgvcHJveHk/ZG89ZGFubXUmc2l0ZT1qcyZ1cmw9aHR0cDovL2RtLnF4cTYuY29tL3p5L2FwaS5waHA/dXJsPSIgKyBpbnB1dC5zcGxpdCgiPyIpWzBdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaW5wdXQgPSB7CiAgICAgICAgICAgICAgICAgICAgcGFyc2U6IDAsCiAgICAgICAgICAgICAgICAgICAgdXJsOiBpbnB1dC5zcGxpdCgiPyIpWzBdLAogICAgICAgICAgICAgICAgICAgIGp4OiAxLAogICAgICAgICAgICAgICAgICAgIGRhbm1ha3U6ICJodHRwOi8vMTI3LjAuMC4xOjk5NzgvcHJveHk/ZG89ZGFubXUmc2l0ZT1qcyZ1cmw9aHR0cDovL2RtLnF4cTYuY29tL3p5L2FwaS5waHA/dXJsPSIgKyBpbnB1dC5zcGxpdCgiPyIpWzBdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIGlucHV0ID0gewogICAgICAgICAgICAgICAgcGFyc2U6IDAsCiAgICAgICAgICAgICAgICB1cmw6IGlucHV0LnNwbGl0KCI/IilbMF0sCiAgICAgICAgICAgICAgICBqeDogMSwKICAgICAgICAgICAgICAgIGRhbm1ha3U6ICJodHRwOi8vMTI3LjAuMC4xOjk5NzgvcHJveHk/ZG89ZGFubXUmc2l0ZT1qcyZ1cmw9aHR0cDovL2RtLnF4cTYuY29tL3p5L2FwaS5waHA/dXJsPSIgKyBpbnB1dC5zcGxpdCgiPyIpWzBdCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfSksCiAgICDkuIDnuqc6ICRqcy50b1N0cmluZygoKSA9PiB7CiAgICAgICAgbGV0IGQgPSBbXTsKICAgICAgICBNWV9GTC50eXBlID0gTVlfQ0FURTsKICAgICAgICBsZXQgZmwgPSBzdHJpbmdpZnkoTVlfRkwpOwogICAgICAgIGZsID0gZW5jb2RlVXJsKGZsKTsKICAgICAgICBpbnB1dCA9IGlucHV0LnNwbGl0KCJ7IilbMF0gKyBmbDsKICAgICAgICBpZiAoTVlfUEFHRSA+IDEpIHsKICAgICAgICAgICAgbGV0IG9sZF9zZXNzaW9uID0gZ2V0SXRlbSgieWtfc2Vzc2lvbl8iICsgTVlfQ0FURSwgInt9Iik7CiAgICAgICAgICAgIGlmIChNWV9QQUdFID09PSAyKSB7CiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoIm9wdGlvblJlZnJlc2g9MSIsICJzZXNzaW9uPSIgKyBlbmNvZGVVcmwob2xkX3Nlc3Npb24pKQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKCJvcHRpb25SZWZyZXNoPTEiLCAic2Vzc2lvbj0iICsgZW5jb2RlVXJsKG9sZF9zZXNzaW9uKSkKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZXQgaHRtbCA9IGZldGNoKGlucHV0LCBmZXRjaF9wYXJhbXMpOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGh0bWwgPSBKU09OLnBhcnNlKGh0bWwpOwogICAgICAgICAgICBsZXQgbGlzdHMgPSBodG1sLmRhdGEuZmlsdGVyRGF0YS5saXN0RGF0YTsKICAgICAgICAgICAgbGV0IHNlc3Npb24gPSBodG1sLmRhdGEuZmlsdGVyRGF0YS5zZXNzaW9uOwogICAgICAgICAgICBzZXNzaW9uID0gc3RyaW5naWZ5KHNlc3Npb24pOwogICAgICAgICAgICBpZiAoc2Vzc2lvbiAhPT0gZ2V0SXRlbSgieWtfc2Vzc2lvbl8iICsgTVlfQ0FURSwgInt9IikpIHsKICAgICAgICAgICAgICAgIHNldEl0ZW0oInlrX3Nlc3Npb25fIiArIE1ZX0NBVEUsIHNlc3Npb24pCiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGlzdHMuZm9yRWFjaChmdW5jdGlvbihpdCkgewogICAgICAgICAgICAgICAgbGV0IHZpZDsKICAgICAgICAgICAgICAgIGlmIChpdC52aWRlb0xpbmsuaW5jbHVkZXMoImlkXyIpKSB7CiAgICAgICAgICAgICAgICAgICAgdmlkID0gaXQudmlkZW9MaW5rLnNwbGl0KCJpZF8iKVsxXS5zcGxpdCgiLmh0bWwiKVswXQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB2aWQgPSAibXNlYXJjaDoiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkLnB1c2goewogICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdC50aXRsZSwKICAgICAgICAgICAgICAgICAgICBpbWc6IGl0LmltZywKICAgICAgICAgICAgICAgICAgICBkZXNjOiBpdC5zdW1tYXJ5LAogICAgICAgICAgICAgICAgICAgIHVybDogImh0dHBzOi8vc2VhcmNoLnlvdWt1LmNvbS9hcGkvc2VhcmNoP2FwcFNjZW5lPXNob3dfZXBpc29kZSZzaG93SWRzPSIgKyB2aWQsCiAgICAgICAgICAgICAgICAgICAgY29udGVudDogaXQuc3ViVGl0bGUKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIH0pCiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICBsb2coIuS4gOe6p+WIl+ihqOino+aekOWPkeeUn+mUmeivrzoiICsgZS5tZXNzYWdlKQogICAgICAgIH0KICAgICAgICBzZXRSZXN1bHQoZCk7CiAgICB9KSwKICAgIOS6jOe6pzogJGpzLnRvU3RyaW5nKCgpID0+IHsKICAgICAgICB2YXIgZCA9IFtdOwogICAgICAgIFZPRCA9IHt9OwogICAgICAgIGxldCBodG1sID0gcmVxdWVzdChpbnB1dCk7CiAgICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGh0bWwpOwogICAgICAgIGlmICgva2V5d29yZC8udGVzdChpbnB1dCkpIHsKICAgICAgICAgICAgaW5wdXQgPSAiaHR0cHM6Ly9zZWFyY2gueW91a3UuY29tL2FwaS9zZWFyY2g/YXBwU2NlbmU9c2hvd19lcGlzb2RlJnNob3dJZHM9IiArIGpzb24ucGFnZUNvbXBvbmVudExpc3RbMF0uY29tbW9uRGF0YS5zaG93SWQ7CiAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGZldGNoKE1ZX1VSTCwgZmV0Y2hfcGFyYW1zKSkKICAgICAgICB9CiAgICAgICAgbGV0IHZpZGVvX2xpc3RzID0ganNvbi5zZXJpc2VzTGlzdDsKICAgICAgICB2YXIgbmFtZSA9IGpzb24uc291cmNlTmFtZTsKICAgICAgICBpZiAoL+S8mOmFty8udGVzdChuYW1lKSAmJiB2aWRlb19saXN0cy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGxldCBvdXJsID0gImh0dHBzOi8vdi55b3VrdS5jb20vdl9zaG93L2lkXyIgKyB2aWRlb19saXN0c1swXS52aWRlb0lkICsgIi5odG1sIjsKICAgICAgICAgICAgbGV0IF9pbWcgPSB2aWRlb19saXN0c1swXS50aHVtYlVybDsKICAgICAgICAgICAgbGV0IGh0bWwgPSBmZXRjaChvdXJsLCB7CiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAgICAgUmVmZXJlcjogImh0dHBzOi8vdi55b3VrdS5jb20vIiwKICAgICAgICAgICAgICAgICAgICAiVXNlci1BZ2VudCI6IFBDX1VBCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBsZXQganNvbiA9IC9fX0lOSVRJQUxfREFUQV9fLy50ZXN0KGh0bWwpID8gaHRtbC5zcGxpdCgid2luZG93Ll9fSU5JVElBTF9EQVRBX18gPSIpWzFdLnNwbGl0KCI7IilbMF0gOiAie30iOwogICAgICAgICAgICBpZiAoanNvbiA9PT0gInt9IikgewogICAgICAgICAgICAgICAgbG9nKCLop6blj5HkuobkvJjphbfkurrmnLrpqozor4EiKTsKICAgICAgICAgICAgICAgIFZPRC52b2RfcmVtYXJrcyA9IG91cmw7CiAgICAgICAgICAgICAgICBWT0Qudm9kX3BpYyA9IF9pbWc7CiAgICAgICAgICAgICAgICBWT0Qudm9kX25hbWUgPSB2aWRlb19saXN0c1swXS50aXRsZS5yZXBsYWNlKC8oXGQrKS9nLCAiIik7CiAgICAgICAgICAgICAgICBWT0Qudm9kX2NvbnRlbnQgPSAi6Kem5Y+R5LqG5LyY6YW35Lq65py66aqM6K+BLOacrOasoeacquiOt+WPluivpuaDhSzkvYbkuI3lvbHlk43mkq3mlL4oIiArIG91cmwgKyAiKSIKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAganNvbiA9IEpTT04ucGFyc2UoanNvbik7CiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBqc29uLmRhdGEuZGF0YTsKICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YV9leHRyYSA9IGRhdGEuZGF0YS5leHRyYTsKICAgICAgICAgICAgICAgICAgICBsZXQgaW1nID0gZGF0YV9leHRyYS5zaG93SW1nVjsKICAgICAgICAgICAgICAgICAgICBsZXQgbW9kZWwgPSBqc29uLmRhdGEubW9kZWw7CiAgICAgICAgICAgICAgICAgICAgbGV0IG0gPSBtb2RlbC5kZXRhaWwuZGF0YS5ub2Rlc1swXS5ub2Rlc1swXS5ub2Rlc1swXS5kYXRhOwogICAgICAgICAgICAgICAgICAgIGxldCBfdHlwZSA9IG0uc2hvd0dlbnJlOwogICAgICAgICAgICAgICAgICAgIGxldCBfZGVzYyA9IG0udXBkYXRlSW5mbyB8fCBtLnN1YnRpdGxlOwogICAgICAgICAgICAgICAgICAgIGxldCBKSiA9IG0uZGVzYzsKICAgICAgICAgICAgICAgICAgICBsZXQgX3RpdGxlID0gbS5pbnRyb1RpdGxlOwogICAgICAgICAgICAgICAgICAgIFZPRC52b2RfcGljID0gaW1nOwogICAgICAgICAgICAgICAgICAgIFZPRC52b2RfbmFtZSA9IF90aXRsZTsKICAgICAgICAgICAgICAgICAgICBWT0Qudm9kX3R5cGUgPSBfdHlwZTsKICAgICAgICAgICAgICAgICAgICBWT0Qudm9kX3JlbWFya3MgPSBfZGVzYzsKICAgICAgICAgICAgICAgICAgICBWT0Qudm9kX2NvbnRlbnQgPSBKSgogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIGxvZygi5rW35oql5riy5p+T5Y+R55Sf6ZSZ6K+vOiIgKyBlLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgICAgIHByaW50KGpzb24pOwogICAgICAgICAgICAgICAgICAgIFZPRC52b2RfcmVtYXJrcyA9IG5hbWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIS/kvJjphbcvLnRlc3QobmFtZSkpIHsKICAgICAgICAgICAgVk9ELnZvZF9jb250ZW50ID0gIumdnuiHquWutuaSreaUvua6kCzmmoLml6Dop4bpopHnroDku4vlj4rmtbfmiqUiOwogICAgICAgICAgICBWT0Qudm9kX3JlbWFya3MgPSBuYW1lCiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBhZGhlYWQodXJsKSB7CiAgICAgICAgICAgIHJldHVybiB1cmxlbmNvZGUodXJsKQogICAgICAgIH0KCiAgICAgICAgcGxheV91cmwgPSBwbGF5X3VybC5yZXBsYWNlKCImcGxheV91cmw9IiwgIiZ0eXBlPWpzb24mcGxheV91cmw9Iik7CiAgICAgICAgdmlkZW9fbGlzdHMuZm9yRWFjaChmdW5jdGlvbihpdCkgewogICAgICAgICAgICBsZXQgdXJsID0gImh0dHBzOi8vdi55b3VrdS5jb20vdl9zaG93L2lkXyIgKyBpdC52aWRlb0lkICsgIi5odG1sIjsKICAgICAgICAgICAgaWYgKGl0LnRodW1iVXJsKSB7CiAgICAgICAgICAgICAgICBkLnB1c2goewogICAgICAgICAgICAgICAgICAgIGRlc2M6IGl0LnNob3dWaWRlb1N0YWdlID8gaXQuc2hvd1ZpZGVvU3RhZ2UucmVwbGFjZSgi5pyfIiwgIumbhiIpIDogaXQuZGlzcGxheU5hbWUsCiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogaXQudGh1bWJVcmwsCiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0LnRpdGxlLAogICAgICAgICAgICAgICAgICAgIHVybDogcGxheV91cmwgKyBhZGhlYWQodXJsKQogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lICE9PSAi5LyY6YW3IikgewogICAgICAgICAgICAgICAgZC5wdXNoKHsKICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXQuZGlzcGxheU5hbWUgPyBpdC5kaXNwbGF5TmFtZSA6IGl0LnRpdGxlLAogICAgICAgICAgICAgICAgICAgIHVybDogcGxheV91cmwgKyBhZGhlYWQoaXQudXJsKQogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIFZPRC52b2RfcGxheV9mcm9tID0gbmFtZTsKICAgICAgICBWT0Qudm9kX3BsYXlfdXJsID0gZC5tYXAoZnVuY3Rpb24oaXQpIHsKICAgICAgICAgICAgICAgIHJldHVybiBpdC50aXRsZSArICIkIiArIGl0LnVybAogICAgICAgICAgICB9KQogICAgICAgICAgICAuam9pbigiIyIpOwogICAgfSksCgogICAg5pCc57SiOiAkanMudG9TdHJpbmcoKCkgPT4gewogICAgICAgIHZhciBkID0gW107CiAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGlucHV0KTsKICAgICAgICBsZXQganNvbiA9IEpTT04ucGFyc2UoaHRtbCk7CiAgICAgICAganNvbi5wYWdlQ29tcG9uZW50TGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGl0KSB7CiAgICAgICAgICAgIGlmIChpdC5oYXNPd25Qcm9wZXJ0eSgiY29tbW9uRGF0YSIpKSB7CiAgICAgICAgICAgICAgICBpdCA9IGl0LmNvbW1vbkRhdGE7CiAgICAgICAgICAgICAgICBkLnB1c2goewogICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdC50aXRsZURUTy5kaXNwbGF5TmFtZSwKICAgICAgICAgICAgICAgICAgICBpbWc6IGl0LnBvc3RlckRUTy52VGh1bWJVcmwsCiAgICAgICAgICAgICAgICAgICAgZGVzYzogaXQuc3RyaXBlQm90dG9tLAogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGl0LnVwZGF0ZU5vdGljZSArICIgIiArIGl0LmZlYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiaHR0cHM6Ly9zZWFyY2gueW91a3UuY29tL2FwaS9zZWFyY2g/YXBwU2NlbmU9c2hvd19lcGlzb2RlJnNob3dJZHM9IiArIGl0LnNob3dJZCArICImYXBwQ2FsbGVyPWg1IgogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHNldFJlc3VsdChkKQogICAgfSksCn0=
\ No newline at end of file
diff --git a/潇洒/js/YSJ.js b/潇洒/js/YSJ.js
new file mode 100644
index 0000000..22a4088
--- /dev/null
+++ b/潇洒/js/YSJ.js
@@ -0,0 +1 @@
+dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+W8guS4lueVjOWKqOa8qycsCiAgICBob3N0OiAnaHR0cHM6Ly93d3cuZG1taWt1LmNvbS8nLAogICAgaG9tZVVybDogJy9pbmRleC5waHAvdm9kL3Nob3cvaWQvMjIuaHRtbCcsCiAgICAvLyB1cmw6Jy9pbmRleC5waHAvdm9kL3Nob3cvY2xhc3MvZnljbGFzcy9pZC8yMC9wYWdlL2Z5cGFnZS5odG1sJywKICAgIHVybDogJy9pbmRleC5waHAvdm9kL3Nob3cvZnljbGFzc2Z5ZmlsdGVyLmh0bWwnLAogICAgZmlsdGVyYWJsZTogMSwKICAgIGZpbHRlcl91cmw6ICd7e2ZsLnR5cGV9fS9pZC8yMC9wYWdlL2Z5cGFnZXt7ZmwueWVhcn19JywKICAgIGZpbHRlcjogewogICAgICAgICJhcmVhL+aXpeacrCI6IFt7CiAgICAgICAgICAgICJrZXkiOiAidHlwZSIsCiAgICAgICAgICAgICJuYW1lIjogIuexu+WeiyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICJPVkEiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL09WQSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Ymn5Zy654mIIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/liaflnLrniYgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaXoOS/riIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3MvQkTml6Dkv64iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiQneiOiSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv6JCd6I6JIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlrablnJIiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+WtpuWckiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5ZCO5a6rIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/lkI7lrqsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaBi+eIsSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5oGL54ixIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLng63ooYAiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+eDreihgCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56We6a2UIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/npZ7prZQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWlh+W5uyIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5aWH5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmsrvmhIgiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+ayu+aEiCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pCe56yRIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/mkJ7nrJEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueZvuWQiCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv55m+5ZCIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpLpmakiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+WGkumZqSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6a2U5rOVIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/prZTms5UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacuuaImCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5py65oiYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjkuokiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aImOS6iSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54qv572qIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/niq/nvaoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaCrOeWkSIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5oKs55aRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmjqjnkIYiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+aOqOeQhiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56eR5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/np5HlubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuernuaKgCIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv56ue5oqAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLov5DliqgiLAogICAgICAgICAgICAgICAgInYiOiAiL2NsYXNzL+i/kOWKqCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6IC9576OIiwKICAgICAgICAgICAgICAgICJ2IjogIi9jbGFzcy/ogL3nvo4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWFtuS7liIsCiAgICAgICAgICAgICAgICAidiI6ICIvY2xhc3Mv5YW25LuWIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJ5ZWFyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5bm05Lu9IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE0IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTMiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDEyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDExIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTAiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA4IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDgiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgImFyZWEv5Lit5ZyLIjogW3sKICAgICAgICAgICAgImtleSI6ICJ5ZWFyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5bm05Lu9IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE0IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTMiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMiIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDEyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDExIiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTAiLAogICAgICAgICAgICAgICAgInYiOiAiL3llYXIvMjAxMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAwOSIsCiAgICAgICAgICAgICAgICAidiI6ICIveWVhci8yMDA5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDA4IiwKICAgICAgICAgICAgICAgICJ2IjogIi95ZWFyLzIwMDgiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0KICAgIH0sCiAgICBzZWFyY2hVcmw6ICcvaW5kZXgucGhwL3ZvZC9zZWFyY2gvcGFnZS9meXBhZ2Uvd2QvKiouaHRtbCcsCiAgICBzZWFyY2hhYmxlOiAyLAogICAgcXVpY2tTZWFyY2g6IDAsCiAgICBoZWFkZXJzOiB7CiAgICAgICAgJ1VzZXItQWdlbnQnOiAnTU9CSUxFX1VBJwogICAgfSwKICAgIHRpbWVvdXQ6IDUwMDAsIC8v572R56uZ55qE5YWo5bGA6K+35rGC6LaF5pe2LOm7mOiupOaYrzMwMDDmr6vnp5IKICAgIGNsYXNzX25hbWU6ICfml6XmvKsm5Zu95ryrJywKICAgIGNsYXNzX3VybDogJ2FyZWEv5pel5pysJmFyZWEv5Lit5ZyLJywKICAgIHBsYXlfcGFyc2U6IHRydWUsCiAgICBsYXp5OiBganM6CiAgICAgICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKHJlcXVlc3QoaW5wdXQpLm1hdGNoKC9yIHBsYXllcl8uKj89KC4qPyk8LylbMV0pOwogICAgICAgIHZhciB1cmwgPSBodG1sLnVybDsKICAgICAgICB2YXIgZnJvbSA9IGh0bWwuZnJvbTsKICAgICAgICBpZiAoaHRtbC5lbmNyeXB0ID09ICcxJykgewogICAgICAgICAgICB1cmwgPSB1bmVzY2FwZSh1cmwpCiAgICAgICAgfSBlbHNlIGlmIChodG1sLmVuY3J5cHQgPT0gJzInKSB7CiAgICAgICAgICAgIHVybCA9IHVuZXNjYXBlKGJhc2U2NERlY29kZSh1cmwpKQogICAgICAgIH0KICAgICAgICBpZiAoL20zdTh8bXA0Ly50ZXN0KHVybCkpIHsKICAgICAgICAgICAgaW5wdXQgPSB1cmwKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgTWFjUGxheWVyQ29uZmlnPXt9OwogICAgICAgICAgICBldmFsKGZldGNoKEhPU1QgKyAiL3N0YXRpYy9qcy9wbGF5ZXJjb25maWcuanMiKS5yZXBsYWNlKCd2YXIgTWFjJywnTWFjJykpOwogICAgICAgICAgICB2YXIganggPSBNYWNQbGF5ZXJDb25maWcucGxheWVyX2xpc3RbZnJvbV0ucGFyc2U7CiAgICAgICAgICAgIGlmIChqeCA9PSAnJykgewogICAgICAgICAgICAgICAganggPSBNYWNQbGF5ZXJDb25maWcucGFyc2UKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGp4LnN0YXJ0c1dpdGgoIi8iKSkgewogICAgICAgICAgICAgICAganggPSAiaHR0cHM6IiArIGp4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlucHV0PXsKICAgICAgICAgICAgICAgIGp4OjAsCiAgICAgICAgICAgICAgICB1cmw6angrdXJsLAogICAgICAgICAgICAgICAgcGFyc2U6MSwKICAgICAgICAgICAgICAgIGhlYWRlcjogSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgICAgICdyZWZlcmVyJzogSE9TVAogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIGAsCiAgICBsaW1pdDogNiwKICAgIC8vIOWbvueJh+adpea6kDonQFJlZmVyZXI9aHR0cHM6Ly9hcGkuZG91YmFuLmNvbS9AVXNlci1BZ2VudD1Nb3ppbGxhLzUuMCUyMChXaW5kb3dzJTIwTlQlMjAxMC4wOyUyMFdpbjY0OyUyMHg2NCklMjBBcHBsZVdlYktpdC81MzcuMzYlMjAoS0hUTUwsJTIwbGlrZSUyMEdlY2tvKSUyMENocm9tZS8xMTMuMC4wLjAlMjBTYWZhcmkvNTM3LjM2JywKICAgIOaOqOiNkDogJyonLAogICAg5LiA57qnOiAnLnZvZGxpc3Rfd2kmJmxpOy5sYXp5bG9hZCYmdGl0bGU7Lmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsOy5waWNfdGV4dCYmVGV4dDthJiZocmVmJywKICAgIOS6jOe6pzogewogICAgICAgICJ0aXRsZSI6ICJoMiYmVGV4dDtsaS5kYXRhLS1zcGFuOmVxKDApJiZUZXh0IiwKICAgICAgICAiaW1nIjogIi5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbCIsCiAgICAgICAgImRlc2MiOiAibGkuZGF0YS0tc3BhbjplcSgxKSYmVGV4dDs7O2xpLmRhdGEtLXNwYW46ZXEoMikmJlRleHQ7bGkuZGF0YS0tc3BhbjplcSgzKSYmVGV4dCIsCiAgICAgICAgImNvbnRlbnQiOiAiLmZ1bGxfdGV4dCYmc3BhbiYmVGV4dCIsCiAgICAgICAgInRhYnMiOiBganM6CiAgICAgICAgICAgIFRBQlMgPSBbXTsKICAgICAgICAgICAgbGV0IHRhYnMgPSBwZGZhKGh0bWwsICcjTnVtVGFiJiZhJyk7CiAgICAgICAgICAgIHRhYnMuZm9yRWFjaCgoaXQpID0+IHsKICAgICAgICAgICAgICAgIFRBQlMucHVzaChwZGZoKGl0LCAnYSYmYWx0JykpCiAgICAgICAgICAgIH0pOwogICAgICAgIGAsCiAgICAgICAgLy8gImxpc3RzIjogIi5jb250ZW50X3BsYXlsaXN0Om5vdCgubGlzdF9zY3JvbGwpOmVxKCNpZCkgYSIKICAgICAgICAibGlzdHMiOiAiZGl2LnBsYXlsaXN0X2Z1bGw6ZXEoI2lkKSBsaSIKICAgIH0sCiAgICDmkJzntKI6ICdsaS5zZWFyY2hsaXN0X2l0ZW07KjsqOyo7KicsCn0=
\ No newline at end of file
diff --git a/潇洒/js/YXDM.js b/潇洒/js/YXDM.js
new file mode 100644
index 0000000..614a1c6
--- /dev/null
+++ b/潇洒/js/YXDM.js
@@ -0,0 +1 @@
+Ly8g5Y+R5biD6aG1IGh0dHBzOi8vYWNnZmFucy5vcmcvcHViLmh0bWwKdmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJ+aAoeiQseWKqOa8qycsCiAgICAvLyBob3N0OidodHRwczovL3d3dy55eGRtbG92ZS5jb20nLAogICAgaG9zdDogJ2h0dHBzOi8vYWNnZmFucy5vcmcvcHViLmh0bWwnLAogICAgaG9zdEpzOiAncHJpbnQoSE9TVCk7bGV0IGh0bWw9cmVxdWVzdChIT1NULHtoZWFkZXJzOnsiVXNlci1BZ2VudCI6UENfVUF9fSk7bGV0IHNyYyA9IGpzcC5wZGZoKGh0bWwsInA6ZXEoMCkmJmEmJlRleHQiKTtwcmludChzcmMpO0hPU1Q9c3JjJywgLy/nvZHpobXln5/lkI3moLnliqjmgIHmipPlj5Zqc+S7o+eggeOAgumAmui/h0hPU1Q96LWL5YC8CiAgICAvLyB1cmw6Jy9jYXRlZ29yeS5odG1sP2NoYW5uZWw9MTcmemhvbmdsZWk9ZnljbGFzcyZvcmRlcmJ5PXB1YmRhdGUmdG90YWxyZXN1bHQ9Mjk5OSZwYWdlbm89ZnlwYWdlJywKICAgIHVybDogJy9jYXRlZ29yeS5odG1sP2NoYW5uZWw9MTcmemhvbmdsZWk9ZnljbGFzc2Z5ZmlsdGVyJnBhZ2Vubz1meXBhZ2UnLAogICAgZmlsdGVyYWJsZTogMSwgLy/mmK/lkKblkK/nlKjliIbnsbvnrZvpgIksCiAgICBmaWx0ZXJfdXJsOiAnJnt7ZmwuYnkgb3IgIm9yZGVyYnk9cHViZGF0ZSJ9fSZ7e2ZsLnllYXJ9fSZ7e2ZsLmFyZWF9fSZ7e2ZsLnN0YX19Jnt7ZmwuY2xhc3N9fScsCiAgICBmaWx0ZXI6IHsKICAgICAgICAiVFYiOiBbewogICAgICAgICAgICAia2V5IjogInN0YSIsCiAgICAgICAgICAgICJuYW1lIjogIui/m+W6piIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLov57ovb3kuK0iLAogICAgICAgICAgICAgICAgInYiOiAic3RhdHVzPei/nui9veS4rSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5bey5a6M57uTIiwKICAgICAgICAgICAgICAgICJ2IjogInN0YXR1cz3lt7Llroznu5MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacquaSreaUviIsCiAgICAgICAgICAgICAgICAidiI6ICJzdGF0dXM95pyq5pKt5pS+IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJhcmVhIiwKICAgICAgICAgICAgIm5hbWUiOiAi5Zyw5Yy6IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaXpeacrCIsCiAgICAgICAgICAgICAgICAidiI6ICJhcmVhPeaXpeacrCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Lit5Zu9IiwKICAgICAgICAgICAgICAgICJ2IjogImFyZWE95Lit5Zu9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrKfnvo4iLAogICAgICAgICAgICAgICAgInYiOiAiYXJlYT3mrKfnvo4iCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku70iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMjUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjQiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjEiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTgiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTUiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE0IiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMyIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMTMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTIiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDEyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDExIiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMCIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMTAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuabtOaXqSIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMTDliY0iCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImNsYXNzIiwKICAgICAgICAgICAgIm5hbWUiOiAi5Ymn5oOFIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWGkumZqSIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeWGkumZqSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54Ot6KGAIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg954Ot6KGAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLniLHmg4UiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3niLHmg4UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaQnueskSIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeaQnueskSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5ZCO5a6rIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95ZCO5a6rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmoKHlm60iLAogICAgICAgICAgICAgICAgInYiOiAianFseD3moKHlm60iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacuuaImCIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeacuuaImCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5bm75oOzIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95bm75oOzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3np5HlubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuernuaKgCIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeernuaKgCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi55m+5ZCIIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg955m+5ZCIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLogL3nvo4iLAogICAgICAgICAgICAgICAgInYiOiAianFseD3ogL3nvo4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaCrOeWkSIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeaCrOeWkSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Ymn5oOFIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95Ymn5oOFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjkuokiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3miJjkuokiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaBkOaAliIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeaBkOaAliIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6L+Q5YqoIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg96L+Q5YqoIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliqjkvZwiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3liqjkvZwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuerpeivnSIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeerpeivnSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Y6G5Y+yIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95Y6G5Y+yIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnnJ/kuroiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3nnJ/kuroiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWls+aAp+WQkSIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeWls+aAp+WQkSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5rOh6Z2i55WqIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95rOh6Z2i55WqIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJieSIsCiAgICAgICAgICAgICJuYW1lIjogIuaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLml7bpl7QiLAogICAgICAgICAgICAgICAgInYiOiAib3JkZXJieT1wdWJkYXRlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLng63luqYiLAogICAgICAgICAgICAgICAgInYiOiAib3JkZXJieT1jbGljayIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAi5Ymn5Zy654mIIjogW3sKICAgICAgICAgICAgImtleSI6ICJzdGEiLAogICAgICAgICAgICAibmFtZSI6ICLov5vluqYiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6L+e6L295LitIiwKICAgICAgICAgICAgICAgICJ2IjogInN0YXR1cz3ov57ovb3kuK0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuW3suWujOe7kyIsCiAgICAgICAgICAgICAgICAidiI6ICJzdGF0dXM95bey5a6M57uTIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnKrmkq3mlL4iLAogICAgICAgICAgICAgICAgInYiOiAic3RhdHVzPeacquaSreaUviIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYXJlYSIsCiAgICAgICAgICAgICJuYW1lIjogIuWcsOWMuiIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLml6XmnKwiLAogICAgICAgICAgICAgICAgInYiOiAiYXJlYT3ml6XmnKwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuS4reWbvSIsCiAgICAgICAgICAgICAgICAidiI6ICJhcmVhPeS4reWbvSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5qyn576OIiwKICAgICAgICAgICAgICAgICJ2IjogImFyZWE95qyn576OIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJ5ZWFyIiwKICAgICAgICAgICAgIm5hbWUiOiAi5bm05Lu9IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjUiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDI1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI0IiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAyNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMyIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMjMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjIiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDIyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIxIiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAyMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMCIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMjAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTkiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDE5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE4IiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAxOCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNyIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMTciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTYiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDE2IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE1IiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAxNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNCIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMTQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTMiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDEzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEyIiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAxMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMSIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMTEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTAiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDEwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmm7Tml6kiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDEw5YmNIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJjbGFzcyIsCiAgICAgICAgICAgICJuYW1lIjogIuWJp+aDhSIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlhpLpmakiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3lhpLpmakiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueDreihgCIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeeDreihgCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54ix5oOFIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg954ix5oOFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmkJ7nrJEiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3mkJ7nrJEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWQjuWuqyIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeWQjuWuqyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5qCh5ZutIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95qCh5ZutIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmnLrmiJgiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3mnLrmiJgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuW5u+aDsyIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeW5u+aDsyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56eR5bm7IiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg956eR5bm7IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnq57mioAiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3nq57mioAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueZvuWQiCIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeeZvuWQiCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6IC9576OIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg96IC9576OIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgqznlpEiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3mgqznlpEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWJp+aDhSIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeWJp+aDhSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oiY5LqJIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95oiY5LqJIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmgZDmgJYiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3mgZDmgJYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIui/kOWKqCIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4Pei/kOWKqCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Yqo5L2cIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95Yqo5L2cIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnq6Xor50iLAogICAgICAgICAgICAgICAgInYiOiAianFseD3nq6Xor50iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWOhuWPsiIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeWOhuWPsiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi55yf5Lq6IiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg955yf5Lq6IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlpbPmgKflkJEiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3lpbPmgKflkJEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuazoemdoueVqiIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeazoemdoueVqiIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiYnkiLAogICAgICAgICAgICAibmFtZSI6ICLmjpLluo8iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5pe26Ze0IiwKICAgICAgICAgICAgICAgICJ2IjogIm9yZGVyYnk9cHViZGF0ZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54Ot5bqmIiwKICAgICAgICAgICAgICAgICJ2IjogIm9yZGVyYnk9Y2xpY2siCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIk9WQSI6IFt7CiAgICAgICAgICAgICJrZXkiOiAic3RhIiwKICAgICAgICAgICAgIm5hbWUiOiAi6L+b5bqmIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIui/nui9veS4rSIsCiAgICAgICAgICAgICAgICAidiI6ICJzdGF0dXM96L+e6L295LitIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlt7Llroznu5MiLAogICAgICAgICAgICAgICAgInYiOiAic3RhdHVzPeW3suWujOe7kyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pyq5pKt5pS+IiwKICAgICAgICAgICAgICAgICJ2IjogInN0YXR1cz3mnKrmkq3mlL4iCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImFyZWEiLAogICAgICAgICAgICAibmFtZSI6ICLlnLDljLoiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pel5pysIiwKICAgICAgICAgICAgICAgICJ2IjogImFyZWE95pel5pysIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLkuK3lm70iLAogICAgICAgICAgICAgICAgInYiOiAiYXJlYT3kuK3lm70iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuasp+e+jiIsCiAgICAgICAgICAgICAgICAidiI6ICJhcmVhPeasp+e+jiIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAieWVhciIsCiAgICAgICAgICAgICJuYW1lIjogIuW5tOS7vSIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDI1IiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAyNSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNCIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMjQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjMiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDIzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIyIiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAyMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMSIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMjEiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjAiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDIwIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE5IiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAxOSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOCIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMTgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTciLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDE3IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE2IiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAxNiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNSIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMTUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTQiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDE0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEzIiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAxMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMiIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMTIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTEiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDExIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDEwIiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAxMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pu05pepIiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAxMOWJjSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgICJrZXkiOiAiY2xhc3MiLAogICAgICAgICAgICAibmFtZSI6ICLliafmg4UiLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5YaS6ZmpIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95YaS6ZmpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLng63ooYAiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3ng63ooYAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueIseaDhSIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeeIseaDhSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5pCe56yRIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95pCe56yRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlkI7lrqsiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3lkI7lrqsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuagoeWbrSIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeagoeWbrSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5py65oiYIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95py65oiYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLlubvmg7MiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3lubvmg7MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuenkeW5uyIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeenkeW5uyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56ue5oqAIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg956ue5oqAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnmb7lkIgiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3nmb7lkIgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuiAvee+jiIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeiAvee+jiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oKs55aRIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95oKs55aRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliafmg4UiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3liafmg4UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaImOS6iSIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeaImOS6iSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5oGQ5oCWIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95oGQ5oCWIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLov5DliqgiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3ov5DliqgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWKqOS9nCIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeWKqOS9nCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi56ul6K+dIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg956ul6K+dIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLljoblj7IiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3ljoblj7IiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuecn+S6uiIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4Peecn+S6uiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5aWz5oCn5ZCRIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95aWz5oCn5ZCRIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLms6HpnaLnlaoiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3ms6HpnaLnlaoiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImJ5IiwKICAgICAgICAgICAgIm5hbWUiOiAi5o6S5bqPIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuaXtumXtCIsCiAgICAgICAgICAgICAgICAidiI6ICJvcmRlcmJ5PXB1YmRhdGUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIueDreW6piIsCiAgICAgICAgICAgICAgICAidiI6ICJvcmRlcmJ5PWNsaWNrIgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICLlhbbku5YiOiBbewogICAgICAgICAgICAia2V5IjogInN0YSIsCiAgICAgICAgICAgICJuYW1lIjogIui/m+W6piIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLlhajpg6giLAogICAgICAgICAgICAgICAgInYiOiAiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLov57ovb3kuK0iLAogICAgICAgICAgICAgICAgInYiOiAic3RhdHVzPei/nui9veS4rSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5bey5a6M57uTIiwKICAgICAgICAgICAgICAgICJ2IjogInN0YXR1cz3lt7Llroznu5MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacquaSreaUviIsCiAgICAgICAgICAgICAgICAidiI6ICJzdGF0dXM95pyq5pKt5pS+IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJhcmVhIiwKICAgICAgICAgICAgIm5hbWUiOiAi5Zyw5Yy6IiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaXpeacrCIsCiAgICAgICAgICAgICAgICAidiI6ICJhcmVhPeaXpeacrCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Lit5Zu9IiwKICAgICAgICAgICAgICAgICJ2IjogImFyZWE95Lit5Zu9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmrKfnvo4iLAogICAgICAgICAgICAgICAgInYiOiAiYXJlYT3mrKfnvo4iCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogInllYXIiLAogICAgICAgICAgICAibmFtZSI6ICLlubTku70iLAogICAgICAgICAgICAidmFsdWUiOiBbewogICAgICAgICAgICAgICAgIm4iOiAi5YWo6YOoIiwKICAgICAgICAgICAgICAgICJ2IjogIiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyNSIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMjUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjQiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDI0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIzIiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAyMyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAyMiIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMjIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMjEiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDIxIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDIwIiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAyMCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxOSIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMTkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTgiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDE4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE3IiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAxNyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxNiIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMTYiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTUiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDE1IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDE0IiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAxNCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMyIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMTMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIjIwMTIiLAogICAgICAgICAgICAgICAgInYiOiAieWVhcj0yMDEyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICIyMDExIiwKICAgICAgICAgICAgICAgICJ2IjogInllYXI9MjAxMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAiMjAxMCIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMTAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuabtOaXqSIsCiAgICAgICAgICAgICAgICAidiI6ICJ5ZWFyPTIwMTDliY0iCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICAia2V5IjogImNsYXNzIiwKICAgICAgICAgICAgIm5hbWUiOiAi5Ymn5oOFIiwKICAgICAgICAgICAgInZhbHVlIjogW3sKICAgICAgICAgICAgICAgICJuIjogIuWFqOmDqCIsCiAgICAgICAgICAgICAgICAidiI6ICIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWGkumZqSIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeWGkumZqSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi54Ot6KGAIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg954Ot6KGAIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLniLHmg4UiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3niLHmg4UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaQnueskSIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeaQnueskSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5ZCO5a6rIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95ZCO5a6rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmoKHlm60iLAogICAgICAgICAgICAgICAgInYiOiAianFseD3moKHlm60iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuacuuaImCIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeacuuaImCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5bm75oOzIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95bm75oOzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnp5HlubsiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3np5HlubsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuernuaKgCIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeernuaKgCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi55m+5ZCIIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg955m+5ZCIIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLogL3nvo4iLAogICAgICAgICAgICAgICAgInYiOiAianFseD3ogL3nvo4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaCrOeWkSIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeaCrOeWkSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Ymn5oOFIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95Ymn5oOFIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLmiJjkuokiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3miJjkuokiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuaBkOaAliIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeaBkOaAliIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi6L+Q5YqoIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg96L+Q5YqoIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLliqjkvZwiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3liqjkvZwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuerpeivnSIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeerpeivnSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5Y6G5Y+yIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95Y6G5Y+yIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLnnJ/kuroiLAogICAgICAgICAgICAgICAgInYiOiAianFseD3nnJ/kuroiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJuIjogIuWls+aAp+WQkSIsCiAgICAgICAgICAgICAgICAidiI6ICJqcWx4PeWls+aAp+WQkSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIm4iOiAi5rOh6Z2i55WqIiwKICAgICAgICAgICAgICAgICJ2IjogImpxbHg95rOh6Z2i55WqIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgImtleSI6ICJieSIsCiAgICAgICAgICAgICJuYW1lIjogIuaOkuW6jyIsCiAgICAgICAgICAgICJ2YWx1ZSI6IFt7CiAgICAgICAgICAgICAgICAibiI6ICLml7bpl7QiLAogICAgICAgICAgICAgICAgInYiOiAib3JkZXJieT1wdWJkYXRlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAibiI6ICLng63luqYiLAogICAgICAgICAgICAgICAgInYiOiAib3JkZXJieT1jbGljayIKICAgICAgICAgICAgfV0KICAgICAgICB9XQogICAgfSwKICAgIC8vIGZpbHRlcl9kZWY6ewogICAgLy8gCVRWOntieTonb3JkZXJieT1wdWJkYXRlJ30sCiAgICAvLyAJ5Ymn5Zy654mIOntieTonb3JkZXJieT1wdWJkYXRlJ30sCiAgICAvLyAJT1ZBOntieTonb3JkZXJieT1wdWJkYXRlJ30sCiAgICAvLyAJ5YW25LuWOntieTonb3JkZXJieT1wdWJkYXRlJ30KICAgIC8vIH0sCiAgICBzZWFyY2hVcmw6ICcvc2VhcmNoLmh0bWw/a2V5d29yZD0qKiZQYWdlTm89ZnlwYWdlJywKICAgIHNlYXJjaGFibGU6IDIsIC8v5piv5ZCm5ZCv55So5YWo5bGA5pCc57SiLAogICAgaGVhZGVyczogeyAvL+e9keermeeahOivt+axguWktCzlrozmlbTmlK/mjIHmiYDmnInnmoQs5bi45bimdWHlkoxjb29raWVzCiAgICAgICAgJ1VzZXItQWdlbnQnOiAnUENfVUEnLAogICAgfSwKICAgIGNsYXNzX25hbWU6ICdUVibliaflnLrniYgmT1ZBJuWFtuS7licsCiAgICBjbGFzc191cmw6ICdUVibliaflnLrniYgmT1ZBJuWFtuS7licsCiAgICBwbGF5X3BhcnNlOiB0cnVlLAogICAgbGF6eTogJycsCiAgICBsaW1pdDogNiwKICAgIC8vIOaOqOiNkDonLmRobmV3LmFkaiBsaTsqOyo7KjsqJywKICAgIOaOqOiNkDogJy5kaG5ldy5hZGogbGk7YSYmdGl0bGU7aW1nJiZzcmM7cDplcSgtMSkmJlRleHQ7YSYmaHJlZicsCiAgICAvLyDkuIDnuqc6Jy5kaG5ldyBsaTthJiZ0aXRsZTtpbWcmJnNyYztwOmVxKC0xKSYmVGV4dDthJiZocmVmJywKICAgIOS4gOe6pzogYGpzOgoJCWxldCBkID0gW107CgkJcGRmaCA9IGpzcC5wZGZoO3BkZmEgPSBqc3AucGRmYTtwZCA9IGpzcC5wZDsKCQlsZXQgaHRtbCA9ICcnOwoJCWxldCB0b3RhbHJlc3VsdCA9IGdldEl0ZW0oInRvdGFscmVzdWx0XyIgKyBNWV9DQVRFLCAnJykKCQlpZiAodG90YWxyZXN1bHQgPT0gJycpIHsKCQkJaHRtbCA9IHJlcXVlc3QoaW5wdXQpOwoJCQl0b3RhbHJlc3VsdCA9IHBkZmgoaHRtbCwgIi5wYWdlaW5mbyYmc3Ryb25nJiZUZXh0Iik7CgkJCXNldEl0ZW0oInRvdGFscmVzdWx0XyIgKyBNWV9DQVRFLCB0b3RhbHJlc3VsdCkKICAgICAgICB9CgkJaW5wdXQgKz0gJyZ0b3RhbHJlc3VsdD0nICsgZ2V0SXRlbSgidG90YWxyZXN1bHRfIiArIE1ZX0NBVEUsICcnKTsKCQlodG1sID0gcmVxdWVzdChpbnB1dCk7CgkJbGV0IGxpc3QgPSBwZGZhKGh0bWwsICIuZGhuZXcmJmxpIik7CgkJbGlzdC5mb3JFYWNoKGl0ID0+IHsKCQkJZC5wdXNoKHsKCQkJCXRpdGxlOiBwZGZoKGl0LCAiYSYmdGl0bGUiKSwKCQkJCWRlc2M6IHBkZmgoaXQsICJwOmVxKC0xKSYmVGV4dCIpLAoJCQkJcGljX3VybDogcGQoaXQsICJpbWcmJnNyYyIpLAoJCQkJdXJsOiBwZChpdCwgImEmJmhyZWYiKQoJCQl9KQoJCX0pOwoJCXNldFJlc3VsdChkKQoJYCwKICAgIOS6jOe6pzogewogICAgICAgICJ0aXRsZSI6ICJoMSYmVGV4dDsuZGh4eCBwOmVxKDQpJiZUZXh0IiwKICAgICAgICAiaW1nIjogIi5hbmltZS1pbWcmJmltZyYmc3JjIiwKICAgICAgICAiZGVzYyI6ICIuaW5mbzEtbGVmdCBsaTplcSgxKSYmVGV4dDsuZGh4eCBwOmVxKDMpJiZUZXh0Oy5kaHh4IHA6ZXEoMikmJlRleHQ7LmluZm8xLWxlZnQgbGk6ZXEoMCkmJlRleHQ7LmluZm8xLWxlZnQgbGk6ZXEoMikmJlRleHQiLAogICAgICAgICJjb250ZW50IjogIi5pbmZvMi0tc3Ryb25nJiZUZXh0IiwKICAgICAgICAidGFicyI6ICIub2wtc2VsZWN0IGxpIiwKICAgICAgICAibGlzdHMiOiAiLm9sLWNvbnRlbnQ6ZXEoI2lkKSBsaSIKICAgIH0sCiAgICAvLyDmkJzntKI6Jyo7KjsqO3A6ZXEoMykmJlRleHQ7KicsCiAgICDmkJzntKI6ICcuZGhuZXcgbGk7YSYmdGl0bGU7aW1nJiZzcmM7cDplcSgzKSYmVGV4dDthJiZocmVmJywKfQ==
\ No newline at end of file
diff --git a/潇洒/js/alishare.txt b/潇洒/js/alishare.txt
deleted file mode 100644
index cd52f13..0000000
--- a/潇洒/js/alishare.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-[
- {
- "share_name": "优品阁",
- "share_id": "uWa9gbM3RJ7"
- },
- {
- "share_name": "阿里1T",
- "share_id": "mxAfB6eRgY4"
- },
- {
- "share_name": "平凡中的",
- "share_id": "4ydLxf7VgH7"
- },
- {
- "share_name": "tacit0924",
- "share_id": "DNgnCudf4cD?pwd=6666"
- },
- {
- "share_name": "黄妈",
- "share_id": "4bGRVUdUtct"
- },
- {
- "share_name": "YYDSVIP",
- "share_id": "dieULBdYP3D"
- },
- {
- "share_name": "优源阁",
- "share_id": "RnjUi1urdb2"
- },
- {
- "share_name": "风流动漫",
- "share_id": "WdaaeX7HK44"
- },
- {
- "share_name": "风流剧集",
- "share_id": "kgxWjZsK6bq"
- },
- {
- "share_name": "xiaaluo",
- "share_id": "sg8CdGUwmUr"
- },
- {
- "share_name": "4K影视",
- "share_id": "wHPKUENKFsS"
- },
- {
- "share_name": "诺兰全集",
- "share_id": "gf2GebXnZHh"
- },
- {
- "share_name": "纪录片",
- "share_id": "fSNHaYST47s"
- },
- {
- "share_name": "掌灯者|港",
- "share_id": "wHPKUENKFsS"
- },
- {
- "share_name": "掌灯者|一",
- "share_id": "wHPKUENKFsS"
- },
- {
- "share_name": "掌灯者|二",
- "share_id": "wHPKUENKFsS"
- },
- {
- "share_name": "掌灯者|三",
- "share_id": "wHPKUENKFsS"
- }
-]
\ No newline at end of file
diff --git a/潇洒/js/cheerio.min.js b/潇洒/js/cheerio.min.js
deleted file mode 100644
index 24acb69..0000000
--- a/潇洒/js/cheerio.min.js
+++ /dev/null
@@ -1,10945 +0,0 @@
-var e, t = function() {
- return t = Object.assign || function(e) {
- for (var t, n = 1, r = arguments.length; n < r; n++)
- for (var i in t = arguments[n]) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
- return e
- }, t.apply(this, arguments)
- },
- n = {
- xml: !1,
- decodeEntities: !0
- },
- r = {
- _useHtmlParser2: !0,
- xmlMode: !0
- };
-
-function i(e) {
- return (null == e ? void 0 : e.xml) ? "boolean" == typeof e.xml ? r : t(t({}, r), e.xml) : null != e ? e : void 0
-}! function(e) {
- e.Root = "root", e.Text = "text", e.Directive = "directive", e.Comment = "comment", e.Script = "script", e.Style = "style", e.Tag = "tag", e.CDATA = "cdata", e.Doctype = "doctype"
-}(e || (e = {}));
-const s = e.Root,
- a = e.Text,
- o = e.Directive,
- c = e.Comment,
- l = e.Script,
- h = e.Style,
- u = e.Tag,
- p = e.CDATA,
- f = e.Doctype;
-class d {
- constructor() {
- this.parent = null, this.prev = null, this.next = null, this.startIndex = null, this.endIndex = null
- }
- get parentNode() {
- return this.parent
- }
- set parentNode(e) {
- this.parent = e
- }
- get previousSibling() {
- return this.prev
- }
- set previousSibling(e) {
- this.prev = e
- }
- get nextSibling() {
- return this.next
- }
- set nextSibling(e) {
- this.next = e
- }
- cloneNode(e = !1) {
- return v(this, e)
- }
-}
-class E extends d {
- constructor(e) {
- super(), this.data = e
- }
- get nodeValue() {
- return this.data
- }
- set nodeValue(e) {
- this.data = e
- }
-}
-class m extends E {
- constructor() {
- super(...arguments), this.type = e.Text
- }
- get nodeType() {
- return 3
- }
-}
-class T extends E {
- constructor() {
- super(...arguments), this.type = e.Comment
- }
- get nodeType() {
- return 8
- }
-}
-class _ extends E {
- constructor(t, n) {
- super(n), this.name = t, this.type = e.Directive
- }
- get nodeType() {
- return 1
- }
-}
-class A extends d {
- constructor(e) {
- super(), this.children = e
- }
- get firstChild() {
- var e;
- return null !== (e = this.children[0]) && void 0 !== e ? e : null
- }
- get lastChild() {
- return this.children.length > 0 ? 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 < t.length; e++) t[e].prev = t[e - 1], t[e - 1].next = t[e];
- return t
-}
-const R = {
- withStartIndices: !1,
- withEndIndices: !1,
- xmlMode: !1
-};
-class M {
- constructor(e, t, n) {
- this.dom = [], this.root = new N(this.dom), this.done = !1, this.tagStack = [this.root], this.lastNode = null, this.parser = null, "function" == typeof t && (n = t, t = R), "object" == typeof e && (t = e, e = void 0), this.callback = null != e ? e : null, this.options = null != t ? t : R, this.elementCB = null != n ? n : null
- }
- onparserinit(e) {
- this.parser = e
- }
- onreset() {
- this.dom = [], this.root = new N(this.dom), this.done = !1, this.tagStack = [this.root], this.lastNode = null, this.parser = null
- }
- onend() {
- this.done || (this.done = !0, this.parser = null, this.handleCallback(null))
- }
- onerror(e) {
- this.handleCallback(e)
- }
- onclosetag() {
- this.lastNode = null;
- const e = this.tagStack.pop();
- this.options.withEndIndices && (e.endIndex = this.parser.endIndex), this.elementCB && this.elementCB(e)
- }
- onopentag(t, n) {
- const r = this.options.xmlMode ? e.Tag : void 0,
- i = new C(t, n, void 0, r);
- this.addNode(i), this.tagStack.push(i)
- }
- ontext(t) {
- const {
- lastNode: n
- } = this;
- if (n && n.type === e.Text) n.data += t, this.options.withEndIndices && (n.endIndex = this.parser.endIndex);
- else {
- const e = new m(t);
- this.addNode(e), this.lastNode = e
- }
- }
- oncomment(t) {
- if (this.lastNode && this.lastNode.type === e.Comment) return void(this.lastNode.data += t);
- const n = new T(t);
- this.addNode(n), this.lastNode = n
- }
- oncommentend() {
- this.lastNode = null
- }
- oncdatastart() {
- const e = new m(""),
- t = new g([e]);
- this.addNode(t), e.parent = t, this.lastNode = e
- }
- oncdataend() {
- this.lastNode = null
- }
- onprocessinginstruction(e, t) {
- const n = new _(e, t);
- this.addNode(n)
- }
- handleCallback(e) {
- if ("function" == typeof this.callback) this.callback(e, this.dom);
- else if (e) throw e
- }
- addNode(e) {
- const t = this.tagStack[this.tagStack.length - 1],
- n = t.children[t.children.length - 1];
- this.options.withStartIndices && (e.startIndex = this.parser.startIndex), this.options.withEndIndices && (e.endIndex = this.parser.endIndex), t.children.push(e), n && (e.prev = n, n.next = e), e.parent = t, this.lastNode = null
- }
-}
-const P = /["&'<>$\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)}${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 < n.length; e++) r += W(n[e], t);
- return r
-}
-
-function W(e, t) {
- switch (e.type) {
- case s:
- return V(e.children, t);
- case f:
- case o:
- return `<${e.data}>`;
- 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 += `${e.name}>`));
- 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; i < t.length && !r; i++) {
- const s = t[i];
- I(s) && (e(s) ? r = s : n && s.children.length > 0 && (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 (; a < s && n[a] === r[a];) a++;
- if (0 === a) return fe.DISCONNECTED;
- const o = n[a - 1],
- c = o.children,
- l = n[a],
- h = r[a];
- return c.indexOf(l) > c.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; n < e.length; n++) t(e[n], n, e)
-}
-
-function Le() {
- try {
- return Object.defineProperty({}, "_", {}),
- function(e, t, n) {
- Object.defineProperty(e, t, {
- writable: !0,
- enumerable: !1,
- configurable: !0,
- value: n
- })
- }
- } catch (e) {
- return function(e, t, n) {
- e[t] = n
- }
- }
-}
-var ke = ["Array", "Boolean", "Date", "Error", "EvalError", "Function", "Infinity", "JSON", "Math", "NaN", "Number", "Object", "RangeError", "ReferenceError", "RegExp", "String", "SyntaxError", "TypeError", "URIError", "decodeURI", "decodeURIComponent", "encodeURI", "encodeURIComponent", "escape", "eval", "isFinite", "isNaN", "parseFloat", "parseInt", "undefined", "unescape"];
-
-function ve() {}
-
-function De(e) {
- if (!(this instanceof De)) return new De(e);
- this.code = e
-}
-
-function Re(e) {
- if (Me(e)) return e;
- var t = new ve;
- return "object" == typeof e && ye(Oe(e), (function(n) {
- t[n] = e[n]
- })), t
-}
-
-function Me(e) {
- return e instanceof ve
-}
-ve.prototype = {}, De.prototype.runInContext = function(e) {
- if (!(e instanceof ve)) throw new TypeError("needs a 'context' argument.");
- if (be.document) {
- var t = be.document.createElement("iframe");
- t.style || (t.style = {}), t.style.display = "none", be.document.body.appendChild(t);
- var n = t.contentWindow,
- r = n.eval,
- i = n.execScript;
- !r && i && (i.call(n, "null"), r = n.eval), ye(Oe(e), (function(t) {
- n[t] = e[t]
- })), ye(ke, (function(t) {
- e[t] && (n[t] = e[t])
- }));
- var s = Oe(n),
- a = r.call(n, this.code);
- return ye(Oe(n), (function(t) {
- (t in e || -1 === function(e, t) {
- if (xe) return e.indexOf(t);
- for (var n = 0; n < e.length; ++n)
- if (e[n] === t) return n;
- return -1
- }(s, t)) && (e[t] = n[t])
- })), ye(ke, (function(t) {
- var r, i, s;
- t in e || (r = e, i = t, s = n[t], "function" != typeof Ie && (Ie = Le), Ie(r, i, s))
- })), be.document.body.removeChild(t), a
- }
- return function(e, t) {
- var n = Oe(be);
- return n.push("with (this.__ctx__){return eval(this.__code__)}"), Function.apply(null, n).apply({
- __code__: e,
- __ctx__: t
- })
- }(this.code, e)
-}, De.prototype.runInThisContext = function() {
- return new Function("code", "return eval(code);").call(be, this.code)
-}, De.prototype.runInNewContext = function(e) {
- var t = Re(e),
- n = this.runInContext(t);
- return e && ye(Oe(t), (function(n) {
- e[n] = t[n]
- })), n
-};
-var Pe = {
- runInContext: function(e, t, n) {
- return new De(e).runInContext(t, n)
- },
- isContext: Me,
- createContext: Re,
- createScript: function(e) {
- return new De(e)
- },
- Script: De,
- runInThisContext: function(e, t) {
- return new De(e).runInThisContext(t)
- },
- runInNewContext: function(e, t, n) {
- return new De(e).runInNewContext(t, n)
- }
- },
- xe = [].indexOf;
-const {
- hasOwnProperty: we
-} = Object.prototype;
-
-function Be(e, t) {
- return (e = e.slice()).push(t), e
-}
-
-function Fe(e, t) {
- return (t = t.slice()).unshift(e), t
-}
-class Ue extends Error {
- constructor(e) {
- super('JSONPath should not be called with "new" (it prevents return of (unwrapped) scalar values)'), this.avoidNew = !0, this.value = e, this.name = "NewError"
- }
-}
-
-function He(e, t, n, r, i) {
- if (!(this instanceof He)) try {
- return new He(e, t, n, r, i)
- } catch (e) {
- if (!e.avoidNew) throw e;
- return e.value
- }
- "string" == typeof e && (i = r, r = n, n = t, t = e, e = null);
- const s = e && "object" == typeof e;
- if (e = e || {}, this.json = e.json || n, this.path = e.path || t, this.resultType = e.resultType || "value", this.flatten = e.flatten || !1, this.wrap = !we.call(e, "wrap") || e.wrap, this.sandbox = e.sandbox || {}, this.preventEval = e.preventEval || !1, this.parent = e.parent || null, this.parentProperty = e.parentProperty || null, this.callback = e.callback || r || null, this.otherTypeCallback = e.otherTypeCallback || i || function() {
- throw new TypeError("You must supply an otherTypeCallback callback option with the @other() operator.")
- }, !1 !== e.autostart) {
- const r = {
- path: s ? e.path : t
- };
- s ? "json" in e && (r.json = e.json) : r.json = n;
- const i = this.evaluate(r);
- if (!i || "object" != typeof i) throw new Ue(i);
- return i
- }
-}
-He.prototype.evaluate = function(e, t, n, r) {
- let i = this.parent,
- s = this.parentProperty,
- {
- flatten: a,
- wrap: o
- } = this;
- if (this.currResultType = this.resultType, this.currPreventEval = this.preventEval, this.currSandbox = this.sandbox, n = n || this.callback, this.currOtherTypeCallback = r || this.otherTypeCallback, t = t || this.json, (e = e || this.path) && "object" == typeof 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 (!we.call(e, "json")) throw new TypeError('You must supply a "json" property when providing an object argument to JSONPath.evaluate().');
- ({
- json: t
- } = e), a = we.call(e, "flatten") ? e.flatten : a, this.currResultType = we.call(e, "resultType") ? e.resultType : this.currResultType, this.currSandbox = we.call(e, "sandbox") ? e.sandbox : this.currSandbox, o = we.call(e, "wrap") ? e.wrap : o, this.currPreventEval = we.call(e, "preventEval") ? e.preventEval : this.currPreventEval, n = we.call(e, "callback") ? e.callback : n, this.currOtherTypeCallback = we.call(e, "otherTypeCallback") ? e.otherTypeCallback : this.currOtherTypeCallback, i = we.call(e, "parent") ? e.parent : i, s = we.call(e, "parentProperty") ? e.parentProperty : s, e = e.path
- }
- if (i = i || null, s = s || null, Array.isArray(e) && (e = He.toPathString(e)), !e && "" !== e || !t) return;
- const c = He.toPathArray(e);
- "$" === c[0] && c.length > 1 && 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 < u.length; e++) {
- const n = u[e];
- if (n && n.isParentSelector) {
- const o = this._trace(n.expr, t, n.path, r, i, s, a);
- if (Array.isArray(o)) {
- u[e] = o[0];
- const t = o.length;
- for (let n = 1; n < t; n++) e++, u.splice(e, 0, o[n])
- } else u[e] = o
- }
- }
- return u
-}, He.prototype._walk = function(e, t) {
- if (Array.isArray(e)) {
- const n = e.length;
- for (let e = 0; e < n; e++) t(e)
- } else e && "object" == typeof e && Object.keys(e).forEach((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 < u; e += l) {
- this._trace(Fe(e, t), n, r, i, s, a, !0).forEach((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 < n; e++) /^(~|\^|@.*?\(\))$/u.test(t[e]) || (r += /^[0-9*]+$/u.test(t[e]) ? "[" + t[e] + "]" : "['" + t[e] + "']");
- return r
-}, He.toPointer = function(e) {
- const t = e,
- n = t.length;
- let r = "";
- for (let e = 1; e < n; e++) /^(~|\^|@.*?\(\))$/u.test(t[e]) || (r += "/" + t[e].toString().replace(/~/gu, "~0").replace(/\//gu, "~1"));
- return r
-}, He.toPathArray = function(e) {
- const {
- cache: t
- } = He;
- if (t[e]) return t[e].concat();
- const n = [],
- r = e.replace(/@(?:null|boolean|number|string|integer|undefined|nonFinite|scalar|array|object|function|other)\(\)/gu, ";$&;").replace(/[['](\??\(.*?\))[\]']/gu, (function(e, t) {
- return "[#" + (n.push(t) - 1) + "]"
- })).replace(/\[['"]([^'\]]*)['"]\]/gu, (function(e, t) {
- return "['" + t.replace(/\./gu, "%@%").replace(/~/gu, "%%@@%%") + "']"
- })).replace(/~/gu, ";~;").replace(/['"]?\.['"]?(?![^[]*\])|\[['"]?/gu, ";").replace(/%@%/gu, ".").replace(/%%@@%%/gu, "~").replace(/(?:;)?(\^+)(?:;)?/gu, (function(e, t) {
- return ";" + t.split("").join(";") + ";"
- })).replace(/;;;|;;/gu, ";..;").replace(/;$|'?\]|'$/gu, ""),
- i = r.split(";").map((function(e) {
- const t = e.match(/#(\d+)/u);
- return t && t[1] ? n[t[1]] : e
- }));
- return t[e] = i, t[e].concat()
-}, He.prototype.vm = Pe;
-var Ge = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {};
-
-function Ye() {
- throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")
-}
-
-function qe(e) {
- return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e
-}
-
-function Ke(e, t) {
- return e(t = {
- exports: {}
- }, t.exports), t.exports
-}
-var je = Ke((function(e) {
- var t = Array.prototype,
- n = Object.prototype,
- r = {
- "&": "&",
- '"': """,
- "'": "'",
- "<": "<",
- ">": ">"
- },
- 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; r < t.length; r++) {
- var i = t[r];
- if (!a(n, i)) return;
- n = n[i]
- }
- return n
- }
- }
-
- function d(e) {
- return Array.prototype.slice.call(e)
- }
-
- function E(e, t, n) {
- return Array.prototype.indexOf.call(e || [], t, n)
- }
-
- function m(e) {
- var t = [];
- for (var n in e) a(e, n) && t.push(n);
- return t
- }
- s.hasOwnProp = a, s._prettifyError = function(e, t, n) {
- if (n.Update || (n = new s.TemplateError(n)), n.Update(e), !t) {
- var r = n;
- (n = new Error(r.message)).name = r.name
- }
- return n
- }, Object.setPrototypeOf ? Object.setPrototypeOf(c.prototype, Error.prototype) : c.prototype = Object.create(Error.prototype, {
- constructor: {
- value: c
- }
- }), s.TemplateError = c, s.escape = function(e) {
- return e.replace(i, o)
- }, s.isFunction = l, s.isArray = h, s.isString = u, s.isObject = p, s.getAttrGetter = f, s.groupBy = function(e, t, n) {
- for (var r = {}, i = l(t) ? t : f(t), s = 0; s < e.length; s++) {
- var a = e[s],
- o = i(a, s);
- if (void 0 === o && !0 === n) throw new TypeError('groupby: attribute "' + t + '" resolved to undefined');
- (r[o] || (r[o] = [])).push(a)
- }
- return r
- }, s.toArray = d, s.without = function(e) {
- var t = [];
- if (!e) return t;
- for (var n = e.length, r = d(arguments).slice(1), i = -1; ++i < n;) - 1 === E(r, e[i]) && t.push(e[i]);
- return t
- }, s.repeat = function(e, t) {
- for (var n = "", r = 0; r < t; r++) n += e;
- return n
- }, s.each = function(e, n, r) {
- if (null != e)
- if (t.forEach && e.forEach === t.forEach) e.forEach(n, r);
- else if (e.length === +e.length)
- for (var i = 0, s = e.length; i < s; i++) n.call(r, e[i], i, e)
- }, s.map = function(e, n) {
- var r = [];
- if (null == e) return r;
- if (t.map && e.map === t.map) return e.map(n);
- for (var i = 0; i < e.length; i++) r[r.length] = n(e[i], i);
- return e.length === +e.length && (r.length = e.length), r
- }, s.asyncIter = function(e, t, n) {
- var r = -1;
- ! function i() {
- ++r < e.length ? t(e[r], r, i, n) : n()
- }()
- }, s.asyncFor = function(e, t, n) {
- var r = m(e || {}),
- i = r.length,
- s = -1;
- ! function a() {
- s++;
- var o = r[s];
- s < i ? t(o, e[o], s, i, a) : n()
- }()
- }, s.indexOf = E, s.keys = m, s._entries = function(e) {
- return m(e).map((function(t) {
- return [t, e[t]]
- }))
- }, s._values = function(e) {
- return m(e).map((function(t) {
- return e[t]
- }))
- }, s._assign = s.extend = function(e, t) {
- return e = e || {}, m(t).forEach((function(n) {
- e[n] = t[n]
- })), e
- }, s.inOperator = function(e, t) {
- if (h(t) || u(t)) return -1 !== t.indexOf(e);
- if (p(t)) return e in t;
- throw new Error('Cannot use "in" operator to search for "' + e + '" in unexpected types.')
- }
-}));
-
-function Ve() {
- throw new Error("setTimeout has not been defined")
-}
-
-function We() {
- throw new Error("clearTimeout has not been defined")
-}
-var Qe = Ve,
- Xe = We;
-
-function $e(e) {
- if (Qe === setTimeout) return setTimeout(e, 0);
- if ((Qe === Ve || !Qe) && setTimeout) return Qe = setTimeout, setTimeout(e, 0);
- try {
- return Qe(e, 0)
- } catch (t) {
- try {
- return Qe.call(null, e, 0)
- } catch (t) {
- return Qe.call(this, e, 0)
- }
- }
-}
-"function" == typeof be.setTimeout && (Qe = setTimeout), "function" == typeof be.clearTimeout && (Xe = clearTimeout);
-var ze, Je = [],
- Ze = !1,
- et = -1;
-
-function tt() {
- Ze && ze && (Ze = !1, ze.length ? Je = ze.concat(Je) : et = -1, Je.length && nt())
-}
-
-function nt() {
- if (!Ze) {
- var e = $e(tt);
- Ze = !0;
- for (var t = Je.length; t;) {
- for (ze = Je, Je = []; ++et < t;) ze && ze[et].run();
- et = -1, t = Je.length
- }
- ze = null, Ze = !1,
- function(e) {
- if (Xe === clearTimeout) return clearTimeout(e);
- if ((Xe === We || !Xe) && clearTimeout) return Xe = clearTimeout, clearTimeout(e);
- try {
- Xe(e)
- } catch (t) {
- try {
- return Xe.call(null, e)
- } catch (t) {
- return Xe.call(this, e)
- }
- }
- }(e)
- }
-}
-
-function rt(e, t) {
- this.fun = e, this.array = t
-}
-rt.prototype.run = function() {
- this.fun.apply(null, this.array)
-};
-
-function it() {}
-var st = it,
- at = it,
- ot = it,
- ct = it,
- lt = it,
- ht = it,
- ut = it;
-var pt = be.performance || {},
- ft = pt.now || pt.mozNow || pt.msNow || pt.oNow || pt.webkitNow || function() {
- return (new Date).getTime()
- };
-var dt = new Date;
-var Et = {
- nextTick: function(e) {
- var t = new Array(arguments.length - 1);
- if (arguments.length > 1)
- for (var n = 1; n < arguments.length; n++) t[n - 1] = arguments[n];
- Je.push(new rt(e, t)), 1 !== Je.length || Ze || $e(nt)
- },
- title: "browser",
- browser: !0,
- env: {},
- argv: [],
- version: "",
- versions: {},
- on: st,
- addListener: at,
- once: ot,
- off: ct,
- removeListener: lt,
- removeAllListeners: ht,
- emit: ut,
- binding: function(e) {
- throw new Error("process.binding is not supported")
- },
- cwd: function() {
- return "/"
- },
- chdir: function(e) {
- throw new Error("process.chdir is not supported")
- },
- umask: function() {
- return 0
- },
- hrtime: function(e) {
- var t = .001 * ft.call(pt),
- n = Math.floor(t),
- r = Math.floor(t % 1 * 1e9);
- return e && (n -= e[0], (r -= e[1]) < 0 && (n--, r += 1e9)), [n, r]
- },
- platform: "browser",
- release: {},
- config: {},
- uptime: function() {
- return (new Date - dt) / 1e3
- }
-};
-
-function mt() {}
-
-function Tt() {
- Tt.init.call(this)
-}
-
-function _t(e) {
- return void 0 === e._maxListeners ? Tt.defaultMaxListeners : e._maxListeners
-}
-
-function At(e, t, n) {
- if (t) e.call(n);
- else
- for (var r = e.length, i = yt(e, r), s = 0; s < r; ++s) i[s].call(n)
-}
-
-function gt(e, t, n, r) {
- if (t) e.call(n, r);
- else
- for (var i = e.length, s = yt(e, i), a = 0; a < i; ++a) s[a].call(n, r)
-}
-
-function Nt(e, t, n, r, i) {
- if (t) e.call(n, r, i);
- else
- for (var s = e.length, a = yt(e, s), o = 0; o < s; ++o) a[o].call(n, r, i)
-}
-
-function Ct(e, t, n, r, i, s) {
- if (t) e.call(n, r, i, s);
- else
- for (var a = e.length, o = yt(e, a), c = 0; c < a; ++c) o[c].call(n, r, i, s)
-}
-
-function It(e, t, n, r) {
- if (t) e.apply(n, r);
- else
- for (var i = e.length, s = yt(e, i), a = 0; a < i; ++a) s[a].apply(n, r)
-}
-
-function St(e, t, n, r) {
- var i, s, a;
- if ("function" != typeof n) throw new TypeError('"listener" argument must be a function');
- if ((s = e._events) ? (s.newListener && (e.emit("newListener", t, n.listener ? n.listener : n), s = e._events), a = s[t]) : (s = e._events = new mt, e._eventsCount = 0), a) {
- if ("function" == typeof a ? a = s[t] = r ? [n, a] : [a, n] : r ? a.unshift(n) : a.push(n), !a.warned && (i = _t(e)) && i > 0 && 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; s < r; s++) i[s - 1] = arguments[s];
- It(n, h, this, i)
- }
- return !0
-}, Tt.prototype.addListener = function(e, t) {
- return St(this, e, t, !1)
-}, Tt.prototype.on = Tt.prototype.addListener, Tt.prototype.prependListener = function(e, t) {
- return St(this, e, t, !0)
-}, Tt.prototype.once = function(e, t) {
- if ("function" != typeof t) throw new TypeError('"listener" argument must be a function');
- return this.on(e, bt(this, e, t)), this
-}, Tt.prototype.prependOnceListener = function(e, t) {
- if ("function" != typeof t) throw new TypeError('"listener" argument must be a function');
- return this.prependListener(e, bt(this, e, t)), this
-}, Tt.prototype.removeListener = function(e, t) {
- var n, r, i, s, a;
- if ("function" != typeof t) throw new TypeError('"listener" argument must be a function');
- if (!(r = this._events)) return this;
- if (!(n = r[e])) return this;
- if (n === t || n.listener && n.listener === t) 0 == --this._eventsCount ? this._events = new mt : (delete r[e], r.removeListener && this.emit("removeListener", e, n.listener || t));
- else if ("function" != typeof n) {
- for (i = -1, s = n.length; s-- > 0;)
- 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; r < i; n += 1, r += 1) e[n] = e[r];
- e.pop()
- }(n, i);
- r.removeListener && this.emit("removeListener", e, a || t)
- }
- return this
-}, Tt.prototype.removeAllListeners = function(e) {
- var t, n;
- if (!(n = this._events)) return this;
- if (!n.removeListener) return 0 === arguments.length ? (this._events = new mt, this._eventsCount = 0) : n[e] && (0 == --this._eventsCount ? this._events = new mt : delete n[e]), this;
- if (0 === arguments.length) {
- for (var r, i = Object.keys(n), s = 0; s < i.length; ++s) "removeListener" !== (r = i[s]) && this.removeAllListeners(r);
- return this.removeAllListeners("removeListener"), this._events = new mt, this._eventsCount = 0, this
- }
- if ("function" == typeof(t = n[e])) this.removeListener(e, t);
- else if (t)
- do {
- this.removeListener(e, t[t.length - 1])
- } while (t[0]);
- return this
-}, Tt.prototype.listeners = function(e) {
- var t, n = this._events;
- return n && (t = n[e]) ? "function" == typeof t ? [t.listener || t] : function(e) {
- for (var t = new Array(e.length), n = 0; n < t.length; ++n) t[n] = e[n].listener || e[n];
- return t
- }(t) : []
-}, Tt.listenerCount = function(e, t) {
- return "function" == typeof e.listenerCount ? e.listenerCount(t) : Ot.call(e, t)
-}, Tt.prototype.listenerCount = Ot, Tt.prototype.eventNames = function() {
- return this._eventsCount > 0 ? 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 (; Bt < xt.length;) {
- var e = Bt;
- if (Bt += 1, xt[e].call(), Bt > 1024) {
- for (var t = 0, n = xt.length - Bt; t < n; t++) xt[t] = xt[t + Bt];
- xt.length -= Bt, Bt = 0
- }
- }
- xt.length = 0, Bt = 0, wt = !1
-}
-
-function Ut() {
- var e = Et.domain;
- e && (vt || (vt = Dt), vt.active = Et.domain = null), wt && Rt ? setImmediate(Ft) : Et.nextTick(Ft), e && (vt.active = Et.domain = e)
-}
-Pt.requestFlush = Ut;
-var Ht = [],
- Gt = function(e) {
- var t;
- t = Ht.length ? Ht.pop() : new Yt;
- t.task = e, t.domain = Et.domain, Mt(t)
- };
-
-function Yt() {
- this.task = null, this.domain = null
-}
-Yt.prototype.call = function() {
- this.domain && this.domain.enter();
- var e = !0;
- try {
- this.task.call(), e = !1, this.domain && this.domain.exit()
- } finally {
- e && Mt.requestFlush(), this.task = null, this.domain = null, Ht.push(this)
- }
-};
-var qt = Ke((function(e) {
- ! function(t) {
- var n = function() {
- var e = Array.prototype.slice.call(arguments);
- "function" == typeof e[0] && e[0].apply(null, e.splice(1))
- },
- r = function(e) {
- "function" == typeof setImmediate ? setImmediate(e) : void 0 !== Et && Et.nextTick ? Et.nextTick(e) : setTimeout(e, 0)
- },
- i = Array.isArray || function(e) {
- return "[object Array]" === Object.prototype.toString.call(e)
- },
- s = function(e, t, s) {
- var a = s ? r : n;
- if (t = t || function() {}, !i(e)) {
- var o = new Error("First argument to waterfall must be an array of functions");
- return t(o)
- }
- if (!e.length) return t();
- var c = function(e) {
- return function(n) {
- if (n) t.apply(null, arguments), t = function() {};
- else {
- var r = Array.prototype.slice.call(arguments, 1),
- i = e.next();
- i ? r.push(c(i)) : r.push(t), a((function() {
- e.apply(null, r)
- }))
- }
- }
- };
- c(function(e) {
- var t = function(n) {
- var r = function() {
- return e.length && e[n].apply(null, arguments), r.next()
- };
- return r.next = function() {
- return n < e.length - 1 ? t(n + 1) : null
- }, r
- };
- return t(0)
- }(e))()
- };
- e.exports ? e.exports = s : t.waterfall = s
- }(Ge)
-}));
-
-function Kt(e, t, n, r) {
- return {
- type: e,
- value: t,
- lineno: n,
- colno: r
- }
-}
-var jt = function() {
- function e(e, t) {
- this.str = e, this.index = 0, this.len = e.length, this.lineno = 0, this.colno = 0, this.in_code = !1;
- var n = (t = t || {}).tags || {};
- this.tags = {
- BLOCK_START: n.blockStart || "{%",
- BLOCK_END: n.blockEnd || "%}",
- VARIABLE_START: n.variableStart || "{{",
- VARIABLE_END: n.variableEnd || "}}",
- COMMENT_START: n.commentStart || "{#",
- COMMENT_END: n.commentEnd || "#}"
- }, this.trimBlocks = !!t.trimBlocks, this.lstripBlocks = !!t.lstripBlocks
- }
- var t = e.prototype;
- return t.nextToken = function() {
- var e, t = this.lineno,
- n = this.colno;
- if (this.in_code) {
- var r = this.current();
- if (this.isFinished()) return null;
- if ('"' === r || "'" === r) return Kt("string", this._parseString(r), t, n);
- if (e = this._extract(" \n\t\r ")) return Kt("whitespace", e, t, n);
- if ((e = this._extractString(this.tags.BLOCK_END)) || (e = this._extractString("-" + this.tags.BLOCK_END))) return this.in_code = !1, this.trimBlocks && ("\n" === (r = this.current()) ? this.forward() : "\r" === r && (this.forward(), "\n" === (r = this.current()) ? this.forward() : this.back())), Kt("block-end", e, t, n);
- if ((e = this._extractString(this.tags.VARIABLE_END)) || (e = this._extractString("-" + this.tags.VARIABLE_END))) return this.in_code = !1, Kt("variable-end", e, t, n);
- if ("r" === r && "/" === this.str.charAt(this.index + 1)) {
- this.forwardN(2);
- for (var i = ""; !this.isFinished();) {
- if ("/" === this.current() && "\\" !== this.previous()) {
- this.forward();
- break
- }
- i += this.current(), this.forward()
- }
- for (var s = ["g", "i", "m", "y"], a = ""; !this.isFinished();) {
- if (!(-1 !== s.indexOf(this.current()))) break;
- a += this.current(), this.forward()
- }
- return Kt("regex", {
- body: i,
- flags: a
- }, t, n)
- }
- if (-1 !== "()[]{}%*-+~/#,:|.<>=!".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; t < e; t++) this.forward()
- }, t.forward = function() {
- this.index++, "\n" === this.previous() ? (this.lineno++, this.colno = 0) : this.colno++
- }, t.backN = function(e) {
- for (var t = 0; t < e; t++) this.back()
- }, t.back = function() {
- if (this.index--, "\n" === this.current()) {
- this.lineno--;
- var e = this.src.lastIndexOf("\n", this.index - 1);
- this.colno = -1 === e ? this.index : this.index - e
- } else this.colno--
- }, t.current = function() {
- return this.isFinished() ? "" : this.str.charAt(this.index)
- }, t.currentStr = function() {
- return this.isFinished() ? "" : this.str.substr(this.index)
- }, t.previous = function() {
- return this.str.charAt(this.index - 1)
- }, e
- }(),
- Vt = {
- lex: function(e, t) {
- return new jt(e, t)
- },
- TOKEN_STRING: "string",
- TOKEN_WHITESPACE: "whitespace",
- TOKEN_DATA: "data",
- TOKEN_BLOCK_START: "block-start",
- TOKEN_BLOCK_END: "block-end",
- TOKEN_VARIABLE_START: "variable-start",
- TOKEN_VARIABLE_END: "variable-end",
- TOKEN_COMMENT: "comment",
- TOKEN_LEFT_PAREN: "left-paren",
- TOKEN_RIGHT_PAREN: "right-paren",
- TOKEN_LEFT_BRACKET: "left-bracket",
- TOKEN_RIGHT_BRACKET: "right-bracket",
- TOKEN_LEFT_CURLY: "left-curly",
- TOKEN_RIGHT_CURLY: "right-curly",
- TOKEN_OPERATOR: "operator",
- TOKEN_COMMA: "comma",
- TOKEN_COLON: "colon",
- TOKEN_TILDE: "tilde",
- TOKEN_PIPE: "pipe",
- TOKEN_INT: "int",
- TOKEN_FLOAT: "float",
- TOKEN_BOOLEAN: "boolean",
- TOKEN_NONE: "none",
- TOKEN_SYMBOL: "symbol",
- TOKEN_SPECIAL: "special",
- TOKEN_REGEX: "regex"
- };
-
-function Wt(e, t) {
- for (var n = 0; n < t.length; n++) {
- var r = t[n];
- r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r)
- }
-}
-
-function Qt(e, t, n) {
- return t && Wt(e.prototype, t), n && Wt(e, n), e
-}
-
-function Xt(e, t) {
- e.prototype = Object.create(t.prototype), e.prototype.constructor = e, $t(e, t)
-}
-
-function $t(e, t) {
- return $t = Object.setPrototypeOf || function(e, t) {
- return e.__proto__ = t, e
- }, $t(e, t)
-}
-
-function zt(e, t, n) {
- n = n || {}, je.keys(n).forEach((function(t) {
- n[t] = function(e, t) {
- return "function" != typeof e || "function" != typeof t ? t : function() {
- var n = this.parent;
- this.parent = e;
- var r = t.apply(this, arguments);
- return this.parent = n, r
- }
- }(e.prototype[t], n[t])
- }));
- var r = function(e) {
- function n() {
- return e.apply(this, arguments) || this
- }
- return Xt(n, e), Qt(n, [{
- key: "typename",
- get: function() {
- return t
- }
- }]), n
- }(e);
- return je._assign(r.prototype, n), r
-}
-var Jt = function() {
- function e() {
- this.init.apply(this, arguments)
- }
- return e.prototype.init = function() {}, e.extend = function(e, t) {
- return "object" == typeof e && (t = e, e = "anonymous"), zt(this, e, t)
- }, Qt(e, [{
- key: "typename",
- get: function() {
- return this.constructor.name
- }
- }]), e
- }(),
- Zt = function(e) {
- function t() {
- var t, n;
- return (t = n = e.call(this) || this).init.apply(t, arguments), n
- }
- return Xt(t, e), t.prototype.init = function() {}, t.extend = function(e, t) {
- return "object" == typeof e && (t = e, e = "anonymous"), zt(this, e, t)
- }, Qt(t, [{
- key: "typename",
- get: function() {
- return this.constructor.name
- }
- }]), t
- }(Tt),
- en = {
- Obj: Jt,
- EmitterObj: Zt
- };
-
-function tn(e, t) {
- for (var n = 0; n < t.length; n++) {
- var r = t[n];
- r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r)
- }
-}
-
-function nn(e, t, n) {
- return t && tn(e.prototype, t), n && tn(e, n), e
-}
-
-function rn(e, t) {
- e.prototype = Object.create(t.prototype), e.prototype.constructor = e, sn(e, t)
-}
-
-function sn(e, t) {
- return sn = Object.setPrototypeOf || function(e, t) {
- return e.__proto__ = t, e
- }, sn(e, t)
-}
-
-function an(e, t, n) {
- e instanceof t && n.push(e), e instanceof on && e.findAll(t, n)
-}
-var on = function(e) {
- function t() {
- return e.apply(this, arguments) || this
- }
- rn(t, e);
- var n = t.prototype;
- return n.init = function(e, t) {
- for (var n = arguments, r = this, i = arguments.length, s = new Array(i > 2 ? i - 2 : 0), a = 2; a < i; a++) s[a - 2] = arguments[a];
- this.lineno = e, this.colno = t, this.fields.forEach((function(e, t) {
- var i = n[t + 2];
- void 0 === i && (i = null), r[e] = i
- }))
- }, n.findAll = function(e, t) {
- var n = this;
- return t = t || [], this instanceof ln ? this.children.forEach((function(n) {
- return an(n, e, t)
- })) : this.fields.forEach((function(r) {
- return an(n[r], e, t)
- })), t
- }, n.iterFields = function(e) {
- var t = this;
- this.fields.forEach((function(n) {
- e(t[n], n)
- }))
- }, t
- }(en.Obj),
- cn = function(e) {
- function t() {
- return e.apply(this, arguments) || this
- }
- return rn(t, e), nn(t, [{
- key: "typename",
- get: function() {
- return "Value"
- }
- }, {
- key: "fields",
- get: function() {
- return ["value"]
- }
- }]), t
- }(on),
- ln = function(e) {
- function t() {
- return e.apply(this, arguments) || this
- }
- rn(t, e);
- var n = t.prototype;
- return n.init = function(t, n, r) {
- e.prototype.init.call(this, t, n, r || [])
- }, n.addChild = function(e) {
- this.children.push(e)
- }, nn(t, [{
- key: "typename",
- get: function() {
- return "NodeList"
- }
- }, {
- key: "fields",
- get: function() {
- return ["children"]
- }
- }]), t
- }(on),
- hn = ln.extend("Root"),
- un = cn.extend("Literal"),
- pn = cn.extend("Symbol"),
- fn = ln.extend("Group"),
- dn = ln.extend("Array"),
- En = on.extend("Pair", {
- fields: ["key", "value"]
- }),
- mn = ln.extend("Dict"),
- Tn = on.extend("LookupVal", {
- fields: ["target", "val"]
- }),
- _n = on.extend("If", {
- fields: ["cond", "body", "else_"]
- }),
- An = _n.extend("IfAsync"),
- gn = on.extend("InlineIf", {
- fields: ["cond", "body", "else_"]
- }),
- Nn = on.extend("For", {
- fields: ["arr", "name", "body", "else_"]
- }),
- Cn = Nn.extend("AsyncEach"),
- In = Nn.extend("AsyncAll"),
- Sn = on.extend("Macro", {
- fields: ["name", "args", "body"]
- }),
- bn = Sn.extend("Caller"),
- On = on.extend("Import", {
- fields: ["template", "target", "withContext"]
- }),
- yn = function(e) {
- function t() {
- return e.apply(this, arguments) || this
- }
- return rn(t, e), t.prototype.init = function(t, n, r, i, s) {
- e.prototype.init.call(this, t, n, r, i || new ln, s)
- }, nn(t, [{
- key: "typename",
- get: function() {
- return "FromImport"
- }
- }, {
- key: "fields",
- get: function() {
- return ["template", "names", "withContext"]
- }
- }]), t
- }(on),
- Ln = on.extend("FunCall", {
- fields: ["name", "args"]
- }),
- kn = Ln.extend("Filter"),
- vn = kn.extend("FilterAsync", {
- fields: ["name", "args", "symbol"]
- }),
- Dn = mn.extend("KeywordArgs"),
- Rn = on.extend("Block", {
- fields: ["name", "body"]
- }),
- Mn = on.extend("Super", {
- fields: ["blockName", "symbol"]
- }),
- Pn = on.extend("TemplateRef", {
- fields: ["template"]
- }).extend("Extends"),
- xn = on.extend("Include", {
- fields: ["template", "ignoreMissing"]
- }),
- wn = on.extend("Set", {
- fields: ["targets", "value"]
- }),
- Bn = on.extend("Switch", {
- fields: ["expr", "cases", "default"]
- }),
- Fn = on.extend("Case", {
- fields: ["cond", "body"]
- }),
- Un = ln.extend("Output"),
- Hn = on.extend("Capture", {
- fields: ["body"]
- }),
- Gn = un.extend("TemplateData"),
- Yn = on.extend("UnaryOp", {
- fields: ["target"]
- }),
- qn = on.extend("BinOp", {
- fields: ["left", "right"]
- }),
- Kn = qn.extend("In"),
- jn = qn.extend("Is"),
- Vn = qn.extend("Or"),
- Wn = qn.extend("And"),
- Qn = Yn.extend("Not"),
- Xn = qn.extend("Add"),
- $n = qn.extend("Concat"),
- zn = qn.extend("Sub"),
- Jn = qn.extend("Mul"),
- Zn = qn.extend("Div"),
- er = qn.extend("FloorDiv"),
- tr = qn.extend("Mod"),
- nr = qn.extend("Pow"),
- rr = Yn.extend("Neg"),
- ir = Yn.extend("Pos"),
- sr = on.extend("Compare", {
- fields: ["expr", "ops"]
- }),
- ar = on.extend("CompareOperand", {
- fields: ["expr", "type"]
- }),
- or = on.extend("CallExtension", {
- init: function(e, t, n, r) {
- this.parent(), this.extName = e.__name || e, this.prop = t, this.args = n || new ln, this.contentArgs = r || [], this.autoescape = e.autoescape
- },
- fields: ["extName", "prop", "args", "contentArgs"]
- }),
- cr = or.extend("CallExtensionAsync");
-
-function lr(e, t, n) {
- var r = e.split("\n");
- r.forEach((function(e, i) {
- e && (n && i > 0 || !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; t < this.extensions.length; t++) {
- var n = this.extensions[t];
- if (-1 !== je.indexOf(n.tags || [], e.value)) return n.parse(this, hr, Vt)
- }
- this.fail("unknown block tag: " + e.value, e.lineno, e.colno)
- }
- }, i.parseRaw = function(e) {
- for (var t = "end" + (e = e || "raw"), n = new RegExp("([\\s\\S]*?){%\\s*(" + e + "|" + t + ")\\s*(?=%})%}"), r = 1, i = "", s = null, a = this.advanceAfterBlockEnd();
- (s = this.tokens._extractRegex(n)) && r > 0;) {
- 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; r < t; r++) n[r] = arguments[r];
- this.breakOnBlocks = n;
- var i = this.parse();
- return this.breakOnBlocks = e, i
- }, i.parseNodes = function() {
- for (var e, t = []; e = this.nextToken();)
- if (e.type === Vt.TOKEN_DATA) {
- var n = e.value,
- r = this.peekToken(),
- i = r && r.value;
- this.dropLeadingWhitespace && (n = n.replace(/^\s*/, ""), this.dropLeadingWhitespace = !1), r && (r.type === Vt.TOKEN_BLOCK_START && "-" === i.charAt(i.length - 1) || r.type === Vt.TOKEN_VARIABLE_START && "-" === i.charAt(this.tokens.tags.VARIABLE_START.length) || r.type === Vt.TOKEN_COMMENT && "-" === i.charAt(this.tokens.tags.COMMENT_START.length)) && (n = n.replace(/\s*$/, "")), t.push(new hr.Output(e.lineno, e.colno, [new hr.TemplateData(e.lineno, e.colno, n)]))
- } else if (e.type === Vt.TOKEN_BLOCK_START) {
- this.dropLeadingWhitespace = !1;
- var s = this.parseStatement();
- if (!s) break;
- t.push(s)
- } else if (e.type === Vt.TOKEN_VARIABLE_START) {
- var a = this.parseExpression();
- this.dropLeadingWhitespace = !1, this.advanceAfterVariableEnd(), t.push(new hr.Output(e.lineno, e.colno, [a]))
- } else e.type === Vt.TOKEN_COMMENT ? this.dropLeadingWhitespace = "-" === e.value.charAt(e.value.length - this.tokens.tags.COMMENT_END.length - 1) : this.fail("Unexpected token at top-level: " + e.type, e.lineno, e.colno);
- return t
- }, i.parse = function() {
- return new hr.NodeList(0, 0, this.parseNodes())
- }, i.parseAsRoot = function() {
- return new hr.Root(0, 0, this.parseNodes())
- }, r
- }(en.Obj),
- fr = {
- parse: function(e, t, n) {
- var r = new pr(Vt.lex(e, n));
- return void 0 !== t && (r.extensions = t), r.parseAsRoot()
- },
- Parser: pr
- },
- dr = 0;
-
-function Er() {
- return "hole_" + dr++
-}
-
-function mr(e, t) {
- for (var n = null, r = 0; r < e.length; r++) {
- var i = t(e[r]);
- i !== e[r] && (n || (n = e.slice()), n[r] = i)
- }
- return n || e
-}
-
-function Tr(e, t, n) {
- if (!(e instanceof hr.Node)) return e;
- if (!n) {
- var r = t(e);
- if (r && r !== e) return r
- }
- if (e instanceof hr.NodeList) {
- var i = mr(e.children, (function(e) {
- return Tr(e, t, n)
- }));
- i !== e.children && (e = new hr[e.typename](e.lineno, e.colno, i))
- } else if (e instanceof hr.CallExtension) {
- var s = Tr(e.args, t, n),
- a = mr(e.contentArgs, (function(e) {
- return Tr(e, t, n)
- }));
- s === e.args && a === e.contentArgs || (e = new hr[e.typename](e.extName, e.prop, s, a))
- } else {
- var o = e.fields.map((function(t) {
- return e[t]
- })),
- c = mr(o, (function(e) {
- return Tr(e, t, n)
- }));
- c !== o && (e = new hr[e.typename](e.lineno, e.colno), c.forEach((function(t, n) {
- e[e.fields[n]] = t
- })))
- }
- return n && t(e) || e
-}
-
-function _r(e, t) {
- return Tr(e, t, !0)
-}
-
-function Ar(e, t, n) {
- var r = [],
- i = _r(n ? e[n] : e, (function(e) {
- var n;
- return e instanceof hr.Block ? e : ((e instanceof hr.Filter && -1 !== je.indexOf(t, e.name.value) || e instanceof hr.CallExtensionAsync) && (n = new hr.Symbol(e.lineno, e.colno, Er()), r.push(new hr.FilterAsync(e.lineno, e.colno, e.name, e.args, n))), n)
- }));
- return n ? e[n] = i : e = i, r.length ? (r.push(e), new hr.NodeList(e.lineno, e.colno, r)) : e
-}
-
-function gr(e, t) {
- return function(e) {
- return _r(e, (function(e) {
- if (e instanceof hr.If || e instanceof hr.For) {
- var t = !1;
- if (Tr(e, (function(e) {
- if (e instanceof hr.FilterAsync || e instanceof hr.IfAsync || e instanceof hr.AsyncEach || e instanceof hr.AsyncAll || e instanceof hr.CallExtensionAsync) return t = !0, e
- })), t) {
- if (e instanceof hr.If) return new hr.IfAsync(e.lineno, e.colno, e.cond, e.body, e.else_);
- if (e instanceof hr.For && !(e instanceof hr.AsyncAll)) return new hr.AsyncEach(e.lineno, e.colno, e.arr, e.name, e.body, e.else_)
- }
- }
- }))
- }(function(e) {
- return Tr(e, (function(e) {
- if (e instanceof hr.Block) {
- var t = !1,
- n = Er();
- e.body = Tr(e.body, (function(e) {
- if (e instanceof hr.FunCall && "super" === e.name.value) return t = !0, new hr.Symbol(e.lineno, e.colno, n)
- })), t && e.body.children.unshift(new hr.Super(0, 0, e.name, new hr.Symbol(0, 0, n)))
- }
- }))
- }(function(e, t) {
- return _r(e, (function(e) {
- return e instanceof hr.Output ? Ar(e, t) : e instanceof hr.Set ? Ar(e, t, "value") : e instanceof hr.For ? Ar(e, t, "arr") : e instanceof hr.If ? Ar(e, t, "cond") : e instanceof hr.CallExtension ? Ar(e, t, "args") : void 0
- }))
- }(e, t)))
-}
-var Nr = {
- transform: function(e, t) {
- return gr(e, t || [])
- }
- },
- Cr = Array.from,
- Ir = "function" == typeof Symbol && Symbol.iterator && "function" == typeof Cr,
- Sr = function() {
- function e(e, t) {
- this.variables = Object.create(null), this.parent = e, this.topLevel = !1, this.isolateWrites = t
- }
- var t = e.prototype;
- return t.set = function(e, t, n) {
- var r = e.split("."),
- i = this.variables,
- s = this;
- if (n && (s = this.resolve(r[0], !0))) s.set(e, t);
- else {
- for (var a = 0; a < r.length - 1; a++) {
- var o = r[a];
- i[o] || (i[o] = {}), i = i[o]
- }
- i[r[r.length - 1]] = t
- }
- }, t.get = function(e) {
- var t = this.variables[e];
- return void 0 !== t ? t : null
- }, t.lookup = function(e) {
- var t = this.parent,
- n = this.variables[e];
- return void 0 !== n ? n : t && t.lookup(e)
- }, t.resolve = function(e, t) {
- var n = t && this.isolateWrites ? void 0 : this.parent;
- return void 0 !== this.variables[e] ? this : n && n.resolve(e)
- }, t.push = function(t) {
- return new e(this, t)
- }, t.pop = function() {
- return this.parent
- }, e
- }();
-
-function br(e) {
- return e && Object.prototype.hasOwnProperty.call(e, "__keywords")
-}
-
-function Or(e) {
- var t = e.length;
- if (t) {
- var n = e[t - 1];
- if (br(n)) return n
- }
- return {}
-}
-
-function yr(e) {
- var t = e.length;
- return 0 === t ? 0 : br(e[t - 1]) ? t - 1 : t
-}
-
-function Lr(e) {
- if ("string" != typeof e) return e;
- this.val = e, Object.defineProperty(this, "length", {
- writable: !0,
- configurable: !0,
- value: e.length
- })
-}
-Lr.prototype = Object.create(String.prototype, {
- length: {
- writable: !0,
- configurable: !0,
- value: 0
- }
-}), Lr.prototype.valueOf = function() {
- return this.val
-}, Lr.prototype.toString = function() {
- return this.val
-};
-var kr = {
- Frame: Sr,
- makeMacro: function(e, t, n) {
- return function() {
- for (var r = arguments.length, i = new Array(r), s = 0; s < r; s++) i[s] = arguments[s];
- var a, o = yr(i),
- c = Or(i);
- if (o > e.length) a = i.slice(0, e.length), i.slice(a.length, o).forEach((function(e, n) {
- n < t.length && (c[t[n]] = e)
- })), a.push(c);
- else if (o < e.length) {
- a = i.slice(0, o);
- for (var l = o; l < e.length; l++) {
- var h = e[l];
- a.push(c[h]), delete c[h]
- }
- a.push(c)
- } else a = i;
- return n.apply(this, a)
- }
- },
- makeKeywordArgs: function(e) {
- return e.__keywords = !0, e
- },
- numArgs: yr,
- suppressValue: function(e, t) {
- return "object" == typeof(e = null != e ? e : "") ? new Lr(JSON.stringify(e).toString()) : (!t || e instanceof Lr || (e = je.escape(e.toString())), e)
- },
- ensureDefined: function(e, t, n) {
- if (null == e) throw new je.TemplateError("attempted to output null or undefined value", t + 1, n + 1);
- return e
- },
- memberLookup: function(e, t) {
- if (null != e) return "function" == typeof e[t] ? function() {
- for (var n = arguments.length, r = new Array(n), i = 0; i < n; i++) r[i] = arguments[i];
- return e[t].apply(e, r)
- } : e[t]
- },
- contextOrFrameLookup: function(e, t, n) {
- var r = t.lookup(n);
- return void 0 !== r ? r : e.lookup(n)
- },
- callWrap: function(e, t, n, r) {
- if (!e) throw new Error("Unable to call `" + t + "`, which is undefined or falsey");
- if ("function" != typeof e) throw new Error("Unable to call `" + t + "`, which is not a function");
- return e.apply(n, r)
- },
- handleError: function(e, t, n) {
- return e.lineno ? e : new je.TemplateError(e, t, n)
- },
- isArray: je.isArray,
- keys: je.keys,
- SafeString: Lr,
- copySafeness: function(e, t) {
- return e instanceof Lr ? new Lr(t) : t.toString()
- },
- markSafe: function(e) {
- var t = typeof e;
- return "string" === t ? new Lr(e) : "function" !== t ? e : function(t) {
- var n = e.apply(this, arguments);
- return "string" == typeof n ? new Lr(n) : n
- }
- },
- asyncEach: function(e, t, n, r) {
- if (je.isArray(e)) {
- var i = e.length;
- je.asyncIter(e, (function(e, r, s) {
- switch (t) {
- case 1:
- n(e, r, i, s);
- break;
- case 2:
- n(e[0], e[1], r, i, s);
- break;
- case 3:
- n(e[0], e[1], e[2], r, i, s);
- break;
- default:
- e.push(r, i, s), n.apply(this, e)
- }
- }), r)
- } else je.asyncFor(e, (function(e, t, r, i, s) {
- n(e, t, r, i, s)
- }), r)
- },
- asyncAll: function(e, t, n, r) {
- var i, s, a = 0;
-
- function o(e, t) {
- a++, s[e] = t, a === i && r(null, s.join(""))
- }
- if (je.isArray(e))
- if (i = e.length, s = new Array(i), 0 === i) r(null, "");
- else
- for (var c = 0; c < e.length; c++) {
- var l = e[c];
- switch (t) {
- case 1:
- n(l, c, i, o);
- break;
- case 2:
- n(l[0], l[1], c, i, o);
- break;
- case 3:
- n(l[0], l[1], l[2], c, i, o);
- break;
- default:
- l.push(c, i, o), n.apply(this, l)
- }
- } else {
- var h = je.keys(e || {});
- if (i = h.length, s = new Array(i), 0 === i) r(null, "");
- else
- for (var u = 0; u < h.length; u++) {
- var p = h[u];
- n(p, e[p], u, i, o)
- }
- }
- },
- inOperator: je.inOperator,
- fromIterator: function(e) {
- return "object" != typeof e || null === e || je.isArray(e) ? e : Ir && Symbol.iterator in e ? Cr(e) : e
- }
-};
-
-function vr(e, t) {
- return vr = Object.setPrototypeOf || function(e, t) {
- return e.__proto__ = t, e
- }, vr(e, t)
-}
-kr.Frame, kr.makeMacro, kr.makeKeywordArgs, kr.numArgs, kr.suppressValue, kr.ensureDefined, kr.memberLookup, kr.contextOrFrameLookup, kr.callWrap, kr.handleError, kr.isArray, kr.keys, kr.SafeString, kr.copySafeness, kr.markSafe, kr.asyncEach, kr.asyncAll, kr.inOperator, kr.fromIterator;
-var Dr = je.TemplateError,
- Rr = kr.Frame,
- Mr = {
- "==": "==",
- "===": "===",
- "!=": "!=",
- "!==": "!==",
- "<": "<",
- ">": ">",
- "<=": "<=",
- ">=": ">="
- },
- 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; r < t; r++) n[r] = arguments[r];
- n.forEach((function(t) {
- return e._emitLine(t)
- }))
- }, i._emitFuncBegin = function(e, t) {
- this.buffer = "output", this._scopeClosers = "", this._emitLine("function " + t + "(env, context, frame, runtime, cb) {"), this._emitLine("var lineno = " + e.lineno + ";"), this._emitLine("var colno = " + e.colno + ";"), this._emitLine("var " + this.buffer + ' = "";'), this._emitLine("try {")
- }, i._emitFuncEnd = function(e) {
- e || this._emitLine("cb(null, " + this.buffer + ");"), this._closeScopeLevels(), this._emitLine("} catch (e) {"), this._emitLine(" cb(runtime.handleError(e, lineno, colno));"), this._emitLine("}"), this._emitLine("}"), this.buffer = null
- }, i._addScopeLevel = function() {
- this._scopeClosers += "})"
- }, i._closeScopeLevels = function() {
- this._emitLine(this._scopeClosers + ";"), this._scopeClosers = ""
- }, i._withScopedSyntax = function(e) {
- var t = this._scopeClosers;
- this._scopeClosers = "", e.call(this), this._closeScopeLevels(), this._scopeClosers = t
- }, i._makeCallback = function(e) {
- var t = this._tmpid();
- return "function(" + t + (e ? "," + e : "") + ") {\nif(" + t + ") { cb(" + t + "); return; }"
- }, i._tmpid = function() {
- return this.lastId++, "t_" + this.lastId
- }, i._templateName = function() {
- return null == this.templateName ? "undefined" : JSON.stringify(this.templateName)
- }, i._compileChildren = function(e, t) {
- var n = this;
- e.children.forEach((function(e) {
- n.compile(e, t)
- }))
- }, i._compileAggregate = function(e, t, n, r) {
- var i = this;
- n && this._emit(n), e.children.forEach((function(e, n) {
- n > 0 && 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; r < t; r++) n[r - 1] = arguments[r];
- n.some((function(t) {
- return e instanceof t
- })) || this.fail("assertType: invalid type: " + e.typename, e.lineno, e.colno)
- }, i.compileCallExtension = function(e, t, n) {
- var r = this,
- i = e.args,
- s = e.contentArgs,
- a = "boolean" != typeof e.autoescape || e.autoescape;
- if (n || this._emit(this.buffer + " += runtime.suppressValue("), this._emit('env.getExtension("' + e.extName + '")["' + e.prop + '"]('), this._emit("context"), (i || s) && this._emit(","), i && (i instanceof hr.NodeList || this.fail("compileCallExtension: arguments must be a NodeList, use `parser.parseSignature`"), i.children.forEach((function(e, n) {
- r._compileExpression(e, t), (n !== i.children.length - 1 || s.length) && r._emit(",")
- }))), s.length && s.forEach((function(e, n) {
- if (n > 0 && 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 < e.length; r++) r % t == 0 && s.length && (i.push(s), s = []), s.push(e[r]);
- if (s.length) {
- if (n)
- for (r = s.length; r < t; r++) s.push(n);
- i.push(s)
- }
- return i
- }, t.capitalize = i, t.center = function(e, t) {
- if (t = t || 80, (e = n(e, "")).length >= 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 < r);) s += e.substring(o, a) + n, o = a + t.length, c++, a = e.indexOf(t, o);
- return o < e.length && (s += e.substring(o)), kr.copySafeness(i, s)
- }, t.reverse = function(e) {
- var t;
- return (t = je.isString(e) ? s(e) : je.map(e, (function(e) {
- return e
- }))).reverse(), je.isString(e) ? kr.copySafeness(e, t.join("")) : t
- }, t.round = function(e, t, n) {
- t = t || 0;
- var r = Math.pow(10, t);
- return ("ceil" === n ? Math.ceil : "floor" === n ? Math.floor : Math.round)(e * r) / r
- }, t.slice = function(e, t, n) {
- for (var r = Math.floor(e.length / t), i = e.length % t, s = [], a = 0, o = 0; o < t; o++) {
- var c = a + o * r;
- o < i && a++;
- var l = a + (o + 1) * r,
- h = e.slice(c, l);
- n && o >= 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()), o < c ? t ? 1 : -1 : o > c ? 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 < e.length && "" === e[t]; t++);
- for (var n = e.length - 1; n >= 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 < s; o++)
- if (r[o] !== i[o]) {
- a = o;
- break
- } var c = [];
- for (o = a; o < r.length; o++) c.push("..");
- return (c = c.concat(i.slice(a))).join("/")
- },
- join: function() {
- var e = Array.prototype.slice.call(arguments, 0);
- return Yr(jr(e, (function(e, t) {
- if ("string" != typeof e) throw new TypeError("Arguments to path.join must be strings");
- return e
- })).join("/"))
- },
- isAbsolute: qr,
- normalize: Yr,
- resolve: Gr
-};
-
-function jr(e, t) {
- if (e.filter) return e.filter(t);
- for (var n = [], r = 0; r < e.length; r++) t(e[r], r, e) && n.push(e[r]);
- return n
-}
-var Vr = "b" === "ab".substr(-1) ? function(e, t, n) {
- return e.substr(t, n)
-} : function(e, t, n) {
- return t < 0 && (t = e.length + t), e.substr(t, n)
-};
-
-function Wr(e, t) {
- return Wr = Object.setPrototypeOf || function(e, t) {
- return e.__proto__ = t, e
- }, Wr(e, t)
-}
-var Qr = 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, Wr(t, n);
- var i = r.prototype;
- return i.resolve = function(e, t) {
- return Kr.resolve(Kr.dirname(e), t)
- }, i.isRelative = function(e) {
- return 0 === e.indexOf("./") || 0 === e.indexOf("../")
- }, r
-}(en.EmitterObj);
-
-function Xr(e, t) {
- return Xr = Object.setPrototypeOf || function(e, t) {
- return e.__proto__ = t, e
- }, Xr(e, t)
-}
-var $r = function(e) {
- var t, n;
-
- function r(t) {
- var n;
- return (n = e.call(this) || this).precompiled = t || {}, n
- }
- return n = e, (t = r).prototype = Object.create(n.prototype), t.prototype.constructor = t, Xr(t, n), r.prototype.getSource = function(e) {
- return this.precompiled[e] ? {
- src: {
- type: "code",
- obj: this.precompiled[e]
- },
- path: e
- } : null
- }, r
-}(Qr);
-
-function zr(e, t) {
- e.prototype = Object.create(t.prototype), e.prototype.constructor = e, Jr(e, t)
-}
-
-function Jr(e, t) {
- return Jr = Object.setPrototypeOf || function(e, t) {
- return e.__proto__ = t, e
- }, Jr(e, t)
-}
-var Zr = {
- PrecompiledLoader: $r
- }.PrecompiledLoader,
- ei = function(e) {
- function t(t, n) {
- var r;
- return n = n || {}, (r = e.call(this) || this).pathsToNames = {}, r.noCache = !!n.noCache, t ? (t = Array.isArray(t) ? t : [t], r.searchPaths = t.map(Kr.normalize)) : r.searchPaths = ["."], r
- }
- return zr(t, e), t.prototype.getSource = function(e) {
- for (var t = null, n = this.searchPaths, r = 0; r < n.length; r++) {
- var i = Kr.resolve(n[r]),
- s = Kr.resolve(n[r], e);
- if (0 === s.indexOf(i) && Br.existsSync(s)) {
- t = s;
- break
- }
- }
- if (!t) return null;
- this.pathsToNames[t] = e;
- var a = {
- src: Br.readFileSync(t, "utf-8"),
- path: t,
- noCache: this.noCache
- };
- return this.emit("load", e, a), a
- }, t
- }(Qr),
- ti = {
- FileSystemLoader: ei,
- PrecompiledLoader: Zr,
- NodeResolveLoader: function(e) {
- function t(t) {
- var n;
- return t = t || {}, (n = e.call(this) || this).pathsToNames = {}, n.noCache = !!t.noCache, n
- }
- return zr(t, e), t.prototype.getSource = function(e) {
- if (/^\.?\.?(\/|\\)/.test(e)) return null;
- if (/^[A-Z]:/.test(e)) return null;
- var t;
- try {
- t = Ye.resolve(e)
- } catch (e) {
- return null
- }
- this.pathsToNames[t] = e;
- var n = {
- src: Br.readFileSync(t, "utf-8"),
- path: t,
- noCache: this.noCache
- };
- return this.emit("load", e, n), n
- }, t
- }(Qr)
- },
- ni = Ke((function(e, t) {
- var n = kr.SafeString;
- t.callable = function(e) {
- return "function" == typeof e
- }, t.defined = function(e) {
- return void 0 !== e
- }, t.divisibleby = function(e, t) {
- return e % t == 0
- }, t.escaped = function(e) {
- return e instanceof n
- }, t.equalto = function(e, t) {
- return e === t
- }, t.eq = t.equalto, t.sameas = t.equalto, t.even = function(e) {
- return e % 2 == 0
- }, t.falsy = function(e) {
- return !e
- }, t.ge = function(e, t) {
- return e >= 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 < t
- }, t.lt = t.lessthan, t.lower = function(e) {
- return e.toLowerCase() === e
- }, t.ne = function(e, t) {
- return e !== t
- }, t.null = function(e) {
- return null === e
- }, t.number = function(e) {
- return "number" == typeof e
- }, t.odd = function(e) {
- return e % 2 == 1
- }, t.string = function(e) {
- return "string" == typeof e
- }, t.truthy = function(e) {
- return !!e
- }, t.undefined = function(e) {
- return void 0 === e
- }, t.upper = function(e) {
- return e.toUpperCase() === e
- }, t.iterable = function(e) {
- return "undefined" != typeof Symbol ? !!e[Symbol.iterator] : Array.isArray(e) || "string" == typeof e
- }, t.mapping = function(e) {
- var t = null != e && "object" == typeof e && !Array.isArray(e);
- return Set ? t && !(e instanceof Set) : t
- }
- }));
-
-function ri(e) {
- var t = -1;
- return {
- current: null,
- reset: function() {
- t = -1, this.current = null
- },
- next: function() {
- return ++t >= 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; i < t; i += n) r.push(i);
- else
- for (var s = e; s > t; 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; l < this.loaders.length; l++) {
- var h = this.loaders[l];
- if (c = h.cache[this.resolveTemplate(h, n, e)]) break
- }
- }
- if (c) return t && c.compile(), i ? void i(null, c) : c;
- return je.asyncIter(this.loaders, (function(t, r, i, s) {
- function a(e, n) {
- e ? s(e) : n ? (n.loader = t, s(null, n)) : i()
- }
- e = o.resolveTemplate(t, n, e), t.async ? t.getSource(e, a) : a(null, t.getSource(e))
- }), (function(n, o) {
- if (o || n || r || (n = new Error("template not found: " + e)), n) {
- if (i) return void i(n);
- throw n
- }
- var c;
- o ? (c = new _i(o.src, a, o.path, t), o.noCache || (o.loader.cache[e] = c)) : c = new _i(Ei, a, "", t), i ? i(null, c) : s = c
- })), s
- }, n.express = function(e) {
- return function(e, t) {
- function n(e, t) {
- if (this.name = e, this.path = e, this.defaultEngine = t.defaultEngine, this.ext = Kr.extname(e), !this.ext && !this.defaultEngine) throw new Error("No default engine was specified and no extension was provided.");
- this.ext || (this.name += this.ext = ("." !== this.defaultEngine[0] ? "." : "") + this.defaultEngine)
- }
- return n.prototype.render = function(t, n) {
- e.render(this.name, t, n)
- }, t.set("view", n), t.set("jinja2Env", e), e
- }(this, e)
- }, n.render = function(e, t, n) {
- je.isFunction(t) && (n = t, t = null);
- var r = null;
- return this.getTemplate(e, (function(e, i) {
- if (e && n) di(n, e);
- else {
- if (e) throw e;
- r = i.render(t, n)
- }
- })), r
- }, n.renderString = function(e, t, n, r) {
- return je.isFunction(n) && (r = n, n = {}), new _i(e, this, (n = n || {}).path).render(t, r)
- }, n.waterfall = function(e, t, n) {
- return qt(e, t, n)
- }, t
- }(ui),
- Ti = function(e) {
- function t() {
- return e.apply(this, arguments) || this
- }
- si(t, e);
- var n = t.prototype;
- return n.init = function(e, t, n) {
- var r = this;
- this.env = n || new mi, this.ctx = je.extend({}, e), this.blocks = {}, this.exported = [], je.keys(t).forEach((function(e) {
- r.addBlock(e, t[e])
- }))
- }, n.lookup = function(e) {
- return e in this.env.globals && !(e in this.ctx) ? this.env.globals[e] : this.ctx[e]
- }, n.setVariable = function(e, t) {
- this.ctx[e] = t
- }, n.getVariables = function() {
- return this.ctx
- }, n.addBlock = function(e, t) {
- return this.blocks[e] = this.blocks[e] || [], this.blocks[e].push(t), this
- }, n.getBlock = function(e) {
- if (!this.blocks[e]) throw new Error('unknown block "' + e + '"');
- return this.blocks[e][0]
- }, n.getSuper = function(e, t, n, r, i, s) {
- var a = je.indexOf(this.blocks[t] || [], n),
- o = this.blocks[t][a + 1];
- if (-1 === a || !o) throw new Error('no super block available for "' + t + '"');
- o(e, this, r, i, s)
- }, n.addExport = function(e) {
- this.exported.push(e)
- }, n.getExported = function() {
- var e = this,
- t = {};
- return this.exported.forEach((function(n) {
- t[n] = e.ctx[n]
- })), t
- }, t
- }(hi),
- _i = function(e) {
- function t() {
- return e.apply(this, arguments) || this
- }
- si(t, e);
- var n = t.prototype;
- return n.init = function(e, t, n, r) {
- if (this.env = t || new mi, je.isObject(e)) switch (e.type) {
- case "code":
- this.tmplProps = e.obj;
- break;
- case "string":
- this.tmplStr = e.obj;
- break;
- default:
- throw new Error("Unexpected template object type " + e.type + "; expected 'code', or 'string'")
- } else {
- if (!je.isString(e)) throw new Error("src must be a string or an object describing the source");
- this.tmplStr = e
- }
- if (this.path = n, r) try {
- this._compile()
- } catch (e) {
- throw je._prettifyError(this.path, this.env.opts.dev, e)
- } else this.compiled = !1
- }, n.render = function(e, t, n) {
- var r = this;
- "function" == typeof e ? (n = e, e = {}) : "function" == typeof t && (n = t, t = null);
- var i = !t;
- try {
- this.compile()
- } catch (e) {
- var s = je._prettifyError(this.path, this.env.opts.dev, e);
- if (n) return di(n, s);
- throw s
- }
- var a = new Ti(e || {}, this.blocks, this.env),
- o = t ? t.push(!0) : new fi;
- o.topLevel = !0;
- var c = null,
- l = !1;
- return this.rootRenderFunc(this.env, a, o, kr, (function(e, t) {
- if (!l || !n || void 0 === t)
- if (e && (e = je._prettifyError(r.path, r.env.opts.dev, e), l = !0), n) i ? di(n, e, t) : n(e, t);
- else {
- if (e) throw e;
- c = t
- }
- })), c
- }, n.getExported = function(e, t, n) {
- "function" == typeof e && (n = e, e = {}), "function" == typeof t && (n = t, t = null);
- try {
- this.compile()
- } catch (e) {
- if (n) return n(e);
- throw e
- }
- var r = t ? t.push() : new fi;
- r.topLevel = !0;
- var i = new Ti(e || {}, this.blocks, this.env);
- this.rootRenderFunc(this.env, i, r, kr, (function(e) {
- e ? n(e, null) : n(null, i.getExported())
- }))
- }, n.compile = function() {
- this.compiled || this._compile()
- }, n._compile = function() {
- var e;
- if (this.tmplProps) e = this.tmplProps;
- else {
- var t = xr.compile(this.tmplStr, this.env.asyncFilters, this.env.extensionsList, this.path, this.env.opts);
- e = new Function(t)()
- }
- this.blocks = this._getBlocks(e), this.rootRenderFunc = e.root, this.compiled = !0
- }, n._getBlocks = function(e) {
- var t = {};
- return je.keys(e).forEach((function(n) {
- "b_" === n.slice(0, 2) && (t[n.slice(2)] = e[n])
- })), t
- }, t
- }(hi),
- Ai = {
- Environment: mi,
- Template: _i
- };
-je._prettifyError;
-var gi, Ni = Ai.Environment;
-
-function Ci(e, t) {
- var n;
- return t = t || {}, je.isObject(e) && (t = e, e = null), ti.FileSystemLoader ? n = new ti.FileSystemLoader(e, {
- watch: t.watch,
- noCache: t.noCache
- }) : ti.WebLoader && (n = new ti.WebLoader(e, {
- useCache: t.web && t.web.useCache,
- async: t.web && t.web.async
- })), gi = new Ni(n, t), t && t.express && gi.express(t.express), gi
-}
-ti.FileSystemLoader, ti.NodeResolveLoader, ti.PrecompiledLoader, ti.WebLoader;
-var Ii = function(e, t, n) {
- return gi || Ci(), gi.renderString(e, t, n)
- },
- Si = function() {
- return Si = Object.assign || function(e) {
- for (var t, n = 1, r = arguments.length; n < r; n++)
- for (var i in t = arguments[n]) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
- return e
- }, Si.apply(this, arguments)
- };
-
-function bi(e, t, n) {
- return e ? e(null != t ? t : e._root.children, null, void 0, n).toString() : ""
-}
-
-function Oi(e, t) {
- return bi(this, function(e, t) {
- return !t && "object" == typeof e && null != e && !("length" in e) && !("type" in e)
- }(e) ? void(t = e) : e, Si(Si(Si({}, n), null == this ? void 0 : this._options), i(null != t ? t : {})))
-}
-
-function yi(e) {
- return bi(this, e, Si(Si({}, this._options), {
- xmlMode: !0
- }))
-}
-
-function Li(e) {
- for (var t = e || (this ? this.root() : []), n = "", r = 0; r < t.length; r++) n += z(t[r]);
- return n
-}
-
-function ki(e, t, r) {
- if (void 0 === r && (r = "boolean" == typeof t && t), !e || "string" != typeof e) return null;
- "boolean" == typeof t && (r = t);
- var i = this.load(e, n, !1);
- return r || i("script").remove(), i.root()[0].children.slice()
-}
-
-function vi() {
- return this(this._root)
-}
-
-function Di(e, t) {
- if (t === e) return !1;
- for (var n = t; n && n !== n.parent;)
- if ((n = n.parent) === e) return !0;
- return !1
-}
-
-function Ri(e, t) {
- if (Mi(e) && Mi(t)) {
- for (var n = e.length, r = +t.length, i = 0; i < r; i++) e[n++] = t[i];
- return e.length = n, e
- }
-}
-
-function Mi(e) {
- if (Array.isArray(e)) return !0;
- if ("object" != typeof e || !Object.prototype.hasOwnProperty.call(e, "length") || "number" != typeof e.length || e.length < 0) return !1;
- for (var t = 0; t < e.length; t++)
- if (!(t in e)) return !1;
- return !0
-}
-var Pi, xi = Object.freeze({
- __proto__: null,
- html: Oi,
- xml: yi,
- text: Li,
- parseHTML: ki,
- root: vi,
- contains: Di,
- merge: Ri,
- jp: function(e, t) {
- return He({
- path: e,
- json: t
- })
- },
- jpo: function(e) {
- return He(e)
- },
- jinja2: function(e, t) {
- return Ii(e, t)
- }
-});
-
-function wi(e) {
- return null != e.cheerio
-}
-
-function Bi(e, t) {
- for (var n = e.length, r = 0; r < n; r++) t(e[r], r);
- return e
-}
-
-function Fi(e) {
- var t = "length" in e ? Array.prototype.map.call(e, (function(e) {
- return v(e, !0)
- })) : [v(e, !0)],
- n = new N(t);
- return t.forEach((function(e) {
- e.parent = n
- })), t
-}
-
-function Ui(e) {
- var t = e.indexOf("<");
- if (t < 0 || t > e.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; a < n.length; ++a) {
- var o = n[a],
- c = r[a];
- if (Hi.call(e.attribs, o) && !Hi.call(e.data, c)) {
- if (i = e.attribs[o], Hi.call(Yi, i)) i = Yi[i];
- else if (i === String(Number(i))) i = Number(i);
- else if (Ki.test(i)) try {
- i = JSON.parse(i)
- } catch (e) {}
- e.data[c] = i
- }
- }
- return null == t ? e.data : i
-}
-
-function zi(e, t) {
- e.attribs && Hi.call(e.attribs, t) && delete e.attribs[t]
-}
-
-function Ji(e) {
- return e ? e.trim().split(Gi) : []
-}
-var Zi, es, ts = Object.freeze({
- __proto__: null,
- attr: function(e, t) {
- if ("object" == typeof e || void 0 !== t) {
- if ("function" == typeof t) {
- if ("string" != typeof e) throw new Error("Bad combination of arguments.");
- return Bi(this, (function(n, r) {
- I(n) && Vi(n, e, t.call(n, r, n.attribs[e]))
- }))
- }
- return Bi(this, (function(n) {
- I(n) && ("object" == typeof e ? Object.keys(e).forEach((function(t) {
- var r = e[t];
- Vi(n, t, r)
- })) : Vi(n, e, t))
- }))
- }
- return arguments.length > 1 ? 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 < i.length; s++) this.find('option[value="'.concat(i[s], '"]')).attr("selected", "");
- return this
- }
- return this.attr("multiple") ? r.toArray().map((function(e) {
- return Li(e.children)
- })) : r.attr("value");
- case "input":
- case "option":
- return t ? this.attr("value") : this.attr("value", e)
- }
- },
- removeAttr: function(e) {
- for (var t = Ji(e), n = function(e) {
- Bi(r, (function(n) {
- I(n) && zi(n, t[e])
- }))
- }, r = this, i = 0; i < t.length; i++) n(i);
- return this
- },
- hasClass: function(e) {
- return this.toArray().some((function(t) {
- var n = I(t) && t.attribs.class,
- r = -1;
- if (n && e.length)
- for (;
- (r = n.indexOf(e, r + 1)) > -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 < r; i++) {
- var s = this[i];
- if (I(s)) {
- var a = ji(s, "class", !1);
- if (a) {
- for (var o = " ".concat(a, " "), c = 0; c < n.length; c++) {
- var l = "".concat(n[c], " ");
- o.includes(" ".concat(l)) || (o += l)
- }
- Vi(s, "class", o.trim())
- } else Vi(s, "class", n.join(" ").trim())
- }
- }
- return this
- },
- removeClass: function e(t) {
- if ("function" == typeof t) return Bi(this, (function(n, r) {
- I(n) && e.call([n], t.call(n, r, n.attribs.class || ""))
- }));
- var n = Ji(t),
- r = n.length,
- i = 0 === arguments.length;
- return Bi(this, (function(e) {
- if (I(e))
- if (i) e.attribs.class = "";
- else {
- for (var t = Ji(e.attribs.class), s = !1, a = 0; a < r; a++) {
- var o = t.indexOf(n[a]);
- o >= 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 < a; o++) {
- var c = this[o];
- if (I(c)) {
- for (var l = Ji(c.attribs.class), h = 0; h < i; h++) {
- var u = l.indexOf(r[h]);
- s >= 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 (n < e.length) throw new Error(`Unmatched selector: ${e.slice(n)}`);
- return t
-}
-
-function fs(e, t, n) {
- let r = [];
-
- function i(e) {
- const r = t.slice(n + e).match(ns);
- if (!r) throw new Error(`Expected name, found ${t.slice(n)}`);
- const [i] = r;
- return n += e + i.length, ls(i)
- }
-
- function s(e) {
- for (n += e; n < t.length && us(t.charCodeAt(n));) n++
- }
-
- function a() {
- const e = n += 1;
- let r = 1;
- for (; r > 0 && n < t.length; n++) 40 !== t.charCodeAt(n) || o(n) ? 41 !== t.charCodeAt(n) || o(n) || r-- : r++;
- if (r) throw new Error("Parenthesis not matched");
- return ls(t.slice(e, n - 1))
- }
-
- function o(e) {
- let n = 0;
- for (; 92 === t.charCodeAt(--e);) n++;
- return 1 == (1 & n)
- }
-
- function c() {
- if (r.length > 0 && 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 < t.length;) {
- const e = t.charCodeAt(n);
- switch (e) {
- case 32:
- case 9:
- case 10:
- case 12:
- case 13:
- 0 !== r.length && r[0].type === Zi.Descendant || (c(), r.push({
- type: Zi.Descendant
- })), s(1);
- break;
- case 62:
- l(Zi.Child), s(1);
- break;
- case 60:
- l(Zi.Parent), s(1);
- break;
- case 126:
- l(Zi.Sibling), s(1);
- break;
- case 43:
- l(Zi.Adjacent), s(1);
- break;
- case 46:
- h("class", es.Element);
- break;
- case 35:
- h("id", es.Equals);
- break;
- case 91: {
- let e;
- s(1);
- let a = null;
- 124 === t.charCodeAt(n) ? e = i(1) : t.startsWith("*|", n) ? (a = "*", e = i(2)) : (e = i(0), 124 === t.charCodeAt(n) && 61 !== t.charCodeAt(n + 1) && (a = e, e = i(1))), s(0);
- let c = es.Exists;
- const l = is.get(t.charCodeAt(n));
- if (l) {
- if (c = l, 61 !== t.charCodeAt(n + 1)) throw new Error("Expected `=`");
- s(2)
- } else 61 === t.charCodeAt(n) && (c = es.Equals, s(1));
- let h = "",
- u = null;
- if ("exists" !== c) {
- if (hs(t.charCodeAt(n))) {
- const e = t.charCodeAt(n);
- let r = n + 1;
- for (; r < t.length && (t.charCodeAt(r) !== e || o(r));) r += 1;
- if (t.charCodeAt(r) !== e) throw new Error("Attribute value didn't end");
- h = ls(t.slice(n + 1, r)), n = r + 1
- } else {
- const e = n;
- for (; n < t.length && (!us(t.charCodeAt(n)) && 93 !== t.charCodeAt(n) || o(n));) n += 1;
- h = ls(t.slice(e, n))
- }
- s(0);
- const e = 32 | t.charCodeAt(n);
- 115 === e ? (u = !1, s(1)) : 105 === e && (u = !0, s(1))
- }
- if (93 !== t.charCodeAt(n)) throw new Error("Attribute selector didn't terminate");
- n += 1;
- const p = {
- type: Zi.Attribute,
- name: e,
- action: c,
- value: h,
- namespace: a,
- ignoreCase: u
- };
- r.push(p);
- break
- }
- case 58: {
- if (58 === t.charCodeAt(n + 1)) {
- r.push({
- type: Zi.PseudoElement,
- name: i(2).toLowerCase(),
- data: 40 === t.charCodeAt(n) ? a() : null
- });
- continue
- }
- const e = i(1).toLowerCase();
- let s = null;
- if (40 === t.charCodeAt(n))
- if (ss.has(e)) {
- if (hs(t.charCodeAt(n + 1))) throw new Error(`Pseudo-selector ${e} cannot be quoted`);
- if (s = [], n = fs(s, t, n + 1), 41 !== t.charCodeAt(n)) throw new Error(`Missing closing parenthesis in :${e} (${t})`);
- n += 1
- } else {
- if (s = a(), os.has(e)) {
- const e = s.charCodeAt(0);
- e === s.charCodeAt(s.length - 1) && hs(e) && (s = s.slice(1, -1))
- }
- s = ls(s)
- } r.push({
- type: Zi.Pseudo,
- name: e,
- data: s
- });
- break
- }
- case 44:
- u(), r = [], s(1);
- break;
- default: {
- if (t.startsWith("/*", n)) {
- const e = t.indexOf("*/", n + 2);
- if (e < 0) throw new Error("Comment was not terminated");
- n = e + 2, 0 === r.length && s(0);
- break
- }
- let a, o = null;
- if (42 === e) n += 1, a = "*";
- else if (124 === e) {
- if (a = "", 124 === t.charCodeAt(n + 1)) {
- l(Zi.ColumnCombinator), s(2);
- break
- }
- } else {
- if (!ns.test(t.slice(n))) break e;
- a = i(0)
- }
- 124 === t.charCodeAt(n) && 124 !== t.charCodeAt(n + 1) && (o = a, 42 === t.charCodeAt(n + 1) ? (a = "*", n += 2) : a = i(1)), r.push("*" === a ? {
- type: Zi.Universal,
- namespace: o
- } : {
- type: Zi.Tag,
- name: a,
- namespace: o
- })
- }
- }
- }
- return u(), n
-}
-var ds = {
- trueFunc: function() {
- return !0
- },
- falseFunc: function() {
- return !1
- }
- },
- Es = ds.trueFunc;
-const ms = new Map([
- [Zi.Universal, 50],
- [Zi.Tag, 30],
- [Zi.Attribute, 1],
- [Zi.Pseudo, 0]
-]);
-
-function Ts(e) {
- return !ms.has(e.type)
-}
-const _s = new Map([
- [es.Exists, 10],
- [es.Equals, 8],
- [es.Not, 7],
- [es.Start, 6],
- [es.End, 6],
- [es.Any, 5]
-]);
-
-function As(e) {
- const t = e.map(gs);
- for (let n = 1; n < e.length; n++) {
- const r = t[n];
- if (!(r < 0))
- for (let i = n - 1; i >= 0 && r < t[i]; i--) {
- const n = e[i + 1];
- e[i + 1] = e[i], e[i] = n, t[i + 1] = t[i], t[i] = r
- }
- }
-}
-
-function gs(e) {
- var t, n;
- let r = null !== (t = ms.get(e.type)) && void 0 !== t ? t : -1;
- return e.type === Zi.Attribute ? (r = null !== (n = _s.get(e.action)) && void 0 !== n ? n : 4, e.action === es.Equals && "id" === e.name && (r = 9), e.ignoreCase && (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 < e.length && "n" === e.charAt(t) && (t++, s = a * (null != o ? o : 1), h(), t < e.length ? (a = c(), h(), o = l()) : a = o = 0), null === o || t < e.length) throw new Error("n-th rule couldn't be parsed ('" + e + "')");
- return [s, a * o];
-
- function c() {
- return "-" === e.charAt(t) ? (t++, -1) : ("+" === e.charAt(t) && t++, 1)
- }
-
- function l() {
- for (var n = t, s = 0; t < e.length && e.charCodeAt(t) >= r && e.charCodeAt(t) <= i;) s = 10 * s + (e.charCodeAt(t) - r), t++;
- return t === n ? null : s
- }
-
- function h() {
- for (; t < e.length && n.has(e.charCodeAt(t));) t++
- }
- }
-}));
-qe(Os), Os.parse;
-var ys = Ke((function(e, t) {
- Object.defineProperty(t, "__esModule", {
- value: !0
- }), t.compile = void 0, t.compile = function(e) {
- var t = e[0],
- n = e[1] - 1;
- if (n < 0 && t <= 0) return ds.falseFunc;
- if (-1 === t) return function(e) {
- return e <= n
- };
- if (0 === t) return function(e) {
- return e === n
- };
- if (1 === t) return n < 0 ? ds.trueFunc : function(e) {
- return e >= 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 < s.length && !r(t, s[e]); e++) n.isTag(s[e]) && a++;
- return i(a) && e(t)
- }
- },
- "nth-last-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 = s.length - 1; 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 < s.length; 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)
- }
- },
- "nth-last-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 = s.length - 1; 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 < r.length; s++) {
- const a = r[s];
- if (n(e, a)) return !0;
- if (t.isTag(a) && t.getName(a) === i) break
- }
- return !1
- },
- "last-of-type"(e, {
- adapter: t,
- equals: n
- }) {
- const r = t.getSiblings(e),
- i = t.getName(e);
- for (let s = r.length - 1; 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; r < n.length; r++) {
- const i = n[r];
- if (a(t, i)) break;
- if (s.isTag(i) && e(i)) return !0
- }
- return !1
- };
- case Zi.Adjacent:
- return s.prevElementSibling ? function(t) {
- const n = s.prevElementSibling(t);
- return null != n && e(n)
- } : function(t) {
- const n = s.getSiblings(t);
- let r;
- for (let e = 0; e < n.length; e++) {
- const i = n[e];
- if (a(t, i)) break;
- s.isTag(i) && (r = i)
- }
- return !!r && e(r)
- };
- case Zi.Universal:
- if (null != t.namespace && "*" !== t.namespace) throw new Error("Namespaced universal selectors are not yet supported by css-select");
- return e
- }
-}
-
-function js(e) {
- return e.type === Zi.Pseudo && ("scope" === e.name || Array.isArray(e.data) && e.data.some((e => e.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; e < r; e++) {
- const r = Us(n[e], t);
- n.push(...r)
- }
- return n
- }(e, t)), Array.isArray(e) ? t.removeSubsets(e) : t.getChildren(e)
-}
-const na = new Set(["first", "last", "eq", "gt", "nth", "lt", "even", "odd"]);
-
-function ra(e) {
- return "pseudo" === e.type && (!!na.has(e.name) || !("not" !== e.name || !Array.isArray(e.data)) && e.data.some((e => e.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; e < i.length && (null == s ? void 0 : s.size) !== t.length; e++) {
- const r = i[e],
- a = s ? t.filter((e => I(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.length ? [i < 0 ? t[t.length + i] : t[i]] : [];
- case "gt":
- return isFinite(i) ? t.slice(i + 1) : [];
- case "even":
- return t.filter(((e, t) => 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; i < s; i++) !r && i in t || (r || (r = Array.prototype.slice.call(t, 0, i)), r[i] = t[i]);
- return e.concat(r || Array.prototype.slice.call(t))
- },
- Ta = /^\s*[~+]/;
-
-function _a(e) {
- return function(t) {
- for (var n = [], r = 1; r < arguments.length; r++) n[r - 1] = arguments[r];
- return function(r) {
- var i, s = e(t, this);
- return r && (s = xa(s, r, this.options.xmlMode, null === (i = this._root) || void 0 === i ? void 0 : i[0])), this._make(this.length > 1 && 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; i < t.length; i++) {
- var s = e(t[i]);
- r.push(s)
- }
- return (n = new Array).concat.apply(n, r)
- })),
- ga = _a((function(e, t) {
- for (var n = [], r = 0; r < t.length; r++) {
- var i = e(t[r]);
- null !== i && n.push(i)
- }
- return n
- }));
-
-function Na(e) {
- for (var t = [], n = 1; n < arguments.length; n++) t[n - 1] = arguments[n];
- var r = null,
- i = _a((function(e, t) {
- var n = [];
- return Bi(t, (function(t) {
- for (var i;
- (i = e(t)) && !(null == r ? void 0 : r(i, n.length)); t = i) n.push(i)
- })), n
- })).apply(void 0, ma([e], t, !1));
- return function(e, t) {
- var n = this;
- r = "string" == typeof e ? function(t) {
- return oa(t, e, n.options)
- } : e ? Pa(e) : null;
- var s = i.call(this, t);
- return r = null, s
- }
-}
-
-function Ca(e) {
- return Array.from(new Set(e))
-}
-var Ia = ga((function(e) {
- var t = e.parent;
- return t && !L(t) ? t : null
- }), Ca),
- Sa = Aa((function(e) {
- for (var t = []; e.parent && !L(e.parent);) t.push(e.parent), e = e.parent;
- return t
- }), Ee, (function(e) {
- return e.reverse()
- })),
- ba = Na((function(e) {
- var t = e.parent;
- return t && !L(t) ? t : null
- }), Ee, (function(e) {
- return e.reverse()
- }));
-var Oa = ga((function(e) {
- return ne(e)
- })),
- ya = Aa((function(e) {
- for (var t = []; e.next;) I(e = e.next) && t.push(e);
- return t
- }), Ca),
- La = Na((function(e) {
- return ne(e)
- }), Ca),
- ka = ga((function(e) {
- return re(e)
- })),
- va = Aa((function(e) {
- for (var t = []; e.prev;) I(e = e.prev) && t.push(e);
- return t
- }), Ca),
- Da = Na((function(e) {
- return re(e)
- }), Ca),
- Ra = Aa((function(e) {
- return te(e).filter((function(t) {
- return I(t) && t !== e
- }))
- }), Ee),
- Ma = Aa((function(e) {
- return Z(e).filter(I)
- }), Ca);
-
-function Pa(e) {
- return "function" == typeof e ? function(t, n) {
- return e.call(t, n, t)
- } : wi(e) ? function(t) {
- return Array.prototype.includes.call(e, t)
- } : function(t) {
- return e === t
- }
-}
-
-function xa(e, t, n, r) {
- return "string" == typeof t ? la(t, e, {
- xmlMode: n,
- root: r
- }) : e.filter(Pa(t))
-}
-var wa = Object.freeze({
- __proto__: null,
- find: function(e) {
- var t;
- if (!e) return this._make([]);
- var n = this.toArray();
- if ("string" != typeof e) {
- var r = wi(e) ? e.toArray() : [e];
- return this._make(r.filter((function(e) {
- return n.some((function(t) {
- return Di(t, e)
- }))
- })))
- }
- var i = Ta.test(e) ? n : this.children().toArray(),
- s = {
- context: n,
- root: null === (t = this._root) || void 0 === t ? void 0 : t[0],
- xmlMode: this.options.xmlMode,
- lowerCaseTags: this.options.lowerCaseTags,
- lowerCaseAttributeNames: this.options.lowerCaseAttributeNames,
- pseudos: this.options.pseudos,
- quirksMode: this.options.quirksMode
- };
- return this._make(function(e, t, n = {}, r = 1 / 0) {
- if ("function" == typeof e) return da(t, e);
- const [i, s] = ia(ps(e)), a = s.map((e => pa(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; t < n && !1 !== e.call(this[t], t, this[t]);) ++t;
- return this
- },
- map: function(e) {
- for (var t = [], n = 0; n < this.length; n++) {
- var r = this[n],
- i = e.call(r, n, r);
- null != i && (t = t.concat(i))
- }
- return this._make(t)
- },
- filter: function(e) {
- var t;
- return this._make(xa(this.toArray(), e, this.options.xmlMode, null === (t = this._root) || void 0 === t ? void 0 : t[0]))
- },
- filterArray: xa,
- is: function(e) {
- var t = this.toArray();
- return "string" == typeof e ? ca(t.filter(I), e, this.options) : !!e && t.some(Pa(e))
- },
- not: function(e) {
- var t = this.toArray();
- if ("string" == typeof e) {
- var n = new Set(la(e, t, this.options));
- t = t.filter((function(e) {
- return !n.has(e)
- }))
- } else {
- var r = Pa(e);
- t = t.filter((function(e, t) {
- return !r(e, t)
- }))
- }
- return this._make(t)
- },
- has: function(e) {
- var t = this;
- return this.filter("string" == typeof e ? ":has(".concat(e, ")") : function(n, r) {
- return t._make(r).find(e).length > 0
- })
- },
- 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 < n.length; r++) {
- var i = n[r];
- i.parent && i.parent.children !== n && ie(i), t ? (i.prev = n[r - 1] || null, i.next = n[r + 1] || null) : i.prev = i.next = null, i.parent = t
- }
- return t
-}
-var Fa = function(e, t, n) {
- if (n || 2 === arguments.length)
- for (var r, i = 0, s = t.length; i < s; i++) !r && i in t || (r || (r = Array.prototype.slice.call(t, 0, i)), r[i] = t[i]);
- return e.concat(r || Array.prototype.slice.call(t))
-};
-
-function Ua(e) {
- return function() {
- for (var t = this, n = [], r = 0; r < arguments.length; r++) n[r] = arguments[r];
- var i = this.length - 1;
- return Bi(this, (function(r, s) {
- if (k(r)) {
- var a = "function" == typeof n[0] ? n[0].call(r, s, t._render(r.children)) : n,
- o = t._makeDomArray(a, s < i);
- e(o, r.children, r)
- }
- }))
- }
-}
-
-function Ha(e, t, n, r, i) {
- for (var s, a, o = Fa([t, n], r, !0), c = 0 === t ? null : e[t - 1], l = t + n >= e.length ? null : e[t + n], h = 0; h < r.length; ++h) {
- var u = r[h],
- p = u.parent;
- if (p) {
- var f = p.children.indexOf(u);
- f > -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; i < this.length; i++) {
- var s = this[i],
- a = "function" == typeof t ? t.call(s, i, s) : "string" != typeof t || Ui(t) ? t : r.find(t).clone(),
- o = this._makeDomArray(a, i < n)[0];
- if (o && k(o)) {
- for (var c = o, l = 0; l < c.children.length;) {
- var h = c.children[l];
- I(h) ? (c = h, l = 0) : l++
- }
- e(s, c, [o])
- }
- }
- return this
- }
-}
-var Ka = qa((function(e, t, n) {
- var r = e.parent;
- if (r) {
- var i = r.children,
- s = i.indexOf(e);
- Ba([e], t), Ha(i, s, 0, n, r)
- }
- })),
- ja = qa((function(e, t, n) {
- k(e) && (Ba(e.children, t), Ba(n, e))
- }));
-var Va = Object.freeze({
- __proto__: null,
- _makeDomArray: function(e, t) {
- var n = this;
- return null == e ? [] : wi(e) ? t ? Fi(e.get()) : e.get() : Array.isArray(e) ? e.reduce((function(e, r) {
- return e.concat(n._makeDomArray(r, t))
- }), []) : "string" == typeof e ? this._parse(e, this.options, !1, null).children : t ? Fi([e]) : [e]
- },
- appendTo: function(e) {
- return (wi(e) ? e : this._make(e)).append(this), this
- },
- prependTo: function(e) {
- return (wi(e) ? e : this._make(e)).prepend(this), this
- },
- append: Ga,
- prepend: Ya,
- wrap: Ka,
- wrapInner: ja,
- unwrap: function(e) {
- var t = this;
- return this.parent(e).not("body").each((function(e, n) {
- t._make(n).replaceWith(n.children)
- })), this
- },
- wrapAll: function(e) {
- var t = this[0];
- if (t) {
- for (var n = this._make("function" == typeof e ? e.call(t, 0, t) : e).insertBefore(t), r = void 0, i = 0; i < n.length; i++) "tag" === n[i].type && (r = n[i]);
- for (var s = 0; r && s < r.children.length;) {
- var a = r.children[s];
- "tag" === a.type ? (r = a, s = 0) : s++
- }
- r && this._make(r).append(this)
- }
- return this
- },
- after: function() {
- for (var e = this, t = [], n = 0; n < arguments.length; n++) t[n] = arguments[n];
- var r = this.length - 1;
- return Bi(this, (function(n, i) {
- var s = n.parent;
- if (k(n) && s) {
- var a = s.children,
- o = a.indexOf(n);
- if (!(o < 0)) {
- var c = "function" == typeof t[0] ? t[0].call(n, i, e._render(n.children)) : t;
- Ha(a, o + 1, 0, e._makeDomArray(c, i < r), s)
- }
- }
- }))
- },
- insertAfter: function(e) {
- var t = this;
- "string" == typeof e && (e = this._make(e)), this.remove();
- var n = [];
- return this._makeDomArray(e).forEach((function(e) {
- var r = t.clone().toArray(),
- i = e.parent;
- if (i) {
- var s = i.children,
- a = s.indexOf(e);
- a < 0 || (Ha(s, a + 1, 0, r, i), n.push.apply(n, r))
- }
- })), this._make(n)
- },
- before: function() {
- for (var e = this, t = [], n = 0; n < arguments.length; n++) t[n] = arguments[n];
- var r = this.length - 1;
- return Bi(this, (function(n, i) {
- var s = n.parent;
- if (k(n) && s) {
- var a = s.children,
- o = a.indexOf(n);
- if (!(o < 0)) {
- var c = "function" == typeof t[0] ? t[0].call(n, i, e._render(n.children)) : t;
- Ha(a, o, 0, e._makeDomArray(c, i < r), s)
- }
- }
- }))
- },
- insertBefore: function(e) {
- var t = this,
- n = this._make(e);
- this.remove();
- var r = [];
- return Bi(n, (function(e) {
- var n = t.clone().toArray(),
- i = e.parent;
- if (i) {
- var s = i.children,
- a = s.indexOf(e);
- a < 0 || (Ha(s, a, 0, n, i), r.push.apply(r, n))
- }
- })), this._make(r)
- },
- remove: function(e) {
- return Bi(e ? this.filter(e) : this, (function(e) {
- ie(e), e.prev = e.next = e.parent = null
- })), this
- },
- replaceWith: function(e) {
- var t = this;
- return Bi(this, (function(n, r) {
- var i = n.parent;
- if (i) {
- var s = i.children,
- a = "function" == typeof e ? e.call(n, r, n) : e,
- o = t._makeDomArray(a);
- Ba(o, null);
- var c = s.indexOf(n);
- Ha(s, c, 1, o, i), o.includes(n) || (n.parent = n.prev = n.next = null)
- }
- }))
- },
- empty: function() {
- return Bi(this, (function(e) {
- k(e) && (e.children.forEach((function(e) {
- e.next = e.prev = e.parent = null
- })), e.children.length = 0)
- }))
- },
- html: function(e) {
- var t = this;
- if (void 0 === e) {
- var n = this[0];
- return n && k(n) ? this._render(n.children) : null
- }
- return Bi(this, (function(n) {
- k(n) && (n.children.forEach((function(e) {
- e.next = e.prev = e.parent = null
- })), Ba(wi(e) ? e.toArray() : t._parse("".concat(e), t.options, !1, n).children, n))
- }))
- },
- toString: function() {
- return this._render(this)
- },
- text: function(e) {
- var t = this;
- return void 0 === e ? Li(this) : Bi(this, "function" == typeof e ? function(n, r) {
- return t._make(n).text(e.call(n, r, Li([n])))
- } : function(t) {
- k(t) && (t.children.forEach((function(e) {
- e.next = e.prev = e.parent = null
- })), Ba(new m("".concat(e)), t))
- })
- },
- clone: function() {
- return this._make(Fi(this.get()))
- }
-});
-
-function Wa(e, t, n, r) {
- if ("string" == typeof t) {
- var i = Qa(e),
- s = "function" == typeof n ? n.call(e, r, i[t]) : n;
- "" === s ? delete i[t] : null != s && (i[t] = s), e.attribs.style = (a = i, Object.keys(a).reduce((function(e, t) {
- return "".concat(e).concat(e ? " " : "").concat(t, ": ").concat(a[t], ";")
- }), ""))
- } else "object" == typeof t && Object.keys(t).forEach((function(n, r) {
- Wa(e, n, t[n], r)
- }));
- var a
-}
-
-function Qa(e, t) {
- if (e && I(e)) {
- var n = function(e) {
- if (!(e = (e || "").trim())) return {};
- for (var t, n = {}, r = 0, i = e.split(";"); r < i.length; r++) {
- var s = i[r],
- a = s.indexOf(":");
- if (a < 1 || a === s.length - 1) {
- var o = s.trimEnd();
- o.length > 0 && 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 < e.length; r++) this[r] = e[r];
- this.length = e.length
- }
- };
-Za.prototype.cheerio = "[cheerio object]", Za.prototype.splice = Array.prototype.splice, Za.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator], Object.assign(Za.prototype, ts, wa, Va, Xa, Ja);
-var eo, to = (eo = function(e, t) {
- return eo = Object.setPrototypeOf || {
- __proto__: []
- }
- instanceof Array && function(e, t) {
- e.__proto__ = t
- } || function(e, t) {
- for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n])
- }, eo(e, t)
- }, function(e, t) {
- if ("function" != typeof t && null !== t) throw new TypeError("Class extends value " + String(t) + " is not a constructor or null");
-
- function n() {
- this.constructor = e
- }
- eo(e, t), e.prototype = null === t ? Object.create(t) : (n.prototype = t.prototype, new n)
- }),
- no = function() {
- return no = Object.assign || function(e) {
- for (var t, n = 1, r = arguments.length; n < r; n++)
- for (var i in t = arguments[n]) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
- return e
- }, no.apply(this, arguments)
- };
-const ro = new Set([65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214, 393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894, 720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574, 1048575, 1114110, 1114111]);
-var io;
-! function(e) {
- e[e.EOF = -1] = "EOF", e[e.NULL = 0] = "NULL", e[e.TABULATION = 9] = "TABULATION", e[e.CARRIAGE_RETURN = 13] = "CARRIAGE_RETURN", e[e.LINE_FEED = 10] = "LINE_FEED", e[e.FORM_FEED = 12] = "FORM_FEED", e[e.SPACE = 32] = "SPACE", e[e.EXCLAMATION_MARK = 33] = "EXCLAMATION_MARK", e[e.QUOTATION_MARK = 34] = "QUOTATION_MARK", e[e.NUMBER_SIGN = 35] = "NUMBER_SIGN", e[e.AMPERSAND = 38] = "AMPERSAND", e[e.APOSTROPHE = 39] = "APOSTROPHE", e[e.HYPHEN_MINUS = 45] = "HYPHEN_MINUS", e[e.SOLIDUS = 47] = "SOLIDUS", e[e.DIGIT_0 = 48] = "DIGIT_0", e[e.DIGIT_9 = 57] = "DIGIT_9", e[e.SEMICOLON = 59] = "SEMICOLON", e[e.LESS_THAN_SIGN = 60] = "LESS_THAN_SIGN", e[e.EQUALS_SIGN = 61] = "EQUALS_SIGN", e[e.GREATER_THAN_SIGN = 62] = "GREATER_THAN_SIGN", e[e.QUESTION_MARK = 63] = "QUESTION_MARK", e[e.LATIN_CAPITAL_A = 65] = "LATIN_CAPITAL_A", e[e.LATIN_CAPITAL_F = 70] = "LATIN_CAPITAL_F", e[e.LATIN_CAPITAL_X = 88] = "LATIN_CAPITAL_X", e[e.LATIN_CAPITAL_Z = 90] = "LATIN_CAPITAL_Z", e[e.RIGHT_SQUARE_BRACKET = 93] = "RIGHT_SQUARE_BRACKET", e[e.GRAVE_ACCENT = 96] = "GRAVE_ACCENT", e[e.LATIN_SMALL_A = 97] = "LATIN_SMALL_A", e[e.LATIN_SMALL_F = 102] = "LATIN_SMALL_F", e[e.LATIN_SMALL_X = 120] = "LATIN_SMALL_X", e[e.LATIN_SMALL_Z = 122] = "LATIN_SMALL_Z", e[e.REPLACEMENT_CHARACTER = 65533] = "REPLACEMENT_CHARACTER"
-}(io = io || (io = {}));
-const so = "--",
- ao = "[CDATA[",
- oo = "doctype",
- co = "script",
- lo = "public",
- ho = "system";
-
-function uo(e) {
- return e >= 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 < e.length; t++) {
- if ((32 | this.html.charCodeAt(this.pos + t)) !== e.charCodeAt(t)) return !1
- }
- return !0
- }
- peek(e) {
- const t = this.pos + e;
- return 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 < this.lastGapPos;) this.lastGapPos = this.gapStack.pop(), this.pos--;
- this.isEol = !1
- }
-}
-var To;
-
-function _o(e, t) {
- for (let n = e.attrs.length - 1; n >= 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୕ୖ୪௫ఄ಄ದൡඅ櫬Āoungruent;扢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;怳Ādpuct;戏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ǣጓ\0y;䐎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Ā;tbrk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯᝳ;䎲;愶een;扬r;쀀𝔟gcostuvwឍឝឳេ៕៛ƀ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Ā;elƀ;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\0aĀ;t䀬;䁀ƀ;fl戁îᅠeĀmxent»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ↄⅪ←ٖ↛ǰ↉\0proø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;䅓Ācrir;榿;쀀𝔬ͯ\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\0m;櫳;櫽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 < t.length && !((p = h(e, f, p + 1, t.charCodeAt(c))) < 0); c++, u++) {
- var d = (f = e[p]) & o.VALUE_LENGTH;
- if (d) {
- var E;
- if (n && t.charCodeAt(c) !== a.SEMI || (l = p, u = 0), 0 === (E = (d >> 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 (u < r) c = h + 1;
- else {
- if (!(u > r)) 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; t < e; t++) this.preprocessor.advance()
- }
- _consumeSequenceIfMatch(e, t) {
- return !!this.preprocessor.startsWith(e, t) && (this._advanceBy(e.length - 1), !0)
- }
- _createStartTagToken() {
- this.currentToken = {
- type: To.START_TAG,
- tagName: "",
- tagID: Po.UNKNOWN,
- selfClosing: !1,
- ackSelfClosing: !1,
- attrs: [],
- location: this.getCurrentLocation(1)
- }
- }
- _createEndTagToken() {
- this.currentToken = {
- type: To.END_TAG,
- tagName: "",
- tagID: Po.UNKNOWN,
- selfClosing: !1,
- ackSelfClosing: !1,
- attrs: [],
- location: this.getCurrentLocation(2)
- }
- }
- _createCommentToken(e) {
- this.currentToken = {
- type: To.COMMENT,
- data: "",
- location: this.getCurrentLocation(e)
- }
- }
- _createDoctypeToken(e) {
- this.currentToken = {
- type: To.DOCTYPE,
- name: e,
- forceQuirks: !1,
- publicId: null,
- systemId: null,
- location: this.currentLocation
- }
- }
- _createCharacterToken(e, t) {
- this.currentCharacterToken = {
- type: e,
- chars: t,
- location: this.currentLocation
- }
- }
- _createAttr(e) {
- this.currentAttr = {
- name: e,
- value: ""
- }, this.currentLocation = this.getCurrentLocation(0)
- }
- _leaveAttrName() {
- var e, t;
- const n = this.currentToken;
- if (null === _o(n, this.currentAttr.name)) {
- if (n.attrs.push(this.currentAttr), n.location && this.currentLocation) {
- (null !== (e = (t = n.location).attrs) && void 0 !== e ? e : t.attrs = Object.create(null))[this.currentAttr.name] = this.currentLocation, this._leaveAttrValue()
- }
- } else this._err(Eo.duplicateAttribute)
- }
- _leaveAttrValue() {
- this.currentLocation && (this.currentLocation.endLine = this.preprocessor.line, this.currentLocation.endCol = this.preprocessor.col, this.currentLocation.endOffset = this.preprocessor.offset)
- }
- prepareToken(e) {
- this._emitCurrentCharacterToken(e.location), this.currentToken = null, e.location && (e.location.endLine = this.preprocessor.line, e.location.endCol = this.preprocessor.col + 1, e.location.endOffset = this.preprocessor.offset + 1), this.currentLocation = this.getCurrentLocation(-1)
- }
- emitCurrentTagToken() {
- const e = this.currentToken;
- this.prepareToken(e), e.tagID = Fo(e.tagName), e.type === To.START_TAG ? (this.lastStartTagName = e.tagName, this.handler.onStartTag(e)) : (e.attrs.length > 0 && 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(""), this._emitEOFToken();
- break;
- default:
- this._err(Eo.invalidFirstCharacterOfTagName), this._createCommentToken(2), this.state = Ko.BOGUS_COMMENT, this._stateBogusComment(e)
- }
- }
- _stateTagName(e) {
- const t = this.currentToken;
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- this.state = Ko.BEFORE_ATTRIBUTE_NAME;
- break;
- case io.SOLIDUS:
- this.state = Ko.SELF_CLOSING_START_TAG;
- break;
- case io.GREATER_THAN_SIGN:
- this.state = Ko.DATA, this.emitCurrentTagToken();
- break;
- case io.NULL:
- this._err(Eo.unexpectedNullCharacter), t.tagName += "�";
- break;
- case io.EOF:
- this._err(Eo.eofInTag), this._emitEOFToken();
- break;
- default:
- t.tagName += String.fromCodePoint(Wo(e) ? Jo(e) : e)
- }
- }
- _stateRcdataLessThanSign(e) {
- e === io.SOLIDUS ? this.state = Ko.RCDATA_END_TAG_OPEN : (this._emitChars("<"), this.state = Ko.RCDATA, this._stateRcdata(e))
- }
- _stateRcdataEndTagOpen(e) {
- Qo(e) ? (this.state = Ko.RCDATA_END_TAG_NAME, this._stateRcdataEndTagName(e)) : (this._emitChars(""), this.state = Ko.RCDATA, this._stateRcdata(e))
- }
- handleSpecialEndTag(e) {
- if (!this.preprocessor.startsWith(this.lastStartTagName, !1)) return !this._ensureHibernation();
- this._createEndTagToken();
- this.currentToken.tagName = this.lastStartTagName;
- switch (this.preprocessor.peek(this.lastStartTagName.length)) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- return this._advanceBy(this.lastStartTagName.length), this.state = Ko.BEFORE_ATTRIBUTE_NAME, !1;
- case io.SOLIDUS:
- return this._advanceBy(this.lastStartTagName.length), this.state = Ko.SELF_CLOSING_START_TAG, !1;
- case io.GREATER_THAN_SIGN:
- return this._advanceBy(this.lastStartTagName.length), this.emitCurrentTagToken(), this.state = Ko.DATA, !1;
- default:
- return !this._ensureHibernation()
- }
- }
- _stateRcdataEndTagName(e) {
- this.handleSpecialEndTag(e) && (this._emitChars(""), this.state = Ko.RCDATA, this._stateRcdata(e))
- }
- _stateRawtextLessThanSign(e) {
- e === io.SOLIDUS ? this.state = Ko.RAWTEXT_END_TAG_OPEN : (this._emitChars("<"), this.state = Ko.RAWTEXT, this._stateRawtext(e))
- }
- _stateRawtextEndTagOpen(e) {
- Qo(e) ? (this.state = Ko.RAWTEXT_END_TAG_NAME, this._stateRawtextEndTagName(e)) : (this._emitChars(""), this.state = Ko.RAWTEXT, this._stateRawtext(e))
- }
- _stateRawtextEndTagName(e) {
- this.handleSpecialEndTag(e) && (this._emitChars(""), this.state = Ko.RAWTEXT, this._stateRawtext(e))
- }
- _stateScriptDataLessThanSign(e) {
- switch (e) {
- case io.SOLIDUS:
- this.state = Ko.SCRIPT_DATA_END_TAG_OPEN;
- break;
- case io.EXCLAMATION_MARK:
- this.state = Ko.SCRIPT_DATA_ESCAPE_START, 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(""), this.state = Ko.SCRIPT_DATA_ESCAPED, this._stateScriptDataEscaped(e))
- }
- _stateScriptDataEscapedEndTagName(e) {
- this.handleSpecialEndTag(e) && (this._emitChars(""), this.state = Ko.SCRIPT_DATA_ESCAPED, this._stateScriptDataEscaped(e))
- }
- _stateScriptDataDoubleEscapeStart(e) {
- if (this.preprocessor.startsWith(co, !1) && ec(this.preprocessor.peek(co.length))) {
- this._emitCodePoint(e);
- for (let e = 0; e < co.length; e++) this._emitCodePoint(this._consume());
- this.state = Ko.SCRIPT_DATA_DOUBLE_ESCAPED
- } else this._ensureHibernation() || (this.state = Ko.SCRIPT_DATA_ESCAPED, this._stateScriptDataEscaped(e))
- }
- _stateScriptDataDoubleEscaped(e) {
- switch (e) {
- case io.HYPHEN_MINUS:
- this.state = Ko.SCRIPT_DATA_DOUBLE_ESCAPED_DASH, this._emitChars("-");
- break;
- case io.LESS_THAN_SIGN:
- this.state = Ko.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN, this._emitChars("<");
- break;
- case io.NULL:
- this._err(Eo.unexpectedNullCharacter), this._emitChars("�");
- break;
- case io.EOF:
- this._err(Eo.eofInScriptHtmlCommentLikeText), this._emitEOFToken();
- break;
- default:
- this._emitCodePoint(e)
- }
- }
- _stateScriptDataDoubleEscapedDash(e) {
- switch (e) {
- case io.HYPHEN_MINUS:
- this.state = Ko.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH, this._emitChars("-");
- break;
- case io.LESS_THAN_SIGN:
- this.state = Ko.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN, 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)
- }
- }
- _stateScriptDataDoubleEscapedDashDash(e) {
- switch (e) {
- case io.HYPHEN_MINUS:
- this._emitChars("-");
- break;
- case io.LESS_THAN_SIGN:
- this.state = Ko.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN, this._emitChars("<");
- break;
- case io.GREATER_THAN_SIGN:
- this.state = Ko.SCRIPT_DATA, 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; e < co.length; e++) this._emitCodePoint(this._consume());
- this.state = Ko.SCRIPT_DATA_ESCAPED
- } else this._ensureHibernation() || (this.state = Ko.SCRIPT_DATA_DOUBLE_ESCAPED, this._stateScriptDataDoubleEscaped(e))
- }
- _stateBeforeAttributeName(e) {
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- break;
- case io.SOLIDUS:
- case io.GREATER_THAN_SIGN:
- case io.EOF:
- this.state = Ko.AFTER_ATTRIBUTE_NAME, this._stateAfterAttributeName(e);
- break;
- case io.EQUALS_SIGN:
- this._err(Eo.unexpectedEqualsSignBeforeAttributeName), this._createAttr("="), this.state = Ko.ATTRIBUTE_NAME;
- break;
- default:
- this._createAttr(""), this.state = Ko.ATTRIBUTE_NAME, this._stateAttributeName(e)
- }
- }
- _stateAttributeName(e) {
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- case io.SOLIDUS:
- case io.GREATER_THAN_SIGN:
- case io.EOF:
- this._leaveAttrName(), this.state = Ko.AFTER_ATTRIBUTE_NAME, this._stateAfterAttributeName(e);
- break;
- case io.EQUALS_SIGN:
- this._leaveAttrName(), this.state = Ko.BEFORE_ATTRIBUTE_VALUE;
- break;
- case io.QUOTATION_MARK:
- case io.APOSTROPHE:
- case io.LESS_THAN_SIGN:
- this._err(Eo.unexpectedCharacterInAttributeName), this.currentAttr.name += String.fromCodePoint(e);
- break;
- case io.NULL:
- this._err(Eo.unexpectedNullCharacter), this.currentAttr.name += "�";
- break;
- default:
- this.currentAttr.name += String.fromCodePoint(Wo(e) ? Jo(e) : e)
- }
- }
- _stateAfterAttributeName(e) {
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- break;
- case io.SOLIDUS:
- this.state = Ko.SELF_CLOSING_START_TAG;
- break;
- case io.EQUALS_SIGN:
- this.state = Ko.BEFORE_ATTRIBUTE_VALUE;
- break;
- case io.GREATER_THAN_SIGN:
- this.state = Ko.DATA, this.emitCurrentTagToken();
- break;
- case io.EOF:
- this._err(Eo.eofInTag), this._emitEOFToken();
- break;
- default:
- this._createAttr(""), this.state = Ko.ATTRIBUTE_NAME, this._stateAttributeName(e)
- }
- }
- _stateBeforeAttributeValue(e) {
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- break;
- case io.QUOTATION_MARK:
- this.state = Ko.ATTRIBUTE_VALUE_DOUBLE_QUOTED;
- break;
- case io.APOSTROPHE:
- this.state = Ko.ATTRIBUTE_VALUE_SINGLE_QUOTED;
- break;
- case io.GREATER_THAN_SIGN:
- this._err(Eo.missingAttributeValue), this.state = Ko.DATA, this.emitCurrentTagToken();
- break;
- default:
- this.state = Ko.ATTRIBUTE_VALUE_UNQUOTED, this._stateAttributeValueUnquoted(e)
- }
- }
- _stateAttributeValueDoubleQuoted(e) {
- switch (e) {
- case io.QUOTATION_MARK:
- this.state = Ko.AFTER_ATTRIBUTE_VALUE_QUOTED;
- break;
- case io.AMPERSAND:
- this.returnState = Ko.ATTRIBUTE_VALUE_DOUBLE_QUOTED, this.state = Ko.CHARACTER_REFERENCE;
- break;
- case io.NULL:
- this._err(Eo.unexpectedNullCharacter), this.currentAttr.value += "�";
- break;
- case io.EOF:
- this._err(Eo.eofInTag), this._emitEOFToken();
- break;
- default:
- this.currentAttr.value += String.fromCodePoint(e)
- }
- }
- _stateAttributeValueSingleQuoted(e) {
- switch (e) {
- case io.APOSTROPHE:
- this.state = Ko.AFTER_ATTRIBUTE_VALUE_QUOTED;
- break;
- case io.AMPERSAND:
- this.returnState = Ko.ATTRIBUTE_VALUE_SINGLE_QUOTED, this.state = Ko.CHARACTER_REFERENCE;
- break;
- case io.NULL:
- this._err(Eo.unexpectedNullCharacter), this.currentAttr.value += "�";
- break;
- case io.EOF:
- this._err(Eo.eofInTag), this._emitEOFToken();
- break;
- default:
- this.currentAttr.value += String.fromCodePoint(e)
- }
- }
- _stateAttributeValueUnquoted(e) {
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- this._leaveAttrValue(), this.state = Ko.BEFORE_ATTRIBUTE_NAME;
- break;
- case io.AMPERSAND:
- this.returnState = Ko.ATTRIBUTE_VALUE_UNQUOTED, this.state = Ko.CHARACTER_REFERENCE;
- break;
- case io.GREATER_THAN_SIGN:
- this._leaveAttrValue(), this.state = Ko.DATA, this.emitCurrentTagToken();
- break;
- case io.NULL:
- this._err(Eo.unexpectedNullCharacter), this.currentAttr.value += "�";
- break;
- case io.QUOTATION_MARK:
- case io.APOSTROPHE:
- case io.LESS_THAN_SIGN:
- case io.EQUALS_SIGN:
- case io.GRAVE_ACCENT:
- this._err(Eo.unexpectedCharacterInUnquotedAttributeValue), this.currentAttr.value += String.fromCodePoint(e);
- break;
- case io.EOF:
- this._err(Eo.eofInTag), this._emitEOFToken();
- break;
- default:
- this.currentAttr.value += String.fromCodePoint(e)
- }
- }
- _stateAfterAttributeValueQuoted(e) {
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- this._leaveAttrValue(), this.state = Ko.BEFORE_ATTRIBUTE_NAME;
- break;
- case io.SOLIDUS:
- this._leaveAttrValue(), this.state = Ko.SELF_CLOSING_START_TAG;
- break;
- case io.GREATER_THAN_SIGN:
- this._leaveAttrValue(), this.state = Ko.DATA, this.emitCurrentTagToken();
- break;
- case io.EOF:
- this._err(Eo.eofInTag), this._emitEOFToken();
- break;
- default:
- this._err(Eo.missingWhitespaceBetweenAttributes), this.state = Ko.BEFORE_ATTRIBUTE_NAME, this._stateBeforeAttributeName(e)
- }
- }
- _stateSelfClosingStartTag(e) {
- switch (e) {
- case io.GREATER_THAN_SIGN:
- this.currentToken.selfClosing = !0, this.state = Ko.DATA, this.emitCurrentTagToken();
- break;
- case io.EOF:
- this._err(Eo.eofInTag), this._emitEOFToken();
- break;
- default:
- this._err(Eo.unexpectedSolidusInTag), this.state = Ko.BEFORE_ATTRIBUTE_NAME, this._stateBeforeAttributeName(e)
- }
- }
- _stateBogusComment(e) {
- const t = this.currentToken;
- switch (e) {
- case io.GREATER_THAN_SIGN:
- this.state = Ko.DATA, this.emitCurrentComment(t);
- break;
- case io.EOF:
- this.emitCurrentComment(t), this._emitEOFToken();
- break;
- case io.NULL:
- this._err(Eo.unexpectedNullCharacter), t.data += "�";
- break;
- default:
- t.data += String.fromCodePoint(e)
- }
- }
- _stateMarkupDeclarationOpen(e) {
- this._consumeSequenceIfMatch(so, !0) ? (this._createCommentToken(so.length + 1), this.state = Ko.COMMENT_START) : this._consumeSequenceIfMatch(oo, !1) ? (this.currentLocation = this.getCurrentLocation(oo.length + 1), this.state = Ko.DOCTYPE) : this._consumeSequenceIfMatch(ao, !0) ? this.inForeignNode ? this.state = Ko.CDATA_SECTION : (this._err(Eo.cdataInHtmlContent), this._createCommentToken(ao.length + 1), this.currentToken.data = "[CDATA[", this.state = Ko.BOGUS_COMMENT) : this._ensureHibernation() || (this._err(Eo.incorrectlyOpenedComment), this._createCommentToken(2), this.state = Ko.BOGUS_COMMENT, this._stateBogusComment(e))
- }
- _stateCommentStart(e) {
- switch (e) {
- case io.HYPHEN_MINUS:
- this.state = Ko.COMMENT_START_DASH;
- break;
- case io.GREATER_THAN_SIGN: {
- this._err(Eo.abruptClosingOfEmptyComment), this.state = Ko.DATA;
- const e = this.currentToken;
- this.emitCurrentComment(e);
- break
- }
- default:
- this.state = Ko.COMMENT, this._stateComment(e)
- }
- }
- _stateCommentStartDash(e) {
- const t = this.currentToken;
- switch (e) {
- case io.HYPHEN_MINUS:
- this.state = Ko.COMMENT_END;
- break;
- case io.GREATER_THAN_SIGN:
- this._err(Eo.abruptClosingOfEmptyComment), this.state = Ko.DATA, this.emitCurrentComment(t);
- break;
- case io.EOF:
- this._err(Eo.eofInComment), this.emitCurrentComment(t), this._emitEOFToken();
- break;
- default:
- t.data += "-", this.state = Ko.COMMENT, this._stateComment(e)
- }
- }
- _stateComment(e) {
- const t = this.currentToken;
- switch (e) {
- case io.HYPHEN_MINUS:
- this.state = Ko.COMMENT_END_DASH;
- break;
- case io.LESS_THAN_SIGN:
- t.data += "<", this.state = Ko.COMMENT_LESS_THAN_SIGN;
- break;
- case io.NULL:
- this._err(Eo.unexpectedNullCharacter), t.data += "�";
- break;
- case io.EOF:
- this._err(Eo.eofInComment), this.emitCurrentComment(t), this._emitEOFToken();
- break;
- default:
- t.data += String.fromCodePoint(e)
- }
- }
- _stateCommentLessThanSign(e) {
- const t = this.currentToken;
- switch (e) {
- case io.EXCLAMATION_MARK:
- t.data += "!", this.state = Ko.COMMENT_LESS_THAN_SIGN_BANG;
- break;
- case io.LESS_THAN_SIGN:
- t.data += "<";
- break;
- default:
- this.state = Ko.COMMENT, this._stateComment(e)
- }
- }
- _stateCommentLessThanSignBang(e) {
- e === io.HYPHEN_MINUS ? this.state = Ko.COMMENT_LESS_THAN_SIGN_BANG_DASH : (this.state = Ko.COMMENT, this._stateComment(e))
- }
- _stateCommentLessThanSignBangDash(e) {
- e === io.HYPHEN_MINUS ? this.state = Ko.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH : (this.state = Ko.COMMENT_END_DASH, this._stateCommentEndDash(e))
- }
- _stateCommentLessThanSignBangDashDash(e) {
- e !== io.GREATER_THAN_SIGN && e !== io.EOF && this._err(Eo.nestedComment), this.state = Ko.COMMENT_END, this._stateCommentEnd(e)
- }
- _stateCommentEndDash(e) {
- const t = this.currentToken;
- switch (e) {
- case io.HYPHEN_MINUS:
- this.state = Ko.COMMENT_END;
- break;
- case io.EOF:
- this._err(Eo.eofInComment), this.emitCurrentComment(t), this._emitEOFToken();
- break;
- default:
- t.data += "-", this.state = Ko.COMMENT, this._stateComment(e)
- }
- }
- _stateCommentEnd(e) {
- const t = this.currentToken;
- switch (e) {
- case io.GREATER_THAN_SIGN:
- this.state = Ko.DATA, this.emitCurrentComment(t);
- break;
- case io.EXCLAMATION_MARK:
- this.state = Ko.COMMENT_END_BANG;
- break;
- case io.HYPHEN_MINUS:
- t.data += "-";
- break;
- case io.EOF:
- this._err(Eo.eofInComment), this.emitCurrentComment(t), this._emitEOFToken();
- break;
- default:
- t.data += "--", this.state = Ko.COMMENT, this._stateComment(e)
- }
- }
- _stateCommentEndBang(e) {
- const t = this.currentToken;
- switch (e) {
- case io.HYPHEN_MINUS:
- t.data += "--!", this.state = Ko.COMMENT_END_DASH;
- break;
- case io.GREATER_THAN_SIGN:
- this._err(Eo.incorrectlyClosedComment), this.state = Ko.DATA, this.emitCurrentComment(t);
- break;
- case io.EOF:
- this._err(Eo.eofInComment), this.emitCurrentComment(t), this._emitEOFToken();
- break;
- default:
- t.data += "--!", this.state = Ko.COMMENT, this._stateComment(e)
- }
- }
- _stateDoctype(e) {
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- this.state = Ko.BEFORE_DOCTYPE_NAME;
- break;
- case io.GREATER_THAN_SIGN:
- this.state = Ko.BEFORE_DOCTYPE_NAME, this._stateBeforeDoctypeName(e);
- break;
- case io.EOF: {
- this._err(Eo.eofInDoctype), this._createDoctypeToken(null);
- const e = this.currentToken;
- e.forceQuirks = !0, this.emitCurrentDoctype(e), this._emitEOFToken();
- break
- }
- default:
- this._err(Eo.missingWhitespaceBeforeDoctypeName), this.state = Ko.BEFORE_DOCTYPE_NAME, this._stateBeforeDoctypeName(e)
- }
- }
- _stateBeforeDoctypeName(e) {
- if (Wo(e)) this._createDoctypeToken(String.fromCharCode(Jo(e))), this.state = Ko.DOCTYPE_NAME;
- else switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- break;
- case io.NULL:
- this._err(Eo.unexpectedNullCharacter), this._createDoctypeToken("�"), this.state = Ko.DOCTYPE_NAME;
- break;
- case io.GREATER_THAN_SIGN: {
- this._err(Eo.missingDoctypeName), this._createDoctypeToken(null);
- const e = this.currentToken;
- e.forceQuirks = !0, this.emitCurrentDoctype(e), this.state = Ko.DATA;
- break
- }
- case io.EOF: {
- this._err(Eo.eofInDoctype), this._createDoctypeToken(null);
- const e = this.currentToken;
- e.forceQuirks = !0, this.emitCurrentDoctype(e), this._emitEOFToken();
- break
- }
- default:
- this._createDoctypeToken(String.fromCodePoint(e)), this.state = Ko.DOCTYPE_NAME
- }
- }
- _stateDoctypeName(e) {
- const t = this.currentToken;
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- this.state = Ko.AFTER_DOCTYPE_NAME;
- break;
- case io.GREATER_THAN_SIGN:
- this.state = Ko.DATA, this.emitCurrentDoctype(t);
- break;
- case io.NULL:
- this._err(Eo.unexpectedNullCharacter), t.name += "�";
- break;
- case io.EOF:
- this._err(Eo.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken();
- break;
- default:
- t.name += String.fromCodePoint(Wo(e) ? Jo(e) : e)
- }
- }
- _stateAfterDoctypeName(e) {
- const t = this.currentToken;
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- break;
- case io.GREATER_THAN_SIGN:
- this.state = Ko.DATA, this.emitCurrentDoctype(t);
- break;
- case io.EOF:
- this._err(Eo.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken();
- break;
- default:
- this._consumeSequenceIfMatch(lo, !1) ? this.state = Ko.AFTER_DOCTYPE_PUBLIC_KEYWORD : this._consumeSequenceIfMatch(ho, !1) ? this.state = Ko.AFTER_DOCTYPE_SYSTEM_KEYWORD : this._ensureHibernation() || (this._err(Eo.invalidCharacterSequenceAfterDoctypeName), t.forceQuirks = !0, this.state = Ko.BOGUS_DOCTYPE, this._stateBogusDoctype(e))
- }
- }
- _stateAfterDoctypePublicKeyword(e) {
- const t = this.currentToken;
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- this.state = Ko.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;
- break;
- case io.QUOTATION_MARK:
- this._err(Eo.missingWhitespaceAfterDoctypePublicKeyword), t.publicId = "", this.state = Ko.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;
- break;
- case io.APOSTROPHE:
- this._err(Eo.missingWhitespaceAfterDoctypePublicKeyword), t.publicId = "", this.state = Ko.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;
- break;
- case io.GREATER_THAN_SIGN:
- this._err(Eo.missingDoctypePublicIdentifier), t.forceQuirks = !0, this.state = Ko.DATA, this.emitCurrentDoctype(t);
- break;
- case io.EOF:
- this._err(Eo.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken();
- break;
- default:
- this._err(Eo.missingQuoteBeforeDoctypePublicIdentifier), t.forceQuirks = !0, this.state = Ko.BOGUS_DOCTYPE, this._stateBogusDoctype(e)
- }
- }
- _stateBeforeDoctypePublicIdentifier(e) {
- const t = this.currentToken;
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- break;
- case io.QUOTATION_MARK:
- t.publicId = "", this.state = Ko.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;
- break;
- case io.APOSTROPHE:
- t.publicId = "", this.state = Ko.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;
- break;
- case io.GREATER_THAN_SIGN:
- this._err(Eo.missingDoctypePublicIdentifier), t.forceQuirks = !0, this.state = Ko.DATA, this.emitCurrentDoctype(t);
- break;
- case io.EOF:
- this._err(Eo.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken();
- break;
- default:
- this._err(Eo.missingQuoteBeforeDoctypePublicIdentifier), t.forceQuirks = !0, this.state = Ko.BOGUS_DOCTYPE, this._stateBogusDoctype(e)
- }
- }
- _stateDoctypePublicIdentifierDoubleQuoted(e) {
- const t = this.currentToken;
- switch (e) {
- case io.QUOTATION_MARK:
- this.state = Ko.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;
- break;
- case io.NULL:
- this._err(Eo.unexpectedNullCharacter), t.publicId += "�";
- break;
- case io.GREATER_THAN_SIGN:
- this._err(Eo.abruptDoctypePublicIdentifier), t.forceQuirks = !0, this.emitCurrentDoctype(t), this.state = Ko.DATA;
- break;
- case io.EOF:
- this._err(Eo.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken();
- break;
- default:
- t.publicId += String.fromCodePoint(e)
- }
- }
- _stateDoctypePublicIdentifierSingleQuoted(e) {
- const t = this.currentToken;
- switch (e) {
- case io.APOSTROPHE:
- this.state = Ko.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;
- break;
- case io.NULL:
- this._err(Eo.unexpectedNullCharacter), t.publicId += "�";
- break;
- case io.GREATER_THAN_SIGN:
- this._err(Eo.abruptDoctypePublicIdentifier), t.forceQuirks = !0, this.emitCurrentDoctype(t), this.state = Ko.DATA;
- break;
- case io.EOF:
- this._err(Eo.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken();
- break;
- default:
- t.publicId += String.fromCodePoint(e)
- }
- }
- _stateAfterDoctypePublicIdentifier(e) {
- const t = this.currentToken;
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- this.state = Ko.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;
- break;
- case io.GREATER_THAN_SIGN:
- this.state = Ko.DATA, this.emitCurrentDoctype(t);
- break;
- case io.QUOTATION_MARK:
- this._err(Eo.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers), t.systemId = "", this.state = Ko.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;
- break;
- case io.APOSTROPHE:
- this._err(Eo.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers), t.systemId = "", this.state = Ko.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;
- break;
- case io.EOF:
- this._err(Eo.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken();
- break;
- default:
- this._err(Eo.missingQuoteBeforeDoctypeSystemIdentifier), t.forceQuirks = !0, this.state = Ko.BOGUS_DOCTYPE, this._stateBogusDoctype(e)
- }
- }
- _stateBetweenDoctypePublicAndSystemIdentifiers(e) {
- const t = this.currentToken;
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- break;
- case io.GREATER_THAN_SIGN:
- this.emitCurrentDoctype(t), this.state = Ko.DATA;
- break;
- case io.QUOTATION_MARK:
- t.systemId = "", this.state = Ko.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;
- break;
- case io.APOSTROPHE:
- t.systemId = "", this.state = Ko.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;
- break;
- case io.EOF:
- this._err(Eo.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken();
- break;
- default:
- this._err(Eo.missingQuoteBeforeDoctypeSystemIdentifier), t.forceQuirks = !0, this.state = Ko.BOGUS_DOCTYPE, this._stateBogusDoctype(e)
- }
- }
- _stateAfterDoctypeSystemKeyword(e) {
- const t = this.currentToken;
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- this.state = Ko.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;
- break;
- case io.QUOTATION_MARK:
- this._err(Eo.missingWhitespaceAfterDoctypeSystemKeyword), t.systemId = "", this.state = Ko.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;
- break;
- case io.APOSTROPHE:
- this._err(Eo.missingWhitespaceAfterDoctypeSystemKeyword), t.systemId = "", this.state = Ko.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;
- break;
- case io.GREATER_THAN_SIGN:
- this._err(Eo.missingDoctypeSystemIdentifier), t.forceQuirks = !0, this.state = Ko.DATA, this.emitCurrentDoctype(t);
- break;
- case io.EOF:
- this._err(Eo.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken();
- break;
- default:
- this._err(Eo.missingQuoteBeforeDoctypeSystemIdentifier), t.forceQuirks = !0, this.state = Ko.BOGUS_DOCTYPE, this._stateBogusDoctype(e)
- }
- }
- _stateBeforeDoctypeSystemIdentifier(e) {
- const t = this.currentToken;
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- break;
- case io.QUOTATION_MARK:
- t.systemId = "", this.state = Ko.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;
- break;
- case io.APOSTROPHE:
- t.systemId = "", this.state = Ko.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;
- break;
- case io.GREATER_THAN_SIGN:
- this._err(Eo.missingDoctypeSystemIdentifier), t.forceQuirks = !0, this.state = Ko.DATA, this.emitCurrentDoctype(t);
- break;
- case io.EOF:
- this._err(Eo.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken();
- break;
- default:
- this._err(Eo.missingQuoteBeforeDoctypeSystemIdentifier), t.forceQuirks = !0, this.state = Ko.BOGUS_DOCTYPE, this._stateBogusDoctype(e)
- }
- }
- _stateDoctypeSystemIdentifierDoubleQuoted(e) {
- const t = this.currentToken;
- switch (e) {
- case io.QUOTATION_MARK:
- this.state = Ko.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;
- break;
- case io.NULL:
- this._err(Eo.unexpectedNullCharacter), t.systemId += "�";
- break;
- case io.GREATER_THAN_SIGN:
- this._err(Eo.abruptDoctypeSystemIdentifier), t.forceQuirks = !0, this.emitCurrentDoctype(t), this.state = Ko.DATA;
- break;
- case io.EOF:
- this._err(Eo.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken();
- break;
- default:
- t.systemId += String.fromCodePoint(e)
- }
- }
- _stateDoctypeSystemIdentifierSingleQuoted(e) {
- const t = this.currentToken;
- switch (e) {
- case io.APOSTROPHE:
- this.state = Ko.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;
- break;
- case io.NULL:
- this._err(Eo.unexpectedNullCharacter), t.systemId += "�";
- break;
- case io.GREATER_THAN_SIGN:
- this._err(Eo.abruptDoctypeSystemIdentifier), t.forceQuirks = !0, this.emitCurrentDoctype(t), this.state = Ko.DATA;
- break;
- case io.EOF:
- this._err(Eo.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken();
- break;
- default:
- t.systemId += String.fromCodePoint(e)
- }
- }
- _stateAfterDoctypeSystemIdentifier(e) {
- const t = this.currentToken;
- switch (e) {
- case io.SPACE:
- case io.LINE_FEED:
- case io.TABULATION:
- case io.FORM_FEED:
- break;
- case io.GREATER_THAN_SIGN:
- this.emitCurrentDoctype(t), this.state = Ko.DATA;
- break;
- case io.EOF:
- this._err(Eo.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken();
- break;
- default:
- this._err(Eo.unexpectedCharacterAfterDoctypeSystemIdentifier), this.state = Ko.BOGUS_DOCTYPE, this._stateBogusDoctype(e)
- }
- }
- _stateBogusDoctype(e) {
- const t = this.currentToken;
- switch (e) {
- case io.GREATER_THAN_SIGN:
- this.emitCurrentDoctype(t), this.state = Ko.DATA;
- break;
- case io.NULL:
- this._err(Eo.unexpectedNullCharacter);
- break;
- case io.EOF:
- this.emitCurrentDoctype(t), this._emitEOFToken()
- }
- }
- _stateCdataSection(e) {
- switch (e) {
- case io.RIGHT_SQUARE_BRACKET:
- this.state = Ko.CDATA_SECTION_BRACKET;
- break;
- case io.EOF:
- this._err(Eo.eofInCdata), this._emitEOFToken();
- break;
- default:
- this._emitCodePoint(e)
- }
- }
- _stateCdataSectionBracket(e) {
- e === io.RIGHT_SQUARE_BRACKET ? this.state = Ko.CDATA_SECTION_END : (this._emitChars("]"), this.state = Ko.CDATA_SECTION, this._stateCdataSection(e))
- }
- _stateCdataSectionEnd(e) {
- switch (e) {
- case io.GREATER_THAN_SIGN:
- this.state = Ko.DATA;
- break;
- case io.RIGHT_SQUARE_BRACKET:
- this._emitChars("]");
- break;
- default:
- this._emitChars("]]"), this.state = Ko.CDATA_SECTION, this._stateCdataSection(e)
- }
- }
- _stateCharacterReference(e) {
- e === io.NUMBER_SIGN ? this.state = Ko.NUMERIC_CHARACTER_REFERENCE : Xo(e) ? (this.state = Ko.NAMED_CHARACTER_REFERENCE, this._stateNamedCharacterReference(e)) : (this._flushCodePointConsumedAsCharacterReference(io.AMPERSAND), this._reconsumeInState(this.returnState, e))
- }
- _stateNamedCharacterReference(e) {
- const t = this._matchNamedCharacterReference(e);
- if (this._ensureHibernation());
- else if (t) {
- for (let e = 0; e < t.length; e++) this._flushCodePointConsumedAsCharacterReference(t[e]);
- this.state = this.returnState
- } else this._flushCodePointConsumedAsCharacterReference(io.AMPERSAND), this.state = Ko.AMBIGUOUS_AMPERSAND
- }
- _stateAmbiguousAmpersand(e) {
- Xo(e) ? this._flushCodePointConsumedAsCharacterReference(e) : (e === io.SEMICOLON && this._err(Eo.unknownNamedCharacterReference), this._reconsumeInState(this.returnState, e))
- }
- _stateNumericCharacterReference(e) {
- this.charRefCode = 0, e === io.LATIN_SMALL_X || e === io.LATIN_CAPITAL_X ? this.state = Ko.HEXADEMICAL_CHARACTER_REFERENCE_START : Vo(e) ? (this.state = Ko.DECIMAL_CHARACTER_REFERENCE, this._stateDecimalCharacterReference(e)) : (this._err(Eo.absenceOfDigitsInNumericCharacterReference), this._flushCodePointConsumedAsCharacterReference(io.AMPERSAND), this._flushCodePointConsumedAsCharacterReference(io.NUMBER_SIGN), this._reconsumeInState(this.returnState, e))
- }
- _stateHexademicalCharacterReferenceStart(e) {
- ! function(e) {
- return Vo(e) || $o(e) || zo(e)
- }(e) ? (this._err(Eo.absenceOfDigitsInNumericCharacterReference), this._flushCodePointConsumedAsCharacterReference(io.AMPERSAND), this._flushCodePointConsumedAsCharacterReference(io.NUMBER_SIGN), this._unconsume(2), this.state = this.returnState) : (this.state = Ko.HEXADEMICAL_CHARACTER_REFERENCE, this._stateHexademicalCharacterReference(e))
- }
- _stateHexademicalCharacterReference(e) {
- $o(e) ? this.charRefCode = 16 * this.charRefCode + e - 55 : zo(e) ? this.charRefCode = 16 * this.charRefCode + e - 87 : Vo(e) ? this.charRefCode = 16 * this.charRefCode + e - 48 : e === io.SEMICOLON ? this.state = Ko.NUMERIC_CHARACTER_REFERENCE_END : (this._err(Eo.missingSemicolonAfterCharacterReference), this.state = Ko.NUMERIC_CHARACTER_REFERENCE_END, this._stateNumericCharacterReferenceEnd(e))
- }
- _stateDecimalCharacterReference(e) {
- Vo(e) ? this.charRefCode = 10 * this.charRefCode + e - 48 : e === io.SEMICOLON ? this.state = Ko.NUMERIC_CHARACTER_REFERENCE_END : (this._err(Eo.missingSemicolonAfterCharacterReference), this.state = Ko.NUMERIC_CHARACTER_REFERENCE_END, this._stateNumericCharacterReferenceEnd(e))
- }
- _stateNumericCharacterReferenceEnd(e) {
- if (this.charRefCode === io.NULL) this._err(Eo.nullCharacterReference), this.charRefCode = io.REPLACEMENT_CHARACTER;
- else if (this.charRefCode > 1114111) 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 < e)
- }
- }
- popUntilElementPopped(e) {
- const t = this._indexOf(e);
- this.shortenToLength(t < 0 ? 0 : t)
- }
- popUntilPopped(e, t) {
- const n = this._indexOfTagNames(e, t);
- this.shortenToLength(n < 0 ? 0 : n)
- }
- popUntilNumberedHeaderPopped() {
- this.popUntilPopped(sc, vo.HTML)
- }
- popUntilTableCellPopped() {
- this.popUntilPopped(lc, vo.HTML)
- }
- popAllUpToHtmlElement() {
- this.tmplCount = 0, this.shortenToLength(1)
- }
- _indexOfTagNames(e, t) {
- for (let n = this.stackTop; n >= 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 < this.entries.length; e++) {
- const t = this.entries[e];
- if (t.type === uc.Marker) break;
- const {
- element: a
- } = t;
- if (this.treeAdapter.getTagName(a) === i && this.treeAdapter.getNamespaceURI(a) === s) {
- const t = this.treeAdapter.getAttrList(a);
- t.length === r && n.push({
- idx: e,
- attrs: t
- })
- }
- }
- return n
- }
- _ensureNoahArkCondition(e) {
- if (this.entries.length < 3) return;
- const t = this.treeAdapter.getAttrList(e),
- n = this._getNoahArkConditionCandidates(e, t);
- if (n.length < 3) return;
- const r = new Map(t.map((e => [e.name, e.value])));
- let i = 0;
- for (let e = 0; e < n.length; e++) {
- const t = n[e];
- t.attrs.every((e => r.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; r < t.length; r++) n.has(t[r].name) || e.attrs.push(t[r])
- },
- getFirstChild: e => e.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; t < e.attrs.length; t++)
- if ("definitionurl" === e.attrs[t].name) {
- e.attrs[t].name = "definitionURL";
- break
- }
-}
-
-function kc(e) {
- for (let t = 0; t < e.attrs.length; t++) {
- const n = Sc.get(e.attrs[t].name);
- null != n && (e.attrs[t].name = n)
- }
-}
-
-function vc(e) {
- for (let t = 0; t < e.attrs.length; t++) {
- const n = bc.get(e.attrs[t].name);
- n && (e.attrs[t].prefix = n.prefix, e.attrs[t].name = n.name, e.attrs[t].namespace = n.namespace)
- }
-}
-
-function Dc(e, t, n, r) {
- return (!r || r === vo.HTML) && function(e, t, n) {
- if (t === vo.MATHML && e === Po.ANNOTATION_XML)
- for (let e = 0; e < n.length; e++)
- if (n[e].name === Do.ENCODING) {
- const t = n[e].value.toLowerCase();
- return t === Cc || t === Ic
- } return t === vo.SVG && (e === Po.FOREIGN_OBJECT || e === Po.DESC || e === Po.TITLE)
- }(e, t, n) || (!r || r === vo.MATHML) && function(e, t) {
- return t === vo.MATHML && (e === Po.MI || e === Po.MO || e === Po.MN || e === Po.MS || e === Po.MTEXT)
- }(e, t)
-}
-var Rc;
-! function(e) {
- e[e.INITIAL = 0] = "INITIAL", e[e.BEFORE_HTML = 1] = "BEFORE_HTML", e[e.BEFORE_HEAD = 2] = "BEFORE_HEAD", e[e.IN_HEAD = 3] = "IN_HEAD", e[e.IN_HEAD_NO_SCRIPT = 4] = "IN_HEAD_NO_SCRIPT", e[e.AFTER_HEAD = 5] = "AFTER_HEAD", e[e.IN_BODY = 6] = "IN_BODY", e[e.TEXT = 7] = "TEXT", e[e.IN_TABLE = 8] = "IN_TABLE", e[e.IN_TABLE_TEXT = 9] = "IN_TABLE_TEXT", e[e.IN_CAPTION = 10] = "IN_CAPTION", e[e.IN_COLUMN_GROUP = 11] = "IN_COLUMN_GROUP", e[e.IN_TABLE_BODY = 12] = "IN_TABLE_BODY", e[e.IN_ROW = 13] = "IN_ROW", e[e.IN_CELL = 14] = "IN_CELL", e[e.IN_SELECT = 15] = "IN_SELECT", e[e.IN_SELECT_IN_TABLE = 16] = "IN_SELECT_IN_TABLE", e[e.IN_TEMPLATE = 17] = "IN_TEMPLATE", e[e.AFTER_BODY = 18] = "AFTER_BODY", e[e.IN_FRAMESET = 19] = "IN_FRAMESET", e[e.AFTER_FRAMESET = 20] = "AFTER_FRAMESET", e[e.AFTER_AFTER_BODY = 21] = "AFTER_AFTER_BODY", e[e.AFTER_AFTER_FRAMESET = 22] = "AFTER_AFTER_FRAMESET"
-}(Rc || (Rc = {}));
-const Mc = {
- startLine: -1,
- startCol: -1,
- startOffset: -1,
- endLine: -1,
- endCol: -1,
- endOffset: -1
- },
- Pc = new Set([Po.TABLE, Po.TBODY, Po.TFOOT, Po.THEAD, Po.TR]),
- xc = {
- scriptingEnabled: !0,
- sourceCodeLocationInfo: !1,
- treeAdapter: Ec,
- onParseError: null
- };
-class wc {
- constructor(e, t, n = null, r = null) {
- this.fragmentContext = n, this.scriptHandler = r, this.currentToken = null, this.stopped = !1, this.insertionMode = Rc.INITIAL, this.originalInsertionMode = Rc.INITIAL, this.headElement = null, this.formElement = null, this.currentNotInHTML = !1, this.tmplInsertionModeStack = [], this.pendingCharacterTokens = [], this.hasNonWhitespacePendingCharacterToken = !1, this.framesetOk = !0, this.skipNextNewLine = !1, this.fosterParentingEnabled = !1, this.options = {
- ...xc,
- ...e
- }, this.treeAdapter = this.options.treeAdapter, this.onParseError = this.options.onParseError, this.onParseError && (this.options.sourceCodeLocationInfo = !0), this.document = null != t ? t : this.treeAdapter.createDocument(), this.tokenizer = new tc(this.options, this), this.activeFormattingElements = new fc(this.treeAdapter), this.fragmentContextID = n ? Fo(this.treeAdapter.getTagName(n)) : Po.UNKNOWN, this._setContextModes(null != n ? n : this.document, this.fragmentContextID), this.openElements = new hc(this.document, this.treeAdapter, this)
- }
- static parse(e, t) {
- const n = new this(t);
- return n.tokenizer.write(e, !0), n.document
- }
- static getFragmentParser(e, t) {
- const n = {
- ...xc,
- ...t
- };
- null != e || (e = n.treeAdapter.createElement(Mo.TEMPLATE, vo.HTML, []));
- const r = n.treeAdapter.createElement("documentmock", vo.HTML, []),
- i = new this(n, r, e);
- return i.fragmentContextID === Po.TEMPLATE && i.tmplInsertionModeStack.unshift(Rc.IN_TEMPLATE), i._initTokenizerForFragmentParsing(), i._insertFakeRootElement(), i._resetInsertionMode(), i._findFormInFragmentContext(), i
- }
- getFragment() {
- const e = this.treeAdapter.getFirstChild(this.document),
- t = this.treeAdapter.createDocumentFragment();
- return this._adoptNodes(e, t), t
- }
- _err(e, t, n) {
- var r;
- if (!this.onParseError) return;
- const i = null !== (r = e.location) && void 0 !== r ? r : Mc,
- s = {
- code: t,
- startLine: i.startLine,
- startCol: i.startCol,
- startOffset: i.startOffset,
- endLine: n ? i.startLine : i.endLine,
- endCol: n ? i.startCol : i.endCol,
- endOffset: n ? i.startOffset : i.endOffset
- };
- this.onParseError(s)
- }
- onItemPush(e, t, n) {
- var r, i;
- null === (i = (r = this.treeAdapter).onItemPush) || void 0 === i || i.call(r, e), n && this.openElements.stackTop > 0 && 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 (; n < e.pendingCharacterTokens.length; n++) dl(e, e.pendingCharacterTokens[n]);
- else
- for (; n < e.pendingCharacterTokens.length; n++) e._insertCharacters(e.pendingCharacterTokens[n]);
- e.insertionMode = e.originalInsertionMode, e._processToken(t)
-}
-const _l = new Set([Po.CAPTION, Po.COL, Po.COLGROUP, Po.TBODY, Po.TD, Po.TFOOT, Po.TH, Po.THEAD, Po.TR]);
-
-function Al(e, t) {
- switch (t.tagID) {
- case Po.HTML:
- ol(e, t);
- break;
- case Po.COL:
- e._appendElement(t, vo.HTML), t.ackSelfClosing = !0;
- break;
- case Po.TEMPLATE:
- Xc(e, t);
- break;
- default:
- gl(e, t)
- }
-}
-
-function gl(e, t) {
- e.openElements.currentTagId === Po.COLGROUP && (e.openElements.pop(), e.insertionMode = Rc.IN_TABLE, e._processToken(t))
-}
-
-function Nl(e, t) {
- switch (t.tagID) {
- case Po.TR:
- e.openElements.clearBackToTableBodyContext(), e._insertElement(t, vo.HTML), e.insertionMode = Rc.IN_ROW;
- break;
- case Po.TH:
- case Po.TD:
- e.openElements.clearBackToTableBodyContext(), e._insertFakeElement(Mo.TR, Po.TR), e.insertionMode = Rc.IN_ROW, Il(e, t);
- break;
- case Po.CAPTION:
- case Po.COL:
- case Po.COLGROUP:
- case Po.TBODY:
- case Po.TFOOT:
- case Po.THEAD:
- e.openElements.hasTableBodyContextInTableScope() && (e.openElements.clearBackToTableBodyContext(), e.openElements.pop(), e.insertionMode = Rc.IN_TABLE, pl(e, t));
- break;
- default:
- pl(e, t)
- }
-}
-
-function Cl(e, t) {
- const n = t.tagID;
- switch (t.tagID) {
- case Po.TBODY:
- case Po.TFOOT:
- case Po.THEAD:
- e.openElements.hasInTableScope(n) && (e.openElements.clearBackToTableBodyContext(), e.openElements.pop(), e.insertionMode = Rc.IN_TABLE);
- break;
- case Po.TABLE:
- e.openElements.hasTableBodyContextInTableScope() && (e.openElements.clearBackToTableBodyContext(), e.openElements.pop(), e.insertionMode = Rc.IN_TABLE, fl(e, t));
- break;
- case Po.BODY:
- case Po.CAPTION:
- case Po.COL:
- case Po.COLGROUP:
- case Po.HTML:
- case Po.TD:
- case Po.TH:
- case Po.TR:
- break;
- default:
- fl(e, t)
- }
-}
-
-function Il(e, t) {
- switch (t.tagID) {
- case Po.TH:
- case Po.TD:
- e.openElements.clearBackToTableRowContext(), e._insertElement(t, vo.HTML), e.insertionMode = Rc.IN_CELL, e.activeFormattingElements.insertMarker();
- break;
- case Po.CAPTION:
- case Po.COL:
- case Po.COLGROUP:
- case Po.TBODY:
- case Po.TFOOT:
- case Po.THEAD:
- case Po.TR:
- e.openElements.hasInTableScope(Po.TR) && (e.openElements.clearBackToTableRowContext(), e.openElements.pop(), e.insertionMode = Rc.IN_TABLE_BODY, Nl(e, t));
- break;
- default:
- pl(e, t)
- }
-}
-
-function Sl(e, t) {
- switch (t.tagID) {
- case Po.TR:
- e.openElements.hasInTableScope(Po.TR) && (e.openElements.clearBackToTableRowContext(), e.openElements.pop(), e.insertionMode = Rc.IN_TABLE_BODY);
- break;
- case Po.TABLE:
- e.openElements.hasInTableScope(Po.TR) && (e.openElements.clearBackToTableRowContext(), e.openElements.pop(), e.insertionMode = Rc.IN_TABLE_BODY, Cl(e, t));
- break;
- case Po.TBODY:
- case Po.TFOOT:
- case Po.THEAD:
- (e.openElements.hasInTableScope(t.tagID) || e.openElements.hasInTableScope(Po.TR)) && (e.openElements.clearBackToTableRowContext(), e.openElements.pop(), e.insertionMode = Rc.IN_TABLE_BODY, Cl(e, t));
- break;
- case Po.BODY:
- case Po.CAPTION:
- case Po.COL:
- case Po.COLGROUP:
- case Po.HTML:
- case Po.TD:
- case Po.TH:
- break;
- default:
- fl(e, t)
- }
-}
-
-function bl(e, t) {
- switch (t.tagID) {
- case Po.HTML:
- ol(e, t);
- break;
- case Po.OPTION:
- e.openElements.currentTagId === Po.OPTION && e.openElements.pop(), e._insertElement(t, vo.HTML);
- break;
- case Po.OPTGROUP:
- e.openElements.currentTagId === Po.OPTION && e.openElements.pop(), e.openElements.currentTagId === Po.OPTGROUP && e.openElements.pop(), e._insertElement(t, vo.HTML);
- break;
- case Po.INPUT:
- case Po.KEYGEN:
- case Po.TEXTAREA:
- case Po.SELECT:
- e.openElements.hasInSelectScope(Po.SELECT) && (e.openElements.popUntilTagNamePopped(Po.SELECT), e._resetInsertionMode(), t.tagID !== Po.SELECT && e._processStartTag(t));
- break;
- case Po.SCRIPT:
- case Po.TEMPLATE:
- Xc(e, t)
- }
-}
-
-function Ol(e, t) {
- switch (t.tagID) {
- case Po.OPTGROUP:
- e.openElements.stackTop > 0 && 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), "").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)
- } < /${n}>`}`}(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 << n) | (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);
-}());
\ No newline at end of file
diff --git a/潇洒/js/crypto-js.js b/潇洒/js/crypto-js.js
deleted file mode 100644
index 0dd3ca8..0000000
--- a/潇洒/js/crypto-js.js
+++ /dev/null
@@ -1,6192 +0,0 @@
-;
-(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 << n) | (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/潇洒/js/drpy2.js b/潇洒/js/drpy2.js
deleted file mode 100644
index 47b82c6..0000000
--- a/潇洒/js/drpy2.js
+++ /dev/null
@@ -1,3862 +0,0 @@
-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 JSEncrypt from './jsencrypt.js'; // 会导致壳子崩溃的
-import 模板 from './模板.js'
-import {
- gbkTool
-} from './gbk.js'
-import './json5.js'
-// 下面是尝试对jinja2库进行更换
-import './jinja.js'
-
-const _jinja2 = cheerio.jinja2;
-cheerio.jinja2 = function(template, obj) {
- try {
- return jinja.render(template, obj);
- } catch (e) {
- console.log('新的jinja2库渲染失败,换回原始cheerio:' + e.message);
- return _jinja2(template, obj)
- }
-};
-// import cheerio from "https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/cheerio.min.js";
-// import "https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/crypto-js.js";
-// import 模板 from"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/js/模板.js";
-// import {gbkTool} from 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/gbk.js'
-
-let vercode = typeof(pdfl) === 'function' ? 'drpy2.1' : 'drpy2';
-const VERSION = vercode + ' 3.9.51beta6 20241126';
-const UpdateInfo = [{
- date: '20241126',
- title: 'drpy更新,优化去广告算法',
- version: '3.9.51beta6 20241126',
- msg: `
- 1. 更新龙头大佬提供的去广告算法
- `
- },
- {
- date: '20241104',
- title: 'drpy更新,增加新特性',
- version: '3.9.51beta5 20241104',
- msg: `
- 1. rule增加 搜索验证标识 属性,可以不定义,默认为 '系统安全验证|请输入验证码'
- 2. rule增加 searchNoPage 属性,可以不定义,如果定义 1 将关闭该源的搜索翻页功能,超过1页直接返回空
- `
- },
-];
-
-function getUpdateInfo() {
- return UpdateInfo.map((_o) => {
- _o.msg = _o.msg.trim().split('\n').map(_it => _it.trim()).join('\n')
- return _o
- })
-}
-
-function init_test() {
- // console.log(typeof(JSON5));
- // let a = `{'SHOW':'10','UK':'43a7dc59-e87b-449e-8b74-ba40db28e674','albumlist':[{'DC_TARGETID':'30965086','DC_TARGETTYPE':'','PAY':'0','PLAYCNT':'17294','aartist':'','ad_subtype':'102,103,501,101,301','ad_type':'1,3,5','albumid':'30965086','artist':'小白不做凤尾','artistid':'10442011','artistpic':'http://img4.kuwo.cn/star/starheads/120/92/53/247071944.jpg','color':'[#FFE2F2C6,#FF85A476]','company':'独立发行','content_type':'0','falbum':'','fartist':'小白不做凤尾','finished':'0','hts_img':'https://img2.kuwo.cn/star/albumcover/240/51/40/547190780.jpg','id':'30965086','img':'http://img2.sycdn.kuwo.cn/star/albumcover/240/51/40/547190780.jpg','info':'来听听','isstar':'1','lang':'','musiccnt':'37','name':'我的','new':'0','payvalue':'0','pic':'120/51/40/547190780.jpg','pub':'2022-08-28','score':'0','showtime':'','spPrivilege':'0','startype':'有声小说','timing_online':'0000-00-00 00:00:00','title':'','vip':'0'},{'DC_TARGETID':'28041980','DC_TARGETTYPE':'','PAY':'0','PLAYCNT':'0','aartist':'','ad_subtype':'','ad_type':'','albumid':'28041980','artist':'玄琛','artistid':'9688248','artistpic':'http://img4.kuwo.cn/star/starheads/120/96/39/3155308302.jpg','color':'[#FFE2F2C6,#FF85A476]','company':'独立发行','content_type':'0','falbum':'','fartist':'玄琛','finished':'0','hts_img':'https://img2.kuwo.cn/star/albumcover/240/72/16/2510768590.jpg','id':'28041980','img':'http://img2.sycdn.kuwo.cn/star/albumcover/240/72/16/2510768590.jpg','info':'我来诉说我的故事,请你认真聆听,做最好的聆听者','isstar':'1','lang':'','musiccnt':'2','name':'我的','new':'0','payvalue':'0','pic':'120/72/16/2510768590.jpg','pub':'2020-08-18','score':'0','showtime':'','spPrivilege':'0','startype':'历史人文','timing_online':'0000-00-00 00:00:00','title':'','vip':'0'},{'DC_TARGETID':'17245200','DC_TARGETTYPE':'','PAY':'0','PLAYCNT':'5529096','aartist':'','ad_subtype':'','ad_type':'','albumid':'17245200','artist':'我和我的家乡','artistid':'5037564','artistpic':'http://img4.kuwo.cn/star/starheads/0/10/27/3738071257.jpg','color':'[#FFD8F3F1,#FF719794]','company':'中青在线','content_type':'0','falbum':'','fartist':'我和我的家乡','finished':'1','hts_img':'https://img2.kuwo.cn/star/albumcover/240/85/51/1350940634.jpg','id':'17245200','img':'http://img2.sycdn.kuwo.cn/star/albumcover/240/85/51/1350940634.jpg','info':'《我和我的家乡2》是融媒体音频节目《我和我的家乡》第二季。为解读中国人的乡土情结,汇聚同心追梦的力量。【歌曲篇】每期节目将推出一个主题城市,邀请一位青春正能量明星,演唱与家乡有关的原创或翻唱歌曲,曲传乡音。','isstar':'1','lang':'','musiccnt':'5','name':'我和我的家乡第二季「歌曲篇」','new':'0','payvalue':'0','pic':'120/85/51/1350940634.jpg','pub':'2020-12-25','score':'0','showtime':'','spPrivilege':'0','startype':'历史人文','timing_online':'0000-00-00 00:00:00','title':'解读中国人的乡土情结','vip':'0'},{'DC_TARGETID':'12854978','DC_TARGETTYPE':'','PAY':'0','PLAYCNT':'21482961','aartist':'','ad_subtype':'','ad_type':'','albumid':'12854978','artist':'佛学听我的','artistid':'3651480','artistpic':'http://img4.kuwo.cn/star/starheads/120/21/42/3683883829.jpg','color':'[#FFD8F3F1,#FF719794]','company':'暂无','content_type':'0','falbum':'','fartist':'佛学听我的','finished':'0','hts_img':'https://img2.kuwo.cn/star/albumcover/240/99/12/1066669641.jpg','id':'12854978','img':'http://img2.sycdn.kuwo.cn/star/albumcover/240/99/12/1066669641.jpg','info':'禅音静心:禅茶一味','isstar':'1','lang':'普通话','musiccnt':'407','name':'禅音静心:禅茶一味','new':'0','payvalue':'0','pic':'120/99/12/1066669641.jpg','pub':'2020-02-23','score':'0','showtime':'','spPrivilege':'0','startype':'历史人文','timing_online':'0000-00-00 00:00:00','title':'禅音静心:禅茶一味','vip':'0'},{'DC_TARGETID':'13884852','DC_TARGETTYPE':'','PAY':'0','PLAYCNT':'17396226','aartist':'','ad_subtype':'','ad_type':'','albumid':'13884852','artist':'佛学听我的','artistid':'3651480','artistpic':'http://img4.kuwo.cn/star/starheads/120/21/42/3683883829.jpg','color':'[#FFD8F3F1,#FF719794]','company':'暂无','content_type':'0','falbum':'','fartist':'佛学听我的','finished':'0','hts_img':'https://img2.kuwo.cn/star/albumcover/240/91/94/4253604466.jpg','id':'13884852','img':'http://img2.sycdn.kuwo.cn/star/albumcover/240/91/94/4253604466.jpg','info':'静心听佛乐','isstar':'1','lang':'普通话','musiccnt':'228','name':'静心听佛乐','new':'0','payvalue':'0','pic':'120/91/94/4253604466.jpg','pub':'2020-04-27','score':'0','showtime':'','spPrivilege':'0','startype':'历史人文','timing_online':'0000-00-00 00:00:00','title':'静心听佛乐','vip':'0'},{'DC_TARGETID':'17172751','DC_TARGETTYPE':'','PAY':'0','PLAYCNT':'553401','aartist':'','ad_subtype':'102,103,101,501','ad_type':'1,5','albumid':'17172751','artist':'我和我的家乡','artistid':'5037564','artistpic':'http://img4.kuwo.cn/star/starheads/0/10/27/3738071257.jpg','color':'[#FFD8F3F1,#FF719794]','company':'中青在线','content_type':'0','falbum':'','fartist':'我和我的家乡','finished':'1','hts_img':'https://img2.kuwo.cn/star/albumcover/240/63/45/3978411674.jpg','id':'17172751','img':'http://img2.sycdn.kuwo.cn/star/albumcover/240/63/45/3978411674.jpg','info':'《我和我的家乡2》是融媒体音频节目《我和我的家乡》第二季。为解读中国人的乡土情结,汇聚同心追梦的力量。每期节目将推出一个主题城市,邀请一位青春正能量明星,用笔者独有的乡愁情感,配以讲述者也为此乡人的身份,着力刻画该城市的魅力形象,展现一座城的普通百姓生活和经济社会发展。','isstar':'1','lang':'','musiccnt':'11','name':'我和我的家乡第二季「有声篇」','new':'0','payvalue':'0','pic':'120/63/45/3978411674.jpg','pub':'2020-12-21','score':'0','showtime':'2020-12-20','spPrivilege':'0','startype':'娱乐','timing_online':'2020-12-20 23:40:00','title':'','vip':'0'},{'DC_TARGETID':'18769609','DC_TARGETTYPE':'','PAY':'0','PLAYCNT':'69987','aartist':'','ad_subtype':'101,102,103,501','ad_type':'1,5','albumid':'18769609','artist':'你是我的荣耀','artistid':'6998984','artistpic':'http://img4.kuwo.cn/star/starheads/120/41/44/262468637.jpg','color':'[#FFD8F3F1,#FF719794]','company':'暂无','content_type':'0','falbum':'','fartist':'你是我的荣耀','finished':'0','hts_img':'https://img2.kuwo.cn/star/albumcover/240/44/72/4080853707.jpg','id':'18769609','img':'http://img2.sycdn.kuwo.cn/star/albumcover/240/44/72/4080853707.jpg','info':'《你是我的荣耀》是由王之执导,潘粤明、胡可、王彦霖、杨洋、迪丽热巴、郑合惠子主演的都市爱情剧。该剧改编自顾漫创作的同名小说,主要讲述了人气女星乔晶晶在游戏中与曾经的高中同学于途意外重逢后发生的故事。\\\\\\\\\\\\\\\\\\n;跟随《你是我的荣耀》之声,一起见证航天工程师于途与人气女星乔晶晶,携手砥砺前行成为彼此荣耀的爱情故事!\\\\\\\\\\\\\\\\\\n;\\\\\\\\\\\\\\\\\\n;\\\\\\\\\\\\\\\\\\n;\\\\\\\\\\\\\\\\\\n;\\\\\\\\\\\\\\\\\\n;','isstar':'1','lang':'普通话','musiccnt':'1','name':'你是我的荣耀','new':'0','payvalue':'0','pic':'120/44/72/4080853707.jpg','pub':'2021-03-05','score':'0','showtime':'2021-03-09','spPrivilege':'0','startype':'有声小说','timing_online':'2021-03-09 00:00:00','title':'大明星恋上航天工程师 热巴杨洋甜蜜相守','vip':'0'},{'DC_TARGETID':'23641999','DC_TARGETTYPE':'','PAY':'0','PLAYCNT':'1292491','aartist':'','ad_subtype':'102,103,501,101,301','ad_type':'1,3,5','albumid':'23641999','artist':'我的存在','artistid':'8102787','artistpic':'http://img4.kuwo.cn/star/starheads/120/31/87/632983033.jpg','color':'[#FFE2F2C6,#FF85A476]','company':'独立发行','content_type':'0','falbum':'','fartist':'我的存在','finished':'1','hts_img':'https://img2.kuwo.cn/star/albumcover/240/50/6/2193571523.jpg','id':'23641999','img':'http://img2.sycdn.kuwo.cn/star/albumcover/240/50/6/2193571523.jpg','info':'为给老驸马冲喜,长亭长公主庶孙迎娶陆家女,新娘子当天却吊死在洞房,现代女医生陆漫穿越而来。委屈的某人,我要功成名就,我的生活我作主。陆漫,还你自由,我也自由……','isstar':'1','lang':'','musiccnt':'726','name':'金玉良医(完结)','new':'0','payvalue':'0','pic':'120/50/6/2193571523.jpg','pub':'2021-10-11','score':'0','showtime':'','spPrivilege':'0','startype':'有声小说','timing_online':'0000-00-00 00:00:00','title':'现代女医生陆漫穿越到古代发生的事情','vip':'0'},{'DC_TARGETID':'28177105','DC_TARGETTYPE':'','PAY':'0','PLAYCNT':'10448','aartist':'','ad_subtype':'102,103,501,101,301','ad_type':'1,3,5','albumid':'28177105','artist':'我的青糖','artistid':'9650993','artistpic':'http://img4.kuwo.cn/star/starheads/120/40/93/1019968534.jpg','color':'[#FFE2F2C6,#FF85A476]','company':'独立发行','content_type':'0','falbum':'','fartist':'我的青糖','finished':'0','hts_img':'https://img2.kuwo.cn/star/albumcover/240/62/97/3136446870.jpg','id':'28177105','img':'http://img2.sycdn.kuwo.cn/star/albumcover/240/62/97/3136446870.jpg','info':'【字数:16万字】<br>裴子墨和丁辰是一对夫妻,妻子丁辰深爱裴子墨,但裴子墨难以忘怀初恋总是对她若即若离。婚后两年,裴子墨前女友于筝突然回国,使得他和丁辰原本就不稳定的婚姻更加雪上加霜。于筝当初背叛裴子墨,受伤后才意识到裴子墨的好,于是不择手段夺回了裴子墨。丁辰和裴子墨离婚后,裴子墨才意识到两年相处,他早已习惯有丁辰的陪伴。裴子墨决心重新赢回丁辰的心,但此时丁辰身边已经有了一位极其出色的追求者,前景不容乐观……','isstar':'1','lang':'','musiccnt':'80','name':'如果你是我的传说','new':'0','payvalue':'0','pic':'120/62/97/3136446870.jpg','pub':'2022-04-21','score':'0','showtime':'1979-10-05','spPrivilege':'0','startype':'有声小说','timing_online':'2022-05-01 19:26:48','title':'','vip':'0'},{'DC_TARGETID':'12896662','DC_TARGETTYPE':'','PAY':'0','PLAYCNT':'2412258','aartist':'','ad_subtype':'','ad_type':'','albumid':'12896662','artist':'佛学听我的','artistid':'3651480','artistpic':'http://img4.kuwo.cn/star/starheads/120/21/42/3683883829.jpg','color':'[#FFD8F3F1,#FF719794]','company':'暂无','content_type':'0','falbum':'','fartist':'佛学听我的','finished':'0','hts_img':'https://img2.kuwo.cn/star/albumcover/240/93/41/3670973086.jpg','id':'12896662','img':'http://img2.sycdn.kuwo.cn/star/albumcover/240/93/41/3670973086.jpg','info':'佛书梵唱100篇','isstar':'1','lang':'普通话','musiccnt':'50','name':'佛书梵唱100篇','new':'0','payvalue':'0','pic':'120/93/41/3670973086.jpg','pub':'2020-02-24','score':'0','showtime':'','spPrivilege':'0','startype':'历史人文','timing_online':'0000-00-00 00:00:00','title':'佛书梵唱100篇','vip':'0'}],'pn':'0','rn':'10','total':'257'}`;
- // log(JSON5.parse(a));
- // console.log(typeof(CryptoJS));
- console.log("init_test_start");
- // print(模板);
- // print(typeof(模板.getMubans));
- console.log("当前版本号:" + VERSION);
- console.log('本地代理地址:' + getProxyUrl());
- console.log(RKEY);
- // ocr_demo_test();
- // rsa_demo_test();
-
- // console.log('Uint8Array:'+typeof(Uint8Array)+' '+'Uint16Array:'+typeof(Uint16Array));
- // console.log('encodeURIComponent:'+typeof(encodeURIComponent)+' '+'decodeURIComponent:'+typeof(decodeURIComponent));
- // console.log('atob:'+typeof(atob)+' '+'btoa:'+typeof(btoa));
- // log('typeof (JSEncrypt):'+typeof (JSEncrypt));
- // log('typeof (pako):'+typeof (pako));
- // let b64_str = btoa('hello hipy');
- // let str = atob(b64_str);
- // console.log(`btoa加密文本:${b64_str},atob解密文本:${str}`)
- // let gzip_str = gzip('{"a":"电影","b":"电影","c":"电影","d":"电影","e":"电影","f":"电影"}');
- // let ungzip_str = ungzip(gzip_str);
- // console.log(`gzip加密文本:${gzip_str},长度:${gzip_str.length},ungzip解密文本:${ungzip_str},长度:${ungzip_str.length}`);
- // let a = {"1":[{"key":"类型","name":"类型","value":[{"n":"全部","v":""},{"n":"Netflix","v":"NETFLIX"},{"n":"剧情","v":"剧情"},{"n":"喜剧","v":"喜剧"},{"n":"动作","v":"动作"},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"惊悚","v":"惊悚"},{"n":"犯罪","v":"犯罪"},{"n":"科幻","v":"科幻"},{"n":"悬疑","v":"悬疑"},{"n":"奇幻","v":"奇幻"},{"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":"语言","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"粤语","v":"粤语"},{"n":"英语","v":"英语"},{"n":"日语","v":"日语"},{"n":"韩语","v":"韩语"},{"n":"法语","v":"法语"},{"n":"其他","v":"其他"}]},{"key":"年份","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":"10年代","v":"2010_2019"},{"n":"00年代","v":"2000_2009"},{"n":"90年代","v":"1990_1999"},{"n":"80年代","v":"1980_1989"},{"n":"更早","v":"0_1979"}]},{"key":"排序","name":"排序","value":[{"n":"综合","v":""},{"n":"最新","v":"2"},{"n":"最热","v":"3"},{"n":"评分","v":"4"}]}],"2":[{"key":"类型","name":"类型","value":[{"n":"全部","v":""},{"n":"Netflix","v":"Netflix"},{"n":"剧情","v":"剧情"},{"n":"爱情","v":"爱情"},{"n":"喜剧","v":"喜剧"},{"n":"犯罪","v":"犯罪"},{"n":"悬疑","v":"悬疑"},{"n":"古装","v":"古装"},{"n":"动作","v":"动作"},{"n":"家庭","v":"家庭"},{"n":"惊悚","v":"惊悚"},{"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":"其他"}]},{"key":"语言","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"粤语","v":"粤语"},{"n":"英语","v":"英语"},{"n":"日语","v":"日语"},{"n":"韩语","v":"韩语"},{"n":"法语","v":"法语"},{"n":"其他","v":"其他"}]},{"key":"年份","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"2024"},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"10年代","v":"2010_2019"},{"n":"00年代","v":"2000_2009"},{"n":"90年代","v":"1990_1999"},{"n":"80年代","v":"1980_1989"},{"n":"更早","v":"0_1979"}]},{"key":"排序","name":"排序","value":[{"n":"综合","v":""},{"n":"最新","v":"2"},{"n":"最热","v":"3"},{"n":"评分","v":"4"}]}],"3":[{"key":"类型","name":"类型","value":[{"n":"全部","v":""},{"n":"Netflix","v":"Netflix"},{"n":"动态漫画","v":"动态漫画"},{"n":"剧情","v":"剧情"},{"n":"动画","v":"动画"},{"n":"喜剧","v":"喜剧"},{"n":"冒险","v":"冒险"},{"n":"动作","v":"动作"},{"n":"奇幻","v":"奇幻"},{"n":"科幻","v":"科幻"},{"n":"儿童","v":"儿童"},{"n":"搞笑","v":"搞笑"},{"n":"爱情","v":"爱情"},{"n":"家庭","v":"家庭"},{"n":"短片","v":"短片"},{"n":"热血","v":"热血"},{"n":"益智","v":"益智"},{"n":"悬疑","v":"悬疑"},{"n":"经典","v":"经典"},{"n":"校园","v":"校园"},{"n":"Anime","v":"Anime"},{"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":"语言","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"粤语","v":"粤语"},{"n":"英语","v":"英语"},{"n":"日语","v":"日语"},{"n":"韩语","v":"韩语"},{"n":"法语","v":"法语"},{"n":"其他","v":"其他"}]},{"key":"年份","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":"10年代","v":"2010_2019"},{"n":"00年代","v":"2000_2009"},{"n":"90年代","v":"1990_1999"},{"n":"80年代","v":"1980_1989"},{"n":"更早","v":"0_1979"}]},{"key":"排序","name":"排序","value":[{"n":"综合","v":""},{"n":"最新","v":"2"},{"n":"最热","v":"3"},{"n":"评分","v":"4"}]}],"4":[{"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":"Season","v":"Season"},{"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":"其他"}]},{"key":"语言","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"粤语","v":"粤语"},{"n":"英语","v":"英语"},{"n":"日语","v":"日语"},{"n":"韩语","v":"韩语"},{"n":"法语","v":"法语"},{"n":"其他","v":"其他"}]},{"key":"年份","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"2024"},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"10年代","v":"2010_2019"},{"n":"00年代","v":"2000_2009"},{"n":"90年代","v":"1990_1999"},{"n":"80年代","v":"1980_1989"},{"n":"更早","v":"0_1979"}]},{"key":"排序","name":"排序","value":[{"n":"综合","v":""},{"n":"最新","v":"2"},{"n":"最热","v":"3"},{"n":"评分","v":"4"}]}],"6":[{"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":"其它"}]},{"key":"排序","name":"排序","value":[{"n":"综合","v":""},{"n":"最新","v":"2"},{"n":"最热","v":"3"}]}]};
- // log(gzip(JSON.stringify(a)));
-
- console.log(JSON.stringify(rule));
- console.log("init_test_end");
-
-
- // 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);
-
- // log('rsax:'+typeof(rsax));
- // log('rsaX:'+typeof(rsaX));
- // let data = base64Encode('你好');
- // let publicKey = 'dzyyds';
- // console.log(typeof (RSA.encode));
- // let encryptBase64Data = RSA.encode(data,publicKey);
- // log('encryptBase64Data:'+encryptBase64Data);
- // let str = RSA.decode(data,publicKey);
- // log('str:'+str);
-}
-
-/**
- * 验证码ocr识别的测试案例
- */
-function ocr_demo_test() {
- // 这张图片为4113的验证码
- let img_base64 = `iVBORw0KGgoAAAANSUhEUgAAAIAAAAAoBAMAAADEX+97AAAAG1BMVEXz+/4thQTa7N6QwIFFkyNeokKozqDB3b93sWHFR+MEAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABN0lEQVRIie2TQU+DQBCFt9vScvQpxR4xrcSjJCZ67JDGXsX+AdR4B3vpsSYm/m2HXaRLmuySepR3Gdidb/btDAjRq5dT96eCMlfBuzi1QLZUoZy2yz5sOvI+9iomaPEZ6nWnEtxqIyiM1RcAy44GNDhBXUjot/VVNweV1ah68FqWRyjKIOqAcyYF6rGcmpYnHzGt3fycNoMw0d3/THFu7hFSJ/8OXO6iTM8/KSg09obAzIHLO250LgQ0txOZSfgrV4Exdw98uGycJ0ErAeExZGhOmFHV9zHO6qVSj0MpLq7xZON56o++MjlsEgfVhbQWWME+xQX7J4V6zfi9A1Ly9rP1BvEXp+BbVJ/M77n+wfOIDVp51pZ4iBxvmj9AGrtvry6emwfKnVkW+ZRKd5ZNMvob36vXP9YPDmQki8QiCFAAAAAASUVORK5CYII=`;
- // 更换api-可以通过这个代码换掉默认的ocr接口
- OcrApi.api = OCR_API;
- let code = OcrApi.classification(img_base64);
- log('测试验证码图片的ocr识别结果为:' + code);
-}
-
-/**
- * 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) + '毫秒');
-}
-
-
-/**
- * 执行预处理代码
- */
-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 = {};
-/** 已知问题记录
- * 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("")
- }
- let m3u8 = request(m3u8_url, option);
- m3u8 = m3u8.trim().split("\n").map(it => it.startsWith("#") ? it : urljoin(m3u8_url, it)).join("\n");
- m3u8 = m3u8.replace(/\n\n/gi, "\n");
- let last_url = m3u8.split("\n").slice(-1)[0];
- if (last_url.length < 5) {
- last_url = m3u8.split("\n").slice(-2)[0]
- }
- if (last_url.includes(".m3u8") && last_url !== m3u8_url) {
- m3u8_url = urljoin2(m3u8_url, last_url);
- log("嵌套的m3u8_url:" + m3u8_url);
- m3u8 = request(m3u8_url, option)
- }
- let s = m3u8.trim().split("\n").filter(it => it.trim()).join("\n");
- let ss = s.split("\n");
- if (m3u8_url.indexOf("ffzy") > 0) {
- let j = 0,
- k1 = 0,
- m = 0,
- n = 0,
- t = 0;
- let s2 = "";
- for (let i = 0; i < ss.length; i++) {
- let s = ss[i];
- let s1 = "";
- if (s.startsWith("#EXTINF")) {
- s1 = s.slice(8);
- n++;
- if (n == 1)
- k1 = i;
- if (s2.indexOf(s1) == -1) {
- s2 = s2 + s1;
- m++;
- }
- t = t + parseFloat(s1);
- i++;
- s = ss[i];
- }
- if (s.startsWith("#EXT-X-DISCONTINUITY")) {
- if (n == 5) {
- log("n:" + n);
- log("m:" + m);
- for (let j = k1; j < k1 + n * 2; j++) {
- log(ss[j]);
- }
- log("广告位置:" + k1);
- log("数据条数:" + n);
- log("数据种类:" + m);
- log("广告时间:" + t.toFixed(5));
- ss.splice(k1, 2 * n + 1);
- i = i - 2 * n + 1;
- }
- t = 0;
- m = 0;
- n = 0;
- s2 = "";
- }
- }
- }
- let firststr = "";
- let maxl = 0;
- let kk = 0;
- let kkk1 = 1;
- let kkk2 = 0;
- let secondstr = "";
- for (let i = 0; i < ss.length; i++) {
- let s = ss[i];
- if (!s.startsWith("#")) {
- if (kk == 0)
- firststr = s;
- if (kk > 0) {
- if (maxl > b(firststr, s) + 1) {
- if (secondstr.length < 5)
- secondstr = s;
- kkk2++
- } else {
- maxl = b(firststr, s);
- kkk1++
- }
- }
- kk++;
- if (kk >= 30)
- break
- }
- }
- if (kkk2 > kkk1)
- firststr = secondstr;
- let firststrlen = firststr.length;
- let ml = Math.round(ss.length / 2).toString().length;
- let maxc = 0;
- let laststr = ss.toReversed().find(x => {
- if (!x.startsWith("#")) {
- let k = b(reverseString(firststr), reverseString(x));
- maxl = b(firststr, x);
- maxc++;
- if (firststrlen - maxl <= ml + k || maxc > 10) {
- return true
- }
- }
- return false
- });
- log("最后一条切片:" + laststr);
- let ad_urls = [];
- for (let i = 0; i < ss.length; i++) {
- let s = ss[i];
- if (!s.startsWith("#")) {
- if (b(firststr, s) < maxl) {
- ad_urls.push(s);
- ss.splice(i - 1, 2);
- i = i - 2
- } else {
- ss[i] = urljoin(m3u8_url, s)
- }
- } else {
- ss[i] = s.replace(/URI=\"(.*)\"/, 'URI="' + urljoin(m3u8_url, "$1") + '"')
- }
- }
- log("处理的m3u8地址:" + m3u8_url);
- log("----广告地址----");
- log(ad_urls);
- m3u8 = ss.join("\n");
- log("处理耗时:" + ((new Date).getTime() - ts).toString());
- log(m3u8);
- return m3u8
-}
-
-
-/**
- * 强制正序算法
- * @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;
- }, {});
-}
-
-//字符串To对象
-function parseQueryString(query) {
- const params = {};
- query.split('&').forEach(function(part) {
- // 使用正则表达式匹配键和值,直到遇到第一个等号为止
- const regex = /^(.*?)=(.*)/;
- const match = part.match(regex);
- if (match) {
- const key = decodeURIComponent(match[1]);
- const value = decodeURIComponent(match[2]);
- params[key] = value;
- }
- });
- return params;
-}
-
-//URL需要转码字符串
-function encodeIfContainsSpecialChars(value) {
- // 定义在URL中需要编码的特殊字符
- const specialChars = ":/?#[]@!$'()*+,;=%";
- // 检查值中是否包含特殊字符
- if (specialChars.split('').some(char => value.includes(char))) {
- // 如果包含,则使用encodeURIComponent进行编码
- return encodeURIComponent(value);
- }
- // 如果不包含特殊字符,返回原值
- return value;
-}
-
-//对象To字符串
-function objectToQueryString(obj) {
- const encoded = [];
- for (let key in obj) {
- if (obj.hasOwnProperty(key)) {
- encoded.push(encodeURIComponent(key) + '=' + encodeIfContainsSpecialChars(obj[key]));
- }
- }
- return encoded.join('&');
-}
-
-/**
- * 海阔网页请求函数完整封装
- * @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;
- }
- if (obj.headers.hasOwnProperty('Content-Type') || obj.headers.hasOwnProperty('content-type')) {
- let _contentType = obj.headers["Content-Type"] || obj.headers["content-type"] || "";
- if (_contentType.includes("application/x-www-form-urlencoded")) {
- log("custom body is application/x-www-form-urlencoded");
- //console.log(JSON.stringify(obj));
- if (typeof obj.body == "string") {
- let temp_obj = parseQueryString(obj.body);
- //obj.body = objectToQueryString(temp_obj);
- console.log(JSON.stringify(temp_obj));
- }
- }
- }
-
- 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,
- fyclass: cateObj.tid
- });
- // 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 '{}'
- }
- if (rule.searchNoPage && Number(searchObj.pg) > 1) {
- // 关闭搜索分页
- return '{}'
- }
- let p = searchObj.搜索 === '*' && rule.一级 ? rule.一级 : searchObj.搜索;
- if (!p || typeof(p) !== 'string') {
- return '{}'
- }
- p = p.trim();
- let pp = rule.一级 ? rule.一级.split(';') : [];
- let url = searchObj.searchUrl.replaceAll('**', searchObj.wd);
- if (searchObj.pg === 1 && url.includes('[') && url.includes(']') && !url.includes('#')) {
- url = url.split('[')[1].split(']')[0];
- } else if (searchObj.pg > 1 && url.includes('[') && url.includes(']') && !url.includes('#')) {
- url = url.split('[')[0];
- }
-
- if (/fypage/.test(url)) {
- if (url.includes('(') && url.includes(')')) {
- let url_rep = url.match(/.*?\((.*)\)/)[1];
- // 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) {
- // 解决搜索源码奇葩触发自动过验证逻辑
- let search_tag = rule.搜索验证标识 || '系统安全验证|输入验证码';
- if (new RegExp(search_tag).test(html)) {
- let cookie = verifyCode(MY_URL);
- if (cookie) {
- console.log(`本次成功过验证,cookie:${cookie}`);
- setItem(RULE_CK, cookie);
- } else {
- console.log(`本次自动过搜索验证失败,cookie:${cookie}`);
- }
- // 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') {
- let is_file = ext.startsWith('file://');
- if (ext.startsWith('http') || is_file) {
- let query = getQuery(ext); // 获取链接传参
- if (is_file) {
- ext = ext.split('?')[0];
- }
- let js = request(ext, {
- 'method': 'GET'
- });
- if (js) {
- js = getOriginalJs(js);
- // eval(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
- if (is_file && /^http/.test(query.params)) {
- rule.params = query.params;
- } else {
- 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}`);
- }
- } else {
- rule.headers = {}
- }
- oheaders = deepCopy(rule.headers);
- rule_fetch_params = {
- 'headers': rule.headers,
- 'timeout': rule.timeout,
- 'encoding': rule.encoding
- };
- RKEY = typeof(key) !== 'undefined' && key ? key : 'drpy_' + (rule.title || rule.host);
- pre(); // 预处理
- init_test();
- } catch (e) {
- console.log(`init_test发生错误:${e.message}`);
- }
-}
-
-let homeHtmlCache = undefined;
-
-/**
- * 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
-}
-
-/**
- * 深拷贝一个对象
- * @param _obj
- * @returns {any}
- */
-function deepCopy(_obj) {
- return JSON.parse(JSON.stringify(_obj))
-}
-
-//正则matchAll
-function matchesAll(str, pattern, flatten) {
- if (!pattern.global) {
- pattern = new RegExp(pattern.source, "g" + (pattern.ignoreCase ? "i" : "") + (pattern.multiline ? "m" : ""));
- }
- var matches = [];
- var match;
- while ((match = pattern.exec(str)) !== null) {
- matches.push(match);
- }
- return flatten ? matches.flat() : matches;
-}
-
-//文本扩展
-function stringUtils() {
- Object.defineProperties(String.prototype, {
- replaceX: {
- value: function(regex, replacement) {
- let matches = matchesAll(this, regex, true);
- if (matches && matches.length > 1) {
- const hasCaptureGroup = /\$\d/.test(replacement);
- if (hasCaptureGroup) {
- return this.replace(regex, (m) => m.replace(regex, replacement));
- } else {
- return this.replace(regex, (m, p1) => m.replace(p1, replacement));
- }
- }
- return this.replace(regex, replacement);
- },
- configurable: true,
- enumerable: false,
- writable: true
- },
- parseX: {
- get: function() {
- try {
- //console.log(typeof this);
- return JSON.parse(this);
- } catch (e) {
- console.log(e.message);
- return this.startsWith("[") ? [] : {};
- }
- },
- configurable: true,
- enumerable: false,
- }
- });
-}
-
-//正则裁切
-function cut(text, start, end, method, All) {
- let result = "";
- let c = (t, s, e) => {
- let result = "";
- let rs = [];
- let results = [];
- try {
- let lr = new RegExp(String.raw`${s}`.toString());
- let rr = new RegExp(String.raw`${e}`.toString());
- const segments = t.split(lr);
- if (segments.length < 2) return '';
- let cutSegments = segments.slice(1).map(segment => {
- let splitSegment = segment.split(rr);
- //log(splitSegment)
- return splitSegment.length < 2 ? undefined : splitSegment[0] + e;
- }).filter(f => f);
- //log(cutSegments.at(-1))
- if (All) {
- return `[${cutSegments.join(',')}]`;
- } else {
- return cutSegments[0];
- }
- } catch (e) {
- console.log(`Error cutting text:${e.message}`);
- }
- return result;
- }
- result = c(text, start, end);
- stringUtils();
- if (method && typeof method === "function") {
- result = method(result);
- }
- //console.log(result);
- return result
-}
-
-function DRPY() { //导出函数
- return {
- runMain: runMain,
- getRule: getRule,
- init: init,
- home: home,
- homeVod: homeVod,
- category: category,
- detail: detail,
- play: play,
- search: search,
- proxy: proxy,
- sniffer: sniffer,
- isVideo: isVideo,
- fixAdM3u8Ai: fixAdM3u8Ai,
- }
-}
-
-/**
- * 导出函数无法简写成下面的形式:
-
- export default {
- ...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/潇洒/js/gbk.js b/潇洒/js/gbk.js
deleted file mode 100644
index c49b20f..0000000
--- a/潇洒/js/gbk.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/***
- * 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/潇洒/js/jinja.min.js b/潇洒/js/jinja.min.js
deleted file mode 100644
index f702f29..0000000
--- a/潇洒/js/jinja.min.js
+++ /dev/null
@@ -1,504 +0,0 @@
-(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 < len; i++) {
- var key = keys[i];
- dest[key] = src[key]
- }
- return dest
- };
- 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;
- val = filter.apply(data, arr)
- } else {
- throw new Error("Invalid filter: " + name)
- }
- }
- if (opts.autoEscape && name !== opts.autoEscape && name !== "safe") {
- 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
- };
-
- 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/潇洒/js/jsonpathplus.min.js b/潇洒/js/jsonpathplus.min.js
deleted file mode 100644
index 1feb326..0000000
--- a/潇洒/js/jsonpathplus.min.js
+++ /dev/null
@@ -1,1277 +0,0 @@
-! 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; e < arguments.length; e++) {
- var i = null != arguments[e] ? arguments[e] : {};
- e % 2 ? t(Object(i), !0).forEach(function(e) {
- var t, r;
- t = n, e = i[r = e], (r = a(r)) in t ? Object.defineProperty(t, r, {
- value: e,
- enumerable: !0,
- configurable: !0,
- writable: !0
- }) : t[r] = e
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(n, Object.getOwnPropertyDescriptors(i)) : t(Object(i)).forEach(function(e) {
- Object.defineProperty(n, e, Object.getOwnPropertyDescriptor(i, e))
- })
- }
- return n
- }
-
- function a(e) {
- e = function(e, t) {
- if ("object" != typeof e || !e) return e;
- var r = e[Symbol.toPrimitive];
- if (void 0 === r) return ("string" === t ? String : Number)(e);
- if ("object" != typeof(t = r.call(e, t || "default"))) return t;
- throw new TypeError("@@toPrimitive must return a primitive value.")
- }(e, "string");
- return "symbol" == typeof e ? e : e + ""
- }
-
- function C(e) {
- return (C = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) {
- return typeof e
- } : function(e) {
- return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
- })(e)
- }
-
- function s(e, t) {
- if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function")
- }
-
- function u(e, t) {
- for (var r = 0; r < t.length; r++) {
- var n = t[r];
- n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, a(n.key), n)
- }
- }
-
- function c(e, t, r) {
- return t && u(e.prototype, t), r && u(e, r), Object.defineProperty(e, "prototype", {
- writable: !1
- }), e
- }
-
- function l(e) {
- return (l = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(e) {
- return e.__proto__ || Object.getPrototypeOf(e)
- })(e)
- }
-
- function h(e, t) {
- return (h = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(e, t) {
- return e.__proto__ = t, e
- })(e, t)
- }
-
- function p(e) {
- var r = "function" == typeof Map ? new Map : void 0;
- return (p = function(e) {
- if (null === e || ! function(t) {
- try {
- return -1 !== Function.toString.call(t).indexOf("[native code]")
- } catch (e) {
- return "function" == typeof t
- }
- }(e)) return e;
- if ("function" != typeof e) throw new TypeError("Super expression must either be null or a function");
- if (void 0 !== r) {
- if (r.has(e)) return r.get(e);
- r.set(e, t)
- }
-
- function t() {
- return o(e, arguments, l(this).constructor)
- }
- return t.prototype = Object.create(e.prototype, {
- constructor: {
- value: t,
- enumerable: !1,
- writable: !0,
- configurable: !0
- }
- }), h(t, e)
- })(e)
- }
-
- function f(e) {
- return function(e) {
- if (Array.isArray(e)) return d(e)
- }(e) || function(e) {
- if ("undefined" != typeof Symbol && null != e[Symbol.iterator] || null != e["@@iterator"]) return Array.from(e)
- }(e) || O(e) || function() {
- throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
- }()
- }
-
- function O(e, t) {
- if (e) {
- if ("string" == typeof e) return d(e, t);
- var r = Object.prototype.toString.call(e).slice(8, -1);
- return "Object" === r && e.constructor && (r = e.constructor.name), "Map" === r || "Set" === r ? Array.from(e) : "Arguments" === r || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r) ? d(e, t) : void 0
- }
- }
-
- function d(e, t) {
- (null == t || t > e.length) && (t = e.length);
- for (var r = 0, n = new Array(t); r < t; r++) n[r] = e[r];
- return n
- }
- var y = function() {
- return c(function e() {
- s(this, e)
- }, [{
- key: "add",
- value: function(e, t, r) {
- if ("string" != typeof e)
- for (var n in e) this.add(n, e[n], t);
- else(Array.isArray(e) ? e : [e]).forEach(function(e) {
- this[e] = this[e] || [], t && this[e][r ? "unshift" : "push"](t)
- }, this)
- }
- }, {
- key: "run",
- value: function(e, t) {
- this[e] = this[e] || [], this[e].forEach(function(e) {
- e.call(t && t.context ? t.context : t, t)
- })
- }
- }])
- }(),
- b = function() {
- return c(function e(t) {
- s(this, e), this.jsep = t, this.registered = {}
- }, [{
- key: "register",
- value: function() {
- for (var t = this, e = arguments.length, r = new Array(e), n = 0; n < e; n++) r[n] = arguments[n];
- r.forEach(function(e) {
- if ("object" !== C(e) || !e.name || !e.init) throw new Error("Invalid JSEP plugin format");
- t.registered[e.name] || (e.init(t.jsep), t.registered[e.name] = e)
- })
- }
- }])
- }(),
- v = function() {
- function l(e) {
- s(this, l), this.expr = e, this.index = 0
- }
- return c(l, [{
- key: "char",
- get: function() {
- return this.expr.charAt(this.index)
- }
- }, {
- key: "code",
- get: function() {
- return this.expr.charCodeAt(this.index)
- }
- }, {
- key: "throwError",
- value: function(e) {
- var t = new Error(e + " at character " + this.index);
- throw t.index = this.index, t.description = e, t
- }
- }, {
- key: "runHook",
- value: function(e, t) {
- if (l.hooks[e]) {
- var r = {
- context: this,
- node: t
- };
- return l.hooks.run(e, r), r.node
- }
- return t
- }
- }, {
- key: "searchHook",
- value: function(e) {
- if (l.hooks[e]) {
- var t = {
- context: this
- };
- return l.hooks[e].find(function(e) {
- return e.call(t.context, t), t.node
- }), t.node
- }
- }
- }, {
- key: "gobbleSpaces",
- value: function() {
- for (var e = this.code; e === l.SPACE_CODE || e === l.TAB_CODE || e === l.LF_CODE || e === l.CR_CODE;) e = this.expr.charCodeAt(++this.index);
- this.runHook("gobble-spaces")
- }
- }, {
- key: "parse",
- value: function() {
- this.runHook("before-all");
- var e = this.gobbleExpressions(),
- e = 1 === e.length ? e[0] : {
- type: l.COMPOUND,
- body: e
- };
- return this.runHook("after-all", e)
- }
- }, {
- key: "gobbleExpressions",
- value: function(e) {
- for (var t, r, n = []; this.index < this.expr.length;)
- if ((t = this.code) === l.SEMCOL_CODE || t === l.COMMA_CODE) this.index++;
- else if (r = this.gobbleExpression()) n.push(r);
- else if (this.index < this.expr.length) {
- if (t === e) break;
- this.throwError('Unexpected "' + this.char + '"')
- }
- return n
- }
- }, {
- key: "gobbleExpression",
- value: function() {
- var e = this.searchHook("gobble-expression") || this.gobbleBinaryExpression();
- return this.gobbleSpaces(), this.runHook("after-expression", e)
- }
- }, {
- key: "gobbleBinaryOp",
- value: function() {
- this.gobbleSpaces();
- for (var e = this.expr.substr(this.index, l.max_binop_len), t = e.length; 0 < t;) {
- if (l.binary_ops.hasOwnProperty(e) && (!l.isIdentifierStart(this.code) || this.index + e.length < this.expr.length && !l.isIdentifierPart(this.expr.charCodeAt(this.index + e.length)))) return this.index += t, e;
- e = e.substr(0, --t)
- }
- return !1
- }
- }, {
- key: "gobbleBinaryExpression",
- value: function() {
- var e, t, r, n, i, o, a, s, u, c = this.gobbleToken();
- if (!c) return c;
- if (!(t = this.gobbleBinaryOp())) return c;
- for (i = {
- value: t,
- prec: l.binaryPrecedence(t),
- right_a: l.right_associative.has(t)
- }, (o = this.gobbleToken()) || this.throwError("Expected expression after " + t), n = [c, i, o]; t = this.gobbleBinaryOp();) {
- if (0 === (r = l.binaryPrecedence(t))) {
- this.index -= t.length;
- break
- }
- i = {
- value: t,
- prec: r,
- right_a: l.right_associative.has(t)
- }, s = t;
- for (; 2 < n.length && (u = n[n.length - 2], i.right_a && u.right_a ? r > u.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 < a;) e = {
- type: l.BINARY_EXP,
- operator: n[a - 1].value,
- left: n[a - 2],
- right: e
- }, a -= 2;
- return e
- }
- }, {
- key: "gobbleToken",
- value: function() {
- var e, t, r, n;
- if (this.gobbleSpaces(), n = this.searchHook("gobble-token")) return this.runHook("after-token", n);
- if (e = this.code, l.isDecimalDigit(e) || e === l.PERIOD_CODE) return this.gobbleNumericLiteral();
- if (e === l.SQUOTE_CODE || e === l.DQUOTE_CODE) n = this.gobbleStringLiteral();
- else if (e === l.OBRACK_CODE) n = this.gobbleArray();
- else {
- for (r = (t = this.expr.substr(this.index, l.max_unop_len)).length; 0 < r;) {
- if (l.unary_ops.hasOwnProperty(t) && (!l.isIdentifierStart(this.code) || this.index + t.length < this.expr.length && !l.isIdentifierPart(this.expr.charCodeAt(this.index + t.length)))) {
- this.index += r;
- var i = this.gobbleToken();
- return i || this.throwError("missing unaryOp argument"), this.runHook("after-token", {
- type: l.UNARY_EXP,
- operator: t,
- argument: i,
- prefix: !0
- })
- }
- t = t.substr(0, --r)
- }
- l.isIdentifierStart(e) ? (n = this.gobbleIdentifier(), l.literals.hasOwnProperty(n.name) ? n = {
- type: l.LITERAL,
- value: l.literals[n.name],
- raw: n.name
- } : n.name === l.this_str && (n = {
- type: l.THIS_EXP
- })) : e === l.OPAREN_CODE && (n = this.gobbleGroup())
- }
- return n ? (n = this.gobbleTokenProperty(n), this.runHook("after-token", n)) : this.runHook("after-token", !1)
- }
- }, {
- key: "gobbleTokenProperty",
- value: function(e) {
- this.gobbleSpaces();
- for (var t = this.code; t === l.PERIOD_CODE || t === l.OBRACK_CODE || t === l.OPAREN_CODE || t === l.QUMARK_CODE;) {
- var r = void 0;
- if (t === l.QUMARK_CODE) {
- if (this.expr.charCodeAt(this.index + 1) !== l.PERIOD_CODE) break;
- r = !0, this.index += 2, this.gobbleSpaces(), t = this.code
- }
- this.index++, t === l.OBRACK_CODE ? (e = {
- type: l.MEMBER_EXP,
- computed: !0,
- object: e,
- property: this.gobbleExpression()
- }, this.gobbleSpaces(), (t = this.code) !== l.CBRACK_CODE && this.throwError("Unclosed ["), this.index++) : t === l.OPAREN_CODE ? e = {
- type: l.CALL_EXP,
- arguments: this.gobbleArguments(l.CPAREN_CODE),
- callee: e
- } : t !== l.PERIOD_CODE && !r || (r && this.index--, this.gobbleSpaces(), e = {
- type: l.MEMBER_EXP,
- computed: !1,
- object: e,
- property: this.gobbleIdentifier()
- }), r && (e.optional = !0), this.gobbleSpaces(), t = this.code
- }
- return e
- }
- }, {
- key: "gobbleNumericLiteral",
- value: function() {
- for (var e, t = ""; l.isDecimalDigit(this.code);) t += this.expr.charAt(this.index++);
- if (this.code === l.PERIOD_CODE)
- for (t += this.expr.charAt(this.index++); l.isDecimalDigit(this.code);) t += this.expr.charAt(this.index++);
- if ("e" === (e = this.char) || "E" === e) {
- for (t += this.expr.charAt(this.index++), "+" !== (e = this.char) && "-" !== e || (t += this.expr.charAt(this.index++)); l.isDecimalDigit(this.code);) t += this.expr.charAt(this.index++);
- l.isDecimalDigit(this.expr.charCodeAt(this.index - 1)) || this.throwError("Expected exponent (" + t + this.char + ")")
- }
- return e = this.code, l.isIdentifierStart(e) ? this.throwError("Variable names cannot start with a number (" + t + this.char + ")") : (e === l.PERIOD_CODE || 1 === t.length && t.charCodeAt(0) === l.PERIOD_CODE) && this.throwError("Unexpected period"), {
- type: l.LITERAL,
- value: parseFloat(t),
- raw: t
- }
- }
- }, {
- key: "gobbleStringLiteral",
- value: function() {
- for (var e = "", t = this.index, r = this.expr.charAt(this.index++), n = !1; this.index < this.expr.length;) {
- var i = this.expr.charAt(this.index++);
- if (i === r) {
- n = !0;
- break
- }
- if ("\\" === i) switch (i = this.expr.charAt(this.index++)) {
- case "n":
- e += "\n";
- break;
- case "r":
- e += "\r";
- break;
- case "t":
- e += "\t";
- break;
- case "b":
- e += "\b";
- break;
- case "f":
- e += "\f";
- break;
- case "v":
- e += "\v";
- break;
- default:
- e += i
- } else e += i
- }
- return n || this.throwError('Unclosed quote after "' + e + '"'), {
- type: l.LITERAL,
- value: e,
- raw: this.expr.substring(t, this.index)
- }
- }
- }, {
- key: "gobbleIdentifier",
- value: function() {
- var e = this.code,
- t = this.index;
- for (l.isIdentifierStart(e) ? this.index++ : this.throwError("Unexpected " + this.char); this.index < this.expr.length && (e = this.code, l.isIdentifierPart(e));) this.index++;
- return {
- type: l.IDENTIFIER,
- name: this.expr.slice(t, this.index)
- }
- }
- }, {
- key: "gobbleArguments",
- value: function(e) {
- for (var t = [], r = !1, n = 0; this.index < this.expr.length;) {
- this.gobbleSpaces();
- var i = this.code;
- if (i === e) {
- r = !0, this.index++, e === l.CPAREN_CODE && n && n >= 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 < n; o++) t.push(null)
- } else t.length !== n && 0 !== n ? this.throwError("Expected comma") : ((i = this.gobbleExpression()) && i.type !== l.COMPOUND || this.throwError("Expected comma"), t.push(i))
- }
- return r || this.throwError("Expected " + String.fromCharCode(e)), t
- }
- }, {
- key: "gobbleGroup",
- value: function() {
- this.index++;
- var e = this.gobbleExpressions(l.CPAREN_CODE);
- if (this.code === l.CPAREN_CODE) return this.index++, 1 === e.length ? e[0] : !!e.length && {
- type: l.SEQUENCE_EXP,
- expressions: e
- };
- this.throwError("Unclosed (")
- }
- }, {
- key: "gobbleArray",
- value: function() {
- return this.index++, {
- type: l.ARRAY_EXP,
- elements: this.gobbleArguments(l.CBRACK_CODE)
- }
- }
- }], [{
- key: "version",
- get: function() {
- return "1.3.8"
- }
- }, {
- key: "toString",
- value: function() {
- return "JavaScript Expression Parser (JSEP) v" + l.version
- }
- }, {
- key: "addUnaryOp",
- value: function(e) {
- return l.max_unop_len = Math.max(e.length, l.max_unop_len), l.unary_ops[e] = 1, l
- }
- }, {
- key: "addBinaryOp",
- value: function(e, t, r) {
- return l.max_binop_len = Math.max(e.length, l.max_binop_len), l.binary_ops[e] = t, r ? l.right_associative.add(e) : l.right_associative.delete(e), l
- }
- }, {
- key: "addIdentifierChar",
- value: function(e) {
- return l.additional_identifier_chars.add(e), l
- }
- }, {
- key: "addLiteral",
- value: function(e, t) {
- return l.literals[e] = t, l
- }
- }, {
- key: "removeUnaryOp",
- value: function(e) {
- return delete l.unary_ops[e], e.length === l.max_unop_len && (l.max_unop_len = l.getMaxKeyLen(l.unary_ops)), l
- }
- }, {
- key: "removeAllUnaryOps",
- value: function() {
- return l.unary_ops = {}, l.max_unop_len = 0, l
- }
- }, {
- key: "removeIdentifierChar",
- value: function(e) {
- return l.additional_identifier_chars.delete(e), l
- }
- }, {
- key: "removeBinaryOp",
- value: function(e) {
- return delete l.binary_ops[e], e.length === l.max_binop_len && (l.max_binop_len = l.getMaxKeyLen(l.binary_ops)), l.right_associative.delete(e), l
- }
- }, {
- key: "removeAllBinaryOps",
- value: function() {
- return l.binary_ops = {}, l.max_binop_len = 0, l
- }
- }, {
- key: "removeLiteral",
- value: function(e) {
- return delete l.literals[e], l
- }
- }, {
- key: "removeAllLiterals",
- value: function() {
- return l.literals = {}, l
- }
- }, {
- key: "parse",
- value: function(e) {
- return new l(e).parse()
- }
- }, {
- key: "getMaxKeyLen",
- value: function(e) {
- return Math.max.apply(Math, [0].concat(f(Object.keys(e).map(function(e) {
- return e.length
- }))))
- }
- }, {
- key: "isDecimalDigit",
- value: function(e) {
- return 48 <= e && e <= 57
- }
- }, {
- key: "binaryPrecedence",
- value: function(e) {
- return l.binary_ops[e] || 0
- }
- }, {
- key: "isIdentifierStart",
- value: function(e) {
- return 65 <= e && e <= 90 || 97 <= e && e <= 122 || 128 <= e && !l.binary_ops[String.fromCharCode(e)] || l.additional_identifier_chars.has(String.fromCharCode(e))
- }
- }, {
- key: "isIdentifierPart",
- value: function(e) {
- return l.isIdentifierStart(e) || l.isDecimalDigit(e)
- }
- }])
- }(),
- y = new y;
- Object.assign(v, {
- hooks: y,
- plugins: new b(v),
- COMPOUND: "Compound",
- SEQUENCE_EXP: "SequenceExpression",
- IDENTIFIER: "Identifier",
- MEMBER_EXP: "MemberExpression",
- LITERAL: "Literal",
- THIS_EXP: "ThisExpression",
- CALL_EXP: "CallExpression",
- UNARY_EXP: "UnaryExpression",
- BINARY_EXP: "BinaryExpression",
- ARRAY_EXP: "ArrayExpression",
- TAB_CODE: 9,
- LF_CODE: 10,
- CR_CODE: 13,
- SPACE_CODE: 32,
- PERIOD_CODE: 46,
- COMMA_CODE: 44,
- SQUOTE_CODE: 39,
- DQUOTE_CODE: 34,
- OPAREN_CODE: 40,
- CPAREN_CODE: 41,
- OBRACK_CODE: 91,
- CBRACK_CODE: 93,
- QUMARK_CODE: 63,
- SEMCOL_CODE: 59,
- COLON_CODE: 58,
- unary_ops: {
- "-": 1,
- "!": 1,
- "~": 1,
- "+": 1
- },
- binary_ops: {
- "||": 1,
- "&&": 2,
- "|": 3,
- "^": 4,
- "&": 5,
- "==": 6,
- "!=": 6,
- "===": 6,
- "!==": 6,
- "<": 7,
- ">": 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 < this.expr.length;) {
- if (47 === this.code && !r) {
- for (var n = this.expr.slice(t, this.index), i = ""; ++this.index < this.expr.length;) {
- var o = this.code;
- if (!(97 <= o && o <= 122 || 65 <= o && o <= 90 || 48 <= o && o <= 57)) break;
- i += this.char
- }
- var a = void 0;
- try {
- a = new RegExp(n, i)
- } catch (e) {
- this.throwError(e.message)
- }
- return e.node = {
- type: s.LITERAL,
- value: a,
- raw: this.expr.slice(t - 1, this.index)
- }, e.node = this.gobbleTokenProperty(e.node), e.node
- }
- this.code === s.OBRACK_CODE ? r = !0 : r && this.code === s.CBRACK_CODE && (r = !1), this.index += 92 === this.code ? 2 : 1
- }
- this.throwError("Unclosed Regex")
- }
- })
- }
- },
- g = {
- name: "assignment",
- assignmentOperators: new Set(["=", "*=", "**=", "/=", "%=", "+=", "-=", "<<=", ">>=", ">>>=", "&=", "^=", "|="]),
- 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 < e.length && e.shift(), this._hasParentSelector = null;
- r = this._trace(e, t, ["$"], o, a, r).filter(function(e) {
- return e && !e.isParentSelector
- });
- return r.length ? u || 1 !== r.length || r[0].hasArrExpr ? r.reduce(function(e, t) {
- t = i._getPreferredOutput(t);
- return s && Array.isArray(t) ? e = e.concat(t) : e.push(t), e
- }, []) : this._getPreferredOutput(r[0]) : u ? [] : void 0
- }
- }, F.prototype._getPreferredOutput = function(e) {
- var t = this.currResultType;
- switch (t) {
- case "all":
- var r = Array.isArray(e.path) ? e.path : F.toPathArray(e.path);
- return e.pointer = F.toPointer(r), e.path = "string" == typeof e.path ? e.path : F.toPathString(e.path), e;
- case "value":
- case "parent":
- case "parentProperty":
- return e[t];
- case "path":
- return F.toPathString(e[t]);
- case "pointer":
- return F.toPointer(e.path);
- default:
- throw new TypeError("Unknown result type")
- }
- }, F.prototype._handleCallback = function(e, t, r) {
- var n;
- t && (n = this._getPreferredOutput(e), e.path = "string" == typeof e.path ? e.path : F.toPathString(e.path), t(n, r, e))
- }, F.prototype._trace = function(t, n, i, o, a, s, e, r) {
- var u = this;
- if (!t.length) return v = {
- path: i,
- value: n,
- parent: o,
- parentProperty: a,
- hasArrExpr: e
- }, this._handleCallback(v, s, "value"), v;
- var c = t[0],
- l = t.slice(1),
- h = [];
-
- function p(e) {
- Array.isArray(e) ? e.forEach(function(e) {
- h.push(e)
- }) : h.push(e)
- }
- if (("string" != typeof c || r) && n && A.call(n, c)) p(this._trace(l, n[c], w(i, c), n, c, s, e));
- else if ("*" === c) this._walk(n, function(e) {
- p(u._trace(l, n[e], w(i, e), n, e, s, !0, !0))
- });
- else if (".." === c) p(this._trace(l, n, i, o, a, s, e)), this._walk(n, function(e) {
- "object" === C(n[e]) && p(u._trace(t.slice(), n[e], w(i, e), n, e, s, !0))
- });
- else {
- if ("^" === c) return this._hasParentSelector = !0, {
- path: i.slice(0, -1),
- expr: l,
- isParentSelector: !0
- };
- if ("~" === c) return v = {
- path: w(i, c),
- value: a,
- parent: o,
- parentProperty: null
- }, this._handleCallback(v, s, "property"), v;
- if ("$" === c) p(this._trace(l, n, i, null, null, s, e));
- else if (/^(\x2D?[0-9]*):(\x2D?[0-9]*):?([0-9]*)$/.test(c)) p(this._slice(c, l, n, i, o, a, s));
- else if (0 === c.indexOf("?(")) {
- if (!1 === this.currEval) throw new Error("Eval [?(expr)] prevented in JSONPath expression.");
- var f = c.replace(/^\?\(((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*?)\)$/, "$1"),
- d = /@(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])?((?:[\0->@-\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 < u._trace(t, r, i, o, a, s, !0).length && p(u._trace(l, n[e], w(i, e), n, e, s, !0))
- }) : this._walk(n, function(e) {
- u._eval(f, n[e], e, i, o, a) && p(u._trace(l, n[e], w(i, e), n, e, s, !0))
- })
- } else if ("(" === c[0]) {
- if (!1 === this.currEval) throw new Error("Eval [(expr)] prevented in JSONPath expression.");
- p(this._trace(k(this._eval(c, n, i[i.length - 1], i.slice(0, -1), o, a), l), n, i, o, a, s, e))
- } else if ("@" === c[0]) {
- var y = !1,
- b = c.slice(1, -2);
- switch (b) {
- case "scalar":
- n && ["object", "function"].includes(C(n)) || (y = !0);
- break;
- case "boolean":
- case "string":
- case "undefined":
- case "function":
- C(n) === b && (y = !0);
- break;
- case "integer":
- !Number.isFinite(n) || n % 1 || (y = !0);
- break;
- case "number":
- Number.isFinite(n) && (y = !0);
- break;
- case "nonFinite":
- "number" != typeof n || Number.isFinite(n) || (y = !0);
- break;
- case "object":
- n && C(n) === b && (y = !0);
- break;
- case "array":
- Array.isArray(n) && (y = !0);
- break;
- case "other":
- y = this.currOtherTypeCallback(n, i, o, a);
- break;
- case "null":
- null === n && (y = !0);
- break;
- default:
- throw new TypeError("Unknown value type " + b)
- }
- if (y) return v = {
- path: i,
- value: n,
- parent: o,
- parentProperty: a
- }, this._handleCallback(v, s, "value"), v
- } else if ("`" === c[0] && n && A.call(n, c.slice(1))) {
- var v = c.slice(1);
- p(this._trace(l, n[v], w(i, v), n, v, s, e, !0))
- } else if (c.includes(",")) {
- var E = function(e, t) {
- var r = "undefined" != typeof Symbol && e[Symbol.iterator] || e["@@iterator"];
- if (!r) {
- if (Array.isArray(e) || (r = O(e)) || t && e && "number" == typeof e.length) {
- r && (e = r);
- var n = 0,
- t = function() {};
- return {
- s: t,
- n: function() {
- return n >= 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 < h.length; x++) {
- var F = h[x];
- if (F && F.isParentSelector) {
- var D = this._trace(F.expr, n, F.path, o, a, s, e);
- if (Array.isArray(D)) {
- h[x] = D[0];
- for (var _ = D.length, m = 1; m < _; m++) x++, h.splice(x, 0, D[m])
- } else h[x] = D
- }
- }
- return h
- }, F.prototype._walk = function(e, t) {
- if (Array.isArray(e))
- for (var r = e.length, n = 0; n < r; n++) t(n);
- else e && "object" === C(e) && Object.keys(e).forEach(function(e) {
- t(e)
- })
- }, F.prototype._slice = function(e, t, r, n, i, o, a) {
- if (Array.isArray(r)) {
- for (var s = r.length, u = e.split(":"), c = u[2] && Number.parseInt(u[2]) || 1, e = u[0] && Number.parseInt(u[0]) || 0, l = u[1] && Number.parseInt(u[1]) || s, e = e < 0 ? Math.max(0, e + s) : Math.min(s, e), l = l < 0 ? Math.max(0, l + s) : Math.min(s, l), h = [], p = e; p < l; p += c) this._trace(k(p, t), r, n, i, o, a, !0).forEach(function(e) {
- h.push(e)
- });
- return h
- }
- }, F.prototype._eval = function(t, e, r, n, i, o) {
- var a = this;
- this.currSandbox._$_parentProperty = o, this.currSandbox._$_parent = i, this.currSandbox._$_property = r, this.currSandbox._$_root = this.json, this.currSandbox._$_v = e;
- e = t.includes("@path");
- e && (this.currSandbox._$_path = F.toPathString(n.concat([r])));
- var s = this.currEval + "Script:" + t;
- if (!F.cache[s]) {
- var u = t.replace(/@parentProperty/g, "_$_parentProperty").replace(/@parent/g, "_$_parent").replace(/@property/g, "_$_property").replace(/@root/g, "_$_root").replace(/@([\t-\r \)\.\[\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF])/g, "_$_v$1");
- if (e && (u = u.replace(/@path/g, "_$_path")), "safe" === this.currEval || !0 === this.currEval || void 0 === this.currEval) F.cache[s] = new this.safeVm.Script(u);
- else if ("native" === this.currEval) F.cache[s] = new this.vm.Script(u);
- else if ("function" == typeof this.currEval && this.currEval.prototype && A.call(this.currEval.prototype, "runInNewContext")) {
- e = this.currEval;
- F.cache[s] = new e(u)
- } else {
- if ("function" != typeof this.currEval) throw new TypeError('Unknown "eval" property "'.concat(this.currEval, '"'));
- F.cache[s] = {
- runInNewContext: function(e) {
- return a.currEval(u, e)
- }
- }
- }
- }
- try {
- return F.cache[s].runInNewContext(this.currSandbox)
- } catch (e) {
- if (this.ignoreEvalErrors) return !1;
- throw new Error("jsonPath: " + e.message + ": " + t)
- }
- }, F.cache = {}, F.toPathString = function(e) {
- for (var t = e, r = t.length, n = "$", i = 1; i < r; i++) /^(~|\^|@(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*?\(\))$/.test(t[i]) || (n += /^[\*0-9]+$/.test(t[i]) ? "[" + t[i] + "]" : "['" + t[i] + "']");
- return n
- }, F.toPointer = function(e) {
- for (var t = e, r = t.length, n = "", i = 1; i < r; i++) /^(~|\^|@(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*?\(\))$/.test(t[i]) || (n += "/" + t[i].toString().replace(/~/g, "~0").replace(/\//g, "~1"));
- return n
- }, F.toPathArray = function(e) {
- var t = F.cache;
- if (t[e]) return t[e].concat();
- var r = [],
- n = e.replace(/@(?:null|boolean|number|string|integer|undefined|nonFinite|scalar|array|object|function|other)\(\)/g, ";$&;").replace(/['\[](\??\((?:[\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, function(e, t) {
- return "[#" + (r.push(t) - 1) + "]"
- }).replace(/\[["']((?:[\0-&\(-\\\^-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)["']\]/g, function(e, t) {
- return "['" + t.replace(/\./g, "%@%").replace(/~/g, "%%@@%%") + "']"
- }).replace(/~/g, ";~;").replace(/["']?\.["']?(?!(?:[\0-Z\\-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*\])|\[["']?/g, ";").replace(/%@%/g, ".").replace(/%%@@%%/g, "~").replace(/(?:;)?(\^+)(?:;)?/g, function(e, t) {
- return ";" + t.split("").join(";") + ";"
- }).replace(/;;;|;;/g, ";..;").replace(/;$|'?\]|'$/g, "").split(";").map(function(e) {
- var t = e.match(/#([0-9]+)/);
- return t && t[1] ? r[t[1]] : e
- });
- return t[e] = n, t[e].concat()
- };
- E.plugins.register(b, g);
- var D = {
- evalAst: function(e, t) {
- switch (e.type) {
- case "BinaryExpression":
- case "LogicalExpression":
- return D.evalBinaryExpression(e, t);
- case "Compound":
- return D.evalCompound(e, t);
- case "ConditionalExpression":
- return D.evalConditionalExpression(e, t);
- case "Identifier":
- return D.evalIdentifier(e, t);
- case "Literal":
- return D.evalLiteral(e, t);
- case "MemberExpression":
- return D.evalMemberExpression(e, t);
- case "UnaryExpression":
- return D.evalUnaryExpression(e, t);
- case "ArrayExpression":
- return D.evalArrayExpression(e, t);
- case "CallExpression":
- return D.evalCallExpression(e, t);
- case "AssignmentExpression":
- return D.evalAssignmentExpression(e, t);
- default:
- throw SyntaxError("Unexpected expression", e)
- }
- },
- evalBinaryExpression: function(e, t) {
- return {
- "||": 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()
- },
- "===": 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()
- },
- ">>": 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 < e.body.length; r++) {
- "Identifier" === e.body[r].type && ["var", "let", "const"].includes(e.body[r].name) && e.body[r + 1] && "AssignmentExpression" === e.body[r + 1].type && (r += 1);
- var n = e.body[r],
- i = D.evalAst(n, t)
- }
- return i
- },
- evalConditionalExpression: function(e, t) {
- return D.evalAst(e.test, t) ? D.evalAst(e.consequent, t) : D.evalAst(e.alternate, t)
- },
- evalIdentifier: function(e, t) {
- if (e.name in t) return t[e.name];
- throw ReferenceError("".concat(e.name, " is not defined"))
- },
- evalLiteral: function(e) {
- return e.value
- },
- evalMemberExpression: function(e, t) {
- var r = e.computed ? D.evalAst(e.property) : e.property.name,
- t = D.evalAst(e.object, t),
- r = t[r];
- return "function" == typeof r ? r.bind(t) : r
- },
- evalUnaryExpression: function(e, t) {
- return {
- "-": function(e) {
- return -D.evalAst(e, t)
- },
- "!": function(e) {
- return !D.evalAst(e, t)
- },
- "~": function(e) {
- return ~D.evalAst(e, t)
- },
- "+": function(e) {
- return +D.evalAst(e, t)
- }
- } [e.operator](e.argument)
- },
- evalArrayExpression: function(e, t) {
- return e.elements.map(function(e) {
- return D.evalAst(e, t)
- })
- },
- evalCallExpression: function(e, t) {
- var r = e.arguments.map(function(e) {
- return D.evalAst(e, t)
- });
- return D.evalAst(e.callee, t).apply(void 0, f(r))
- },
- evalAssignmentExpression: function(e, t) {
- if ("Identifier" !== e.left.type) throw SyntaxError("Invalid left-hand side in assignment");
- var r = e.left.name,
- e = D.evalAst(e.right, t);
- return t[r] = e, t[r]
- }
- },
- b = function() {
- return c(function e(t) {
- s(this, e), this.code = t, this.ast = E(this.code)
- }, [{
- key: "runInNewContext",
- value: function(e) {
- e = r({}, e);
- return D.evalAst(this.ast, e)
- }
- }])
- }();
- F.prototype.vm = {
- Script: function() {
- return c(function e(t) {
- s(this, e), this.code = t
- }, [{
- key: "runInNewContext",
- value: function(n) {
- var e = this.code,
- t = Object.keys(n),
- r = [];
- ! function(e, t, r) {
- for (var n = e.length, i = 0; i < n; i++) r(e[i]) && t.push(e.splice(i--, 1)[0])
- }(t, r, function(e) {
- return "function" == typeof n[e]
- });
- var i = t.map(function(e) {
- return n[e]
- }),
- r = r.reduce(function(e, t) {
- var r = n[t].toString();
- return /function/.test(r) || (r = "function " + r), "var " + t + "=" + r + ";" + e
- }, "");
- /(["'])use strict\1/.test(e = r + e) || t.includes("arguments") || (e = "var arguments = undefined;" + e);
- r = (e = e.replace(/;[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*$/, "")).lastIndexOf(";"), e = -1 < r ? e.slice(0, r + 1) + " return " + e.slice(r + 1) : " return " + e;
- return o(Function, t.concat([e])).apply(void 0, f(i))
- }
- }])
- }()
- }, F.prototype.safeVm = {
- Script: b
- }, e.JSONPath = F, e.SafeScript = b
-});
\ No newline at end of file
diff --git a/潇洒/js/uri.min.js b/潇洒/js/uri.min.js
deleted file mode 100644
index 66082b0..0000000
--- a/潇洒/js/uri.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(global){var re={starts_with_slashes:/^\/+/,ends_with_slashes:/\/+$/,pluses:/\+/g,query_separator:/[&;]/,uri_parser:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*)(?::([^:@]*))?)?@)?(\[[0-9a-fA-F:.]+\]|[^:\/?#]*)(?::(\d+|(?=:)))?(:)?)((((?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/};if(!Array.prototype.forEach){Array.prototype.forEach=function(callback,thisArg){var T,k;if(this==null){throw new TypeError(' this is null or not defined');}var O=Object(this);var len=O.length>>>0;if(typeof callback!=="function"){throw new TypeError(callback+' is not a function');}if(arguments.length>1){T=thisArg}k=0;while(k0){s+='&'}if(param[1]===null){s+=param[0]}else{s+=param[0];s+='=';if(typeof param[1]!=='undefined'){s+=encodeURIComponent(param[1])}}}return s.length>0?'?'+s:s};Uri.prototype.getQueryParamValue=function(key){var param,i,l;for(i=0,l=this.queryPairs.length;i0){this.queryPairs.push([key,val])}return this};Uri.prototype.hasQueryParam=function(key){var i,len=this.queryPairs.length;for(i=0;i=0){this.deleteQueryParam(key,decode(oldVal)).addQueryParam(key,newVal,index)}}else{for(i=0;i {
- try {
- let api = "" + input.split("?")[0];
- console.log(api);
- let response = fetch(api, {
- method: 'get',
- headers: {
- 'User-Agent': 'okhttp/3.14.9',
- 'Content-Type': 'application/x-www-form-urlencoded'
- }
- });
- let bata = JSON.parse(response);
- if (bata.url.includes("qq,qiyi,imgo,youku,leshi,bilibili1,m1905")) {
- input = {
- parse: 0,
- url: bata.url,
- jx: 0,
- danmaku: "http://103.45.162.207:25252/hbdm.php?key=7894561232&id=" + input.split("?")[0]
- };
- } else {
- input = {
- parse: 0,
- url: input.split("?")[0],
- jx: 1,
- danmaku: "http://103.45.162.207:25252/hbdm.php?key=7894561232&id=" + input.split("?")[0]
- };
- }
- } catch {
- input = {
- parse: 0,
- url: input.split("?")[0],
- jx: 1,
- danmaku: "http://103.45.162.207:25252/hbdm.php?key=7894561232&id=" + input.split("?")[0]
- };
- }
- }),
- // 疑似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/潇洒/js/优酷视频.js b/潇洒/js/优酷视频.js
deleted file mode 100644
index c8559f9..0000000
--- a/潇洒/js/优酷视频.js
+++ /dev/null
@@ -1,2299 +0,0 @@
-var rule = {
- title: '优酷[官]',
- host: 'https://www.%79%6f%75%6b%75.com',
- homeUrl: '',
- searchUrl: 'https://search.%79%6f%75%6b%75.com/api/search?pg=fypage&keyword=**',
- searchable: 2,
- quickSearch: 0,
- filterable: 1,
- multi: 1,
- url: '/category/data?optionRefresh=1&pageNo=fypage¶ms=fyfilter',
- filter_url: '{{fl}}',
- filter: {
- "电视剧": [{
- "key": "main_area",
- "name": "全部地区",
- "value": [{
- "n": "全部地区",
- "v": ""
- }, {
- "n": "内地剧",
- "v": "中国内地"
- }, {
- "n": "港剧",
- "v": "中国香港"
- }, {
- "n": "台剧",
- "v": "中国台湾"
- }, {
- "n": "韩剧",
- "v": "韩国"
- }, {
- "n": "美剧",
- "v": "美国"
- }, {
- "n": "英剧",
- "v": "英国"
- }, {
- "n": "日剧",
- "v": "日本"
- }, {
- "n": "泰剧",
- "v": "泰国"
- }]
- }, {
- "key": "tags",
- "name": "全部类型",
- "value": [{
- "n": "全部类型",
- "v": ""
- }, {
- "n": "青春",
- "v": "青春"
- }, {
- "n": "古装",
- "v": "古装"
- }, {
- "n": "爱情",
- "v": "爱情"
- }, {
- "n": "都市",
- "v": "都市"
- }, {
- "n": "喜剧",
- "v": "喜剧,搞笑"
- }, {
- "n": "战争",
- "v": "战争"
- }, {
- "n": "军旅",
- "v": "军旅"
- }, {
- "n": "谍战",
- "v": "谍战"
- }, {
- "n": "偶像",
- "v": "偶像"
- }, {
- "n": "警匪",
- "v": "警匪"
- }, {
- "n": "冒险",
- "v": "冒险"
- }, {
- "n": "穿越",
- "v": "穿越"
- }, {
- "n": "仙侠",
- "v": "仙侠"
- }, {
- "n": "武侠",
- "v": "武侠"
- }, {
- "n": "悬疑",
- "v": "悬疑"
- }, {
- "n": "罪案",
- "v": "罪案"
- }, {
- "n": "家庭",
- "v": "家庭"
- }, {
- "n": "历史",
- "v": "历史"
- }, {
- "n": "年代",
- "v": "年代"
- }, {
- "n": "农村",
- "v": "农村"
- }]
- }, {
- "key": "year",
- "name": "全部年份",
- "value": [{
- "n": "全部年份",
- "v": ""
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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-2011",
- "v": "2011-2014"
- }, {
- "n": "更早",
- "v": "-2010"
- }]
- }, {
- "key": "status",
- "name": "全部规格",
- "value": [{
- "n": "全部规格",
- "v": ""
- }, {
- "n": "全网独播",
- "v": "1"
- }, {
- "n": "优酷自制",
- "v": "2"
- }, {
- "n": "已完结",
- "v": "3"
- }, {
- "n": "即将上线",
- "v": "4"
- }, {
- "n": "短剧",
- "v": "5"
- }]
- }, {
- "key": "pay_type",
- "name": "付费类型",
- "value": [{
- "n": "付费类型",
- "v": ""
- }, {
- "n": "免费",
- "v": "0"
- }, {
- "n": "VIP",
- "v": "2"
- }, {
- "n": "付费",
- "v": "1"
- }]
- }, {
- "key": "sort",
- "name": "综合排序",
- "value": [{
- "n": "综合排序",
- "v": ""
- }, {
- "n": "热度最高",
- "v": "7"
- }, {
- "n": "最新上线",
- "v": "1"
- }, {
- "n": "最好评",
- "v": "3"
- }, {
- "n": "最多播放",
- "v": "2"
- }]
- }],
- "电影": [{
- "key": "main_area",
- "name": "全部地区",
- "value": [{
- "n": "全部地区",
- "v": ""
- }, {
- "n": "内地",
- "v": "中国内地"
- }, {
- "n": "中国香港",
- "v": "中国香港"
- }, {
- "n": "中国台湾",
- "v": "中国台湾"
- }, {
- "n": "美国",
- "v": "美国"
- }, {
- "n": "印度",
- "v": "印度"
- }, {
- "n": "日韩",
- "v": "韩国,日本"
- }, {
- "n": "泰国",
- "v": "泰国"
- }, {
- "n": "欧洲",
- "v": "欧洲"
- }]
- }, {
- "key": "tags",
- "name": "全部类型",
- "value": [{
- "n": "全部类型",
- "v": ""
- }, {
- "n": "喜剧",
- "v": "喜剧,搞笑"
- }, {
- "n": "动作",
- "v": "动作"
- }, {
- "n": "怪兽",
- "v": "怪兽"
- }, {
- "n": "战争",
- "v": "战争"
- }, {
- "n": "爱情",
- "v": "爱情"
- }, {
- "n": "悬疑",
- "v": "悬疑"
- }, {
- "n": "武侠",
- "v": "武侠"
- }, {
- "n": "奇幻",
- "v": "奇幻"
- }, {
- "n": "科幻",
- "v": "科幻"
- }, {
- "n": "冒险",
- "v": "冒险"
- }, {
- "n": "警匪",
- "v": "警匪"
- }, {
- "n": "动画",
- "v": "动画"
- }, {
- "n": "惊悚",
- "v": "惊悚"
- }, {
- "n": "犯罪",
- "v": "犯罪"
- }, {
- "n": "恐怖",
- "v": "恐怖"
- }, {
- "n": "剧情",
- "v": "剧情"
- }, {
- "n": "历史",
- "v": "历史"
- }, {
- "n": "纪录片",
- "v": "纪录片"
- }, {
- "n": "传记",
- "v": "传记"
- }, {
- "n": "歌舞",
- "v": "歌舞"
- }, {
- "n": "短片",
- "v": "短片"
- }, {
- "n": "其他",
- "v": "其他"
- }]
- }, {
- "key": "source",
- "name": "全部规格",
- "value": [{
- "n": "全部规格",
- "v": ""
- }, {
- "n": "院线",
- "v": "1"
- }, {
- "n": "网络电影",
- "v": "0"
- }, {
- "n": "独播",
- "v": "2"
- }, {
- "n": "高清修复",
- "v": "3"
- }, {
- "n": "1080P",
- "v": "4"
- }]
- }, {
- "key": "year",
- "name": "全部年份",
- "value": [{
- "n": "全部年份",
- "v": ""
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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-2010",
- "v": "2010-2014"
- }, {
- "n": "2009-2000",
- "v": "2000-2009"
- }, {
- "n": "90年代",
- "v": "1990-1999"
- }, {
- "n": "80年代",
- "v": "1980-1989"
- }, {
- "n": "70年代",
- "v": "1970-1979"
- }, {
- "n": "更早",
- "v": "-1969"
- }]
- }, {
- "key": "pay_type",
- "name": "付费类型",
- "value": [{
- "n": "付费类型",
- "v": ""
- }, {
- "n": "免费",
- "v": "0"
- }, {
- "n": "会员",
- "v": "2"
- }, {
- "n": "点播",
- "v": "1"
- }]
- }, {
- "key": "sort",
- "name": "综合排序",
- "value": [{
- "n": "综合排序",
- "v": ""
- }, {
- "n": "热度最高",
- "v": "7"
- }, {
- "n": "最多播放",
- "v": "2"
- }, {
- "n": "最新上线",
- "v": "1"
- }, {
- "n": "最好评",
- "v": "3"
- }]
- }, {
- "key": "tag_label_name",
- "name": "为你推荐",
- "value": [{
- "n": "为你推荐",
- "v": ""
- }, {
- "n": "高分必看",
- "v": "高分必看"
- }, {
- "n": "卖座电影",
- "v": "卖座电影"
- }, {
- "n": "小说改编",
- "v": "小说改编"
- }, {
- "n": "铁血硬汉",
- "v": "铁血硬汉"
- }, {
- "n": "视效大片",
- "v": "视效大片"
- }, {
- "n": "漫画改编",
- "v": "漫画改编"
- }, {
- "n": "绝地求生",
- "v": "绝地求生"
- }, {
- "n": "真人真事改编",
- "v": "真人真事改编"
- }, {
- "n": "范伟",
- "v": "范伟"
- }, {
- "n": "火爆枪战",
- "v": "火爆枪战"
- }, {
- "n": "影史经典",
- "v": "影史经典"
- }, {
- "n": "拯救世界",
- "v": "拯救世界"
- }, {
- "n": "万茜",
- "v": "万茜"
- }, {
- "n": "马思纯",
- "v": "马思纯"
- }, {
- "n": "王俊凯",
- "v": "王俊凯"
- }, {
- "n": "豪华阵容",
- "v": "豪华阵容"
- }, {
- "n": "李玉",
- "v": "李玉"
- }, {
- "n": "无厘头喜剧",
- "v": "无厘头喜剧"
- }, {
- "n": "超能力",
- "v": "超能力"
- }, {
- "n": "欢喜搭档",
- "v": "欢喜搭档"
- }]
- }],
- "综艺": [{
- "key": "main_area",
- "name": "全部地区",
- "value": [{
- "n": "全部地区",
- "v": ""
- }, {
- "n": "内地",
- "v": "中国内地"
- }, {
- "n": "中国台湾",
- "v": "中国台湾"
- }, {
- "n": "美国",
- "v": "美国"
- }, {
- "n": "英国",
- "v": "英国"
- }]
- }, {
- "key": "tags",
- "name": "全部类型",
- "value": [{
- "n": "全部类型",
- "v": ""
- }, {
- "n": "偶像",
- "v": "偶像"
- }, {
- "n": "舞蹈",
- "v": "舞蹈"
- }, {
- "n": "音乐",
- "v": "音乐"
- }, {
- "n": "情感",
- "v": "情感"
- }, {
- "n": "喜剧",
- "v": "喜剧,搞笑"
- }, {
- "n": "体育",
- "v": "体育"
- }, {
- "n": "游戏",
- "v": "游戏"
- }, {
- "n": "相声",
- "v": "相声"
- }, {
- "n": "婚恋",
- "v": "婚恋"
- }, {
- "n": "时尚",
- "v": "时尚"
- }, {
- "n": "晚会",
- "v": "晚会"
- }, {
- "n": "明星访谈",
- "v": "明星访谈"
- }, {
- "n": "亲子",
- "v": "亲子"
- }, {
- "n": "生活",
- "v": "生活"
- }, {
- "n": "文化",
- "v": "文化"
- }, {
- "n": "美食",
- "v": "美食"
- }, {
- "n": "旅游",
- "v": "旅游"
- }, {
- "n": "益智",
- "v": "益智"
- }]
- }, {
- "key": "year",
- "name": "全部年份",
- "value": [{
- "n": "全部年份",
- "v": ""
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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-2011",
- "v": "2011-2014"
- }, {
- "n": "更早",
- "v": "-2010"
- }]
- }, {
- "key": "status",
- "name": "全部规格",
- "value": [{
- "n": "全部规格",
- "v": ""
- }, {
- "n": "优酷自制",
- "v": "2"
- }, {
- "n": "优酷独播",
- "v": "1"
- }, {
- "n": "电视综艺",
- "v": "6"
- }, {
- "n": "已完结",
- "v": "3"
- }, {
- "n": "即将上线",
- "v": "4"
- }]
- }, {
- "key": "pay_type",
- "name": "付费类型",
- "value": [{
- "n": "付费类型",
- "v": ""
- }, {
- "n": "免费",
- "v": "0"
- }, {
- "n": "VIP",
- "v": "2"
- }, {
- "n": "付费",
- "v": "1"
- }]
- }, {
- "key": "sort",
- "name": "热度最高",
- "value": [{
- "n": "热度最高",
- "v": ""
- }, {
- "n": "最新更新",
- "v": "8"
- }, {
- "n": "最近开播",
- "v": "9"
- }, {
- "n": "最多评论",
- "v": "4"
- }]
- }, {
- "key": "tag_label_name",
- "name": "为你推荐",
- "value": [{
- "n": "为你推荐",
- "v": ""
- }, {
- "n": "舞台竞演",
- "v": "舞台竞演"
- }, {
- "n": "刘雨昕",
- "v": "刘雨昕"
- }, {
- "n": "王一博",
- "v": "王一博"
- }, {
- "n": "韩庚",
- "v": "韩庚"
- }, {
- "n": "李承铉",
- "v": "李承铉"
- }, {
- "n": "户外竞技",
- "v": "户外竞技"
- }, {
- "n": "浙江卫视",
- "v": "浙江卫视"
- }, {
- "n": "东方卫视",
- "v": "东方卫视"
- }, {
- "n": "岳云鹏",
- "v": "岳云鹏"
- }, {
- "n": "王迅",
- "v": "王迅"
- }, {
- "n": "杨迪",
- "v": "杨迪"
- }, {
- "n": "杨超越",
- "v": "杨超越"
- }, {
- "n": "黄明昊",
- "v": "黄明昊"
- }, {
- "n": "郭京飞",
- "v": "郭京飞"
- }, {
- "n": "欧阳娜娜",
- "v": "欧阳娜娜"
- }, {
- "n": "德云社",
- "v": "德云社"
- }, {
- "n": "郑恺",
- "v": "郑恺"
- }, {
- "n": "华少",
- "v": "华少"
- }, {
- "n": "郭德纲",
- "v": "郭德纲"
- }, {
- "n": "贾玲",
- "v": "贾玲"
- }]
- }],
- "动漫": [{
- "key": "sort",
- "name": "综合排序",
- "value": [{
- "n": "综合排序",
- "v": ""
- }, {
- "n": "最多播放",
- "v": "2"
- }, {
- "n": "最好评",
- "v": "3"
- }, {
- "n": "最新上线",
- "v": "1"
- }]
- }, {
- "key": "main_area",
- "name": "全部地区",
- "value": [{
- "n": "全部地区",
- "v": ""
- }, {
- "n": "内地",
- "v": "中国内地"
- }, {
- "n": "日本",
- "v": "日本"
- }, {
- "n": "美国",
- "v": "美国"
- }, {
- "n": "中国台湾",
- "v": "中国台湾"
- }, {
- "n": "其他",
- "v": "其他"
- }]
- }, {
- "key": "tags",
- "name": "全部类型",
- "value": [{
- "n": "全部类型",
- "v": ""
- }, {
- "n": "热血",
- "v": "热血,战斗"
- }, {
- "n": "励志",
- "v": "励志"
- }, {
- "n": "玄幻",
- "v": "玄幻"
- }, {
- "n": "古风",
- "v": "历史,古风"
- }, {
- "n": "恋爱",
- "v": "恋爱"
- }, {
- "n": "青春",
- "v": "青春"
- }, {
- "n": "校园",
- "v": "校园"
- }, {
- "n": "运动",
- "v": "社团,运动"
- }, {
- "n": "科幻",
- "v": "科幻"
- }, {
- "n": "冒险",
- "v": "冒险"
- }, {
- "n": "魔法",
- "v": "魔法"
- }, {
- "n": "日常",
- "v": "日常"
- }, {
- "n": "治愈",
- "v": "治愈"
- }, {
- "n": "机战",
- "v": "机战"
- }, {
- "n": "推理",
- "v": "推理"
- }, {
- "n": "都市",
- "v": "都市"
- }, {
- "n": "小说改",
- "v": "小说改编"
- }, {
- "n": "游戏改",
- "v": "游戏改编"
- }, {
- "n": "漫画改",
- "v": "漫画改编"
- }, {
- "n": "动态漫",
- "v": "动态漫画"
- }, {
- "n": "特摄",
- "v": "特摄"
- }, {
- "n": "布袋戏",
- "v": "布袋戏"
- }]
- }, {
- "key": "completed",
- "name": "连载情况",
- "value": [{
- "n": "连载情况",
- "v": ""
- }, {
- "n": "更新中",
- "v": "0"
- }, {
- "n": "已完结",
- "v": "1"
- }]
- }, {
- "key": "pay_type",
- "name": "付费类型",
- "value": [{
- "n": "付费类型",
- "v": ""
- }, {
- "n": "免费",
- "v": "0"
- }, {
- "n": "会员",
- "v": "2"
- }]
- }, {
- "key": "year",
- "name": "全部年份",
- "value": [{
- "n": "全部年份",
- "v": ""
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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": "00年代",
- "v": "2000-2010"
- }, {
- "n": "更早",
- "v": "-1999"
- }]
- }, {
- "key": "tag_label_name",
- "name": "为你推荐",
- "value": [{
- "n": "为你推荐",
- "v": ""
- }, {
- "n": "3D动画",
- "v": "3D动画"
- }, {
- "n": "搞笑日常",
- "v": "搞笑日常"
- }, {
- "n": "大男主",
- "v": "大男主"
- }, {
- "n": "高燃",
- "v": "高燃"
- }, {
- "n": "萌系",
- "v": "萌系"
- }, {
- "n": "修真",
- "v": "修真"
- }, {
- "n": "怀旧",
- "v": "怀旧"
- }, {
- "n": "超级英雄",
- "v": "超级英雄"
- }, {
- "n": "水树奈奈",
- "v": "水树奈奈"
- }, {
- "n": "张杰",
- "v": "张杰"
- }, {
- "n": "石田彰",
- "v": "石田彰"
- }, {
- "n": "守护地球",
- "v": "守护地球"
- }, {
- "n": "圆谷",
- "v": "圆谷"
- }, {
- "n": "山新",
- "v": "山新"
- }, {
- "n": "复仇",
- "v": "复仇"
- }, {
- "n": "废柴逆袭",
- "v": "废柴逆袭"
- }, {
- "n": "侦探",
- "v": "侦探"
- }, {
- "n": "无厘头",
- "v": "无厘头"
- }, {
- "n": "青山刚昌",
- "v": "青山刚昌"
- }, {
- "n": "悬疑",
- "v": "悬疑"
- }]
- }],
- "少儿": [{
- "key": "main_area",
- "name": "全部地区",
- "value": [{
- "n": "全部地区",
- "v": ""
- }, {
- "n": "中国",
- "v": "中国,香港,台湾"
- }, {
- "n": "美国",
- "v": "美国"
- }, {
- "n": "英国",
- "v": "英国"
- }, {
- "n": "其他国家",
- "v": "其他"
- }]
- }, {
- "key": "show_label_type",
- "name": "全部类型",
- "value": [{
- "n": "全部类型",
- "v": ""
- }, {
- "n": "动画",
- "v": "动画"
- }, {
- "n": "儿歌",
- "v": "儿歌"
- }, {
- "n": "玩具",
- "v": "玩具"
- }, {
- "n": "动画电影",
- "v": "电影"
- }, {
- "n": "绘本故事",
- "v": "绘本故事"
- }, {
- "n": "真人",
- "v": "真人"
- }, {
- "n": "少儿综艺",
- "v": "少儿综艺"
- }, {
- "n": "亲子",
- "v": "亲子"
- }, {
- "n": "探索纪实",
- "v": "探索纪实"
- }, {
- "n": "音频",
- "v": "音频"
- }]
- }, {
- "key": "child_tags",
- "name": "全部分类",
- "value": [{
- "n": "全部分类",
- "v": ""
- }, {
- "n": "益智",
- "v": "益智"
- }, {
- "n": "冒险",
- "v": "冒险"
- }, {
- "n": "幽默",
- "v": "幽默"
- }, {
- "n": "机甲",
- "v": "机甲"
- }, {
- "n": "公主魔法",
- "v": "公主,魔法"
- }, {
- "n": "交通工具",
- "v": "交通工具"
- }, {
- "n": "恐龙",
- "v": "恐龙"
- }, {
- "n": "动物",
- "v": "动物"
- }, {
- "n": "励志",
- "v": "励志"
- }, {
- "n": "友情",
- "v": "友情"
- }, {
- "n": "战斗",
- "v": "战斗"
- }, {
- "n": "校园",
- "v": "校园"
- }, {
- "n": "正义",
- "v": "正义"
- }, {
- "n": "热血",
- "v": "热血"
- }, {
- "n": "科幻",
- "v": "科幻"
- }, {
- "n": "童话",
- "v": "童话"
- }, {
- "n": "运动",
- "v": "运动"
- }, {
- "n": "专注力",
- "v": "专注力"
- }, {
- "n": "创造力",
- "v": "创造力"
- }, {
- "n": "想象力",
- "v": "想象力"
- }, {
- "n": "科普",
- "v": "科普"
- }, {
- "n": "情商",
- "v": "情商"
- }, {
- "n": "思维逻辑",
- "v": "思维逻辑"
- }, {
- "n": "兴趣培养",
- "v": "兴趣培养"
- }, {
- "n": "语文",
- "v": "语文"
- }, {
- "n": "英语",
- "v": "英语"
- }, {
- "n": "数学",
- "v": "数学"
- }, {
- "n": "课程辅导",
- "v": "课程辅导"
- }]
- }, {
- "key": "age",
- "name": "全部年龄",
- "value": [{
- "n": "全部年龄",
- "v": ""
- }, {
- "n": "0-2岁",
- "v": "0-2"
- }, {
- "n": "3-4岁",
- "v": "3-4"
- }, {
- "n": "5-6岁",
- "v": "5-6"
- }, {
- "n": "7岁以上",
- "v": "7-"
- }]
- }, {
- "key": "pay_type",
- "name": "付费类型",
- "value": [{
- "n": "付费类型",
- "v": ""
- }, {
- "n": "免费",
- "v": "0"
- }, {
- "n": "付费",
- "v": "1"
- }, {
- "n": "VIP",
- "v": "2"
- }]
- }, {
- "key": "sort",
- "name": "综合排序",
- "value": [{
- "n": "综合排序",
- "v": ""
- }, {
- "n": "最新上线",
- "v": "1"
- }, {
- "n": "最多播放",
- "v": "2"
- }, {
- "n": "最多评论",
- "v": "4"
- }, {
- "n": "最多收藏",
- "v": "5"
- }]
- }],
- "纪录片": [{
- "key": "tags",
- "name": "全部类型",
- "value": [{
- "n": "全部类型",
- "v": ""
- }, {
- "n": "美食",
- "v": "美食"
- }, {
- "n": "自然",
- "v": "自然"
- }, {
- "n": "历史",
- "v": "历史"
- }, {
- "n": "探险",
- "v": "探险"
- }, {
- "n": "军事",
- "v": "军事"
- }, {
- "n": "人物",
- "v": "人物"
- }, {
- "n": "宇宙",
- "v": "宇宙"
- }, {
- "n": "刑侦",
- "v": "刑侦"
- }, {
- "n": "社会",
- "v": "社会"
- }, {
- "n": "科技",
- "v": "科技"
- }, {
- "n": "旅游",
- "v": "旅游"
- }]
- }, {
- "key": "company",
- "name": "全部出品",
- "value": [{
- "n": "全部出品",
- "v": ""
- }, {
- "n": "BBC",
- "v": "bbc,british"
- }, {
- "n": "央视",
- "v": "央视,中央电视台,cctv,中国广播电影电视节目交易中心"
- }, {
- "n": "国家地理",
- "v": "国家地理"
- }, {
- "n": "Love Nature",
- "v": "love nature"
- }, {
- "n": "LGI",
- "v": "looking"
- }, {
- "n": "A&E",
- "v": "ae"
- }, {
- "n": "OTF",
- "v": "fence"
- }]
- }, {
- "key": "year",
- "name": "全部年份",
- "value": [{
- "n": "全部年份",
- "v": ""
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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-2011",
- "v": "2011-2014"
- }, {
- "n": "更早",
- "v": "-2010"
- }]
- }, {
- "key": "pay_type",
- "name": "付费类型",
- "value": [{
- "n": "付费类型",
- "v": ""
- }, {
- "n": "免费",
- "v": "0"
- }, {
- "n": "会员",
- "v": "2"
- }]
- }, {
- "key": "sort",
- "name": "热度最高",
- "value": [{
- "n": "热度最高",
- "v": ""
- }, {
- "n": "综合排序",
- "v": "0"
- }, {
- "n": "最新上线",
- "v": "1"
- }, {
- "n": "最好评",
- "v": "3"
- }, {
- "n": "最多收藏",
- "v": "5"
- }]
- }],
- "文化": [{
- "key": "tags",
- "name": "全部类型",
- "value": [{
- "n": "全部类型",
- "v": ""
- }, {
- "n": "谈话",
- "v": "谈话"
- }, {
- "n": "脱口秀",
- "v": "脱口秀"
- }, {
- "n": "访谈",
- "v": "访谈"
- }, {
- "n": "讲座论坛",
- "v": "讲座论坛"
- }, {
- "n": "戏曲曲艺",
- "v": "戏曲,曲艺"
- }, {
- "n": "舞台剧",
- "v": "舞台剧"
- }, {
- "n": "文学",
- "v": "文学"
- }, {
- "n": "国学",
- "v": "国学"
- }, {
- "n": "艺术",
- "v": "艺术"
- }, {
- "n": "培训课程",
- "v": "培训课程"
- }, {
- "n": "有声书",
- "v": "有声书"
- }]
- }, {
- "key": "people",
- "name": "文化大咖",
- "value": [{
- "n": "文化大咖",
- "v": ""
- }, {
- "n": "窦文涛",
- "v": "窦文涛"
- }, {
- "n": "马未都",
- "v": "马未都"
- }, {
- "n": "白岩松",
- "v": "白岩松"
- }, {
- "n": "梅毅",
- "v": "梅毅"
- }, {
- "n": "陈鲁豫",
- "v": "陈鲁豫"
- }, {
- "n": "樊登",
- "v": "樊登"
- }, {
- "n": "罗振宇",
- "v": "罗振宇"
- }, {
- "n": "蒋方舟",
- "v": "蒋方舟"
- }, {
- "n": "其他",
- "v": "其他"
- }]
- }, {
- "key": "year",
- "name": "全部年份",
- "value": [{
- "n": "全部年份",
- "v": ""
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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-2011",
- "v": "2011-2014"
- }, {
- "n": "更早",
- "v": "-2010"
- }]
- }, {
- "key": "pay_type",
- "name": "付费类型",
- "value": [{
- "n": "付费类型",
- "v": ""
- }, {
- "n": "免费",
- "v": "0"
- }, {
- "n": "会员",
- "v": "2"
- }]
- }, {
- "key": "sort",
- "name": "热度最高",
- "value": [{
- "n": "热度最高",
- "v": ""
- }, {
- "n": "综合排序",
- "v": "0"
- }, {
- "n": "最新上线",
- "v": "1"
- }, {
- "n": "最好评",
- "v": "3"
- }, {
- "n": "最多收藏",
- "v": "5"
- }]
- }],
- "亲子": [{
- "key": "qinzi_genre",
- "name": "全部类型",
- "value": [{
- "n": "全部类型",
- "v": ""
- }, {
- "n": "孕产",
- "v": "孕产"
- }, {
- "n": "育儿知识",
- "v": "育儿知识,育儿达人,育儿专家,爸爸育儿,隔代育儿,育儿明星"
- }, {
- "n": "好物种草",
- "v": "母婴用品,测评,母婴用品种草"
- }, {
- "n": "美食",
- "v": "儿童美食,辅食,孕期饮食"
- }, {
- "n": "手工DIY",
- "v": "手工diy"
- }, {
- "n": "教育观念",
- "v": "教育观念"
- }, {
- "n": "亲子综艺",
- "v": "亲子综艺"
- }, {
- "n": "亲子互动",
- "v": "亲子旅游,亲子游戏,亲子阅读,玩具,早教,启蒙"
- }, {
- "n": "萌娃",
- "v": "萌娃"
- }, {
- "n": "搞笑",
- "v": "搞笑"
- }, {
- "n": "美妆",
- "v": "美妆"
- }]
- }, {
- "key": "pregnancy_stage",
- "name": "全部阶段",
- "value": [{
- "n": "全部阶段",
- "v": ""
- }, {
- "n": "备孕",
- "v": "备孕"
- }, {
- "n": "孕早期",
- "v": "孕早"
- }, {
- "n": "孕中期",
- "v": "孕中"
- }, {
- "n": "孕晚期",
- "v": "孕晚"
- }]
- }, {
- "key": "show_label_baby_age",
- "name": "全部分龄",
- "value": [{
- "n": "全部分龄",
- "v": ""
- }, {
- "n": "0-1岁",
- "v": "0-1"
- }, {
- "n": "1-3岁",
- "v": "1-3"
- }, {
- "n": "3-6岁",
- "v": "3-6"
- }, {
- "n": "6岁+",
- "v": "6-"
- }]
- }, {
- "key": "pay_type",
- "name": "全部",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "免费",
- "v": "0"
- }, {
- "n": "会员免费",
- "v": "2"
- }]
- }, {
- "key": "sort",
- "name": "热度最高",
- "value": [{
- "n": "热度最高",
- "v": ""
- }, {
- "n": "综合排序",
- "v": "0"
- }, {
- "n": "最新上线",
- "v": "1"
- }, {
- "n": "最多播放",
- "v": "2"
- }, {
- "n": "最多评论",
- "v": "3"
- }, {
- "n": "最多收藏",
- "v": "5"
- }]
- }],
- "教育": [{
- "key": "tags",
- "name": "全部类型",
- "value": [{
- "n": "全部类型",
- "v": ""
- }, {
- "n": "公开课",
- "v": "公开课"
- }, {
- "n": "名人名嘴",
- "v": "名人名嘴"
- }, {
- "n": "文化",
- "v": "文化"
- }, {
- "n": "艺术",
- "v": "艺术"
- }, {
- "n": "伦理社会",
- "v": "伦理社会"
- }, {
- "n": "理工",
- "v": "理工"
- }, {
- "n": "历史",
- "v": "历史"
- }, {
- "n": "心理学",
- "v": "心理学"
- }, {
- "n": "经济",
- "v": "经济"
- }, {
- "n": "管理学",
- "v": "管理学"
- }, {
- "n": "外语",
- "v": "外语"
- }, {
- "n": "法律",
- "v": "法律"
- }, {
- "n": "计算机",
- "v": "计算机"
- }, {
- "n": "哲学",
- "v": "哲学"
- }, {
- "n": "职业培训",
- "v": "职业培训"
- }, {
- "n": "家庭教育",
- "v": "家庭教育"
- }]
- }, {
- "key": "company",
- "name": "全部出品",
- "value": [{
- "n": "全部出品",
- "v": ""
- }, {
- "n": "TED",
- "v": "ted"
- }, {
- "n": "耶鲁大学",
- "v": "耶鲁大学"
- }, {
- "n": "哈佛大学",
- "v": "哈佛大学"
- }, {
- "n": "斯坦福大学",
- "v": "斯坦福大学"
- }, {
- "n": "麻省理工学院",
- "v": "麻省理工学院"
- }]
- }, {
- "key": "pay_type",
- "name": "全部节目",
- "value": [{
- "n": "全部节目",
- "v": ""
- }, {
- "n": "免费",
- "v": "0"
- }, {
- "n": "付费",
- "v": "1"
- }, {
- "n": "VIP",
- "v": "2"
- }]
- }, {
- "key": "sort",
- "name": "综合排序",
- "value": [{
- "n": "综合排序",
- "v": ""
- }, {
- "n": "最多播放",
- "v": "2"
- }, {
- "n": "最多收藏",
- "v": "5"
- }, {
- "n": "最好评",
- "v": "3"
- }, {
- "n": "最新上线",
- "v": "1"
- }]
- }],
- "搞笑": [{
- "key": "division",
- "name": "全部专区",
- "value": [{
- "n": "全部专区",
- "v": ""
- }, {
- "n": "1080P",
- "v": "3"
- }, {
- "n": "独播",
- "v": "6"
- }, {
- "n": "免费",
- "v": "5"
- }]
- }, {
- "key": "sort",
- "name": "综合排序",
- "value": [{
- "n": "综合排序",
- "v": ""
- }, {
- "n": "最多播放",
- "v": "2"
- }, {
- "n": "最好评",
- "v": "3"
- }, {
- "n": "最新上线",
- "v": "1"
- }]
- }],
- "生活": [{
- "key": "division",
- "name": "全部专区",
- "value": [{
- "n": "全部专区",
- "v": ""
- }, {
- "n": "1080P",
- "v": "3"
- }, {
- "n": "独播",
- "v": "6"
- }, {
- "n": "VIP",
- "v": "4"
- }, {
- "n": "免费",
- "v": "5"
- }]
- }, {
- "key": "sort",
- "name": "综合排序",
- "value": [{
- "n": "综合排序",
- "v": ""
- }, {
- "n": "最多播放",
- "v": "2"
- }, {
- "n": "最好评",
- "v": "3"
- }, {
- "n": "最新上线",
- "v": "1"
- }]
- }],
- "体育": [{
- "key": "division",
- "name": "全部专区",
- "value": [{
- "n": "全部专区",
- "v": ""
- }, {
- "n": "1080P",
- "v": "3"
- }, {
- "n": "独播",
- "v": "6"
- }, {
- "n": "VIP",
- "v": "4"
- }, {
- "n": "免费",
- "v": "5"
- }]
- }, {
- "key": "tags",
- "name": "全部类型",
- "value": [{
- "n": "全部类型",
- "v": ""
- }, {
- "n": "篮球",
- "v": "篮球"
- }, {
- "n": "足球",
- "v": "足球"
- }, {
- "n": "台球",
- "v": "台球"
- }, {
- "n": "CBA",
- "v": "CBA"
- }, {
- "n": "钓鱼",
- "v": "钓鱼"
- }]
- }, {
- "key": "sort",
- "name": "综合排序",
- "value": [{
- "n": "综合排序",
- "v": ""
- }, {
- "n": "最多播放",
- "v": "2"
- }, {
- "n": "最好评",
- "v": "3"
- }, {
- "n": "最新上线",
- "v": "1"
- }]
- }],
- "音乐": [{
- "key": "division",
- "name": "全部专区",
- "value": [{
- "n": "全部专区",
- "v": ""
- }, {
- "n": "1080P",
- "v": "3"
- }, {
- "n": "独播",
- "v": "6"
- }, {
- "n": "免费",
- "v": "5"
- }]
- }, {
- "key": "main_area",
- "name": "全部地区",
- "value": [{
- "n": "全部地区",
- "v": ""
- }, {
- "n": "中国",
- "v": "中国"
- }, {
- "n": "中国台湾",
- "v": "中国台湾"
- }, {
- "n": "中国香港",
- "v": "中国香港"
- }, {
- "n": "美国",
- "v": "美国"
- }, {
- "n": "其他",
- "v": "其他"
- }]
- }, {
- "key": "music_show_type",
- "name": "全部类型",
- "value": [{
- "n": "全部类型",
- "v": ""
- }, {
- "n": "演唱会",
- "v": "演唱会"
- }, {
- "n": "live现场",
- "v": "live现场"
- }, {
- "n": "颁奖典礼",
- "v": "颁奖典礼"
- }, {
- "n": "舞蹈",
- "v": "舞蹈"
- }, {
- "n": "影视原声",
- "v": "影视原声"
- }, {
- "n": "音乐达人",
- "v": "音乐达人"
- }, {
- "n": "音乐教学",
- "v": "音乐教学"
- }, {
- "n": "音乐纪录片",
- "v": "音乐纪录片"
- }, {
- "n": "音乐mv",
- "v": "音乐mv"
- }, {
- "n": "音乐自制",
- "v": "音乐自制"
- }]
- }, {
- "key": "sort",
- "name": "综合排序",
- "value": [{
- "n": "综合排序",
- "v": ""
- }, {
- "n": "最多播放",
- "v": "2"
- }, {
- "n": "最好评",
- "v": "3"
- }, {
- "n": "最新上线",
- "v": "1"
- }]
- }],
- "游戏": [{
- "key": "division",
- "name": "全部专区",
- "value": [{
- "n": "全部专区",
- "v": ""
- }, {
- "n": "1080P",
- "v": "3"
- }, {
- "n": "独播",
- "v": "6"
- }, {
- "n": "VIP",
- "v": "4"
- }, {
- "n": "免费",
- "v": "5"
- }]
- }, {
- "key": "game_brand",
- "name": "全部节目",
- "value": [{
- "n": "全部节目",
- "v": ""
- }, {
- "n": "王者荣耀",
- "v": "王者荣耀"
- }, {
- "n": "和平精英",
- "v": "和平精英"
- }, {
- "n": "绝地求生",
- "v": "绝地求生"
- }, {
- "n": "迷你世界",
- "v": "迷你世界"
- }, {
- "n": "我的世界",
- "v": "我的世界"
- }, {
- "n": "植物大战僵尸",
- "v": "植物大战僵尸"
- }, {
- "n": "方舟生存进化",
- "v": "方舟生存进化"
- }, {
- "n": "第五人格",
- "v": "第五人格"
- }, {
- "n": "猫和老鼠",
- "v": "猫和老鼠"
- }, {
- "n": "香肠派对",
- "v": "香肠派对"
- }, {
- "n": "穿越火线",
- "v": "穿越火线"
- }, {
- "n": "英雄联盟",
- "v": "英雄联盟"
- }]
- }, {
- "key": "tags",
- "name": "全部类型",
- "value": [{
- "n": "全部类型",
- "v": ""
- }, {
- "n": "资讯",
- "v": "资讯"
- }, {
- "n": "解说",
- "v": "解说"
- }, {
- "n": "主播",
- "v": "主播"
- }, {
- "n": "沙盒",
- "v": "沙盒"
- }, {
- "n": "益智",
- "v": "益智"
- }, {
- "n": "生存",
- "v": "生存"
- }, {
- "n": "电子竞技",
- "v": "电子竞技"
- }, {
- "n": "单机主机",
- "v": "单机主机"
- }, {
- "n": "真人秀",
- "v": "真人秀"
- }, {
- "n": "动画",
- "v": "动画"
- }, {
- "n": "盘点",
- "v": "盘点"
- }, {
- "n": "游戏文化",
- "v": "游戏文化"
- }, {
- "n": "游戏节目",
- "v": "游戏节目"
- }, {
- "n": "评测",
- "v": "评测"
- }, {
- "n": "射击",
- "v": "射击"
- }, {
- "n": "策略",
- "v": "策略"
- }, {
- "n": "冒险",
- "v": "冒险"
- }, {
- "n": "即时战略",
- "v": "即时战略"
- }, {
- "n": "卡牌",
- "v": "卡牌"
- }, {
- "n": "角色扮演",
- "v": "角色>扮演"
- }]
- }, {
- "key": "sort",
- "name": "综合排序",
- "value": [{
- "n": "综合排序",
- "v": ""
- }, {
- "n": "最多播放",
- "v": "2"
- }, {
- "n": "最好评",
- "v": "3"
- }, {
- "n": "最新上线",
- "v": "1"
- }]
- }]
- },
- headers: {
- 'User-Agent': 'PC_UA',
- 'Cookie': 'cna=VvNvGX3e0ywCAavVEXlnA2bg; __ysuid=1626676228345Rl1; __ayft=1652434048647; __arycid=dm-1-00; __arcms=dm-1-00; __ayvstp=85; __arpvid=1667204023100cWWdgM-1667204023112; __ayscnt=10; __aypstp=60; isg=BBwcqxvvk3BxkWQGugbLpUSf7TrOlcC_U7GAj_YdfYfvQbzLHqYGT4Hgp6m5TvgX; tfstk=c3JOByYUH20ilVucLOhh0pCtE40lZfGc-PjLHLLfuX7SWNyAiQvkeMBsIw7PWDC..; l=eBQguS-PjdJFGJT-BOfwourza77OSIRA_uPzaNbMiOCPOb1B5UxfW6yHp4T6C3GVhsGJR3rp2umHBeYBqQd-nxvOF8qmSVDmn',
- 'Referer': 'https://www.youku.com',
- },
- timeout: 5000,
- class_name: '电视剧&电影&综艺&动漫&少儿&纪录片&文化&亲子&教育&搞笑&生活&体育&音乐&游戏',
- class_url: '电视剧&电影&综艺&动漫&少儿&纪录片&文化&亲子&教育&搞笑&生活&体育&音乐&游戏',
- limit: 20,
- play_parse: true,
- lazy: $js.toString(() => {
- try {
- let api = "" + input.split("?")[0];
- console.log(api);
- let response = fetch(api, {
- method: 'get',
- headers: {
- 'User-Agent': 'okhttp/3.14.9',
- 'Content-Type': 'application/x-www-form-urlencoded'
- }
- });
- let bata = JSON.parse(response);
- if (bata.url.includes("http")) {
- input = {
- parse: 0,
- url: bata.url,
- jx: 0,
- danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0]
- };
- } else {
- input = {
- parse: 0,
- url: input.split("?")[0],
- jx: 1,
- danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0]
- };
- }
- } catch {
- input = {
- parse: 0,
- url: input.split("?")[0],
- jx: 1,
- danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0]
- };
- }
- }),
- 一级: $js.toString(() => {
- let d = [];
- MY_FL.type = MY_CATE;
- let fl = stringify(MY_FL);
- fl = encodeUrl(fl);
- input = input.split("{")[0] + fl;
- if (MY_PAGE > 1) {
- let old_session = getItem("yk_session_" + MY_CATE, "{}");
- if (MY_PAGE === 2) {
- input = input.replace("optionRefresh=1", "session=" + encodeUrl(old_session))
- } else {
- input = input.replace("optionRefresh=1", "session=" + encodeUrl(old_session))
- }
- }
- let html = fetch(input, fetch_params);
- try {
- html = JSON.parse(html);
- let lists = html.data.filterData.listData;
- let session = html.data.filterData.session;
- session = stringify(session);
- if (session !== getItem("yk_session_" + MY_CATE, "{}")) {
- setItem("yk_session_" + MY_CATE, session)
- }
- lists.forEach(function(it) {
- let vid;
- if (it.videoLink.includes("id_")) {
- vid = it.videoLink.split("id_")[1].split(".html")[0]
- } else {
- vid = "msearch:"
- }
- d.push({
- title: it.title,
- img: it.img,
- desc: it.summary,
- url: "https://search.youku.com/api/search?appScene=show_episode&showIds=" + vid,
- content: it.subTitle
- })
- })
- } catch (e) {
- log("一级列表解析发生错误:" + e.message)
- }
- setResult(d);
- }),
- 二级: $js.toString(() => {
- var d = [];
- VOD = {};
- let html = request(input);
- let json = JSON.parse(html);
- if (/keyword/.test(input)) {
- input = "https://search.youku.com/api/search?appScene=show_episode&showIds=" + json.pageComponentList[0].commonData.showId;
- json = JSON.parse(fetch(MY_URL, fetch_params))
- }
- let video_lists = json.serisesList;
- var name = json.sourceName;
- if (/优酷/.test(name) && video_lists.length > 0) {
- let ourl = "https://v.youku.com/v_show/id_" + video_lists[0].videoId + ".html";
- let _img = video_lists[0].thumbUrl;
- let html = fetch(ourl, {
- headers: {
- Referer: "https://v.youku.com/",
- "User-Agent": PC_UA
- }
- });
- let json = /__INITIAL_DATA__/.test(html) ? html.split("window.__INITIAL_DATA__ =")[1].split(";")[0] : "{}";
- if (json === "{}") {
- log("触发了优酷人机验证");
- VOD.vod_remarks = ourl;
- VOD.vod_pic = _img;
- VOD.vod_name = video_lists[0].title.replace(/(\d+)/g, "");
- VOD.vod_content = "触发了优酷人机验证,本次未获取详情,但不影响播放(" + ourl + ")"
- } else {
- try {
- json = JSON.parse(json);
- let data = json.data.data;
- let data_extra = data.data.extra;
- let img = data_extra.showImgV;
- let model = json.data.model;
- let m = model.detail.data.nodes[0].nodes[0].nodes[0].data;
- let _type = m.showGenre;
- let _desc = m.updateInfo || m.subtitle;
- let JJ = m.desc;
- let _title = m.introTitle;
- VOD.vod_pic = img;
- VOD.vod_name = _title;
- VOD.vod_type = _type;
- VOD.vod_remarks = _desc;
- VOD.vod_content = JJ
- } catch (e) {
- log("海报渲染发生错误:" + e.message);
- print(json);
- VOD.vod_remarks = name
- }
- }
- }
- if (!/优酷/.test(name)) {
- VOD.vod_content = "非自家播放源,暂无视频简介及海报";
- VOD.vod_remarks = name
- }
-
- function adhead(url) {
- return urlencode(url)
- }
-
- play_url = play_url.replace("&play_url=", "&type=json&play_url=");
- video_lists.forEach(function(it) {
- let url = "https://v.youku.com/v_show/id_" + it.videoId + ".html";
- if (it.thumbUrl) {
- d.push({
- desc: it.showVideoStage ? it.showVideoStage.replace("期", "集") : it.displayName,
- pic_url: it.thumbUrl,
- title: it.title,
- url: play_url + adhead(url)
- })
- } else if (name !== "优酷") {
- d.push({
- title: it.displayName ? it.displayName : it.title,
- url: play_url + adhead(it.url)
- })
- }
- });
- VOD.vod_play_from = name;
- VOD.vod_play_url = d.map(function(it) {
- return it.title + "$" + it.url
- })
- .join("#");
- }),
-
- 搜索: $js.toString(() => {
- var d = [];
- let html = request(input);
- let json = JSON.parse(html);
- json.pageComponentList.forEach(function(it) {
- if (it.hasOwnProperty("commonData")) {
- it = it.commonData;
- d.push({
- title: it.titleDTO.displayName,
- img: it.posterDTO.vThumbUrl,
- desc: it.stripeBottom,
- content: it.updateNotice + " " + it.feature,
- url: "https://search.youku.com/api/search?appScene=show_episode&showIds=" + it.showId + "&appCaller=h5"
- })
- }
- });
- setResult(d)
- }),
-}
\ No newline at end of file
diff --git a/潇洒/js/剧圈圈.js b/潇洒/js/剧圈圈.js
deleted file mode 100644
index 94036de..0000000
--- a/潇洒/js/剧圈圈.js
+++ /dev/null
@@ -1,12 +0,0 @@
-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(2):lt(8);a&&Text;a&&href;.*/(.*?)\.html',
- cate_exclude: '今日更新|热榜',
-}
\ No newline at end of file
diff --git a/潇洒/js/动漫岛.js b/潇洒/js/动漫岛.js
deleted file mode 100644
index 1ffcc71..0000000
--- a/潇洒/js/动漫岛.js
+++ /dev/null
@@ -1,1100 +0,0 @@
-var rule = {
- title: '动漫岛',
- // host:'http://www.dmd85.com',
- // host:'http://www.88dmw.com',
- host: 'http://www.dmand5.com',
- // url:'/vod-list-id-fyclass-pg-fypage-order--by-{by}-class-{class}-year-{year}-letter--area--lang-.html',
- url: '/vod-list-id-fyclass-pg-fypage-order-fyfilter-area--lang-.html',
- filterable: 1, //是否启用分类筛选,
- filter_url: '-by-{{fl.by}}-class-{{fl.class}}-year-{{fl.year}}-letter-{{fl.letter}}',
- filter: {
- "1": [{
- "key": "class",
- "name": "剧情",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "冒险",
- "v": "1"
- }, {
- "n": "热血",
- "v": "2"
- }, {
- "n": "奇幻",
- "v": "3"
- }, {
- "n": "恋爱",
- "v": "4"
- }, {
- "n": "校园",
- "v": "5"
- }, {
- "n": "后宫",
- "v": "6"
- }, {
- "n": "搞笑",
- "v": "7"
- }, {
- "n": "青春",
- "v": "8"
- }, {
- "n": "百合",
- "v": "9"
- }, {
- "n": "科幻",
- "v": "14"
- }, {
- "n": "推理",
- "v": "13"
- }, {
- "n": "魔法",
- "v": "12"
- }, {
- "n": "神魔",
- "v": "11"
- }, {
- "n": "治愈",
- "v": "10"
- }, {
- "n": "竞技",
- "v": "59"
- }, {
- "n": "悬疑",
- "v": "60"
- }, {
- "n": "战争",
- "v": "62"
- }, {
- "n": "萝莉",
- "v": "63"
- }, {
- "n": "魔幻",
- "v": "64"
- }, {
- "n": "战斗",
- "v": "65"
- }, {
- "n": "歌舞",
- "v": "98"
- }, {
- "n": "历史",
- "v": "99"
- }, {
- "n": "励志",
- "v": "108"
- }, {
- "n": "偶像",
- "v": "118"
- }, {
- "n": "职场",
- "v": "121"
- }]
- }, {
- "key": "year",
- "name": "年份",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }, {
- "n": "2009",
- "v": "2009"
- }, {
- "n": "2008",
- "v": "2008"
- }, {
- "n": "2007",
- "v": "2007"
- }, {
- "n": "2006",
- "v": "2006"
- }, {
- "n": "2005",
- "v": "2005"
- }, {
- "n": "2004",
- "v": "2004"
- }, {
- "n": "2003",
- "v": "2003"
- }, {
- "n": "2002",
- "v": "2002"
- }, {
- "n": "2001",
- "v": "2001"
- }, {
- "n": "2000",
- "v": "2000"
- }]
- }, {
- "key": "letter",
- "name": "字母",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "A",
- "v": "A"
- }, {
- "n": "B",
- "v": "B"
- }, {
- "n": "C",
- "v": "C"
- }, {
- "n": "D",
- "v": "D"
- }, {
- "n": "E",
- "v": "E"
- }, {
- "n": "F",
- "v": "F"
- }, {
- "n": "G",
- "v": "G"
- }, {
- "n": "H",
- "v": "H"
- }, {
- "n": "I",
- "v": "I"
- }, {
- "n": "J",
- "v": "J"
- }, {
- "n": "K",
- "v": "K"
- }, {
- "n": "L",
- "v": "L"
- }, {
- "n": "M",
- "v": "M"
- }, {
- "n": "N",
- "v": "N"
- }, {
- "n": "O",
- "v": "O"
- }, {
- "n": "P",
- "v": "P"
- }, {
- "n": "Q",
- "v": "Q"
- }, {
- "n": "R",
- "v": "R"
- }, {
- "n": "S",
- "v": "S"
- }, {
- "n": "T",
- "v": "T"
- }, {
- "n": "U",
- "v": "U"
- }, {
- "n": "V",
- "v": "V"
- }, {
- "n": "W",
- "v": "W"
- }, {
- "n": "X",
- "v": "X"
- }, {
- "n": "Y",
- "v": "Y"
- }, {
- "n": "Z",
- "v": "Z"
- }]
- }, {
- "key": "by",
- "name": "排序",
- "value": [{
- "n": "更新",
- "v": "time"
- }, {
- "n": "得分",
- "v": "score"
- }, {
- "n": "总排行",
- "v": "hits"
- }]
- }],
- "3": [{
- "key": "class",
- "name": "剧情",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "冒险",
- "v": "36"
- }, {
- "n": "热血",
- "v": "37"
- }, {
- "n": "奇幻",
- "v": "38"
- }, {
- "n": "恋爱",
- "v": "39"
- }, {
- "n": "恋爱",
- "v": "40"
- }, {
- "n": "恋爱",
- "v": "40"
- }, {
- "n": "搞笑",
- "v": "42"
- }, {
- "n": "治愈",
- "v": "43"
- }, {
- "n": "神魔",
- "v": "44"
- }, {
- "n": "魔法",
- "v": "45"
- }, {
- "n": "百合",
- "v": "46"
- }, {
- "n": "推理",
- "v": "47"
- }, {
- "n": "科幻",
- "v": "48"
- }, {
- "n": "竞技",
- "v": "49"
- }, {
- "n": "悬疑",
- "v": "66"
- }, {
- "n": "战争",
- "v": "68"
- }, {
- "n": "萝莉",
- "v": "69"
- }, {
- "n": "魔幻",
- "v": "70"
- }, {
- "n": "战斗",
- "v": "71"
- }, {
- "n": "青春",
- "v": "72"
- }, {
- "n": "历史",
- "v": "100"
- }, {
- "n": "歌舞",
- "v": "101"
- }, {
- "n": "恐怖",
- "v": "104"
- }, {
- "n": "职场",
- "v": "107"
- }, {
- "n": "励志",
- "v": "109"
- }, {
- "n": "偶像",
- "v": "119"
- }]
- }, {
- "key": "year",
- "name": "年份",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }, {
- "n": "2009",
- "v": "2009"
- }, {
- "n": "2008",
- "v": "2008"
- }, {
- "n": "2007",
- "v": "2007"
- }, {
- "n": "2006",
- "v": "2006"
- }, {
- "n": "2005",
- "v": "2005"
- }, {
- "n": "2004",
- "v": "2004"
- }, {
- "n": "2003",
- "v": "2003"
- }, {
- "n": "2002",
- "v": "2002"
- }, {
- "n": "2001",
- "v": "2001"
- }, {
- "n": "2000",
- "v": "2000"
- }]
- }, {
- "key": "letter",
- "name": "字母",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "A",
- "v": "A"
- }, {
- "n": "B",
- "v": "B"
- }, {
- "n": "C",
- "v": "C"
- }, {
- "n": "D",
- "v": "D"
- }, {
- "n": "E",
- "v": "E"
- }, {
- "n": "F",
- "v": "F"
- }, {
- "n": "G",
- "v": "G"
- }, {
- "n": "H",
- "v": "H"
- }, {
- "n": "I",
- "v": "I"
- }, {
- "n": "J",
- "v": "J"
- }, {
- "n": "K",
- "v": "K"
- }, {
- "n": "L",
- "v": "L"
- }, {
- "n": "M",
- "v": "M"
- }, {
- "n": "N",
- "v": "N"
- }, {
- "n": "O",
- "v": "O"
- }, {
- "n": "P",
- "v": "P"
- }, {
- "n": "Q",
- "v": "Q"
- }, {
- "n": "R",
- "v": "R"
- }, {
- "n": "S",
- "v": "S"
- }, {
- "n": "T",
- "v": "T"
- }, {
- "n": "U",
- "v": "U"
- }, {
- "n": "V",
- "v": "V"
- }, {
- "n": "W",
- "v": "W"
- }, {
- "n": "X",
- "v": "X"
- }, {
- "n": "Y",
- "v": "Y"
- }, {
- "n": "Z",
- "v": "Z"
- }]
- }, {
- "key": "by",
- "name": "排序",
- "value": [{
- "n": "更新",
- "v": "time"
- }, {
- "n": "得分",
- "v": "score"
- }, {
- "n": "总排行",
- "v": "hits"
- }]
- }],
- "4": [{
- "key": "class",
- "name": "剧情",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "冒险",
- "v": "50"
- }, {
- "n": "热血",
- "v": "51"
- }, {
- "n": "武侠",
- "v": "52"
- }, {
- "n": "奇幻",
- "v": "53"
- }, {
- "n": "玄幻",
- "v": "54"
- }, {
- "n": "竞技",
- "v": "55"
- }, {
- "n": "魔幻",
- "v": "56"
- }, {
- "n": "科幻",
- "v": "57"
- }, {
- "n": "恋爱",
- "v": "58"
- }, {
- "n": "历史",
- "v": "73"
- }, {
- "n": "战斗",
- "v": "74"
- }, {
- "n": "搞笑",
- "v": "75"
- }, {
- "n": "神魔",
- "v": "76"
- }, {
- "n": "战争",
- "v": "97"
- }, {
- "n": "古风",
- "v": "111"
- }, {
- "n": "少女",
- "v": "112"
- }, {
- "n": "萝莉",
- "v": "113"
- }, {
- "n": "治愈",
- "v": "114"
- }, {
- "n": "日常",
- "v": "115"
- }, {
- "n": "歌舞",
- "v": "116"
- }, {
- "n": "偶像",
- "v": "120"
- }, {
- "n": "职场",
- "v": "123"
- }, {
- "n": "仙侠",
- "v": "125"
- }]
- }, {
- "key": "year",
- "name": "年份",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }, {
- "n": "2009",
- "v": "2009"
- }, {
- "n": "2008",
- "v": "2008"
- }, {
- "n": "2007",
- "v": "2007"
- }, {
- "n": "2006",
- "v": "2006"
- }, {
- "n": "2005",
- "v": "2005"
- }, {
- "n": "2004",
- "v": "2004"
- }, {
- "n": "2003",
- "v": "2003"
- }, {
- "n": "2002",
- "v": "2002"
- }, {
- "n": "2001",
- "v": "2001"
- }, {
- "n": "2000",
- "v": "2000"
- }]
- }, {
- "key": "letter",
- "name": "字母",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "A",
- "v": "A"
- }, {
- "n": "B",
- "v": "B"
- }, {
- "n": "C",
- "v": "C"
- }, {
- "n": "D",
- "v": "D"
- }, {
- "n": "E",
- "v": "E"
- }, {
- "n": "F",
- "v": "F"
- }, {
- "n": "G",
- "v": "G"
- }, {
- "n": "H",
- "v": "H"
- }, {
- "n": "I",
- "v": "I"
- }, {
- "n": "J",
- "v": "J"
- }, {
- "n": "K",
- "v": "K"
- }, {
- "n": "L",
- "v": "L"
- }, {
- "n": "M",
- "v": "M"
- }, {
- "n": "N",
- "v": "N"
- }, {
- "n": "O",
- "v": "O"
- }, {
- "n": "P",
- "v": "P"
- }, {
- "n": "Q",
- "v": "Q"
- }, {
- "n": "R",
- "v": "R"
- }, {
- "n": "S",
- "v": "S"
- }, {
- "n": "T",
- "v": "T"
- }, {
- "n": "U",
- "v": "U"
- }, {
- "n": "V",
- "v": "V"
- }, {
- "n": "W",
- "v": "W"
- }, {
- "n": "X",
- "v": "X"
- }, {
- "n": "Y",
- "v": "Y"
- }, {
- "n": "Z",
- "v": "Z"
- }]
- }, {
- "key": "by",
- "name": "排序",
- "value": [{
- "n": "更新",
- "v": "time"
- }, {
- "n": "得分",
- "v": "score"
- }, {
- "n": "总排行",
- "v": "hits"
- }]
- }],
- "16": [{
- "key": "class",
- "name": "剧情",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "冒险",
- "v": "77"
- }, {
- "n": "热血",
- "v": "78"
- }, {
- "n": "奇幻",
- "v": "79"
- }, {
- "n": "恋爱",
- "v": "80"
- }, {
- "n": "校园",
- "v": "81"
- }, {
- "n": "后宫",
- "v": "82"
- }, {
- "n": "搞笑",
- "v": "83"
- }, {
- "n": "青春",
- "v": "84"
- }, {
- "n": "百合",
- "v": "85"
- }, {
- "n": "治愈",
- "v": "86"
- }, {
- "n": "神魔",
- "v": "87"
- }, {
- "n": "魔法",
- "v": "88"
- }, {
- "n": "推理",
- "v": "89"
- }, {
- "n": "科幻",
- "v": "90"
- }, {
- "n": "竞技",
- "v": "91"
- }, {
- "n": "悬疑",
- "v": "92"
- }, {
- "n": "战争",
- "v": "93"
- }, {
- "n": "萝莉",
- "v": "94"
- }, {
- "n": "魔幻",
- "v": "95"
- }, {
- "n": "战斗",
- "v": "96"
- }, {
- "n": "历史",
- "v": "102"
- }, {
- "n": "歌舞",
- "v": "103"
- }, {
- "n": "恐怖",
- "v": "105"
- }, {
- "n": "职场",
- "v": "106"
- }, {
- "n": "励志",
- "v": "110"
- }, {
- "n": "偶像",
- "v": "117"
- }, {
- "n": "职场",
- "v": "124"
- }]
- }, {
- "key": "year",
- "name": "年份",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }, {
- "n": "2009",
- "v": "2009"
- }, {
- "n": "2008",
- "v": "2008"
- }, {
- "n": "2007",
- "v": "2007"
- }, {
- "n": "2006",
- "v": "2006"
- }, {
- "n": "2005",
- "v": "2005"
- }, {
- "n": "2004",
- "v": "2004"
- }, {
- "n": "2003",
- "v": "2003"
- }, {
- "n": "2002",
- "v": "2002"
- }, {
- "n": "2001",
- "v": "2001"
- }, {
- "n": "2000",
- "v": "2000"
- }]
- }, {
- "key": "letter",
- "name": "字母",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "A",
- "v": "A"
- }, {
- "n": "B",
- "v": "B"
- }, {
- "n": "C",
- "v": "C"
- }, {
- "n": "D",
- "v": "D"
- }, {
- "n": "E",
- "v": "E"
- }, {
- "n": "F",
- "v": "F"
- }, {
- "n": "G",
- "v": "G"
- }, {
- "n": "H",
- "v": "H"
- }, {
- "n": "I",
- "v": "I"
- }, {
- "n": "J",
- "v": "J"
- }, {
- "n": "K",
- "v": "K"
- }, {
- "n": "L",
- "v": "L"
- }, {
- "n": "M",
- "v": "M"
- }, {
- "n": "N",
- "v": "N"
- }, {
- "n": "O",
- "v": "O"
- }, {
- "n": "P",
- "v": "P"
- }, {
- "n": "Q",
- "v": "Q"
- }, {
- "n": "R",
- "v": "R"
- }, {
- "n": "S",
- "v": "S"
- }, {
- "n": "T",
- "v": "T"
- }, {
- "n": "U",
- "v": "U"
- }, {
- "n": "V",
- "v": "V"
- }, {
- "n": "W",
- "v": "W"
- }, {
- "n": "X",
- "v": "X"
- }, {
- "n": "Y",
- "v": "Y"
- }, {
- "n": "Z",
- "v": "Z"
- }]
- }, {
- "key": "by",
- "name": "排序",
- "value": [{
- "n": "更新",
- "v": "time"
- }, {
- "n": "得分",
- "v": "score"
- }, {
- "n": "总排行",
- "v": "hits"
- }]
- }]
- },
- searchUrl: '/search-pg-fypage-wd-**.html',
- searchable: 2, //是否启用全局搜索,
- quickSearch: 0, //是否启用快速搜索,
- headers: {
- 'User-Agent': 'PC_UA',
- },
- class_parse: '.secNacUl li;a&&Text;a&&href;.*/(\\d+)-1.html',
- play_parse: true,
- lazy: '',
- limit: 6,
- 推荐: '.c1_l_wap_contact li;*;img&&src;.time:eq(0)&&Text;*',
- 一级: '.list3_cn_box .cn_box2;a&&title;.list_pic&&src;.list_20 li:eq(1) span&&Text;a&&href',
- 二级: {
- "title": "h1&&Text;.o_r_contact&&li:eq(0)&&Text",
- "img": ".o_big_img_bg_b img&&src",
- "desc": ".o_r_contact&&li:eq(6)&&Text;.o_r_contact&&li:eq(5)&&Text;.o_r_contact&&li:eq(3)&&Text;.o_r_contact&&li:eq(2)&&Text;.o_r_contact&&li:eq(1)&&Text",
- "content": ".des_box&&Text",
- "tabs": ".from-tabs&&label",
- "lists": ".mn_list_li_movie:eq(#id) li"
- },
- 搜索: '*',
-}
\ No newline at end of file
diff --git a/潇洒/js/动漫巴士.js b/潇洒/js/动漫巴士.js
deleted file mode 100644
index db8ae7b..0000000
--- a/潇洒/js/动漫巴士.js
+++ /dev/null
@@ -1,64 +0,0 @@
-var rule = {
- author: '小可乐/240526/第一版',
- title: '动漫巴士[漫]',
- host: 'http://dm84.site',
- hostJs: 'print(HOST);let html=request(HOST,{headers:{"User-Agent":MOBILE_UA}});let src= jsp.pdfh(html,"ul&&a:eq(0)&&href");print(src);HOST=src',
- headers: {
- 'User-Agent': 'MOBILE_UA'
- },
- 编码: 'utf-8',
- timeout: 5000,
-
- homeUrl: '/',
- url: '/show-fyclass--fyfilter-fypage.html',
- filter_url: '{{fl.by}}-{{fl.class}}--{{fl.year}}',
- detailUrl: '',
- searchUrl: '/s-**---------fypage.html',
- searchable: 1,
- quickSearch: 1,
- filterable: 1,
-
- class_name: '国产动漫&日本动漫&欧美动漫&电影',
- class_url: '1&2&3&4',
- filter_def: {},
-
- proxy_rule: '',
- sniffer: 0,
- isVideo: '',
- play_parse: true,
- parse_url: '',
- lazy: `js:
-let html = request(input);
-let kurl = pdfh(html,'body&&iframe').match(/src="(.*?)"/)[1];
-input= kurl
-`,
-
- limit: 9,
- double: false,
- 推荐: '*',
- //列表;标题;图片;描述;链接;详情(可不写)
- 一级: '.v_list li;a&&title;a&&data-bg;.desc&&Text;a&&href',
- 二级: {
- //名称;类型
- "title": "h1&&Text;meta[name*=class]&&content",
- //图片
- "img": "img&&src",
- //主要描述;年份;地区;演员;导演
- "desc": "meta[name*=update_date]&&content;meta[name*=release_date]&&content;meta[name*=area]&&content;meta[name*=actor]&&content;meta[name*=director]&&content",
- //简介
- "content": "p:eq(-2)&&Text",
- //线路数组
- "tabs": ".tab_control&&li",
- //线路标题
- "tab_text": "body&&Text",
- //播放数组 选集列表
- "lists": ".play_list:eq(#id)&&a",
- //选集标题
- "list_text": "body&&Text",
- //选集链接
- "list_url": "a&&href"
- },
- 搜索: '*',
-
- filter: 'H4sIAAAAAAAAA+2WbUsqQRTH3+/HmNe+0LWn21eJXlgIRU+Q3UBEsLTaCrYtSm9cb2RQ2YOVFUFa9mWcGf0Wjc6cMxPFstDlcgXf7e/39+zo2XPUlEUiZHTMSpGZeJKMksnZWCJBQmQ+NhcXyKt1erQteDk2+1OIsRSZF5quldvZckcLIOmQsqcb9LmurALImPOL5QsqUwAZd3O6TgFmF2+tpy3IJGB2vmvUScDzKmfNxjGcJwHrspVWKQN1EiBrZV55w1WZArynd8Svd+GeEvCzb5VZZoW9XPF97ICp0uPpEDY5GY8t6h6zwlO78Biwx3bYHlCue2n4qPZR00e0j5je1t42fVj7sOEjP9CLS8OPaD9i+mHth00/pP2Q6Qe1H/zYr4mk0S13j9Z2PnVLN1HA0rR4Kdy5Wauxu32VTE0vJfSzvs1RZ10licmFxXjnWGs8ZBH7r+3E+l778AImQkKQnfDbJeq59OYKMgl6Dqv0rYAT2AU877hEf1fgPAlBdoIVa+LdQZ2EIDvBVq95HjMJmN3XWc6BTAK+l8MG9SBTgHUrHsvkoU4CZm6Ze/A8Fei6be5Usa4LmD2U2n9O+MElxMj9re2prY3+z1vr92vlW+e3mT7b9+UW9ee5l+Z54F/Ms/ib0nwt6v8sHfj2POeLdPMc6iQE+eb3nWenyrJrcJ6E/jz3zjxb6XeqCRqqbAwAAA=='
-}
\ No newline at end of file
diff --git a/潇洒/js/动画片大全.js b/潇洒/js/动画片大全.js
deleted file mode 100644
index 696e162..0000000
--- a/潇洒/js/动画片大全.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var rule = {
- title: '动画片大全',
- host: 'https://www.dhpdq2.com/',
- url: 'https://www.dhpdq2.com/katong/fyclass-fypage/',
- searchUrl: '/vodsearch/**----------fypage---/',
- class_parse: '.c_class li;a&&Text;a&&href;.*/(.*?)/',
- searchable: 2,
- quickSearch: 0,
- filterable: 0,
- headers: {
- 'User-Agent': 'MOBILE_UA',
- },
- play_parse: true,
- lazy: '',
- limit: 6,
- 推荐: '.stui-vodlist;li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
- double: true,
- 一级: '.stui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
- 二级: {
- title: 'h1&&Text;.detail_list&&ul:eq(1)&&li&&a:eq(2)&&Text',
- img: '.vodlist_thumb&&data-original',
- desc: '.playinfo&&p:eq(0)&&Text;.playinfo&&p:eq(1)&&Text;.playinfo&&p:eq(2)&&Text;.playinfo&&p:eq(3)&&Text',
- content: '.content:eq(1)',
- tabs: '.relatesdh .title h3',
- lists: '.relatesdh:eq(#id) li',
- },
- 搜索: '*',
-}
\ No newline at end of file
diff --git a/潇洒/js/去看吧.js b/潇洒/js/去看吧.js
deleted file mode 100644
index 81f9121..0000000
--- a/潇洒/js/去看吧.js
+++ /dev/null
@@ -1,1127 +0,0 @@
-muban.vfed.二级.title = 'h1&&Text;.fed-col-md3--span:eq(0)&&Text';
-muban.vfed.二级.desc = '.fed-col-md3:eq(3)&&Text;;;.fed-col-md6:eq(0)&&Text;.fed-col-md6--span:eq(1)&&Text';
-var rule = {
- title: '去看吧',
- 模板: 'vfed',
- host: 'https://www.k9dm.com',
- // url: '/index.php/vod/show/id/fyclass/page/fypage.html',
- url: '/index.php/vod/show/id/fyclassfyfilter.html',
- filterable: 1, //是否启用分类筛选,
- filter_url: '{{fl.area}}{{fl.by}}{{fl.class}}/page/fypage{{fl.year}}',
- filter: {
- "33": [{
- "key": "class",
- "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": "year",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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"
- }]
- }, {
- "key": "by",
- "name": "排序",
- "value": [{
- "n": "时间",
- "v": "/by/time"
- }, {
- "n": "人气",
- "v": "/by/hits"
- }, {
- "n": "评分",
- "v": "/by/score"
- }]
- }],
- "21": [{
- "key": "class",
- "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": "area",
- "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/其它"
- }]
- }, {
- "key": "year",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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"
- }]
- }, {
- "key": "by",
- "name": "排序",
- "value": [{
- "n": "时间",
- "v": "/by/time"
- }, {
- "n": "人气",
- "v": "/by/hits"
- }, {
- "n": "评分",
- "v": "/by/score"
- }]
- }],
- "50": [{
- "key": "class",
- "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": "area",
- "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/其它"
- }]
- }, {
- "key": "year",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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"
- }]
- }, {
- "key": "by",
- "name": "排序",
- "value": [{
- "n": "时间",
- "v": "/by/time"
- }, {
- "n": "人气",
- "v": "/by/hits"
- }, {
- "n": "评分",
- "v": "/by/score"
- }]
- }],
- "24": [{
- "key": "class",
- "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": "area",
- "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/其它"
- }]
- }, {
- "key": "year",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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"
- }]
- }, {
- "key": "by",
- "name": "排序",
- "value": [{
- "n": "时间",
- "v": "/by/time"
- }, {
- "n": "人气",
- "v": "/by/hits"
- }, {
- "n": "评分",
- "v": "/by/score"
- }]
- }],
- "22": [{
- "key": "class",
- "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": "area",
- "name": "地区",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "日本",
- "v": "/area/日本"
- }, {
- "n": "欧美",
- "v": "/area/欧美"
- }, {
- "n": "其他",
- "v": "/area/其他"
- }]
- }, {
- "key": "year",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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"
- }]
- }, {
- "key": "by",
- "name": "排序",
- "value": [{
- "n": "时间",
- "v": "/by/time"
- }, {
- "n": "人气",
- "v": "/by/hits"
- }, {
- "n": "评分",
- "v": "/by/score"
- }]
- }]
- },
- class_parse: '.fed-pops-list:eq(0)&&li:gt(0):lt(6);a&&Text;a&&href;.*/(.*?).html',
-}
\ No newline at end of file
diff --git a/潇洒/js/双星.js b/潇洒/js/双星.js
deleted file mode 100644
index 2c3e9c4..0000000
--- a/潇洒/js/双星.js
+++ /dev/null
@@ -1,52 +0,0 @@
-var rule = {
- title: '双子星',
- host: 'https://1.star2.cn',
- hostJs: '',
- headers: {
- 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36',
- },
- 编码: 'utf-8',
- timeout: 5000,
- url: 'https://1.star2.cn/fyclass/',
- filter_url: '',
- detailUrl: '',
- searchUrl: 'https://1.star2.cn/search/?keyword=**',
- searchable: 1,
- quickSearch: 1,
- filterable: 1,
- class_name: '短剧&国剧&综艺&电影&韩日&英美&外剧&动漫',
- class_url: 'dj&ju&zy&mv&rh&ym&wj&dm',
- proxy_rule: '',
- sniffer: false,
- isVideo: '',
- play_parse: true,
- parse_url: '',
- lazy: "js:\n input = 'push://' + input;\n ",
- limit: 9,
- double: false,
- 推荐: '*',
- 一级: 'js:\n let html = fetch(input);\n let list = pdfa(html, ".erx-list&&li");\n VODS = list.map(x => {\n return {\n vod_name: pdfh(x, "a&&Text"),\n vod_pic: \'https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1746269827120/1.jpeg\',\n vod_remarks: pdfh(x, "a&&Text"),\n vod_content: pdfh(x, "a&&Text"),\n vod_id: pdfh(x, "a&&href")\n }\n });\n ',
- 二级: {
- title: 'h1&&Text',
- img: 'https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1746269827120/1.jpeg',
- desc: '.card-text:eq(2)&&Text;;;;',
- content: '.card-text:eq(0)&&Text',
- tabs: "js:TABS = ['双星']",
- lists: "js:\n LISTS = [];\n let lists1 = pdfa(html, '.dlipp-cont-bd').map(it => {\n let _tt = pdfh(it, 'a&&Text');\n let _uu = pdfh(it, 'a&&href');\n return _tt + '$' + _uu;\n });\n LISTS.push(lists1);\n ",
- },
- 搜索: 'js:\n let html = fetch(input);\n let list = pdfa(html, ".erx-list&&li");\n VODS = list.map(x => {\n return {\n vod_name: pdfh(x, "a&&Text"),\n vod_pic: \'https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1746269827120/1.jpeg\', \n vod_remarks: pdfh(x, "a&&Text"),\n vod_content: pdfh(x, "a&&Text"),\n vod_id: pdfh(x, "a&&href")\n }\n });\n ',
- cate_exclude: '首页|留言|APP|下载|资讯|新闻|动态',
- tab_exclude: '猜你|喜欢|下载|剧情|榜|评论',
- 类型: '影视',
- homeUrl: 'https://1.star2.cn',
- 二级访问前: '',
- encoding: 'utf-8',
- search_encoding: '',
- 图片来源: '',
- 图片替换: '',
- play_json: [],
- pagecount: {},
- tab_remove: [],
- tab_order: [],
- tab_rename: {},
-}
\ No newline at end of file
diff --git a/潇洒/js/天堂.js b/潇洒/js/天堂.js
deleted file mode 100644
index 3184415..0000000
--- a/潇洒/js/天堂.js
+++ /dev/null
@@ -1,52 +0,0 @@
-var rule = {
- title: '盘搜天堂',
- host: 'https://pansott.com/',
- hostJs: '',
- headers: {
- 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36',
- },
- 编码: 'utf-8',
- timeout: 5000,
- url: 'https://pansott.com/search?q=fyclass&format=video&page=fypage',
- filter_url: '',
- detailUrl: '',
- searchUrl: 'https://pansott.com/search?q=**&format=video&exact=true&page=fypage',
- searchable: 1,
- quickSearch: 1,
- filterable: 1,
- class_name: '剧集&电影&短剧&动漫&综艺',
- class_url: '剧集&电影&短网剧&动漫&综艺',
- proxy_rule: '',
- sniffer: false,
- isVideo: '',
- play_parse: true,
- parse_url: '',
- lazy: "js:\n input = 'push://' + input;\n ",
- limit: 9,
- double: false,
- // 推荐: '*',
- 一级: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"或"115"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
- 二级: {
- title: 'h1&&Text',
- img: 'img&&src',
- desc: '.card-text:eq(2)&&Text;;;;',
- content: 'body&&.semi-space-loose-vertical&&a&&href',
- tabs: "js:TABS = ['天堂']",
- lists: "js:\n LISTS = [];\n let lists1 = pdfa(html, 'body&&.semi-space-loose-vertical').map(it => {\n let _tt = pdfh(it, 'span&&title');\n let _uu = pdfh(it, 'a&&href');\n return _tt + '$' + _uu;\n });\n LISTS.push(lists1);\n ",
- },
- 搜索: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"或"115"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
- cate_exclude: '首页|留言|APP|下载|资讯|新闻|动态',
- tab_exclude: '猜你|喜欢|下载|剧情|榜|评论',
- 类型: '影视',
- homeUrl: 'https://pansott.com/',
- 二级访问前: '',
- encoding: 'utf-8',
- search_encoding: '',
- 图片来源: '',
- 图片替换: '',
- play_json: [],
- pagecount: {},
- tab_remove: [],
- tab_order: [],
- tab_rename: {},
-}
\ No newline at end of file
diff --git a/潇洒/js/奇米动漫.js b/潇洒/js/奇米动漫.js
deleted file mode 100644
index 9e4e97b..0000000
--- a/潇洒/js/奇米动漫.js
+++ /dev/null
@@ -1,1164 +0,0 @@
-var rule = {
- title: '奇米动漫',
- host: 'http://www.qimiqimi.net',
- url: '/show/fyclassfyfilter.html',
- filterable: 1, //是否启用分类筛选,
- filter_url: '{{fl.area}}{{fl.by}}{{fl.class}}{{fl.letter}}/page/fypage{{fl.year}}',
- filter: {
- "xinfan": [{
- "key": "class",
- "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/日常"
- }]
- }, {
- "key": "area",
- "name": "地区",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "日本",
- "v": "/area/日本/"
- }, {
- "n": "大陆",
- "v": "/area/中国/"
- }, {
- "n": "欧美",
- "v": "/area/欧美/"
- }, {
- "n": "韩国",
- "v": "/area/韩国/"
- }, {
- "n": "港台",
- "v": "/area/港台/"
- }]
- }, {
- "key": "year",
- "name": "年份",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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": "letter",
- "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": "by",
- "name": "排序",
- "value": [{
- "n": "时间",
- "v": "/by/time"
- }, {
- "n": "人气",
- "v": "/by/hits"
- }, {
- "n": "评分",
- "v": "/by/score"
- }]
- }],
- "riman": [{
- "key": "class",
- "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/日常"
- }]
- }, {
- "key": "area",
- "name": "地区",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "日本",
- "v": "/area/日本/"
- }, {
- "n": "大陆",
- "v": "/area/中国/"
- }, {
- "n": "欧美",
- "v": "/area/欧美/"
- }, {
- "n": "韩国",
- "v": "/area/韩国/"
- }, {
- "n": "港台",
- "v": "/area/港台/"
- }]
- }, {
- "key": "year",
- "name": "年份",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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": "letter",
- "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": "by",
- "name": "排序",
- "value": [{
- "n": "时间",
- "v": "/by/time"
- }, {
- "n": "人气",
- "v": "/by/hits"
- }, {
- "n": "评分",
- "v": "/by/score"
- }]
- }],
- "guoman": [{
- "key": "class",
- "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/日常"
- }]
- }, {
- "key": "area",
- "name": "地区",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "日本",
- "v": "/area/日本/"
- }, {
- "n": "大陆",
- "v": "/area/中国/"
- }, {
- "n": "欧美",
- "v": "/area/欧美/"
- }, {
- "n": "韩国",
- "v": "/area/韩国/"
- }, {
- "n": "港台",
- "v": "/area/港台/"
- }]
- }, {
- "key": "year",
- "name": "年份",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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": "letter",
- "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": "by",
- "name": "排序",
- "value": [{
- "n": "时间",
- "v": "/by/time"
- }, {
- "n": "人气",
- "v": "/by/hits"
- }, {
- "n": "评分",
- "v": "/by/score"
- }]
- }],
- "jcdm": [{
- "key": "class",
- "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/日常"
- }]
- }, {
- "key": "area",
- "name": "地区",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "日本",
- "v": "/area/日本/"
- }, {
- "n": "大陆",
- "v": "/area/中国/"
- }, {
- "n": "欧美",
- "v": "/area/欧美/"
- }, {
- "n": "韩国",
- "v": "/area/韩国/"
- }, {
- "n": "港台",
- "v": "/area/港台/"
- }]
- }, {
- "key": "year",
- "name": "年份",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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": "letter",
- "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": "by",
- "name": "排序",
- "value": [{
- "n": "时间",
- "v": "/by/time"
- }, {
- "n": "人气",
- "v": "/by/hits"
- }, {
- "n": "评分",
- "v": "/by/score"
- }]
- }]
- },
- searchable: 2, //是否启用全局搜索,
- headers: { //网站的请求头,完整支持所有的,常带ua和cookies
- 'User-Agent': 'PC_UA',
- },
- class_parse: '#nav li;a&&Text;a&&href;.*/(\\w+).html',
- cate_exclude: '番组专题|最近更新',
- play_parse: true,
- lazy: `js:
- var html = JSON.parse(request(input).match(/r player_.*?=(.*?))[1]);
- var url = html.url;
- if (html.encrypt == '1') {
- url = unescape(url)
- } else if (html.encrypt == '2') {
- url = unescape(base64Decode(url))
- }
- if (/\\.m3u8|\\.mp4/.test(url)) {
- input = {
- jx: 0,
- url: url,
- parse: 0
- }
- } else {
- input
- }
- `,
- limit: 6,
- 推荐: '*;*;*;.text&&Text;*',
- 一级: '.img-list li;a&&title;img&&src;i&&Text;a&&href',
- 二级: {
- "title": "h1&&Text;dl.fn-left:eq(3)&&Text",
- "img": ".detail-pic&&img&&src",
- "desc": "dl.fn-left:eq(2)&&Text;;;.nyzhuy--dt&&Text;.fn-right:eq(0)--dt&&Text",
- "content": ".tjuqing&&Text",
- "tabs": ".down-title h2",
- "lists": ".video_list:eq(#id) a"
- },
- searchUrl: '/index.php/ajax/suggest?mid=1&wd=**&limit=50',
- detailUrl: '/detail/fyid.html', //非必填,二级详情拼接链接
- 搜索: 'json:list;name;pic;;id',
-}
\ No newline at end of file
diff --git a/潇洒/js/好看动漫.js b/潇洒/js/好看动漫.js
deleted file mode 100644
index d152a76..0000000
--- a/潇洒/js/好看动漫.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var rule = {
- title: '好看动漫',
- host: 'https://www.youjiula.com/',
- url: 'https://www.youjiula.com/youjiu/fyclass-fypage.html',
- searchUrl: 'https://www.youjiula.com/search.php?page=fypage&searchword=**&searchtype=',
- 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": "#desc&&Text",
- "tabs": ".stui-pannel-box h3",
- "lists": ".stui-content__playlist:eq(#id) li"
- },
- 搜索: 'ul.stui-vodlist&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
-
-}
\ No newline at end of file
diff --git a/潇洒/js/异世界.js b/潇洒/js/异世界.js
deleted file mode 100644
index bf556ee..0000000
--- a/潇洒/js/异世界.js
+++ /dev/null
@@ -1,278 +0,0 @@
-var rule = {
- title: '异世界动漫',
- host: 'https://www.dmmiku.com/',
- homeUrl: '/index.php/vod/show/id/22.html',
- // url:'/index.php/vod/show/class/fyclass/id/20/page/fypage.html',
- url: '/index.php/vod/show/fyclassfyfilter.html',
- filterable: 1,
- filter_url: '{{fl.type}}/id/20/page/fypage{{fl.year}}',
- filter: {
- "area/日本": [{
- "key": "type",
- "name": "类型",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "OVA",
- "v": "/class/OVA"
- }, {
- "n": "剧场版",
- "v": "/class/剧场版"
- }, {
- "n": "无修",
- "v": "/class/BD无修"
- }, {
- "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": "year",
- "name": "年份",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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"
- }]
- }],
- "area/中國": [{
- "key": "year",
- "name": "年份",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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"
- }]
- }]
- },
- searchUrl: '/index.php/vod/search/page/fypage/wd/**.html',
- searchable: 2,
- quickSearch: 0,
- headers: {
- 'User-Agent': 'MOBILE_UA'
- },
- timeout: 5000, //网站的全局请求超时,默认是3000毫秒
- class_name: '日漫&国漫',
- class_url: 'area/日本&area/中國',
- play_parse: true,
- lazy: `js:
- var html = JSON.parse(request(input).match(/r player_.*?=(.*?))[1]);
- var url = html.url;
- var from = html.from;
- if (html.encrypt == '1') {
- url = unescape(url)
- } else if (html.encrypt == '2') {
- url = unescape(base64Decode(url))
- }
- if (/m3u8|mp4/.test(url)) {
- input = url
- } else {
- var MacPlayerConfig={};
- eval(fetch(HOST + "/static/js/playerconfig.js").replace('var Mac','Mac'));
- var jx = MacPlayerConfig.player_list[from].parse;
- if (jx == '') {
- jx = MacPlayerConfig.parse
- };
- if (jx.startsWith("/")) {
- jx = "https:" + jx;
- }
- input={
- jx:0,
- url:jx+url,
- parse:1,
- header: JSON.stringify({
- 'referer': HOST
- })
- }
- }
- `,
- limit: 6,
- // 图片来源:'@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',
- 推荐: '*',
- 一级: '.vodlist_wi&&li;.lazyload&&title;.lazyload&&data-original;.pic_text&&Text;a&&href',
- 二级: {
- "title": "h2&&Text;li.data--span:eq(0)&&Text",
- "img": ".lazyload&&data-original",
- "desc": "li.data--span:eq(1)&&Text;;;li.data--span:eq(2)&&Text;li.data--span:eq(3)&&Text",
- "content": ".full_text&&span&&Text",
- "tabs": `js:
- TABS = [];
- let tabs = pdfa(html, '#NumTab&&a');
- tabs.forEach((it) => {
- TABS.push(pdfh(it, 'a&&alt'))
- });
- `,
- // "lists": ".content_playlist:not(.list_scroll):eq(#id) a"
- "lists": "div.playlist_full:eq(#id) li"
- },
- 搜索: 'li.searchlist_item;*;*;*;*',
-}
\ No newline at end of file
diff --git a/潇洒/js/懒盘.js b/潇洒/js/懒盘.js
deleted file mode 100644
index b476003..0000000
--- a/潇洒/js/懒盘.js
+++ /dev/null
@@ -1,52 +0,0 @@
-var rule = {
- title: '懒盘搜',
- host: 'https://www.lzpanx.com/',
- hostJs: '',
- headers: {
- 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36',
- },
- 编码: 'utf-8',
- timeout: 5000,
- url: 'https://www.lzpanx.com/search?q=fyclass&format=video&page=fypage',
- filter_url: '',
- detailUrl: '',
- searchUrl: 'https://www.lzpanx.com/search?q=**&format=video&exact=true&page=fypage',
- searchable: 1,
- quickSearch: 1,
- filterable: 1,
- class_name: '剧集&电影&短剧&动漫&综艺',
- class_url: '剧集&电影&短网剧&动漫&综艺',
- proxy_rule: '',
- sniffer: false,
- isVideo: '',
- play_parse: true,
- parse_url: '',
- lazy: "js:\n input = 'push://' + input;\n ",
- limit: 9,
- double: false,
- // 推荐: '*',
- 一级: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'https://ww1.sinaimg.cn/mw690/006faMndly1htmb1m08adj30e20e2q3m.jpg\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
- 二级: {
- title: 'h1&&Text',
- img: 'img&&src',
- desc: '.card-text:eq(2)&&Text;;;;',
- content: 'body&&.semi-space-loose-vertical&&a&&href',
- tabs: "js:TABS = ['懒盘']",
- lists: "js:\n LISTS = [];\n let lists1 = pdfa(html, 'body&&.semi-space-loose-vertical').map(it => {\n let _tt = pdfh(it, 'span&&title');\n let _uu = pdfh(it, 'a&&href');\n return _tt + '$' + _uu;\n });\n LISTS.push(lists1);\n ",
- },
- 搜索: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'https://ww1.sinaimg.cn/mw690/006faMndly1htmb1m08adj30e20e2q3m.jpg\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
- cate_exclude: '首页|留言|APP|下载|资讯|新闻|动态',
- tab_exclude: '猜你|喜欢|下载|剧情|榜|评论',
- 类型: '影视',
- homeUrl: 'https://www.lzpanx.com/',
- 二级访问前: '',
- encoding: 'utf-8',
- search_encoding: '',
- 图片来源: '',
- 图片替换: '',
- play_json: [],
- pagecount: {},
- tab_remove: [],
- tab_order: [],
- tab_rename: {},
-}
\ No newline at end of file
diff --git a/潇洒/js/爱奇艺.js b/潇洒/js/爱奇艺.js
deleted file mode 100644
index 0ca0057..0000000
--- a/潇洒/js/爱奇艺.js
+++ /dev/null
@@ -1,1392 +0,0 @@
-var rule = {
- title: '奇珍异兽[官]',
- host: 'https://www.iqiyi.com',
- homeUrl: '',
- // detailUrl:'https://pcw-api.iqiyi.com/albums/album/avlistinfo?aid=fyid&size=2000&page=1',
- detailUrl: 'https://pcw-api.iqiyi.com/video/video/videoinfowithuser/fyid?agent_type=1&authcookie=&subkey=fyid&subscribe=1',
- searchUrl: 'https://search.video.iqiyi.com/o?if=html5&key=**&pageNum=fypage&pos=1&pageSize=24&site=iqiyi',
- searchable: 2,
- multi: 1,
- filterable: 1,
- filter: {
- '1': [{
- 'key': 'mode',
- 'name': '综合排序',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '热播榜',
- 'v': 11
- }, {
- 'n': '好评榜',
- 'v': 8
- }, {
- 'n': '新上线',
- 'v': 4
- }]
- }, {
- 'key': 'year',
- 'name': '全部年份',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- "n": "2025",
- "v": 2025
- }, {
- "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-2011',
- 'v': '2011_2016'
- }, {
- 'n': '2010-2000',
- 'v': '2000_2010'
- }, {
- 'n': '90年代',
- 'v': '1990_1999'
- }, {
- 'n': '80年代',
- 'v': '1980_1989'
- }, {
- 'n': '更早',
- 'v': '1964_1979'
- }]
- }, {
- 'key': 'is_purchase',
- 'name': '全部资费',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '免费',
- 'v': 0
- }, {
- 'n': '会员',
- 'v': 1
- }, {
- 'n': '付费',
- 'v': 2
- }]
- }, {
- 'key': 'three_category_id',
- 'name': '地区',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '华语',
- 'v': 1
- }, {
- 'n': '香港地区',
- 'v': 28997
- }, {
- 'n': '美国',
- 'v': 2
- }, {
- 'n': '欧洲',
- 'v': 3
- }, {
- 'n': '韩国',
- 'v': 4
- }, {
- 'n': '日本',
- 'v': 308
- }, {
- 'n': '泰国',
- 'v': 1115
- }, {
- 'n': '印度',
- 'v': 28999
- }, {
- 'n': '其它',
- 'v': 5
- }]
- }, {
- 'key': '18001',
- 'name': '类型',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '喜剧',
- 'v': 8
- }, {
- 'n': '爱情',
- 'v': 6
- }, {
- 'n': '动作',
- 'v': 11
- }, {
- 'n': '枪战',
- 'v': 131
- }, {
- 'n': '犯罪',
- 'v': 291
- }, {
- 'n': '惊悚',
- 'v': 128
- }, {
- 'n': '恐怖',
- 'v': 10
- }, {
- 'n': '悬疑',
- 'v': 289
- }, {
- 'n': '动画',
- 'v': 12
- }, {
- 'n': '家庭',
- 'v': 27356
- }, {
- 'n': '奇幻',
- 'v': 1284
- }, {
- 'n': '魔幻',
- 'v': 129
- }, {
- 'n': '科幻',
- 'v': 9
- }, {
- 'n': '战争',
- 'v': 7
- }, {
- 'n': '青春',
- 'v': 130
- }]
- }, {
- 'key': '27396',
- 'name': '规格',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '巨制',
- 'v': 27397
- }, {
- 'n': '院线',
- 'v': 27815
- }, {
- 'n': '独播',
- 'v': 30149
- }, {
- 'n': '网络电影',
- 'v': 27401
- }]
- }],
- '2': [{
- 'key': 'mode',
- 'name': '综合排序',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '热播榜',
- 'v': 11
- }, {
- 'n': '好评榜',
- 'v': 8
- }, {
- 'n': '新上线',
- 'v': 4
- }]
- }, {
- 'key': 'year',
- 'name': '全部年份',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '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-2011',
- 'v': '2011_2016'
- }, {
- 'n': '2010-2000',
- 'v': '2000_2010'
- }, {
- 'n': '90年代',
- 'v': '1990_1999'
- }, {
- 'n': '80年代',
- 'v': '1980_1989'
- }, {
- 'n': '更早',
- 'v': '1964_1979'
- }]
- }, {
- 'key': 'is_purchase',
- 'name': '全部资费',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '免费',
- 'v': 0
- }, {
- 'n': '会员',
- 'v': 1
- }, {
- 'n': '付费',
- 'v': 2
- }]
- }, {
- 'key': 'three_category_id',
- 'name': '地区',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '内地',
- 'v': 15
- }, {
- 'n': '港剧',
- 'v': 16
- }, {
- 'n': '韩剧',
- 'v': 17
- }, {
- 'n': '美剧',
- 'v': 18
- }, {
- 'n': '日剧',
- 'v': 309
- }, {
- 'n': '泰剧',
- 'v': 1114
- }, {
- 'n': '台湾地区',
- 'v': 1117
- }, {
- 'n': '英剧',
- 'v': 28916
- }, {
- 'n': '其它',
- 'v': 19
- }]
- }, {
- 'key': '18003',
- 'name': '类型',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '自制',
- 'v': 11992
- }, {
- 'n': '古装',
- 'v': 24
- }, {
- 'n': '言情',
- 'v': 20
- }, {
- 'n': '武侠',
- 'v': 23
- }, {
- 'n': '偶像',
- 'v': 30
- }, {
- 'n': '家庭',
- 'v': 1654
- }, {
- 'n': '青春',
- 'v': 1653
- }, {
- 'n': '都市',
- 'v': 24064
- }, {
- 'n': '喜剧',
- 'v': 135
- }, {
- 'n': '战争',
- 'v': 27916
- }, {
- 'n': '军旅',
- 'v': 1655
- }, {
- 'n': '谍战',
- 'v': 290
- }, {
- 'n': '悬疑',
- 'v': 32
- }, {
- 'n': '罪案',
- 'v': 149
- }, {
- 'n': '穿越',
- 'v': 148
- }, {
- 'n': '宫廷',
- 'v': 139
- }, {
- 'n': '历史',
- 'v': 21
- }, {
- 'n': '神话',
- 'v': 145
- }, {
- 'n': '科幻',
- 'v': 34
- }, {
- 'n': '年代',
- 'v': 27
- }, {
- 'n': '农村',
- 'v': 29
- }, {
- 'n': '商战',
- 'v': 140
- }, {
- 'n': '剧情',
- 'v': 24063
- }, {
- 'n': '奇幻',
- 'v': 27881
- }, {
- 'n': '网剧',
- 'v': 24065
- }, {
- 'n': '竖短片',
- 'v': 32839
- }]
- }],
- '3': [{
- 'key': 'mode',
- 'name': '综合排序',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '热播榜',
- 'v': 11
- }, {
- 'n': '好评榜',
- 'v': 8
- }, {
- 'n': '新上线',
- 'v': 4
- }]
- }, {
- 'key': 'year',
- 'name': '全部年份',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '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-2011',
- 'v': '2011_2016'
- }, {
- 'n': '2010-2000',
- 'v': '2000_2010'
- }, {
- 'n': '90年代',
- 'v': '1990_1999'
- }, {
- 'n': '80年代',
- 'v': '1980_1989'
- }, {
- 'n': '更早',
- 'v': '1964_1979'
- }]
- }, {
- 'key': 'is_purchase',
- 'name': '全部资费',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '免费',
- 'v': 0
- }, {
- 'n': '会员',
- 'v': 1
- }, {
- 'n': '付费',
- 'v': 2
- }]
- }, {
- 'key': 'three_category_id',
- 'name': '地区',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '国内',
- 'v': 20323
- }, {
- 'n': '国外',
- 'v': 20324
- }]
- }, {
- 'key': '18004',
- 'name': '类型',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '人文',
- 'v': 70
- }, {
- 'n': '美食',
- 'v': 33908
- }, {
- 'n': '医疗',
- 'v': 33924
- }, {
- 'n': '自然',
- 'v': 33933
- }, {
- 'n': '萌宠',
- 'v': 33945
- }, {
- 'n': '财经',
- 'v': 33953
- }, {
- 'n': '罪案',
- 'v': 33960
- }, {
- 'n': '竞技',
- 'v': 33967
- }, {
- 'n': '灾难',
- 'v': 33974
- }, {
- 'n': '军事',
- 'v': 72
- }, {
- 'n': '历史',
- 'v': 74
- }, {
- 'n': '探险',
- 'v': 73
- }, {
- 'n': '社会',
- 'v': 71
- }, {
- 'n': '科技',
- 'v': 28119
- }, {
- 'n': '旅游',
- 'v': 310
- }]
- }, {
- 'key': '28467',
- 'name': '出品方',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': 'BBC',
- 'v': 28468
- }, {
- 'n': '美国历史频道',
- 'v': 28470
- }, {
- 'n': '探索频道',
- 'v': 28471
- }, {
- 'n': '央视记录',
- 'v': 28472
- }, {
- 'n': '北京纪实频道',
- 'v': 28473
- }, {
- 'n': '上海纪实频道',
- 'v': 28474
- }, {
- 'n': '朗思文化',
- 'v': 28476
- }, {
- 'n': 'CNEX',
- 'v': 28477
- }, {
- 'n': '五星传奇',
- 'v': 28478
- }, {
- 'n': 'IMG',
- 'v': 28479
- }, {
- 'n': 'NHK',
- 'v': 28480
- }, {
- 'n': '爱奇艺出品',
- 'v': 31283
- }, {
- 'n': 'Netflix',
- 'v': 31286
- }]
- }, {
- 'key': '29076',
- 'name': '片种',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '纪录电影',
- 'v': 29077
- }, {
- 'n': '系列纪录片',
- 'v': 29078
- }, {
- 'n': '网络纪录片',
- 'v': 29082
- }, {
- 'n': '纪实栏目',
- 'v': 29083
- }]
- }, {
- 'key': '31294',
- 'name': '时长',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '微纪录',
- 'v': 29079
- }, {
- 'n': '长纪录',
- 'v': 29080
- }, {
- 'n': '短纪录',
- 'v': 29081
- }]
- }],
- '4': [{
- 'key': 'mode',
- 'name': '综合排序',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '热播榜',
- 'v': 11
- }, {
- 'n': '好评榜',
- 'v': 8
- }, {
- 'n': '新上线',
- 'v': 4
- }]
- }, {
- 'key': 'year',
- 'name': '全部年份',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '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-2011',
- 'v': '2011_2016'
- }, {
- 'n': '2010-2000',
- 'v': '2000_2010'
- }, {
- 'n': '90年代',
- 'v': '1990_1999'
- }, {
- 'n': '80年代',
- 'v': '1980_1989'
- }, {
- 'n': '更早',
- 'v': '1964_1979'
- }]
- }, {
- 'key': 'is_purchase',
- 'name': '全部资费',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '免费',
- 'v': 0
- }, {
- 'n': '会员',
- 'v': 1
- }, {
- 'n': '付费',
- 'v': 2
- }]
- }, {
- 'key': 'three_category_id',
- 'name': '地区',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '中国大陆',
- 'v': 37
- }, {
- 'n': '日本',
- 'v': 38
- }, {
- 'n': '韩国',
- 'v': 1106
- }, {
- 'n': '欧美',
- 'v': 30218
- }, {
- 'n': '其它',
- 'v': 40
- }]
- }, {
- 'key': '30219',
- 'name': '版本',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '动画',
- 'v': 30220
- }, {
- 'n': '特摄',
- 'v': 30223
- }, {
- 'n': '布袋戏',
- 'v': 30224
- }, {
- 'n': '特别篇',
- 'v': 32782
- }, {
- 'n': '动态漫画',
- 'v': 32783
- }, {
- 'n': '动画电影',
- 'v': 32784
- }, {
- 'n': '竖版视频',
- 'v': 32785
- }, {
- 'n': '轻动画',
- 'v': 33482
- }, {
- 'n': '短剧',
- 'v': 33483
- }]
- }, {
- 'key': '30225',
- 'name': '风格',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '搞笑',
- 'v': 30230
- }, {
- 'n': '热血',
- 'v': 30232
- }, {
- 'n': '催泪',
- 'v': 30233
- }, {
- 'n': '治愈',
- 'v': 30234
- }, {
- 'n': '励志',
- 'v': 30237
- }, {
- 'n': '机战',
- 'v': 30241
- }, {
- 'n': '恋爱',
- 'v': 30243
- }, {
- 'n': '科幻',
- 'v': 30245
- }, {
- 'n': '奇幻',
- 'v': 30247
- }, {
- 'n': '推理',
- 'v': 30248
- }, {
- 'n': '校园',
- 'v': 30249
- }, {
- 'n': '日常',
- 'v': 30252
- }, {
- 'n': '历史',
- 'v': 30254
- }, {
- 'n': '美食',
- 'v': 30255
- }, {
- 'n': '职场',
- 'v': 30256
- }, {
- 'n': '偶像',
- 'v': 30258
- }, {
- 'n': '泡面',
- 'v': 30265
- }, {
- 'n': '冒险',
- 'v': 30267
- }, {
- 'n': '竞技',
- 'v': 30268
- }, {
- 'n': '合家欢',
- 'v': 30270
- }, {
- 'n': '武侠',
- 'v': 32792
- }, {
- 'n': '玄幻',
- 'v': 32793
- }]
- }, {
- 'key': '32795',
- 'name': '新类型',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '轻小说改编',
- 'v': 32796
- }, {
- 'n': '漫画改编',
- 'v': 32797
- }, {
- 'n': '游戏改编',
- 'v': 32798
- }, {
- 'n': '原创',
- 'v': 32799
- }]
- }],
- '6': [{
- 'key': 'mode',
- 'name': '综合排序',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '热播榜',
- 'v': 11
- }, {
- 'n': '好评榜',
- 'v': 8
- }, {
- 'n': '新上线',
- 'v': 4
- }]
- }, {
- 'key': 'year',
- 'name': '全部年份',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '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-2011',
- 'v': '2011_2016'
- }, {
- 'n': '2010-2000',
- 'v': '2000_2010'
- }, {
- 'n': '90年代',
- 'v': '1990_1999'
- }, {
- 'n': '80年代',
- 'v': '1980_1989'
- }, {
- 'n': '更早',
- 'v': '1964_1979'
- }]
- }, {
- 'key': 'is_purchase',
- 'name': '全部资费',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '免费',
- 'v': 0
- }, {
- 'n': '会员',
- 'v': 1
- }, {
- 'n': '付费',
- 'v': 2
- }]
- }, {
- 'key': 'three_category_id',
- 'name': '地区',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '内地',
- 'v': 151
- }, {
- 'n': '港台',
- 'v': 152
- }, {
- 'n': '韩国',
- 'v': 33306
- }, {
- 'n': '欧美',
- 'v': 154
- }, {
- 'n': '其它',
- 'v': 1113
- }]
- }, {
- 'key': '18014',
- 'name': '类型',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '播报',
- 'v': 155
- }, {
- 'n': '访谈',
- 'v': 156
- }, {
- 'n': '游戏',
- 'v': 158
- }, {
- 'n': '晚会',
- 'v': 292
- }, {
- 'n': '曲艺',
- 'v': 293
- }, {
- 'n': '脱口秀',
- 'v': 2118
- }, {
- 'n': '真人秀',
- 'v': 2224
- }, {
- 'n': '竞技',
- 'v': 30278
- }, {
- 'n': '爱奇艺出品',
- 'v': 30279
- }, {
- 'n': '竞演',
- 'v': 33860
- }]
- }, {
- 'key': '33162',
- 'name': '题材',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '音乐',
- 'v': 33163
- }, {
- 'n': '舞蹈',
- 'v': 33172
- }, {
- 'n': '文化',
- 'v': 33173
- }, {
- 'n': '美食',
- 'v': 33182
- }, {
- 'n': '伦理',
- 'v': 33184
- }, {
- 'n': '相亲',
- 'v': 33193
- }, {
- 'n': '纪实',
- 'v': 33195
- }, {
- 'n': '生活',
- 'v': 33196
- }, {
- 'n': '亲子',
- 'v': 33197
- }, {
- 'n': '少儿',
- 'v': 33198
- }, {
- 'n': '财经',
- 'v': 33199
- }, {
- 'n': '健康',
- 'v': 33200
- }, {
- 'n': '时尚',
- 'v': 33203
- }, {
- 'n': '旅游',
- 'v': 33205
- }, {
- 'n': '教育',
- 'v': 33206
- }, {
- 'n': '其它',
- 'v': 33220
- }, {
- 'n': '爱情',
- 'v': 33316
- }, {
- 'n': '搞笑',
- 'v': 33317
- }, {
- 'n': '益智',
- 'v': 33318
- }, {
- 'n': '职场',
- 'v': 33319
- }, {
- 'n': '语言',
- 'v': 33530
- }, {
- 'n': '辩论',
- 'v': 33531
- }, {
- 'n': '演讲',
- 'v': 33843
- }]
- }],
- '5': [{
- 'key': 'mode',
- 'name': '综合排序',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '热播榜',
- 'v': 11
- }, {
- 'n': '好评榜',
- 'v': 8
- }, {
- 'n': '新上线',
- 'v': 4
- }]
- }, {
- 'key': 'year',
- 'name': '全部年份',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '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-2011',
- 'v': '2011_2016'
- }, {
- 'n': '2010-2000',
- 'v': '2000_2010'
- }, {
- 'n': '90年代',
- 'v': '1990_1999'
- }, {
- 'n': '80年代',
- 'v': '1980_1989'
- }, {
- 'n': '更早',
- 'v': '1964_1979'
- }]
- }, {
- 'key': 'is_purchase',
- 'name': '全部资费',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '免费',
- 'v': 0
- }, {
- 'n': '会员',
- 'v': 1
- }, {
- 'n': '付费',
- 'v': 2
- }]
- }, {
- 'key': 'three_category_id',
- 'name': '地区',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '内地',
- 'v': 221
- }, {
- 'n': '港台',
- 'v': 220
- }, {
- 'n': '欧美',
- 'v': 219
- }, {
- 'n': '日韩',
- 'v': 218
- }, {
- 'n': '拉美',
- 'v': 217
- }, {
- 'n': '亚洲地区',
- 'v': 216
- }, {
- 'n': '非洲',
- 'v': 215
- }]
- }, {
- 'key': '18009',
- 'name': '语种',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '普通话',
- 'v': 91
- }, {
- 'n': '粤语',
- 'v': 92
- }, {
- 'n': '闽南语',
- 'v': 93
- }, {
- 'n': '英语',
- 'v': 94
- }, {
- 'n': '日语',
- 'v': 95
- }, {
- 'n': '韩语',
- 'v': 96
- }, {
- 'n': '其它',
- 'v': 97
- }]
- }, {
- 'key': '23554',
- 'name': '音乐类型',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '单曲MV',
- 'v': 23556
- }, {
- 'n': '单曲现场',
- 'v': 23557
- }, {
- 'n': '演唱会',
- 'v': 23558
- }, {
- 'n': '新闻',
- 'v': 23559
- }, {
- 'n': '访谈',
- 'v': 23560
- }, {
- 'n': '音乐记录',
- 'v': 23561
- }, {
- 'n': '音乐周边',
- 'v': 23562
- }, {
- 'n': '音乐节目',
- 'v': 23563
- }, {
- 'n': '影视原声',
- 'v': 23564
- }, {
- 'n': '音乐短片',
- 'v': 23565
- }, {
- 'n': '其他',
- 'v': 23566
- }]
- }],
- '16': [{
- 'key': 'mode',
- 'name': '综合排序',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '热播榜',
- 'v': 11
- }, {
- 'n': '好评榜',
- 'v': 8
- }, {
- 'n': '新上线',
- 'v': 4
- }]
- }, {
- 'key': 'year',
- 'name': '全部年份',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '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-2011',
- 'v': '2011_2016'
- }, {
- 'n': '2010-2000',
- 'v': '2000_2010'
- }, {
- 'n': '90年代',
- 'v': '1990_1999'
- }, {
- 'n': '80年代',
- 'v': '1980_1989'
- }, {
- 'n': '更早',
- 'v': '1964_1979'
- }]
- }, {
- 'key': 'is_purchase',
- 'name': '全部资费',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '免费',
- 'v': 0
- }, {
- 'n': '会员',
- 'v': 1
- }, {
- 'n': '付费',
- 'v': 2
- }]
- }, {
- 'key': '18061',
- 'name': '类型',
- 'value': [{
- 'n': '全部',
- 'v': ''
- }, {
- 'n': '喜剧',
- 'v': 1296
- }, {
- 'n': '爱情',
- 'v': 1297
- }, {
- 'n': '动作',
- 'v': 1298
- }, {
- 'n': '奇幻',
- 'v': 1299
- }, {
- 'n': '惊悚',
- 'v': 1300
- }, {
- 'n': '悬疑',
- 'v': 1301
- }, {
- 'n': '青春',
- 'v': 1302
- }]
- }]
- },
- // url:'https://pcw-api.iqiyi.com/search/recommend/list?channel_id=fyclass&data_type=1&is_purchase=&mode=24&page_id=fypage&ret_num=48&three_category_id=',
- url: 'https://pcw-api.iqiyi.com/search/recommend/list?channel_id=fyclass&data_type=1&page_id=fypage&ret_num=48',
- filter_url: 'is_purchase={{fl.is_purchase}}&mode={{fl.mode}}&three_category_id={{fl.three_category_id}}&market_release_date_level={{fl.year}}',
- // url:'https://pcw-api.iqiyi.com/search/video/videolists?channel_id=fyclass&pageNum=fypage&pageSize=24&data_type=1&site=iqiyi',
- headers: {
- 'User-Agent': 'MOBILE_UA'
- },
- timeout: 5000,
- class_name: '电影&电视剧&纪录片&动漫&综艺&音乐&网络电影',
- class_url: '1&2&3&4&6&5&16',
- limit: 20,
- play_parse: true,
- lazy: $js.toString(() => {
- try {
- let api = "" + input.split("?")[0];
- console.log(api);
- let response = fetch(api, {
- method: 'get',
- headers: {
- 'User-Agent': 'okhttp/3.14.9',
- 'Content-Type': 'application/x-www-form-urlencoded'
- }
- });
- let bata = JSON.parse(response);
- if (bata.url.includes("qiyi")) {
- input = {
- parse: 0,
- url: bata.url,
- jx: 0,
- danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0]
- };
- } else {
- input = {
- parse: 0,
- url: input.split("?")[0],
- jx: 1,
- danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0]
- };
- }
- } catch {
- input = {
- parse: 0,
- url: input.split("?")[0],
- jx: 1,
- danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0]
- };
- }
- }),
- // play_parse:true,
- // 手动调用解析请求json的url,此lazy不方便
- // lazy:'js:input="https://cache.json.icu/home/api?type=ys&uid=292796&key=fnoryABDEFJNPQV269&url="+input.split("?")[0];log(input);let html=JSON.parse(request(input));log(html);input=html.url||input',
- // 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float',
- // 一级:'json:.data.list;.name;.imageUrl;.latestOrder;.albumId',
- 推荐: '',
- // 推荐:'js:let d=[];fetch_params.headers["user-agent"]=PC_UA;pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;let html=fetch(HOST,fetch_params);let lists=pdfa(html,".qy-mod-li");lists.forEach(function(it){try{let title=pdfh(it,"p.sub&&title");let desc=pdfh(it,".qy-mod-label&&Text");let pic_url=pd(it,"img&&src");d.push({title:title,desc:desc,img:pic_url})}catch(e){}});res=setResult(d);',
- 一级: 'js:let d=[];if(MY_CATE==="16"){input=input.replace("channel_id=16","channel_id=1").split("three_category_id")[0];input+="three_category_id=27401"}else if(MY_CATE==="5"){input=input.replace("data_type=1","data_type=2")}let html=request(input);let json=JSON.parse(html);if(json.code==="A00003"){fetch_params.headers["user-agent"]=PC_UA;json=JSON.parse(fetch(input,fetch_params))}json.data.list.forEach(function(data){if(data.channelId===1){desc=data.hasOwnProperty("score")?data.score+"分\\t":""}else if(data.channelId===2||data.channelId===4){if(data.latestOrder===data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"集全"}else{if(data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"/"+data.videoCount+"集"}else{desc="更新至 "+data.latestOrder+"集"}}}else if(data.channelId===6){desc=data.period+"期"}else if(data.channelId===5){desc=data.focus}else{if(data.latestOrder){desc="更新至 第"+data.latestOrder+"期"}else if(data.period){desc=data.period}else{desc=data.focus}}url=MY_CATE+"$"+data.albumId;d.push({url:url,title:data.name,desc:desc,pic_url:data.imageUrl.replace(".jpg","_390_520.jpg?caplist=jpg,webp")})});setResult(d);',
- // 一级:'js:let d=[];if(MY_CATE==="16"){input=input.replace("channel_id=16","channel_id=1").split("three_category_id")[0];input+="three_category_id=27401"}else if(MY_CATE==="5"){input=input.replace("data_type=1","data_type=2")}let html=fetch(input,fetch_params);let json=JSON.parse(html);if(json.code==="A00003"){fetch_params.headers["user-agent"]=PC_UA;json=JSON.parse(fetch(input,fetch_params))}json.data.list.forEach(function(data){if(data.channelId===1){desc=data.hasOwnProperty("score")?data.score+"分\\t":""}else if(data.channelId===2||data.channelId===4){if(data.latestOrder===data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"集全"}else{if(data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"/"+data.videoCount+"集"}else{desc="更新至 "+data.latestOrder+"集"}}}else if(data.channelId===6){desc=data.period+"期"}else if(data.channelId===5){desc=data.focus}else{if(data.latestOrder){desc="更新至 第"+data.latestOrder+"期"}else if(data.period){desc=data.period}else{desc=data.focus}}url=MY_CATE+"$"+data.albumId;d.push({url:url,title:data.name,desc:desc,pic_url:data.imageUrl.replace(".jpg","_390_520.jpg?caplist=jpg,webp")})});setResult(d);',
- // 一级:'json:.data.list;.name;.imageUrl;.playUrl;.latestOrder',
- // 二级:{is_json:1,"title":"data.title;data.moviecategory[0]+data.moviecategory[1]","img":"data.cdncover","desc":"data.area[0];data.director[0]","content":"data.description","tabs":"data.playlink_sites;data.playlinksdetail.#idv.quality","lists":"data.playlinksdetail.#idv.default_url"},
- // 二级:{is_json:1,"title":"data.name+data.subtitle;data.latestOrder","img":"data.imageUrl","desc":"data.categories;data.areas","content":"data.description","tabs":"data.name","lists":"data.playlinksdetail.#idv.default_url"},
- 二级: '',
- 二级: 'js:let d=[];let html=request(input);let json=JSON.parse(html).data;VOD={vod_id:"",vod_url:input,vod_name:"",type_name:"",vod_actor:"",vod_year:"",vod_director:"",vod_area:"",vod_content:"",vod_remarks:"",vod_pic:""};VOD.vod_name=json.name;try{if(json.latestOrder){VOD.vod_remarks="类型: "+(json.categories[0].name||"")+"\\t"+(json.categories[1].name||"")+"\\t"+(json.categories[2].name||"")+"\\t"+"评分:"+(json.score||"")+"\\n更新至:第"+json.latestOrder+"集(期)/共"+json.videoCount+"集(期)"}else{VOD.vod_remarks="类型: "+(json.categories[0].name||"")+"\\t"+(json.categories[1].name||"")+"\\t"+(json.categories[2].name||"")+"\\t"+"评分:"+(json.score||"")+json.period}}catch(e){VOD.vod_remarks=json.subtitle}VOD.vod_area=(json.focus||"")+"\\n资费:"+(json.payMark===1?"VIP":"免费")+"\\n地区:"+(json.areas||"");let vsize="579_772";try{vsize=json.imageSize[12]}catch(e){}VOD.vod_pic=json.imageUrl.replace(".jpg","_"+vsize+".jpg?caplist=jpg,webp");VOD.type_name=json.categories.map(function(it){return it.name}).join(",");if(json.people.main_charactor){let vod_actors=[];json.people.main_charactor.forEach(function(it){vod_actors.push(it.name)});VOD.vod_actor=vod_actors.join(",")}VOD.vod_content=json.description;let playlists=[];if(json.channelId===1||json.channelId===5){playlists=[{playUrl:json.playUrl,imageUrl:json.imageUrl,shortTitle:json.shortTitle,focus:json.focus,period:json.period}]}else{if(json.channelId===6){let qs=json.period.split("-")[0];let listUrl="https://pcw-api.iqiyi.com/album/source/svlistinfo?cid=6&sourceid="+json.albumId+"&timelist="+qs;let playData=JSON.parse(request(listUrl)).data[qs];playData.forEach(function(it){playlists.push({playUrl:it.playUrl,imageUrl:it.imageUrl,shortTitle:it.shortTitle,focus:it.focus,period:it.period})})}else{let listUrl="https://pcw-api.iqiyi.com/albums/album/avlistinfo?aid="+json.albumId+"&size=200&page=1";let data=JSON.parse(request(listUrl)).data;let total=data.total;playlists=data.epsodelist;if(total>200){for(let i=2;i200){for(let i=2;i {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
- 二级: {
- title: 'h1&&Text',
- img: 'img&&src',
- desc: '.card-text:eq(2)&&Text;;;;',
- content: 'body&&.semi-space-loose-vertical&&a&&href',
- tabs: "js:TABS = ['懒盘']",
- lists: "js:\n LISTS = [];\n let lists1 = pdfa(html, 'body&&.semi-space-loose-vertical').map(it => {\n let _tt = pdfh(it, 'span&&title');\n let _uu = pdfh(it, 'a&&href');\n return _tt + '$' + _uu;\n });\n LISTS.push(lists1);\n ",
- },
- 搜索: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;let vodName = pdfh(x, "div&&a&&title");\n // 过滤条件:迅雷云盘、.txt后缀、空名称\n if(vodName.endsWith(".zip") || vodName.endsWith(".txt") || !vodName.trim()) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
- cate_exclude: '首页|留言|APP|下载|资讯|新闻|动态',
- tab_exclude: '猜你|喜欢|下载|剧情|榜|评论',
- 类型: '影视',
- homeUrl: 'https://www.esoua.com/',
- 二级访问前: '',
- encoding: 'utf-8',
- search_encoding: '',
- 图片来源: '',
- 图片替换: '',
- play_json: [],
- pagecount: {},
- tab_remove: [],
- tab_order: [],
- tab_rename: {},
-}
\ No newline at end of file
diff --git a/潇洒/js/百酷.js b/潇洒/js/百酷.js
deleted file mode 100644
index ce716ec..0000000
--- a/潇洒/js/百酷.js
+++ /dev/null
@@ -1,73 +0,0 @@
-var rule = {
- title: '百酷短剧',
- host: 'https://api.kuleu.com/',
- hostJs: '',
- headers: {
- 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36',
- },
- 编码: 'utf-8',
- timeout: 5000,
- url: 'https://api.kuleu.com/fyclass',
- filter_url: '',
- detailUrl: '',
- searchUrl: 'https://api.kuleu.com/api/bddj?text=**',
- searchable: 1,
- quickSearch: 1,
- filterable: 1,
- class_name: '今日更新&百度短剧&每日更新&夸克短剧&每日更新',
- class_url: 'api/yingshi&api/bddj?list&api/bddj?today&api/action?list&api/action?today',
- proxy_rule: '',
- sniffer: false,
- isVideo: '',
- play_parse: true,
- parse_url: '',
- lazy: "js:\n input = 'push://' + input;\n ",
- limit: 9,
- double: false,
- // 推荐: '*',
- 一级: $js.toString(() => {
- let cid = MY_CATE || '108';
- let pg = MY_PAGE || 1;
- let url = `https://api.kuleu.com/${cid}`;
- let khtml = fetch(url, {headers: rule.headers});
- let kjson = JSON.parse(khtml);
- VODS = [];
- kjson.data.forEach(it => {
- VODS.push({
- vod_name: it.name,
- vod_pic: `https://tse3-mm.cn.bing.net/th/id/OIP-C.rlQOYtsriwWKHwofGufJ_AHaQd?w=157&h=350&c=7&r=0&o=7&dpr=3.7&pid=1.7&rm=3`,
- vod_remarks: it.addtime,
- vod_id: `push://${it.viewlink}`
- });
- });
-}),
- 二级: '*',
- 搜索:$js.toString(() => {
- let url = `https://api.kuleu.com/api/bddj?text=${KEY}`;
- let khtml = fetch(url);
- let kjson = JSON.parse(khtml);
- VODS = [];
- kjson.data.forEach(it => {
- VODS.push({
- vod_name: it.name,
- vod_pic: it.pPic,
- vod_remarks: it.addtime,
- vod_id: `push://${it.viewlink}`
- })
- })
-}),
- cate_exclude: '首页|留言|APP|下载|资讯|新闻|动态',
- tab_exclude: '猜你|喜欢|下载|剧情|榜|评论',
- 类型: '影视',
- homeUrl: 'https://www.lzpanx.com/',
- 二级访问前: '',
- encoding: 'utf-8',
- search_encoding: '',
- 图片来源: '',
- 图片替换: '',
- play_json: [],
- pagecount: {},
- tab_remove: [],
- tab_order: [],
- tab_rename: {},
-}
\ No newline at end of file
diff --git a/潇洒/js/短剧合集.js b/潇洒/js/短剧合集.js
deleted file mode 100644
index 4ca491b..0000000
--- a/潇洒/js/短剧合集.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var rule = {
- 类型: '影视', //影视|听书|漫画|小说
- title: '爱看短剧[盘]',
- host: 'https://ys.110t.cn/',
- homeUrl: '/api/ajax.php?act=recommend',
- homeUrl: '/api/ajax.php?act=Daily',
- url: '/api/ajax.php?act=fyclass',
- searchUrl: '/api/ajax.php?act=search&name=**',
- searchable: 1,
- quickSearch: 0,
- filterable: 0,
- headers: {
- 'User-Agent': 'MOBILE_UA',
- },
- hikerListCol: "text_1",
- hikerClassListCol: "text_1",
- timeout: 5000,
- class_name: '全部',
- class_url: 'yingshilist',
- play_parse: true,
- lazy: $js.toString(() => {
- input = "push://" + input;
- }),
- double: false,
- 推荐: '*',
- 一级: 'json:data;name;;addtime;url',
- 二级: '*',
- 搜索: '*',
-}
\ No newline at end of file
diff --git a/潇洒/js/短剧大全.js b/潇洒/js/短剧大全.js
deleted file mode 100644
index ea78f2c..0000000
--- a/潇洒/js/短剧大全.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var rule = {
- 类型: '影视', //影视|听书|漫画|小说
- title: '短剧',
- host: 'https://ai-img.ycubbs.cn/',
- homeUrl: '/api/duanju/list',
- url: '/api/duanju/list',
- searchUrl: 'https://api.kuleu.com/api/action?text=**',
- searchable: 1,
- quickSearch: 0,
- filterable: 0,
- headers: {
- 'User-Agent': 'MOBILE_UA',
- },
- hikerListCol: "text_1",
- hikerClassListCol: "text_1",
- timeout: 5000,
- class_name: '',
- class_url: '',
- play_parse: true,
- lazy: $js.toString(() => {
- input = "push://" + input;
- }),
- double: false,
- 推荐: '*',
- 一级: 'json:data;name;;;url',
- 二级: '*',
- 搜索: 'json:data;name;;;viewlink',
-}
\ No newline at end of file
diff --git a/潇洒/js/米搜.js b/潇洒/js/米搜.js
deleted file mode 100644
index 0480bc7..0000000
--- a/潇洒/js/米搜.js
+++ /dev/null
@@ -1,52 +0,0 @@
-var rule = {
- title: '米搜',
- host: 'https://misoso.cc/',
- hostJs: '',
- headers: {
- 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36',
- },
- 编码: 'utf-8',
- timeout: 5000,
- url: 'https://misoso.cc/search?q=fyclass&format=video&page=fypage',
- filter_url: '',
- detailUrl: '',
- searchUrl: 'https://misoso.cc/search?q=**&format=video&exact=true&page=fypage',
- searchable: 1,
- quickSearch: 1,
- filterable: 1,
- class_name: '',
- class_url: '',
- proxy_rule: '',
- sniffer: false,
- isVideo: '',
- play_parse: true,
- parse_url: '',
- lazy: "js:\n input = 'push://' + input;\n ",
- limit: 9,
- double: false,
- // 推荐: '*',
- 一级: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'https://is2-ssl.mzstatic.com/image/thumb/Purple123/v4/49/25/97/49259775-1a6b-ba62-3c28-b27bf6712ade/source/1024x1024bb.jpg\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
- 二级: {
- title: 'h1&&Text',
- img: 'img&&src',
- desc: '.card-text:eq(2)&&Text;;;;',
- content: 'body&&.semi-space-loose-vertical&&a&&href',
- tabs: "js:TABS = ['米搜']",
- lists: "js:\n LISTS = [];\n let lists1 = pdfa(html, 'body&&.semi-space-loose-vertical').map(it => {\n let _tt = pdfh(it, 'span&&title');\n let _uu = pdfh(it, 'a&&href');\n return _tt + '$' + _uu;\n });\n LISTS.push(lists1);\n ",
- },
- 搜索: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'https://is2-ssl.mzstatic.com/image/thumb/Purple123/v4/49/25/97/49259775-1a6b-ba62-3c28-b27bf6712ade/source/1024x1024bb.jpg\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
- cate_exclude: '首页|留言|APP|下载|资讯|新闻|动态',
- tab_exclude: '猜你|喜欢|下载|剧情|榜|评论',
- 类型: '影视',
- homeUrl: 'https://misoso.cc/',
- 二级访问前: '',
- encoding: 'utf-8',
- search_encoding: '',
- 图片来源: '',
- 图片替换: '',
- play_json: [],
- pagecount: {},
- tab_remove: [],
- tab_order: [],
- tab_rename: {},
-}
\ No newline at end of file
diff --git a/潇洒/js/腾讯视频.js b/潇洒/js/腾讯视频.js
deleted file mode 100644
index 6c70846..0000000
--- a/潇洒/js/腾讯视频.js
+++ /dev/null
@@ -1,935 +0,0 @@
-globalThis.vod1 = function(ids) {
- let html1 = request('https://pbaccess.video.qq.com/trpc.videosearch.mobile_search.MultiTerminalSearch/MbSearch?vplatform=2', {
- body: {
- "version": "25042201",
- "clientType": 1,
- "filterValue": "",
- "uuid": "B1E50847-D25F-4C4B-BBA0-36F0093487F6",
- "retry": 0,
- "query": ids,
- "pagenum": 0,
- "isPrefetch": true,
- "pagesize": 30,
- "queryFrom": 0,
- "searchDatakey": "",
- "transInfo": "",
- "isneedQc": true,
- "preQid": "",
- "adClientInfo": "",
- "extraInfo": {
- "isNewMarkLabel": "1",
- "multi_terminal_pc": "1",
- "themeType": "1",
- "sugRelatedIds": "{}",
- "appVersion": ""
- }
- },
- headers: {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.139 Safari/537.36',
- 'Content-Type': 'application/json',
- 'origin': 'https://v.qq.com',
- 'referer': 'https://v.qq.com/'
- },
- 'method': 'POST'
- }, true);
- return html1;
-}
-var rule = {
- title: '腾云驾雾[官]',
- host: 'https://v.%71%71.com',
- // homeUrl: '/x/bu/pagesheet/list?_all=1&append=1&channel=choice&listpage=1&offset=0&pagesize=21&iarea=-1&sort=18',
- homeUrl: '/x/bu/pagesheet/list?_all=1&append=1&channel=cartoon&listpage=1&offset=0&pagesize=21&iarea=-1&sort=18',
- detailUrl: 'https://node.video.%71%71.com/x/api/float_vinfo2?cid=fyid',
- searchUrl: '/x/search/?q=**&stag=fypage',
- searchUrl: 'https://pbaccess.video.%71%71.com/trpc.videosearch.smartboxServer.HttpRountRecall/Smartbox?query=**&appID=3172&appKey=lGhFIPeD3HsO9xEp&pageNum=(fypage-1)&pageSize=10',
- searchUrl: '**',
- searchable: 2,
- filterable: 1,
- multi: 1,
- // url:'/channel/fyclass?listpage=fypage&channel=fyclass&sort=18&_all=1',
- url: '/x/bu/pagesheet/list?_all=1&append=1&channel=fyclass&listpage=1&offset=((fypage-1)*21)&pagesize=21&iarea=-1',
- // filter_url: 'sort={{fl.sort or 18}}&year={{fl.year}}&pay={{fl.pay}}',
- // filter_url: 'sort={{fl.sort or 75}}&year={{fl.year}}&pay={{fl.pay}}',
- filter_url: 'sort={{fl.sort or 75}}&iyear={{fl.iyear}}&year={{fl.year}}&itype={{fl.type}}&ifeature={{fl.feature}}&iarea={{fl.area}}&itrailer={{fl.itrailer}}&gender={{fl.sex}}',
- // filter: 'H4sIAAAAAAAAA+2UzUrDQBCA32XOEZLUJrGvIj0saaDBNisxBkIJCG3Fi4oepIg3EQoieqiH+vM23Zq+hRuaZLZ4ce9z2/lmd2d2+NgR+H0e+gF0DkdwFGTQgRMeJ2BAxIaSwvrqVnxcyzhlg9PttqjED2c/45cSy8DyIDcavr57q/lBw8XTd/E6qbnT8M3zTFyc72RtC/Jumd+2c8wy7KZ4nxSL5Z9uxHS+Gc+r83sWVp1eVttl4Dluk1h93YubWZVwduplAYuxoFguVp+P/y5om/Z+/YxyqfAW8pbKbeS2yi3kO/ebyE2Fy1nXXBm7DDzknspd5K7KHeSOytvI2+XAugYkKWlD2mhrM+RpSB8OmaNvTsriMEgycofc0XbHZ3HCeUTukDv67vTDQY/MIXO0zelxn5M4JI6mOPkvgswSEpgPAAA=',
- filter: {
- "choice": [{
- "key": "sort",
- "name": "排序",
- "value": [{
- "n": "最热",
- "v": "75"
- }, {
- "n": "最新",
- "v": "83"
- }, {
- "n": "好评",
- "v": "81"
- }]
- }, {
- "key": "iyear",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": "-1"
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }]
- }],
- "tv": [{
- "key": "sort",
- "name": "排序",
- "value": [{
- "n": "最热",
- "v": "75"
- }, {
- "n": "最新",
- "v": "79"
- }, {
- "n": "好评",
- "v": "16"
- }]
- }, {
- "key": "feature",
- "name": "类型",
- "value": [{
- "n": "全部",
- "v": "-1"
- }, {
- "n": "爱情",
- "v": "1"
- }, {
- "n": "古装",
- "v": "2"
- }, {
- "n": "悬疑",
- "v": "3"
- }, {
- "n": "都市",
- "v": "4"
- }, {
- "n": "家庭",
- "v": "5"
- }, {
- "n": "喜剧",
- "v": "6"
- }, {
- "n": "传奇",
- "v": "7"
- }, {
- "n": "武侠",
- "v": "8"
- }, {
- "n": "军旅",
- "v": "9"
- }, {
- "n": "权谋",
- "v": "10"
- }, {
- "n": "革命",
- "v": "11"
- }, {
- "n": "现实",
- "v": "13"
- }, {
- "n": "青春",
- "v": "14"
- }, {
- "n": "猎奇",
- "v": "15"
- }, {
- "n": "科幻",
- "v": "16"
- }, {
- "n": "竞技",
- "v": "17"
- }, {
- "n": "玄幻",
- "v": "18"
- }]
- }, {
- "key": "iyear",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": "-1"
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }]
- }],
- "movie": [{
- "key": "sort",
- "name": "排序",
- "value": [{
- "n": "最热",
- "v": "75"
- }, {
- "n": "最新",
- "v": "83"
- }, {
- "n": "好评",
- "v": "81"
- }]
- }, {
- "key": "type",
- "name": "类型",
- "value": [{
- "n": "全部",
- "v": "-1"
- }, {
- "n": "犯罪",
- "v": "4"
- }, {
- "n": "励志",
- "v": "2"
- }, {
- "n": "喜剧",
- "v": "100004"
- }, {
- "n": "热血",
- "v": "100061"
- }, {
- "n": "悬疑",
- "v": "100009"
- }, {
- "n": "爱情",
- "v": "100005"
- }, {
- "n": "科幻",
- "v": "100012"
- }, {
- "n": "恐怖",
- "v": "100010"
- }, {
- "n": "动画",
- "v": "100015"
- }, {
- "n": "战争",
- "v": "100006"
- }, {
- "n": "家庭",
- "v": "100017"
- }, {
- "n": "剧情",
- "v": "100022"
- }, {
- "n": "奇幻",
- "v": "100016"
- }, {
- "n": "武侠",
- "v": "100011"
- }, {
- "n": "历史",
- "v": "100021"
- }, {
- "n": "老片",
- "v": "100013"
- }, {
- "n": "西部",
- "v": "3"
- }, {
- "n": "记录片",
- "v": "100020"
- }]
- }, {
- "key": "year",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": "-1"
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }]
- }],
- "variety": [{
- "key": "sort",
- "name": "排序",
- "value": [{
- "n": "最热",
- "v": "75"
- }, {
- "n": "最新",
- "v": "23"
- }]
- }, {
- "key": "iyear",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": "-1"
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }]
- }],
- "cartoon": [{
- "key": "sort",
- "name": "排序",
- "value": [{
- "n": "最热",
- "v": "75"
- }, {
- "n": "最新",
- "v": "83"
- }, {
- "n": "好评",
- "v": "81"
- }]
- }, {
- "key": "area",
- "name": "地区",
- "value": [{
- "n": "全部",
- "v": "-1"
- }, {
- "n": "内地",
- "v": "1"
- }, {
- "n": "日本",
- "v": "2"
- }, {
- "n": "欧美",
- "v": "3"
- }, {
- "n": "其他",
- "v": "4"
- }]
- }, {
- "key": "type",
- "name": "类型",
- "value": [{
- "n": "全部",
- "v": "-1"
- }, {
- "n": "玄幻",
- "v": "9"
- }, {
- "n": "科幻",
- "v": "4"
- }, {
- "n": "武侠",
- "v": "13"
- }, {
- "n": "冒险",
- "v": "3"
- }, {
- "n": "战斗",
- "v": "5"
- }, {
- "n": "搞笑",
- "v": "1"
- }, {
- "n": "恋爱",
- "v": "7"
- }, {
- "n": "魔幻",
- "v": "6"
- }, {
- "n": "竞技",
- "v": "20"
- }, {
- "n": "悬疑",
- "v": "17"
- }, {
- "n": "日常",
- "v": "15"
- }, {
- "n": "校园",
- "v": "16"
- }, {
- "n": "真人",
- "v": "18"
- }, {
- "n": "推理",
- "v": "14"
- }, {
- "n": "历史",
- "v": "19"
- }, {
- "n": "经典",
- "v": "3"
- }, {
- "n": "其他",
- "v": "12"
- }]
- }, {
- "key": "iyear",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": "-1"
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }]
- }],
- "child": [{
- "key": "sort",
- "name": "排序",
- "value": [{
- "n": "最热",
- "v": "75"
- }, {
- "n": "最新",
- "v": "76"
- }, {
- "n": "好评",
- "v": "20"
- }]
- }, {
- "key": "sex",
- "name": "性别",
- "value": [{
- "n": "全部",
- "v": "-1"
- }, {
- "n": "女孩",
- "v": "1"
- }, {
- "n": "男孩",
- "v": "2"
- }]
- }, {
- "key": "area",
- "name": "地区",
- "value": [{
- "n": "全部",
- "v": "-1"
- }, {
- "n": "内地",
- "v": "3"
- }, {
- "n": "日本",
- "v": "2"
- }, {
- "n": "其他",
- "v": "1"
- }]
- }, {
- "key": "iyear",
- "name": "年龄段",
- "value": [{
- "n": "全部",
- "v": "-1"
- }, {
- "n": "0-3岁",
- "v": "1"
- }, {
- "n": "4-6岁",
- "v": "2"
- }, {
- "n": "7-9岁",
- "v": "3"
- }, {
- "n": "10岁以上",
- "v": "4"
- }, {
- "n": "全年龄段",
- "v": "7"
- }]
- }],
- "doco": [{
- "key": "sort",
- "name": "排序",
- "value": [{
- "n": "最热",
- "v": "75"
- }, {
- "n": "最新",
- "v": "74"
- }]
- }, {
- "key": "itrailer",
- "name": "出品方",
- "value": [{
- "n": "全部",
- "v": "-1"
- }, {
- "n": "BBC",
- "v": "1"
- }, {
- "n": "国家地理",
- "v": "4"
- }, {
- "n": "HBO",
- "v": "3175"
- }, {
- "n": "NHK",
- "v": "2"
- }, {
- "n": "历史频道",
- "v": "7"
- }, {
- "n": "ITV",
- "v": "3530"
- }, {
- "n": "探索频道",
- "v": "3174"
- }, {
- "n": "ZDF",
- "v": "3176"
- }, {
- "n": "腾讯自制",
- "v": "15"
- }, {
- "n": "合作机构",
- "v": "6"
- }, {
- "n": "其他",
- "v": "5"
- }]
- }, {
- "key": "type",
- "name": "类型",
- "value": [{
- "n": "全部",
- "v": "-1"
- }, {
- "n": "自然",
- "v": "4"
- }, {
- "n": "美食",
- "v": "10"
- }, {
- "n": "社会",
- "v": "3"
- }, {
- "n": "人文",
- "v": "6"
- }, {
- "n": "历史",
- "v": "1"
- }, {
- "n": "军事",
- "v": "2"
- }, {
- "n": "科技",
- "v": "8"
- }, {
- "n": "财经",
- "v": "14"
- }, {
- "n": "探险",
- "v": "15"
- }, {
- "n": "罪案",
- "v": "7"
- }, {
- "n": "竞技",
- "v": "12"
- }, {
- "n": "旅游",
- "v": "11"
- }]
- }]
- },
- headers: {
- 'User-Agent': 'PC_UA'
- },
- timeout: 5000,
- // class_parse:'.site_channel a;a&&Text;a&&href;channel/(.*)',
- cate_exclude: '会员|游戏|全部',
- // class_name: '精选&电视剧&电影&综艺&动漫&少儿&纪录片',
- // class_url: 'choice&tv&movie&variety&cartoon&child&doco',
- class_name: '精选&电影&电视剧&综艺&动漫&少儿&纪录片',
- class_url: 'choice&movie&tv&variety&cartoon&child&doco',
- limit: 20,
- // play_parse:true,
- // 手动调用解析请求json的url,此lazy不方便
- play_parse: true,
- lazy: $js.toString(() => {
- try {
- let api = "http://127.0.0.1:9978/proxy?do=seachdanmu&go=getuserjx&url=" + input.split("?")[0];
- console.log(api);
- let response = fetch(api, {
- method: 'get',
- headers: {
- 'User-Agent': 'okhttp/3.14.9',
- 'Content-Type': 'application/x-www-form-urlencoded'
- }
- });
-
- let bata = JSON.parse(response);
- log(bata)
- if (bata.url.includes("http")) {
- input = {
- header: {
- 'User-Agent': ""
- },
- parse: 0,
- url: bata.url,
- jx: 0,
- danmaku: 'http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=' + input.split("?")[0]
- };
- } else {
-
- input = {
- header: {
- 'User-Agent': ""
- },
- parse: 0,
- url: input.split("?")[0],
- jx: 1,
- danmaku: 'http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=' + input.split("?")[0]
- };
- }
- } catch {
- input = {
- header: {
- 'User-Agent': ""
- },
- parse: 0,
- url: input.split("?")[0],
- jx: 1,
- danmaku: 'http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=' + input.split("?")[0]
- };
- }
- }),
- 推荐: '.list_item;img&&alt;img&&src;a&&Text;a&&data-float',
- 一级: '.list_item;img&&alt;img&&src;a&&Text;a&&data-float',
- 二级: $js.toString(() => {
- VOD = {};
- let d = [];
- let video_list = [];
- let video_lists = [];
- let list = [];
- let QZOutputJson;
- let html = fetch(input, fetch_params);
- let sourceId = /get_playsource/.test(input) ? input.match(/id=(\d*?)&/)[1] : input.split("cid=")[1];
- let cid = sourceId;
- let detailUrl = "https://v.%71%71.com/detail/m/" + cid + ".html";
- log("详情页:" + detailUrl);
- pdfh = jsp.pdfh;
- pd = jsp.pd;
- try {
- let json = JSON.parse(html);
- VOD = {
- vod_url: input,
- vod_name: json.c.title,
- type_name: json.typ.join(","),
- vod_actor: json.nam.join(","),
- vod_year: json.c.year,
- vod_content: json.c.description,
- vod_remarks: json.rec,
- vod_pic: urljoin2(input, json.c.pic)
- }
- } catch (e) {
- log("解析片名海报等基础信息发生错误:" + e.message)
- }
- if (/get_playsource/.test(input)) {
- eval(html);
- let indexList = QZOutputJson.PlaylistItem.indexList;
- indexList.forEach(function(it) {
- let dataUrl = "https://s.video.qq.com/get_playsource?id=" + sourceId + "&plat=2&type=4&data_type=3&range=" + it + "&video_type=10&plname=qq&otype=json";
- eval(fetch(dataUrl, fetch_params));
- let vdata = QZOutputJson.PlaylistItem.videoPlayList;
- vdata.forEach(function(item) {
- d.push({
- title: item.title,
- pic_url: item.pic,
- desc: item.episode_number + "\t\t\t播放量:" + item.thirdLine,
- url: item.playUrl
- })
- });
- video_lists = video_lists.concat(vdata)
- })
- } else {
- let json = JSON.parse(html);
- video_lists = json.c.video_ids;
- let url = "https://v.qq.com/x/cover/" + sourceId + ".html";
- if (video_lists.length === 1) {
- let vid = video_lists[0];
- url = "https://v.qq.com/x/cover/" + cid + "/" + vid + ".html";
- d.push({
- title: "在线播放",
- url: url
- })
- } else if (video_lists.length > 1) {
- for (let i = 0; i < video_lists.length; i += 30) {
- video_list.push(video_lists.slice(i, i + 30))
- }
- video_list.forEach(function(it, idex) {
- let o_url = "https://union.video.qq.com/fcgi-bin/data?otype=json&tid=1804&appid=20001238&appkey=6c03bbe9658448a4&union_platform=1&idlist=" + it.join(",");
- let o_html = fetch(o_url, fetch_params);
- eval(o_html);
- QZOutputJson.results.forEach(function(it1) {
- it1 = it1.fields;
- let url = "https://v.qq.com/x/cover/" + cid + "/" + it1.vid + ".html";
- d.push({
- title: it1.title,
- pic_url: it1.pic160x90.replace("/160", ""),
- desc: it1.video_checkup_time,
- url: url,
- type: it1.category_map && it1.category_map.length > 1 ? it1.category_map[1] : ""
- })
- })
- })
- }
- }
- let yg = d.filter(function(it) {
- return it.type && it.type !== "正片"
- });
- let zp = d.filter(function(it) {
- return !(it.type && it.type !== "正片")
- });
- VOD.vod_play_from = yg.length < 1 ? "qq" : "qq$$$qq 预告及花絮";
- VOD.vod_play_url = yg.length < 1 ? d.map(function(it) {
- return it.title + "$" + it.url
- }).join("#") : [zp, yg].map(function(it) {
- return it.map(function(its) {
- return its.title + "$" + its.url
- }).join("#")
- }).join("$$$");
- }),
- 搜索: $js.toString(() => {
- let d = [];
- pdfa = jsp.pdfa;
- pdfh = jsp.pdfh;
- pd = jsp.pd;
- let html = request(input);
- let baseList = pdfa(html, "body&&.result_item_v");
- log(baseList.length);
- baseList.forEach(function(it) {
- let longText = pdfh(it, ".result_title&&a&&Text");
- let shortText = pdfh(it, ".type&&Text");
- let fromTag = pdfh(it, ".result_source&&Text");
- let score = pdfh(it, ".figure_info&&Text");
- let content = pdfh(it, ".desc_text&&Text");
- // let url = pdfh(it, ".result_title&&a&&href");
- let url = pdfh(it, "div&&r-data");
- // log(longText);
- // log(shortText);
- // log('url:'+url);
- let img = pd(it, ".figure_pic&&src");
- url = "https://node.video.qq.com/x/api/float_vinfo2?cid=" + url.match(/.*\/(.*?)\.html/)[1];
- log(shortText + "|" + url);
- if (fromTag.match(/腾讯/)) {
- d.push({
- title: longText.split(shortText)[0],
- img: img,
- url: url,
- content: content,
- desc: shortText + " " + score
- })
- }
- });
- setResult(d);
- }),
- 搜索: $js.toString(() => {
- let d = [];
- let html = request(input);
- let json = JSON.parse(html);
- if (json.data.smartboxItemList.length > 0) {
- let cid = json.data.smartboxItemList[0].basicDoc.id;
- let url = 'https://node.video.qq.com/x/api/float_vinfo2?cid=' + cid;
- let html1 = request(url);
- let data = JSON.parse(html1);
-
- d.push({
- title: data.c.title,
- img: data.c.pic,
- url: url,
- content: data.c.description,
- desc: data.rec
- });
- }
- setResult(d);
- }),
- 搜索: $js.toString(() => {
- let d = [];
- let mame = (input.split("/")[3]);
- let html = vod1(input.split("/")[3]);
- let json = JSON.parse(html);
-
- let list = json.data.normalList.itemList;
- console.log(json);
- log(list[0].videoInfo.title);
- list.forEach(function(it) {
- try {
- if (it.doc.id.length > 11) {
- d.push({
- title: it.videoInfo.title,
- img: it.videoInfo.imgUrl,
- url: it.doc.id,
- // content: "",
- //desc: "data.rec"
- });
- }
- } catch {
-
- }
-
- });
- let list2 = json.data.areaBoxList[0].itemList;
- list2.forEach(function(it) {
- try {
- if (it.doc.id.length > 11 && it.videoInfo.title.match(mame)) {
- d.push({
- title: it.videoInfo.title,
- img: it.videoInfo.imgUrl,
- url: it.doc.id,
- // content: "",
- //desc: "data.rec"
- });
- }
- } catch {
-
- }
-
- });
- setResult(d);
- })
-}
\ No newline at end of file
diff --git a/潇洒/js/芒果视频.js b/潇洒/js/芒果视频.js
deleted file mode 100644
index d8e7d09..0000000
--- a/潇洒/js/芒果视频.js
+++ /dev/null
@@ -1,843 +0,0 @@
-var rule = {
- title: '百忙无果[官]',
- host: 'https://pianku.api.%6d%67%74%76.com',
- homeUrl: '',
- // searchUrl: 'https://mobileso.bz.%6d%67%74%76.com/pc/search/v1?q=**&pn=fypage&pc=10',
- // 新版接口搜索变成v2并且加了验证,蛋疼
- // searchUrl: 'https://mobileso.bz.mgtv.com/pc/search/v2?allowedRC=1&src=mgtv&did=cf03b959-6945-4cb6-bcb3-88762459354d×tamp=2024-06-21T15%3A52%3A55Z&signVersion=1&signNonce=8dae67a1fafc4bda984ec8deb47666ad&q=**&pn=fypage&pc=10&corr=1&_support=10000000&signature=4e27fddcd2a1a66d6c1764ed6b74bab7',
- // 用手机的吧,搞不定这个
- searchUrl: 'https://mobileso.bz.%6d%67%74%76.com/msite/search/v2?q=**&pn=fypage&pc=10',
- detailUrl: 'https://pcweb.api.mgtv.com/episode/list?page=1&size=50&video_id=fyid',
- searchable: 2,
- quickSearch: 0,
- filterable: 1,
- multi: 1,
- // 分类链接fypage参数支持1个()表达式
- // https://www.mgtv.com/lib/3?lastp=list_index&kind=a1&year=all&chargeInfo=a1&sort=c2
- url: '/rider/list/pcweb/v3?platform=pcweb&channelId=fyclass&pn=fypage&pc=80&hudong=1&_support=10000000&kind=a1&area=a1',
- filter_url: 'year={{fl.year or "all"}}&sort={{fl.sort or "all"}}&chargeInfo={{fl.chargeInfo or "all"}}',
- headers: {
- 'User-Agent': 'PC_UA'
- },
- timeout: 5000,
- class_name: '电视剧&电影&综艺&动漫&纪录片&教育&少儿',
- class_url: '2&3&1&50&51&115&10',
- filter: {
- "1": [{
- "key": "chargeInfo",
- "name": "付费类型",
- "value": [{
- "n": "全部",
- "v": "all"
- }, {
- "n": "免费",
- "v": "b1"
- }, {
- "n": "vip",
- "v": "b2"
- }, {
- "n": "VIP用券",
- "v": "b3"
- }, {
- "n": "付费点播",
- "v": "b4"
- }]
- }, {
- "key": "sort",
- "name": "排序",
- "value": [{
- "n": "最新",
- "v": "c1"
- }, {
- "n": "最热",
- "v": "c2"
- }, {
- "n": "知乎高分",
- "v": "c4"
- }]
- }, {
- "key": "year",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": "all"
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }, {
- "n": "2009",
- "v": "2009"
- }, {
- "n": "2008",
- "v": "2008"
- }, {
- "n": "2007",
- "v": "2007"
- }, {
- "n": "2006",
- "v": "2006"
- }, {
- "n": "2005",
- "v": "2005"
- }, {
- "n": "2004",
- "v": "2004"
- }]
- }],
- "2": [{
- "key": "chargeInfo",
- "name": "付费类型",
- "value": [{
- "n": "全部",
- "v": "all"
- }, {
- "n": "免费",
- "v": "b1"
- }, {
- "n": "vip",
- "v": "b2"
- }, {
- "n": "VIP用券",
- "v": "b3"
- }, {
- "n": "付费点播",
- "v": "b4"
- }]
- }, {
- "key": "sort",
- "name": "排序",
- "value": [{
- "n": "最新",
- "v": "c1"
- }, {
- "n": "最热",
- "v": "c2"
- }, {
- "n": "知乎高分",
- "v": "c4"
- }]
- }, {
- "key": "year",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": "all"
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }, {
- "n": "2009",
- "v": "2009"
- }, {
- "n": "2008",
- "v": "2008"
- }, {
- "n": "2007",
- "v": "2007"
- }, {
- "n": "2006",
- "v": "2006"
- }, {
- "n": "2005",
- "v": "2005"
- }, {
- "n": "2004",
- "v": "2004"
- }]
- }],
- "3": [{
- "key": "chargeInfo",
- "name": "付费类型",
- "value": [{
- "n": "全部",
- "v": "all"
- }, {
- "n": "免费",
- "v": "b1"
- }, {
- "n": "vip",
- "v": "b2"
- }, {
- "n": "VIP用券",
- "v": "b3"
- }, {
- "n": "付费点播",
- "v": "b4"
- }]
- }, {
- "key": "sort",
- "name": "排序",
- "value": [{
- "n": "最新",
- "v": "c1"
- }, {
- "n": "最热",
- "v": "c2"
- }, {
- "n": "知乎高分",
- "v": "c4"
- }]
- }, {
- "key": "year",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": "all"
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }, {
- "n": "2009",
- "v": "2009"
- }, {
- "n": "2008",
- "v": "2008"
- }, {
- "n": "2007",
- "v": "2007"
- }, {
- "n": "2006",
- "v": "2006"
- }, {
- "n": "2005",
- "v": "2005"
- }, {
- "n": "2004",
- "v": "2004"
- }]
- }],
- "50": [{
- "key": "chargeInfo",
- "name": "付费类型",
- "value": [{
- "n": "全部",
- "v": "all"
- }, {
- "n": "免费",
- "v": "b1"
- }, {
- "n": "vip",
- "v": "b2"
- }, {
- "n": "VIP用券",
- "v": "b3"
- }, {
- "n": "付费点播",
- "v": "b4"
- }]
- }, {
- "key": "sort",
- "name": "排序",
- "value": [{
- "n": "最新",
- "v": "c1"
- }, {
- "n": "最热",
- "v": "c2"
- }, {
- "n": "知乎高分",
- "v": "c4"
- }]
- }, {
- "key": "year",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": "all"
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }, {
- "n": "2009",
- "v": "2009"
- }, {
- "n": "2008",
- "v": "2008"
- }, {
- "n": "2007",
- "v": "2007"
- }, {
- "n": "2006",
- "v": "2006"
- }, {
- "n": "2005",
- "v": "2005"
- }, {
- "n": "2004",
- "v": "2004"
- }]
- }],
- "51": [{
- "key": "chargeInfo",
- "name": "付费类型",
- "value": [{
- "n": "全部",
- "v": "all"
- }, {
- "n": "免费",
- "v": "b1"
- }, {
- "n": "vip",
- "v": "b2"
- }, {
- "n": "VIP用券",
- "v": "b3"
- }, {
- "n": "付费点播",
- "v": "b4"
- }]
- }, {
- "key": "sort",
- "name": "排序",
- "value": [{
- "n": "最新",
- "v": "c1"
- }, {
- "n": "最热",
- "v": "c2"
- }, {
- "n": "知乎高分",
- "v": "c4"
- }]
- }, {
- "key": "year",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": "all"
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }, {
- "n": "2009",
- "v": "2009"
- }, {
- "n": "2008",
- "v": "2008"
- }, {
- "n": "2007",
- "v": "2007"
- }, {
- "n": "2006",
- "v": "2006"
- }, {
- "n": "2005",
- "v": "2005"
- }, {
- "n": "2004",
- "v": "2004"
- }]
- }],
- "115": [{
- "key": "chargeInfo",
- "name": "付费类型",
- "value": [{
- "n": "全部",
- "v": "all"
- }, {
- "n": "免费",
- "v": "b1"
- }, {
- "n": "vip",
- "v": "b2"
- }, {
- "n": "VIP用券",
- "v": "b3"
- }, {
- "n": "付费点播",
- "v": "b4"
- }]
- }, {
- "key": "sort",
- "name": "排序",
- "value": [{
- "n": "最新",
- "v": "c1"
- }, {
- "n": "最热",
- "v": "c2"
- }, {
- "n": "知乎高分",
- "v": "c4"
- }]
- }, {
- "key": "year",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": "all"
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }, {
- "n": "2009",
- "v": "2009"
- }, {
- "n": "2008",
- "v": "2008"
- }, {
- "n": "2007",
- "v": "2007"
- }, {
- "n": "2006",
- "v": "2006"
- }, {
- "n": "2005",
- "v": "2005"
- }, {
- "n": "2004",
- "v": "2004"
- }]
- }]
- },
- limit: 20,
- play_parse: true,
- lazy: $js.toString(() => {
- try {
- let api = "" + input.split("?")[0];
- console.log(api);
- let response = fetch(api, {
- method: 'get',
- headers: {
- 'User-Agent': 'okhttp/3.14.9',
- 'Content-Type': 'application/x-www-form-urlencoded'
- }
- });
- let bata = JSON.parse(response);
- if (bata.url.includes("mgtv")) {
- input = {
- parse: 0,
- url: bata.url,
- jx: 0,
- danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0]
- };
- } else {
- input = {
- parse: 0,
- url: input.split("?")[0],
- jx: 1,
- danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0]
- };
- }
- } catch {
- input = {
- parse: 0,
- url: input.split("?")[0],
- jx: 1,
- danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0]
- };
- }
- }),
- // 手动调用解析请求json的url,此lazy不方便
- // lazy:'js:print(input);fetch_params.headers["user-agent"]=MOBILE_UA;let html=request(input);let rurl=html.match(/window\\.open\\(\'(.*?)\',/)[1];rurl=urlDeal(rurl);input={parse:1,url:rurl};',
- // 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float',
- 一级: 'json:data.hitDocs;title;img;updateInfo||rightCorner.text;playPartId',
- // 一级:'json:data.hitDocs;title;img;updateInfo;playPartId',
- 二级: $js.toString(() => {
- fetch_params.headers.Referer = "https://www.mgtv.com";
- fetch_params.headers["User-Agent"] = MOBILE_UA;
- pdfh = jsp.pdfh;
- pdfa = jsp.pdfa;
- pd = jsp.pd;
- VOD = {};
- let d = [];
- let html = request(input);
- let json = JSON.parse(html);
- let host = "https://www.mgtv.com";
- let ourl = json.data.list.length > 0 ? json.data.list[0].url : json.data.series[0].url;
- if (!/^http/.test(ourl)) {
- ourl = host + ourl
- }
- fetch_params.headers["User-Agent"] = MOBILE_UA;
- html = request(ourl);
- if (html.includes("window.location =")) {
- print("开始获取ourl");
- ourl = pdfh(html, "meta[http-equiv=refresh]&&content").split("url=")[1];
- print("获取到ourl:" + ourl);
- html = request(ourl)
- }
- try {
- let details = pdfh(html, ".m-details&&Html").replace(/h1>/, "h6>").replace(/div/g, "br");
- print(details);
- let actor = "",
- director = "",
- time = "";
- if (/播出时间/.test(details)) {
- actor = pdfh(html, "p:eq(5)&&Text").substr(0, 25);
- director = pdfh(html, "p:eq(4)&&Text");
- time = pdfh(html, "p:eq(3)&&Text")
- } else {
- actor = pdfh(html, "p:eq(4)&&Text").substr(0, 25);
- director = pdfh(html, "p:eq(3)&&Text");
- time = "已完结"
- }
- let _img = pd(html, ".video-img&&img&&src");
- let JJ = pdfh(html, ".desc&&Text").split("简介:")[1];
- let _desc = time;
- VOD.vod_name = pdfh(html, ".vt-txt&&Text");
- VOD.type_name = pdfh(html, "p:eq(0)&&Text").substr(0, 6);
- VOD.vod_area = pdfh(html, "p:eq(1)&&Text");
- VOD.vod_actor = actor;
- VOD.vod_director = director;
- VOD.vod_remarks = _desc;
- VOD.vod_pic = _img;
- VOD.vod_content = JJ;
- if (!VOD.vod_name) {
- VOD.vod_name = VOD.type_name;
- }
- } catch (e) {
- log("获取影片信息发生错误:" + e.message)
- }
-
- function getRjpg(imgUrl, xs) {
- xs = xs || 3;
- let picSize = /jpg_/.test(imgUrl) ? imgUrl.split("jpg_")[1].split(".")[0] : false;
- let rjpg = false;
- if (picSize) {
- let a = parseInt(picSize.split("x")[0]) * xs;
- let b = parseInt(picSize.split("x")[1]) * xs;
- rjpg = a + "x" + b + ".jpg"
- }
- let img = /jpg_/.test(imgUrl) && rjpg ? imgUrl.replace(imgUrl.split("jpg_")[1], rjpg) : imgUrl;
- return img
- }
-
- if (json.data.total === 1 && json.data.list.length === 1) {
- let data = json.data.list[0];
- let url = "https://www.mgtv.com" + data.url;
- d.push({
- title: data.t4,
- desc: data.t2,
- pic_url: getRjpg(data.img),
- url: url
- })
- } else if (json.data.list.length > 1) {
- for (let i = 1; i <= json.data.total_page; i++) {
- if (i > 1) {
- json = JSON.parse(fetch(input.replace("page=1", "page=" + i), {}))
- }
- json.data.list.forEach(function(data) {
- let url = "https://www.mgtv.com" + data.url;
- if (data.isIntact == "1") {
- d.push({
- title: data.t4,
- desc: data.t2,
- pic_url: getRjpg(data.img),
- url: url
- })
- }
- })
- }
- } else {
- print(input + "暂无片源")
- }
- VOD.vod_play_from = "mgtv";
- VOD.vod_play_url = d.map(function(it) {
- return it.title + "$" + it.url
- }).join("#");
- setResult(d);
- }),
-
- 搜索: $js.toString(() => {
- fetch_params.headers.Referer = "https://www.mgtv.com";
- fetch_params.headers["User-Agent"] = MOBILE_UA;
- let d = [];
- let html = request(input);
- let json = JSON.parse(html);
- json.data.contents.forEach(function(data) {
- if (data.type && data.type == 'media') {
- let item = data.data[0];
- let desc = item.desc.join(',');
- let fyclass = '';
- if (item.source === "imgo") {
- let img = item.img ? item.img : '';
- try {
- fyclass = item.rpt.match(/idx=(.*?)&/)[1] + '$';
- } catch (e) {
- log(e.message);
- fyclass = '';
- }
- log(fyclass);
- d.push({
- title: item.title.replace(/|<\/B>/g, ''),
- img: img,
- content: '',
- desc: desc,
- url: fyclass + item.url.match(/.*\/(.*?)\.html/)[1]
- })
- }
- }
- });
- setResult(d);
- }),
-}
\ No newline at end of file
diff --git a/潇洒/js/花子动漫.js b/潇洒/js/花子动漫.js
deleted file mode 100644
index f669f44..0000000
--- a/潇洒/js/花子动漫.js
+++ /dev/null
@@ -1,970 +0,0 @@
-var rule = {
- title: '花子动漫[漫]',
- host: 'https://www.huazidm.com',
- class_name: 'TV动漫&剧场&特摄',
- class_url: '1&2&3',
- searchUrl: '/index.php/ajax/suggest?mid=1&wd=**&limit=50',
- searchUrl: '/vodsearch/**----------fypage---.html',
- searchable: 2,
- quickSearch: 0,
- headers: {
- 'User-Agent': 'MOBILE_UA',
- },
- url: '/index.php/api/vod#type=fyclassfyfilter&page=fypage',
- filterable: 0,
- filter_url: '&class={{fl.class}}&year={{fl.year}}&letter={{fl.letter}}&by={{fl.by}}',
- filter: {
- "1": [{
- "key": "class",
- "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": "腐"
- }]
- }, {
- "key": "year",
- "name": "年份",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }, {
- "n": "2009",
- "v": "2009"
- }, {
- "n": "2008",
- "v": "2008"
- }, {
- "n": "2007",
- "v": "2007"
- }, {
- "n": "2006",
- "v": "2006"
- }, {
- "n": "2005",
- "v": "2005"
- }, {
- "n": "2004",
- "v": "2004"
- }, {
- "n": "2003",
- "v": "2003"
- }, {
- "n": "2002",
- "v": "2002"
- }, {
- "n": "2001",
- "v": "2001"
- }, {
- "n": "2000",
- "v": "2000"
- }, {
- "n": "1999",
- "v": "1999"
- }, {
- "n": "1998",
- "v": "1998"
- }, {
- "n": "1997",
- "v": "1997"
- }, {
- "n": "1996",
- "v": "1996"
- }, {
- "n": "1995",
- "v": "1995"
- }, {
- "n": "1994",
- "v": "1994"
- }, {
- "n": "1993",
- "v": "1993"
- }, {
- "n": "1992",
- "v": "1992"
- }, {
- "n": "1991",
- "v": "1991"
- }, {
- "n": "1990",
- "v": "1990"
- }, {
- "n": "1989",
- "v": "1989"
- }, {
- "n": "1988",
- "v": "1988"
- }, {
- "n": "1987",
- "v": "1987"
- }, {
- "n": "1986",
- "v": "1986"
- }, {
- "n": "1985",
- "v": "1985"
- }, {
- "n": "1984",
- "v": "1984"
- }, {
- "n": "1983",
- "v": "1983"
- }, {
- "n": "1982",
- "v": "1982"
- }, {
- "n": "1981",
- "v": "1981"
- }, {
- "n": "1980",
- "v": "1980"
- }]
- }, {
- "key": "letter",
- "name": "字母",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "A",
- "v": "A"
- }, {
- "n": "B",
- "v": "B"
- }, {
- "n": "C",
- "v": "C"
- }, {
- "n": "D",
- "v": "D"
- }, {
- "n": "E",
- "v": "E"
- }, {
- "n": "F",
- "v": "F"
- }, {
- "n": "G",
- "v": "G"
- }, {
- "n": "H",
- "v": "H"
- }, {
- "n": "I",
- "v": "I"
- }, {
- "n": "J",
- "v": "J"
- }, {
- "n": "K",
- "v": "K"
- }, {
- "n": "L",
- "v": "L"
- }, {
- "n": "M",
- "v": "M"
- }, {
- "n": "N",
- "v": "N"
- }, {
- "n": "O",
- "v": "O"
- }, {
- "n": "P",
- "v": "P"
- }, {
- "n": "Q",
- "v": "Q"
- }, {
- "n": "R",
- "v": "R"
- }, {
- "n": "S",
- "v": "S"
- }, {
- "n": "T",
- "v": "T"
- }, {
- "n": "U",
- "v": "U"
- }, {
- "n": "V",
- "v": "V"
- }, {
- "n": "W",
- "v": "W"
- }, {
- "n": "X",
- "v": "X"
- }, {
- "n": "Y",
- "v": "Y"
- }, {
- "n": "Z",
- "v": "Z"
- }, {
- "n": "0-9",
- "v": "0-9"
- }]
- }, {
- "key": "by",
- "name": "时间",
- "value": [{
- "n": "按最新",
- "v": "time"
- }, {
- "n": "按最热",
- "v": "hits"
- }, {
- "n": "按评分",
- "v": "score"
- }]
- }],
- "2": [{
- "key": "class",
- "name": "类型",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "异世界",
- "v": "异世界"
- }, {
- "n": "百合",
- "v": "百合"
- }, {
- "n": "热血",
- "v": "热血"
- }, {
- "n": "穿越",
- "v": "穿越"
- }, {
- "n": "奇幻",
- "v": "奇幻"
- }, {
- "n": "战斗",
- "v": "战斗"
- }, {
- "n": "搞笑",
- "v": "搞笑"
- }, {
- "n": "日常",
- "v": "日常"
- }, {
- "n": "科幻",
- "v": "科幻"
- }, {
- "n": "治愈",
- "v": "治愈"
- }, {
- "n": "校园",
- "v": "校园"
- }, {
- "n": "恋爱",
- "v": "恋爱"
- }, {
- "n": "冒险",
- "v": "冒险"
- }, {
- "n": "机战",
- "v": "机战"
- }, {
- "n": "音乐",
- "v": "音乐"
- }]
- }, {
- "key": "year",
- "name": "年份",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }, {
- "n": "2009",
- "v": "2009"
- }, {
- "n": "2008",
- "v": "2008"
- }, {
- "n": "2007",
- "v": "2007"
- }, {
- "n": "2006",
- "v": "2006"
- }, {
- "n": "2005",
- "v": "2005"
- }, {
- "n": "2004",
- "v": "2004"
- }, {
- "n": "2003",
- "v": "2003"
- }, {
- "n": "2002",
- "v": "2002"
- }, {
- "n": "2001",
- "v": "2001"
- }, {
- "n": "2000",
- "v": "2000"
- }, {
- "n": "1999",
- "v": "1999"
- }, {
- "n": "1998",
- "v": "1998"
- }, {
- "n": "1997",
- "v": "1997"
- }, {
- "n": "1996",
- "v": "1996"
- }, {
- "n": "1995",
- "v": "1995"
- }, {
- "n": "1994",
- "v": "1994"
- }, {
- "n": "1993",
- "v": "1993"
- }, {
- "n": "1992",
- "v": "1992"
- }, {
- "n": "1991",
- "v": "1991"
- }, {
- "n": "1990",
- "v": "1990"
- }, {
- "n": "1989",
- "v": "1989"
- }, {
- "n": "1988",
- "v": "1988"
- }, {
- "n": "1987",
- "v": "1987"
- }, {
- "n": "1986",
- "v": "1986"
- }, {
- "n": "1985",
- "v": "1985"
- }, {
- "n": "1984",
- "v": "1984"
- }, {
- "n": "1983",
- "v": "1983"
- }, {
- "n": "1982",
- "v": "1982"
- }, {
- "n": "1981",
- "v": "1981"
- }, {
- "n": "1980",
- "v": "1980"
- }]
- }, {
- "key": "letter",
- "name": "字母",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "A",
- "v": "A"
- }, {
- "n": "B",
- "v": "B"
- }, {
- "n": "C",
- "v": "C"
- }, {
- "n": "D",
- "v": "D"
- }, {
- "n": "E",
- "v": "E"
- }, {
- "n": "F",
- "v": "F"
- }, {
- "n": "G",
- "v": "G"
- }, {
- "n": "H",
- "v": "H"
- }, {
- "n": "I",
- "v": "I"
- }, {
- "n": "J",
- "v": "J"
- }, {
- "n": "K",
- "v": "K"
- }, {
- "n": "L",
- "v": "L"
- }, {
- "n": "M",
- "v": "M"
- }, {
- "n": "N",
- "v": "N"
- }, {
- "n": "O",
- "v": "O"
- }, {
- "n": "P",
- "v": "P"
- }, {
- "n": "Q",
- "v": "Q"
- }, {
- "n": "R",
- "v": "R"
- }, {
- "n": "S",
- "v": "S"
- }, {
- "n": "T",
- "v": "T"
- }, {
- "n": "U",
- "v": "U"
- }, {
- "n": "V",
- "v": "V"
- }, {
- "n": "W",
- "v": "W"
- }, {
- "n": "X",
- "v": "X"
- }, {
- "n": "Y",
- "v": "Y"
- }, {
- "n": "Z",
- "v": "Z"
- }, {
- "n": "0-9",
- "v": "0-9"
- }]
- }, {
- "key": "by",
- "name": "时间",
- "value": [{
- "n": "按最新",
- "v": "time"
- }, {
- "n": "按最热",
- "v": "hits"
- }, {
- "n": "按评分",
- "v": "score"
- }]
- }],
- "3": [{
- "key": "class",
- "name": "类型",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "动作",
- "v": "动作"
- }, {
- "n": "奇幻",
- "v": "奇幻"
- }, {
- "n": "科幻",
- "v": "科幻"
- }]
- }, {
- "key": "year",
- "name": "年份",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "2025"
- }, {
- "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"
- }, {
- "n": "2009",
- "v": "2009"
- }, {
- "n": "2008",
- "v": "2008"
- }, {
- "n": "2007",
- "v": "2007"
- }, {
- "n": "2006",
- "v": "2006"
- }, {
- "n": "2005",
- "v": "2005"
- }, {
- "n": "2004",
- "v": "2004"
- }, {
- "n": "2003",
- "v": "2003"
- }, {
- "n": "2002",
- "v": "2002"
- }, {
- "n": "2001",
- "v": "2001"
- }, {
- "n": "2000",
- "v": "2000"
- }, {
- "n": "1999",
- "v": "1999"
- }, {
- "n": "1998",
- "v": "1998"
- }, {
- "n": "1997",
- "v": "1997"
- }, {
- "n": "1996",
- "v": "1996"
- }, {
- "n": "1995",
- "v": "1995"
- }, {
- "n": "1994",
- "v": "1994"
- }, {
- "n": "1993",
- "v": "1993"
- }, {
- "n": "1992",
- "v": "1992"
- }, {
- "n": "1991",
- "v": "1991"
- }, {
- "n": "1990",
- "v": "1990"
- }, {
- "n": "1989",
- "v": "1989"
- }, {
- "n": "1988",
- "v": "1988"
- }, {
- "n": "1987",
- "v": "1987"
- }, {
- "n": "1986",
- "v": "1986"
- }, {
- "n": "1985",
- "v": "1985"
- }, {
- "n": "1984",
- "v": "1984"
- }, {
- "n": "1983",
- "v": "1983"
- }, {
- "n": "1982",
- "v": "1982"
- }, {
- "n": "1981",
- "v": "1981"
- }, {
- "n": "1980",
- "v": "1980"
- }]
- }, {
- "key": "letter",
- "name": "字母",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "A",
- "v": "A"
- }, {
- "n": "B",
- "v": "B"
- }, {
- "n": "C",
- "v": "C"
- }, {
- "n": "D",
- "v": "D"
- }, {
- "n": "E",
- "v": "E"
- }, {
- "n": "F",
- "v": "F"
- }, {
- "n": "G",
- "v": "G"
- }, {
- "n": "H",
- "v": "H"
- }, {
- "n": "I",
- "v": "I"
- }, {
- "n": "J",
- "v": "J"
- }, {
- "n": "K",
- "v": "K"
- }, {
- "n": "L",
- "v": "L"
- }, {
- "n": "M",
- "v": "M"
- }, {
- "n": "N",
- "v": "N"
- }, {
- "n": "O",
- "v": "O"
- }, {
- "n": "P",
- "v": "P"
- }, {
- "n": "Q",
- "v": "Q"
- }, {
- "n": "R",
- "v": "R"
- }, {
- "n": "S",
- "v": "S"
- }, {
- "n": "T",
- "v": "T"
- }, {
- "n": "U",
- "v": "U"
- }, {
- "n": "V",
- "v": "V"
- }, {
- "n": "W",
- "v": "W"
- }, {
- "n": "X",
- "v": "X"
- }, {
- "n": "Y",
- "v": "Y"
- }, {
- "n": "Z",
- "v": "Z"
- }, {
- "n": "0-9",
- "v": "0-9"
- }]
- }, {
- "key": "by",
- "name": "时间",
- "value": [{
- "n": "按最新",
- "v": "time"
- }, {
- "n": "按最热",
- "v": "hits"
- }, {
- "n": "按评分",
- "v": "score"
- }]
- }]
- },
- filter_def: {},
- detailUrl: '/voddetail/fyid.html',
- play_parse: true,
- sniffer: 1,
- is_video: 'obj/tos|bd.xhscdn|/ugc/',
- lazy: $js.toString(() => {
- input = {
- parse: 1,
- url: input,
- //js:'try{let urls=Array.from(document.querySelectorAll("iframe")).filter(x=>x.src.includes("?url="));if(urls){location.href=urls[0].src}}catch{}document.querySelector("button").click()',
- js: 'try{location.href=document.querySelector("#playleft iframe").src}catch{}document.querySelector("button.swal-button--confirm").click()',
- parse_extra: '&is_pc=1&custom_regex=' + rule.is_video,
- }
- }),
- limit: 6,
- 推荐: '.list-vod.flex .public-list-box;a&&title;.lazy&&data-original;.public-list-prb&&Text;a&&href',
- 一级: $js.toString(() => {
- 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',
- 搜索: $js.toString(() => {
- let html = fetch(input);
- let list = pdfa(html, ".public-list-box");
- VODS = list.map(x => {
- return {
- vod_name: pdfh(x, ".thumb-txt&&Text"),
- vod_pic: pdfh(x, ".lazy&&data-src"),
- vod_remarks: pdfh(x, ".public-list-prb&&Text"),
- vod_content: pdfh(x, ".thumb-blurb&&Text"),
- vod_id: pdfh(x, "a&&href")
- }
- });
- }),
- 图片替换: '&=>&'
-}
\ No newline at end of file
diff --git a/潇洒/js/路漫漫.js b/潇洒/js/路漫漫.js
deleted file mode 100644
index d781efa..0000000
--- a/潇洒/js/路漫漫.js
+++ /dev/null
@@ -1,549 +0,0 @@
-var rule = {
- title: "路漫漫",
- host: "http://www.lmm36.com",
- url: "/vod/show/id/fyclassfyfilter.html",
- searchUrl: '/vod/search/page/fypage/wd/**.html',
- searchable: 2,
- quickSearch: 0,
- filterable: 1,
- filter: {
- "3": [{
- "key": "年代",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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": "更早",
- "v": "/year/2014-1980"
- }]
- }, {
- "key": "排序",
- "name": "排序",
- "value": [{
- "n": "最近更新",
- "v": "/by/time"
- }, {
- "n": "最高人气",
- "v": "/by/hits"
- }, {
- "n": "最高评分",
- "v": "/by/score"
- }, {
- "n": "最多点赞",
- "v": "/by/up"
- }]
- }],
- "4": [{
- "key": "年代",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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": "更早",
- "v": "/year/2014-1980"
- }]
- }, {
- "key": "排序",
- "name": "排序",
- "value": [{
- "n": "最近更新",
- "v": "/by/time"
- }, {
- "n": "最高人气",
- "v": "/by/hits"
- }, {
- "n": "最高评分",
- "v": "/by/score"
- }, {
- "n": "最多点赞",
- "v": "/by/up"
- }]
- }],
- "5": [{
- "key": "年代",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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": "更早",
- "v": "/year/2014-1980"
- }]
- }, {
- "key": "排序",
- "name": "排序",
- "value": [{
- "n": "最近更新",
- "v": "/by/time"
- }, {
- "n": "最高人气",
- "v": "/by/hits"
- }, {
- "n": "最高评分",
- "v": "/by/score"
- }, {
- "n": "最多点赞",
- "v": "/by/up"
- }]
- }],
- "6": [{
- "key": "年代",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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": "更早",
- "v": "/year/2014-1980"
- }]
- }, {
- "key": "排序",
- "name": "排序",
- "value": [{
- "n": "最近更新",
- "v": "/by/time"
- }, {
- "n": "最高人气",
- "v": "/by/hits"
- }, {
- "n": "最高评分",
- "v": "/by/score"
- }, {
- "n": "最多点赞",
- "v": "/by/up"
- }]
- }],
- "7": [{
- "key": "年代",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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": "更早",
- "v": "/year/2014-1980"
- }]
- }, {
- "key": "排序",
- "name": "排序",
- "value": [{
- "n": "最近更新",
- "v": "/by/time"
- }, {
- "n": "最高人气",
- "v": "/by/hits"
- }, {
- "n": "最高评分",
- "v": "/by/score"
- }, {
- "n": "最多点赞",
- "v": "/by/up"
- }]
- }],
- "8": [{
- "key": "年代",
- "name": "年代",
- "value": [{
- "n": "全部",
- "v": ""
- }, {
- "n": "2025",
- "v": "/year/2025"
- }, {
- "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": "更早",
- "v": "/year/2014-1980"
- }]
- }, {
- "key": "排序",
- "name": "排序",
- "value": [{
- "n": "最近更新",
- "v": "/by/time"
- }, {
- "n": "最高人气",
- "v": "/by/hits"
- }, {
- "n": "最高评分",
- "v": "/by/score"
- }, {
- "n": "最多点赞",
- "v": "/by/up"
- }]
- }]
- },
- 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(() => {
- function getDAesString(token) {
- eval(getCryptoJS());
- var key = CryptoJS.enc.Utf8.parse("ejjooopppqqqrwww");
-
- var iv = CryptoJS.enc.Utf8.parse("1348987635684651");
-
- var token = CryptoJS.AES.decrypt(token, key, {
- iv: iv,
- mode: CryptoJS.mode.CBC,
- padding: CryptoJS.pad.Pkcs7,
- });
-
- return token.toString(CryptoJS.enc.Utf8);
- }
-
- var html = JSON.parse(request(input).match(/r player_.*?=(.*?))[1]);
- var url = html.url;
- var from = html.from;
- if (html.encrypt == "1") {
- url = unescape(url);
- } else if (html.encrypt == "2") {
- url = unescape(base64Decode(url));
- }
- if (/\.mp4|\.m3u8|\.flv/.test(url)) {
- input = {
- parse: 0,
- url: url.split("&")[0],
- js: ''
- };
- } else {
- var jsh = request(HOST + "/static/player/" + from + ".js", {
- headers: {
- Referer: input
- },
- }).match(/\.src\s*=\s*(.*?);/)[1];
- //log(MY_HOME);
- if (/type=/.test(jsh)) {
- jsh = jsh
- .replace(/[\+\s']/g, "")
- .replace(/MacPlayer.Parse/, "")
- .replace(/MacPlayer.PlayUrl/, url)
- .replace(/window.location.href/, input);
- var playht = fetch(jsh, {
- headers: {
- Referer: HOST
- }
- });
- } else {
- jsh = jsh
- .replace(/[\+\s']/g, "")
- .replace(/MacPlayer.Parse/, "")
- .replace(/MacPlayer.PlayUrl/, url)
- .replace(/window.location.href/, input);
-
- jsh = JSON.parse(
- fetch(jsh, {
- headers: {
- Referer: HOST
- },
- onlyHeaders: true
- })
- ).url;
- var playht = fetch(jsh, {
- headers: {
- Referer: HOST
- }
- });
- }
-
- var postapi = jsh.match(/^(.*?\/\/.*?\/.*?\/)/)[1];
-
- var posturl = postapi + playht.match(/post\("(.*?)"/)[1];
- if (/act\s*=/.test(playht)) {
- var vid = playht.match(/vid\s*=\s*"(.*?)"/)[1];
- var t = playht.match(/var\s*t\s*=\s*"(.*?)"/)[1];
- var token = playht.match(/token\s*=\s*"(.*?)"/)[1];
- var act = playht.match(/act\s*=\s*"(.*?)"/)[1];
- var play = playht.match(/play\s*=\s*"(.*?)"/)[1];
- token = getDAesString(token);
-
- var data = JSON.parse(
- post(posturl, {
- headers: {
- Referer: HOST
- },
- body: {
- vid: vid,
- t: t,
- token: token,
- act: act,
- play: play,
- },
- timeout: 5000
- })
- );
- input = {
- parse: 0,
- url: data.url,
- js: ''
- };
- } else {
- var key = "";
-
- playht.match(/var (\w+)="(.*?)";/g).forEach(function(list) {
- key += list.match(/"(.*?)"/)[1];
- });
- const bodys = JSON.parse(
- playht
- .match(/post\(.*?,(.*?),\n/)[1]
- .replace(/"keyyy"\s*:\s*''.*?''/, '"keyyy" : "' + key + '"')
- );
- var data = JSON.parse(
- post(posturl, {
- headers: {
- Referer: HOST
- },
- body: bodys
- })
- );
- if (data.ext == "xgplayer") {
- var dataurl =
- "https://yun.366day.site/mp4hls/xgplayer.php?vid=" + data.url;
- var video = fetch(dataurl, {
- headers: {
- Referer: jsh
- }
- }).match(
- /"url": "(.*?)"/
- )[1];
- input = {
- parse: 0,
- url: video,
- js: ''
- };
- } else if (data.ext == "hls" || data.ext == "hls_list") {
- input = {
- parse: 0,
- url: decodeURIComponent(data.url),
- js: ''
- };
- } else {
- input = {
- parse: 0,
- url: data.url,
- 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/潇洒/js/采集之王.js b/潇洒/js/采集之王.js
deleted file mode 100644
index 3bc5d96..0000000
--- a/潇洒/js/采集之王.js
+++ /dev/null
@@ -1,378 +0,0 @@
-globalThis.getRandomItem = function(items) {
- return items[Math.random() * items.length | 0];
-}
-var rule = {
- title: '采集之王[合]',
- author: '道长',
- version: '20240706 beta17',
- update_info: ``.trim(),
- host: '',
- homeTid: '',
- homeUrl: '/api.php/provide/vod/?ac=detail&t={{rule.homeTid}}',
- detailUrl: '/api.php/provide/vod/?ac=detail&ids=fyid',
- searchUrl: '/api.php/provide/vod/?wd=**&pg=#TruePage##page=fypage',
- classUrl: '/api.php/provide/vod/',
- url: '/api.php/provide/vod/?ac=detail&pg=fypage&t=fyfilter',
- filter_url: '{{fl.类型}}',
- headers: {
- 'User-Agent': 'MOBILE_UA'
- },
- timeout: 5000,
- limit: 20,
- search_limit: 10,
- searchable: 1,
- quickSearch: 0,
- filterable: 1,
- play_parse: true,
- parse_url: '',
- search_match: false,
- search_pic: true,
- 预处理: $js.toString(() => {
- function getClasses(item) {
- let classes = [];
- if (item.class_name && item.class_url) {
- if (!/&|电影|电视剧|综艺|动漫[\u4E00-\u9FA5]+/.test(item.class_name)) {
- try {
- item.class_name = ungzip(item.class_name)
- } catch (e) {
- log(`不识别的class_name导致gzip解码失败:${e}`)
- return classes
- }
- }
- let names = item.class_name.split('&');
- let urls = item.class_url.split('&');
- let cnt = Math.min(names.length, urls.length);
- for (let i = 0; i < cnt; i++) {
- classes.push({
- 'type_id': urls[i],
- 'type_name': names[i]
- });
- }
- }
- return classes
- }
- if (typeof(batchFetch) === 'function') {
- rule.search_limit = 16;
- log('当前程序支持批量请求[batchFetch],搜索限制已设置为16');
- }
- let _url = rule.params;
- log(`传入参数:${_url}`);
- if (_url && typeof(_url) === 'string' && /^(http|file)/.test(_url)) {
- if (_url.includes('$')) {
- let _url_params = _url.split('$');
- _url = _url_params[0];
- rule.search_match = !!(_url_params[1]);
- if (_url_params.length > 2) {
- rule.search_pic = !!(_url_params[2]);
- }
- }
- let html = request(_url);
- let json = JSON.parse(html);
- let _classes = [];
- rule.filter = {};
- rule.filter_def = {};
- json.forEach(it => {
- let _obj = {
- type_name: it.name,
- type_id: it.url,
- parse_url: it.parse_url || '',
- searchable: it.searchable !== 0,
- api: it.api || '',
- cate_exclude: it.cate_exclude || '',
- cate_excludes: it.cate_excludes || [],
- };
- _classes.push(_obj);
- try {
- let json1 = [];
- if (it.class_name && it.class_url) {
- json1 = getClasses(it);
- } else {
- json1 = JSON.parse(request(urljoin(_obj.type_id, _obj.api || rule.classUrl))).class;
- }
- if (_obj.cate_excludes && Array.isArray(_obj.cate_excludes) && _obj.cate_excludes.length > 0) {
- json1 = json1.filter(cl => !_obj.cate_excludes.includes(cl.type_name));
- } else if (_obj.cate_exclude) {
- json1 = json1.filter(cl => !new RegExp(_obj.cate_exclude, 'i').test(cl.type_name));
- }
- rule.filter[_obj.type_id] = [{
- "key": "类型",
- "name": "类型",
- "value": json1.map(i => {
- return {
- "n": i.type_name,
- 'v': i.type_id
- }
- })
- }];
- if (json1.length > 0) {
- rule.filter_def[it.url] = {
- "类型": json1[0].type_id
- };
- }
- } catch (e) {
- rule.filter[it.url] = [{
- "key": "类型",
- "name": "类型",
- "value": [{
- "n": "全部",
- "v": ""
- }]
- }];
- }
- });
- rule.classes = _classes;
- }
- }),
- class_parse: $js.toString(() => {
- input = rule.classes;
- }),
- 推荐: $js.toString(() => {
- VODS = [];
- if (rule.classes) {
- let randomClass = getRandomItem(rule.classes);
- let _url = urljoin(randomClass.type_id, input);
- if (randomClass.api) {
- _url = _url.replace('/api.php/provide/vod/', randomClass.api)
- }
- try {
- let html = request(_url, {
- timeout: rule.timeout
- });
- let json = JSON.parse(html);
- VODS = json.list;
- VODS.forEach(it => {
- it.vod_id = randomClass.type_id + '$' + it.vod_id;
- it.vod_remarks = it.vod_remarks + '|' + randomClass.type_name;
- });
- } catch (e) {}
- }
- }),
- 一级: $js.toString(() => {
- VODS = [];
- if (rule.classes) {
- let _url = urljoin(MY_CATE, input);
- let current_vod = rule.classes.find(item => item.type_id === MY_CATE);
- if (current_vod && current_vod.api) {
- _url = _url.replace('/api.php/provide/vod/', current_vod.api)
- }
- let html = request(_url);
- let json = JSON.parse(html);
- VODS = json.list;
- VODS.forEach(it => {
- it.vod_id = MY_CATE + '$' + it.vod_id
- });
- }
- }),
- 二级: $js.toString(() => {
- VOD = {};
- if (orId === 'update_info') {
- VOD = {
- vod_content: rule.update_info.trim(),
- vod_name: '更新日志',
- type_name: '更新日志',
- vod_pic: 'https://resource-cdn.tuxiaobei.com/video/FtWhs2mewX_7nEuE51_k6zvg6awl.png',
- vod_remarks: `版本:${rule.version}`,
- vod_play_from: '道长在线',
- vod_play_url: '随机小视频$http://api.yujn.cn/api/zzxjj.php',
- };
- } else {
- if (rule.classes) {
- let _url = urljoin(fyclass, input);
- let current_vod = rule.classes.find(item => item.type_id === fyclass);
- if (current_vod && current_vod.api) {
- _url = _url.replace('/api.php/provide/vod/', current_vod.api)
- }
- let html = request(_url);
- let json = JSON.parse(html);
- let data = json.list;
- VOD = data[0];
- if (current_vod && current_vod.type_name) {
- VOD.vod_play_from = VOD.vod_play_from.split('$$$').map(it => current_vod.type_name + '|' + it).join('$$$')
- }
- }
- }
- }),
- 搜索: $js.toString(() => {
- VODS = [];
- if (rule.classes) {
- let canSearch = rule.classes.filter(it => it.searchable);
- let page = Number(MY_PAGE);
- page = (MY_PAGE - 1) % Math.ceil(canSearch.length / rule.search_limit) + 1;
- let truePage = Math.ceil(MY_PAGE / Math.ceil(canSearch.length / rule.search_limit));
- if (rule.search_limit) {
- let start = (page - 1) * rule.search_limit;
- let end = page * rule.search_limit;
- let t1 = new Date().getTime();
- let searchMode = typeof(batchFetch) === 'function' ? '批量' : '单个';
- log('start:' + start);
- log('end:' + end);
- log('搜索模式:' + searchMode);
- log('精准搜索:' + rule.search_match);
- log('强制获取图片:' + rule.search_pic);
- if (start < canSearch.length) {
- let search_classes = canSearch.slice(start, end);
- let urls = [];
- search_classes.forEach(it => {
- let _url = urljoin(it.type_id, input);
- if (it.api) {
- _url = _url.replace('/api.php/provide/vod/', it.api)
- }
- _url = _url.replace("#TruePage#", "" + truePage);
- urls.push(_url);
- });
- let results_list = [];
- let results = [];
- if (typeof(batchFetch) === 'function') {
- let reqUrls = urls.map(it => {
- return {
- url: it,
- options: {
- timeout: rule.timeout
- }
- }
- });
- let rets = batchFetch(reqUrls);
- let detailUrls = [];
- let detailUrlCount = 0;
- rets.forEach((ret, idx) => {
- let it = search_classes[idx];
- if (ret) {
- try {
- let json = JSON.parse(ret);
- let data = json.list;
- data.forEach(i => {
- i.site_name = it.type_name;
- i.vod_id = it.type_id + '$' + i.vod_id;
- i.vod_remarks = i.vod_remarks + '|' + it.type_name;
- });
- if (rule.search_match) {
- data = data.filter(item => item.vod_name && (new RegExp(KEY, 'i')).test(item.vod_name))
- }
- if (data.length > 0) {
- if (rule.search_pic && !data[0].vod_pic) {
- log(`当前搜索站点【${it.type_name}】没图片,尝试访问二级去获取图片`);
- let detailUrl = urls[idx].split('wd=')[0] + 'ac=detail&ids=' + data.map(k => k.vod_id.split('$')[1]).join(',');
- detailUrls.push(detailUrl);
- results_list.push({
- data: data,
- has_pic: false,
- detailUrlCount: detailUrlCount
- });
- detailUrlCount++;
- } else {
- results_list.push({
- data: data,
- has_pic: true
- });
- }
- }
- } catch (e) {
- log(`请求:${it.type_id}发生错误:${e.message}`)
- }
- }
- });
- let reqUrls2 = detailUrls.map(it => {
- return {
- url: it,
- options: {
- timeout: rule.timeout
- }
- }
- });
- let rets2 = reqUrls2.length > 0 ? batchFetch(reqUrls2) : [];
- for (let k = 0; k < results_list.length; k++) {
- let result_data = results_list[k].data;
- if (!results_list[k].has_pic) {
- try {
- let detailJson = JSON.parse(rets2[results_list[k].detailUrlCount]);
- log('二级数据列表元素数:' + detailJson.list.length);
- result_data.forEach((d, _seq) => {
- let detailVodPic = detailJson.list.find(vod => vod.vod_id.toString() === d.vod_id.split('$')[1]);
- if (detailVodPic) {
- Object.assign(d, {
- vod_pic: detailVodPic.vod_pic
- });
- }
- });
- } catch (e) {
- log(`强制获取网站${result_data[0].site_name}的搜索图片失败:${e.message}`);
- }
- }
- results = results.concat(result_data);
- }
- } else {
- urls.forEach((_url, idx) => {
- let it = search_classes[idx];
- try {
- let html = request(_url);
- let json = JSON.parse(html);
- let data = json.list;
- data.forEach(i => {
- i.vod_id = it.type_id + '$' + i.vod_id;
- i.vod_remarks = i.vod_remarks + '|' + it.type_name;
- });
- if (rule.search_match) {
- data = data.filter(item => item.vod_name && (new RegExp(KEY, 'i')).test(item.vod_name))
- }
- if (data.length > 0) {
- if (rule.search_pic && !data[0].vod_pic) {
- log(`当前搜索站点【${it.type_name}】没图片,尝试访问二级去获取图片`);
- let detailUrl = urls[idx].split('wd=')[0] + 'ac=detail&ids=' + data.map(k => k.vod_id.split('$')[1]).join(',');
- try {
- let detailJson = JSON.parse(request(detailUrl));
- log('二级数据列表元素数:' + detailJson.list.length);
- data.forEach((d, _seq) => {
- let detailVodPic = detailJson.list.find(vod => vod.vod_id.toString() === d.vod_id.split('$')[1]);
- if (detailVodPic) {
- Object.assign(d, {
- vod_pic: detailVodPic.vod_pic
- });
- }
- });
- } catch (e) {
- log(`强制获取网站${it.type_id}的搜索图片失败:${e.message}`);
- }
- }
- results = results.concat(data);
- }
- results = results.concat(data);
- } catch (e) {
- log(`请求:${it.type_id}发生错误:${e.message}`)
- }
- });
- }
- VODS = results;
- let t2 = new Date().getTime();
- log(`${searchMode}搜索:${urls.length}个站耗时:${(Number(t2) - Number(t1))}ms`)
- }
- }
- }
- }),
- lazy: $js.toString(() => {
- let parse_url = '';
- if (flag && flag.includes('|')) {
- let type_name = flag.split('|')[0];
- let current_vod = rule.classes.find(item => item.type_name === type_name);
- if (current_vod && current_vod.parse_url) {
- parse_url = current_vod.parse_url
- }
- }
- if (/\.(m3u8|mp4)/.test(input)) {
- input = {
- parse: 0,
- url: input
- }
- } else {
- if (parse_url.startsWith('json:')) {
- let purl = parse_url.replace('json:', '') + input;
- let html = request(purl);
- input = {
- parse: 0,
- url: JSON.parse(html).url
- }
- } else {
- input = parse_url + input;
- }
- }
- }),
-}
\ No newline at end of file
diff --git a/潇洒/json/1.json b/潇洒/json/1.json
new file mode 100644
index 0000000..313308d
--- /dev/null
+++ b/潇洒/json/1.json
@@ -0,0 +1 @@
+http://59.153.167.137:7788
\ No newline at end of file
diff --git a/潇洒/json/BLHJ.json b/潇洒/json/BLHJ.json
new file mode 100644
index 0000000..97231ad
--- /dev/null
+++ b/潇洒/json/BLHJ.json
@@ -0,0 +1 @@
+The content may contain violation information
\ No newline at end of file
diff --git a/潇洒/json/哔哩视频.json b/潇洒/json/BLSP.json
similarity index 100%
rename from 潇洒/json/哔哩视频.json
rename to 潇洒/json/BLSP.json
diff --git a/潇洒/json/哔哩哔哩听书.json b/潇洒/json/BLTS.json
similarity index 100%
rename from 潇洒/json/哔哩哔哩听书.json
rename to 潇洒/json/BLTS.json
diff --git a/潇洒/json/哔哩哔哩小品.json b/潇洒/json/BLXP.json
similarity index 100%
rename from 潇洒/json/哔哩哔哩小品.json
rename to 潇洒/json/BLXP.json
diff --git a/潇洒/json/哔哩哔哩戏曲.json b/潇洒/json/BLXQ.json
similarity index 100%
rename from 潇洒/json/哔哩哔哩戏曲.json
rename to 潇洒/json/BLXQ.json
diff --git a/潇洒/json/哔哩哔哩相声.json b/潇洒/json/BLXS.json
similarity index 100%
rename from 潇洒/json/哔哩哔哩相声.json
rename to 潇洒/json/BLXS.json
diff --git a/潇洒/json/哔哩哔哩演唱会.json b/潇洒/json/BLYCH.json
similarity index 100%
rename from 潇洒/json/哔哩哔哩演唱会.json
rename to 潇洒/json/BLYCH.json
diff --git a/潇洒/XYQHiker/BT天堂.json b/潇洒/json/BTTT.json
similarity index 100%
rename from 潇洒/XYQHiker/BT天堂.json
rename to 潇洒/json/BTTT.json
diff --git a/潇洒/json/采集静态.json b/潇洒/json/CJJT.json
similarity index 81%
rename from 潇洒/json/采集静态.json
rename to 潇洒/json/CJJT.json
index ef1ce84..3bfedc3 100644
--- a/潇洒/json/采集静态.json
+++ b/潇洒/json/CJJT.json
@@ -1,12 +1,4 @@
[
- {
- "name": "魔都资源",
- "url": "https://caiji.moduapi.cc",
- "parse_url": "",
- "cate_exclude": "电影|连续剧|综艺|伦理片",
- "class_name": "H4sIAAAAAAAAAzWPWQ6CQBBEb8M5FaMyxIh8iAskfriMIiJqXECH09A9cAtnmuGrX3VXV1IQiqrg4B7xd7ZwsW82p04kXJbTTnyu4GVGNOOJnMdGqFGJSLKxBUEEjGuSzg0HQyLuQ/7VhP0Z9gLyMW6u6CyrghENXLTXdE1fUFyIvF29JR9MR+DdyWcnMvAp2b1KERP1y2ZdaqrTDMScdps2om3HuNUcVrqDJtUwFJpMQ0WqG+Yl7RZ7jBKi5xt2AdEjMx8qVo0/1LC8rzQBAAA=",
- "class_url": "1&2&3&4&5&6&10&11&12&13&14&15&16&17&18&20&21&22&23&24&25&26&27&28&29&30&31&32&33&34&35&36&37&38"
- },
{
"name": "360资源",
"url": "https://360zy.com",
@@ -88,6 +80,14 @@
"class_name": "H4sIAFlXhmYC/z1RbXaCMBC8TU7QW/RSip/oq8orxVp56hNoaqtFq1gFopfJZsMtGhLor93Z3czuTNBNgB0IuomkXbApwSyXdkpg8CHyrzJw5qPdI+D5ql1m2D+IVkdn1IFrVmaiORENT8/ZtOqK/itPbV2bM57Skl1sKd5GZVYsN7owjXS4xGWA8V6jow6YfgJ70VTJL4SenghpMetWR6rHiqYGimK8r4HeU2sx640i86YG5px/regaNZqqnjG7K5C74B54/kY4e5bWj0zmPB0SjL9x0iLyfCxDsW6DM9BEXizjFDpDokxWBksayPikHGTC6+FyVyri+TtOutVOfrExNeaoo01HRnfhXeuxaST8bQX4JRQNKuMbrCwC3Rn6S2ztZH9BHh7RfKzwbQhqKRAdi7UjmkP1hcrrJ8m26hRjfCiDDs9m/LYicD3xLMDNXZ4HRLYdcVoIa4ueQ3C0V52ixeBikcJKxH5s9vwBtOQp10cCAAA=",
"class_url": "1&2&3&4&6&7&8&9&10&11&12&13&14&15&16&17&18&19&20&23&25&26&27&28&29&30&31&39&44&45&47&48&49&50&51&52&53&54&55&56&57&58&59&60&61&62&63&64&65&66&67&68&69&70"
},
+ {
+ "name": "快车资源",
+ "url": "https://caiji.kczyapi.com",
+ "parse_url": "",
+ "cate_exclude": "电影|电视剧|综艺|动漫|预告片|伦理|影视解说|体育赛事|港台三级|两性课堂|写真热舞",
+ "class_name": "H4sIAFZXhmYC/z1RbXaCMBC8TU7QW/RSip/oq8orxVp56hNoaqtFq1gFopfJZsMtGhLor93Z3czuTNBNgB0IuomkXbApwSyXdkpg8CHyrzJw5qPdI+D5ql1m2D+IVkdn1IFrVmaiORENT8/ZtOqK/itPbV2bM57Skl1sKd5GZVYsN7owjXS4xGWA8V6jow6YfgJ70VTJL4SenghpMetWR6rHiqYGimK8r4HeU2sx640i86YG5px/regaNZqqnjG7K5C74B54/kY4e5bWj0zmPB0SjL9x0iLyfCxDsW6DM9BEXizjFDpDokxWBksayPikHGTC6+FyVyri+TtOutVOfrExNeaoo01HRnfhXeuxaST8bQX4JRQNKuMbrCwC3Rn6S2ztZH9BHh7RfKzwbQhqKRAdi7UjmkP1hcrrJ8m26hRjfCiDDs9m/LYicD3xLMDNXZ4HRLYdcVoIa4ueQ3C0V52ixeBikcJKxH5s9vwBtOQp10cCAAA=",
+ "class_url": "1&2&3&4&6&7&8&9&10&11&12&13&14&15&16&17&18&19&20&23&25&26&27&28&29&30&31&39&44&45&47&48&49&50&51&52&53&54&55&56&57&58&59&60&61&62&63&64&65&66&67&68&69&70"
+ },
{
"name": "️极速资源",
"url": "https://jszyapi.com",
@@ -113,6 +113,23 @@
"class_name": "H4sIAFZXhmYC/1WR0VLCQAxF/6bfqXQsbB9omYEq2JEHKqtQ2iIC0nbxZ5pk+Qt303VG307uZnJvsjQ9gtqTGHr6+4WaHQjpUdNqUVsNwjdst446lTIlqWmyRKM9+g9McgKXxhLex3iXcJ+Q7hVHT10tWHtWXS2tx209x6+SafluZEuYS7qOLUFU4eXK2uMrpjnT8QxZYkkXFagZ+y53LhxNmz8GHPt3niv6Qa4w1lHV7+kCuAIyeZsHrsBD9S+ak4lvpuVKl58e+iEOFuxdnKDu80SZXvHqMA4g+uAjDHJKJhw6LEltmMqCYt/r2jXFAf/B6WAFs5Yx/QEG4wmPmwEAAA==",
"class_url": "1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&22&23&24&25&26&27&30&31&32&33&37&38&39&42&43&44&45&46&48&49&51&54"
},
+ {
+ "name": "天空资源",
+ "url": "https://m3u8.tiankongapi.com",
+ "parse_url": "",
+ "cate_exclude": "电影|连续剧|动漫|综艺|伦理片|电影解说|体育赛事|短剧",
+ "api": "/api.php/provide/vod/from/tkm3u8/",
+ "class_name": "H4sIAFdXhmYC/zVQW3LCMAy8jc/JYygknSllCqGUTPkoYAphEqCB4uD0Mrbk3KK2Yn95V9autMJpqeWJodhrOcNoyMzfJ1ZHHXEGGcf6xaFmu4Df3CEd75RMXR+OTtAfEOITfa8cgu4rdBKHbK//hdG7EhHVktSWCcU7nJIC4xzlnmpLqQSnaatvS/w0eBwYVg8TCabXvFk8eeL2GReBzDdWFAitHTTjAu41ebX+raMVQJoF0ub0pLzpdRLIpfCbWIF7kK5l+JfJf5jeDH1u7NbNR01pexkmE8ozuKqKbqHkm+mdTblU4pnhyt32H73g+qZ2AQAA",
+ "class_url": "1&2&3&4&5&6&7&8&9&10&11&12&20&21&22&23&24&25&26&27&28&29&30&31&32&33&34&35&36&37&38&39&40&41&42&44"
+ },
+ {
+ "name": "百度云资源",
+ "url": "https://api.apibdzy.com",
+ "parse_url": "",
+ "cate_exclude": "电影|电视剧|综艺|动漫|伦理片|纪录片|体育赛事|资讯",
+ "class_name": "H4sIAFdXhmYC/zVP7W7CMAx8mzzn1vGVTgKqla4TSEgTLMAQLaBMkDZ9msRO32KNm/67O9t3Z0yl1VeGqXRiYrlgWNWOK2bjA9S/zNQ/uJwgn3rB6A2hbNMteoSzK7yNCYnEPiuP4HUJLxntcRGmMMuN4qTtRPtFOfAooLl71G6PJHzuKV+drF6RZ1ygPoVsTCvsq9pFCc+GLs4Cm7lHdvxnqoy0e0kC5YRfOucuYyCPonMYCDkML6+1USI83t8MpA8KJDpjlvhabSShXIRaRn+46Obk2qh35uTIXQrWjwKBfA75NpD2e2ST+B8HkFGOfQEAAA==",
+ "class_url": "1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&20&21&22&23&24&25&26&27&28&29&30&31&32&33&34&36&37&38&39"
+ },
{
"name": "无尽资源",
"url": "https://api.wujinapi.me",
diff --git a/潇洒/XBPQ/哆啦新番社.json b/潇洒/json/DLXFS.json
similarity index 100%
rename from 潇洒/XBPQ/哆啦新番社.json
rename to 潇洒/json/DLXFS.json
diff --git a/潇洒/XYQHiker/电影港.json b/潇洒/json/DYG.json
similarity index 100%
rename from 潇洒/XYQHiker/电影港.json
rename to 潇洒/json/DYG.json
diff --git a/潇洒/XYQHiker/电影牛.json b/潇洒/json/DYN.json
similarity index 100%
rename from 潇洒/XYQHiker/电影牛.json
rename to 潇洒/json/DYN.json
diff --git a/潇洒/XBPQ/狐狸君.json b/潇洒/json/HLJ.json
similarity index 100%
rename from 潇洒/XBPQ/狐狸君.json
rename to 潇洒/json/HLJ.json
diff --git a/潇洒/XBPQ/海纳影视.json b/潇洒/json/HNYS.json
similarity index 100%
rename from 潇洒/XBPQ/海纳影视.json
rename to 潇洒/json/HNYS.json
diff --git a/潇洒/XYQHiker/盒子影视.json b/潇洒/json/HZYS.json
similarity index 100%
rename from 潇洒/XYQHiker/盒子影视.json
rename to 潇洒/json/HZYS.json
diff --git a/潇洒/XBPQ/面包影视.json b/潇洒/json/MBYS.json
similarity index 100%
rename from 潇洒/XBPQ/面包影视.json
rename to 潇洒/json/MBYS.json
diff --git a/潇洒/XYQHiker/农民影视.json b/潇洒/json/NMYS.json
similarity index 100%
rename from 潇洒/XYQHiker/农民影视.json
rename to 潇洒/json/NMYS.json
diff --git a/潇洒/XBPQ/七点影视.json b/潇洒/json/QDYS.json
similarity index 100%
rename from 潇洒/XBPQ/七点影视.json
rename to 潇洒/json/QDYS.json
diff --git a/潇洒/XBPQ/骚火影视.json b/潇洒/json/SHYS.json
similarity index 97%
rename from 潇洒/XBPQ/骚火影视.json
rename to 潇洒/json/SHYS.json
index 7b4b5fd..88d14d5 100644
--- a/潇洒/XBPQ/骚火影视.json
+++ b/潇洒/json/SHYS.json
@@ -1,6 +1,6 @@
{
"简介": "p_txt show_part\">&&",
"副标题": "v_note\">&&",
- "分类url": "https://saohuody.com/list/{cateId}-{catePg}.html",
+ "分类url": "https://saohuody.com/list/{cateId}-{catePg}.html;;d1",
"分类": "国产剧$12#港剧$13#台剧$14#日剧$15#韩剧$16#美剧$17#海外$18#泰剧$19#动作$5#喜剧$6#爱情$7#科幻$8#恐怖$9#剧情$10#战争$11#动画$33"
}
\ No newline at end of file
diff --git a/潇洒/XBPQ/三九影视.json b/潇洒/json/SJYS.json
similarity index 100%
rename from 潇洒/XBPQ/三九影视.json
rename to 潇洒/json/SJYS.json
diff --git a/潇洒/XBPQ/三四影视.json b/潇洒/json/SSYS.json
similarity index 100%
rename from 潇洒/XBPQ/三四影视.json
rename to 潇洒/json/SSYS.json
diff --git a/潇洒/XBPQ/雪糕影视.json b/潇洒/json/XGYS.json
similarity index 100%
rename from 潇洒/XBPQ/雪糕影视.json
rename to 潇洒/json/XGYS.json
diff --git a/潇洒/XBPQ/樱花动漫.json b/潇洒/json/YHDM.json
similarity index 100%
rename from 潇洒/XBPQ/樱花动漫.json
rename to 潇洒/json/YHDM.json
diff --git a/潇洒/XBPQ/永乐影视.json b/潇洒/json/YLYS.json
similarity index 100%
rename from 潇洒/XBPQ/永乐影视.json
rename to 潇洒/json/YLYS.json
diff --git a/潇洒/XBPQ/养生堂.json b/潇洒/json/YST.json
similarity index 100%
rename from 潇洒/XBPQ/养生堂.json
rename to 潇洒/json/YST.json
diff --git a/潇洒/json/aliyunpansearch.json b/潇洒/json/aliyunpansearch.json
deleted file mode 100644
index 03d8470..0000000
--- a/潇洒/json/aliyunpansearch.json
+++ /dev/null
@@ -1,199 +0,0 @@
-{
- "classes": [
- {
- "type_name": "电影",
- "type_id": "dy"
- },
- {
- "type_name": "电视",
- "type_id": "ds"
- },
- {
- "type_name": "短剧",
- "type_id": "dj"
- },
- {
- "type_name": "综艺",
- "type_id": "zy"
- },
- {
- "type_name": "动漫",
- "type_id": "dm"
- },
- {
- "type_name": "音乐",
- "type_id": "yy"
- }
- ],
- "filters": {
- "dy": [
- {
- "key": "root",
- "name": "来源",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "夸克",
- "v": "2"
- },
- {
- "n": "UC",
- "v": "5"
- },
- {
- "n": "阿里",
- "v": "1"
- },
- {
- "n": "百度",
- "v": "4"
- }
- ]
- }
- ],
- "ds": [
- {
- "key": "root",
- "name": "来源",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "夸克",
- "v": "2"
- },
- {
- "n": "UC",
- "v": "5"
- },
- {
- "n": "阿里",
- "v": "1"
- },
- {
- "n": "百度",
- "v": "4"
- }
- ]
- }
- ],
- "dj": [
- {
- "key": "root",
- "name": "来源",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "夸克",
- "v": "2"
- },
- {
- "n": "UC",
- "v": "5"
- },
- {
- "n": "阿里",
- "v": "1"
- },
- {
- "n": "百度",
- "v": "4"
- }
- ]
- }
- ],
- "zy": [
- {
- "key": "root",
- "name": "来源",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "夸克",
- "v": "2"
- },
- {
- "n": "UC",
- "v": "5"
- },
- {
- "n": "阿里",
- "v": "1"
- },
- {
- "n": "百度",
- "v": "4"
- }
- ]
- }
- ],
- "dm": [
- {
- "key": "root",
- "name": "来源",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "夸克",
- "v": "2"
- },
- {
- "n": "UC",
- "v": "5"
- },
- {
- "n": "阿里",
- "v": "1"
- },
- {
- "n": "百度",
- "v": "4"
- }
- ]
- }
- ],
- "yy": [
- {
- "key": "root",
- "name": "来源",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "夸克",
- "v": "2"
- },
- {
- "n": "UC",
- "v": "5"
- },
- {
- "n": "阿里",
- "v": "1"
- },
- {
- "n": "百度",
- "v": "4"
- }
- ]
- }
- ]
- },
- "siteUrl": "https://ys1api.yingso.fun/v7/ali/all"
-}
\ No newline at end of file
diff --git a/潇洒/json/bj.json b/潇洒/json/bj.json
deleted file mode 100644
index 0881d6e..0000000
--- a/潇洒/json/bj.json
+++ /dev/null
@@ -1,1465 +0,0 @@
-{
- "SiteUrl": "https://baijia.banye.tech:7086",
- "Domains": [
- "http://cj.jiexi.news",
- "https://baijia.885525.xyz",
- "http://baijia.dpdns.org",
- "http://bj.baijia.ddns-ip.net",
- "http://bj.885525.xyz",
- "http://baijia.filegear-sg.me"
- ],
- "SiteWord": "bj",
- "SiteName": "百家",
- "Classes": [
- {
- "type_name": "百家电影",
- "type_id": "1"
- },
- {
- "type_name": "百家剧集",
- "type_id": "2"
- },
- {
- "type_name": "百家综艺",
- "type_id": "3"
- },
- {
- "type_name": "百家动漫",
- "type_id": "4"
- },
- {
- "type_name": "臻彩世界",
- "type_id": "39"
- },
- {
- "type_name": "天翼&123",
- "type_id": "38"
- }
- ],
- "Filters": {
- "1": [
- {
- "name": "剧情",
- "value": [
- {
- "v": "喜剧",
- "n": "喜剧"
- },
- {
- "v": "爱情",
- "n": "爱情"
- },
- {
- "v": "恐怖",
- "n": "恐怖"
- },
- {
- "v": "动作",
- "n": "动作"
- },
- {
- "v": "科幻",
- "n": "科幻"
- },
- {
- "v": "剧情",
- "n": "剧情"
- },
- {
- "v": "战争",
- "n": "战争"
- },
- {
- "v": "警匪",
- "n": "警匪"
- },
- {
- "v": "犯罪",
- "n": "犯罪"
- },
- {
- "v": "动画",
- "n": "动画"
- },
- {
- "v": "奇幻",
- "n": "奇幻"
- },
- {
- "v": "武侠",
- "n": "武侠"
- },
- {
- "v": "冒险",
- "n": "冒险"
- },
- {
- "v": "枪战",
- "n": "枪战"
- },
- {
- "v": "恐怖",
- "n": "恐怖"
- },
- {
- "v": "悬疑",
- "n": "悬疑"
- },
- {
- "v": "惊悚",
- "n": "惊悚"
- },
- {
- "v": "经典",
- "n": "经典"
- },
- {
- "v": "青春",
- "n": "青春"
- },
- {
- "v": "文艺",
- "n": "文艺"
- },
- {
- "v": "微电影",
- "n": "微电影"
- },
- {
- "v": "古装",
- "n": "古装"
- },
- {
- "v": "历史",
- "n": "历史"
- },
- {
- "v": "运动",
- "n": "运动"
- },
- {
- "v": "农村",
- "n": "农村"
- },
- {
- "v": "儿童",
- "n": "儿童"
- },
- {
- "v": "网络电影",
- "n": "网络电影"
- }
- ],
- "key": "class"
- },
- {
- "name": "地区",
- "value": [
- {
- "v": "大陆",
- "n": "大陆"
- },
- {
- "v": "香港",
- "n": "香港"
- },
- {
- "v": "台湾",
- "n": "台湾"
- },
- {
- "v": "美国",
- "n": "美国"
- },
- {
- "v": "法国",
- "n": "法国"
- },
- {
- "v": "英国",
- "n": "英国"
- },
- {
- "v": "日本",
- "n": "日本"
- },
- {
- "v": "韩国",
- "n": "韩国"
- },
- {
- "v": "德国",
- "n": "德国"
- },
- {
- "v": "泰国",
- "n": "泰国"
- },
- {
- "v": "印度",
- "n": "印度"
- },
- {
- "v": "意大利",
- "n": "意大利"
- },
- {
- "v": "西班牙",
- "n": "西班牙"
- },
- {
- "v": "加拿大",
- "n": "加拿大"
- },
- {
- "v": "其他",
- "n": "其他"
- }
- ],
- "key": "area"
- },
- {
- "name": "语言",
- "value": [
- {
- "v": "国语",
- "n": "国语"
- },
- {
- "v": "英语",
- "n": "英语"
- },
- {
- "v": "粤语",
- "n": "粤语"
- },
- {
- "v": "闽南语",
- "n": "闽南语"
- },
- {
- "v": "韩语",
- "n": "韩语"
- },
- {
- "v": "日语",
- "n": "日语"
- },
- {
- "v": "法语",
- "n": "法语"
- },
- {
- "v": "德语",
- "n": "德语"
- },
- {
- "v": "其它",
- "n": "其它"
- }
- ],
- "key": "lang"
- },
- {
- "name": "时间",
- "value": [
- {
- "v": "2024",
- "n": "2024"
- },
- {
- "v": "2023",
- "n": "2023"
- },
- {
- "v": "2022",
- "n": "2022"
- },
- {
- "v": "2021",
- "n": "2021"
- },
- {
- "v": "2020",
- "n": "2020"
- },
- {
- "v": "2019",
- "n": "2019"
- },
- {
- "v": "2018",
- "n": "2018"
- },
- {
- "v": "2017",
- "n": "2017"
- },
- {
- "v": "2016",
- "n": "2016"
- },
- {
- "v": "2015",
- "n": "2015"
- },
- {
- "v": "2014",
- "n": "2014"
- },
- {
- "v": "2013",
- "n": "2013"
- },
- {
- "v": "2012",
- "n": "2012"
- },
- {
- "v": "2011",
- "n": "2011"
- },
- {
- "v": "2010",
- "n": "2010"
- }
- ],
- "key": "year"
- },
- {
- "name": "字母查找",
- "value": [
- {
- "v": "A",
- "n": "A"
- },
- {
- "v": "B",
- "n": "B"
- },
- {
- "v": "C",
- "n": "C"
- },
- {
- "v": "D",
- "n": "D"
- },
- {
- "v": "E",
- "n": "E"
- },
- {
- "v": "F",
- "n": "F"
- },
- {
- "v": "G",
- "n": "G"
- },
- {
- "v": "H",
- "n": "H"
- },
- {
- "v": "I",
- "n": "I"
- },
- {
- "v": "J",
- "n": "J"
- },
- {
- "v": "K",
- "n": "K"
- },
- {
- "v": "L",
- "n": "L"
- },
- {
- "v": "M",
- "n": "M"
- },
- {
- "v": "N",
- "n": "N"
- },
- {
- "v": "O",
- "n": "O"
- },
- {
- "v": "P",
- "n": "P"
- },
- {
- "v": "Q",
- "n": "Q"
- },
- {
- "v": "R",
- "n": "R"
- },
- {
- "v": "S",
- "n": "S"
- },
- {
- "v": "T",
- "n": "T"
- },
- {
- "v": "U",
- "n": "U"
- },
- {
- "v": "V",
- "n": "V"
- },
- {
- "v": "W",
- "n": "W"
- },
- {
- "v": "X",
- "n": "X"
- },
- {
- "v": "Y",
- "n": "Y"
- },
- {
- "v": "Z",
- "n": "Z"
- },
- {
- "v": "0-9",
- "n": "0-9"
- }
- ],
- "key": "character"
- },
- {
- "name": "评分排序",
- "value": [
- {
- "v": "time",
- "n": "时间排序"
- },
- {
- "v": "hits",
- "n": "人气排序"
- },
- {
- "v": "score",
- "n": "评分排序"
- }
- ],
- "key": "order"
- }
- ],
- "2": [
- {
- "name": "类型",
- "value": [
- {
- "v": "13",
- "n": "国产剧"
- },
- {
- "v": "14",
- "n": "欧美剧"
- },
- {
- "v": "15",
- "n": "日韩剧"
- },
- {
- "v": "16",
- "n": "港台剧"
- },
- {
- "v": "23",
- "n": "泰剧"
- }
- ],
- "key": "type"
- },
- {
- "name": "剧情",
- "value": [
- {
- "v": "古装",
- "n": "古装"
- },
- {
- "v": "战争",
- "n": "战争"
- },
- {
- "v": "青春偶像",
- "n": "青春偶像"
- },
- {
- "v": "喜剧",
- "n": "喜剧"
- },
- {
- "v": "家庭",
- "n": "家庭"
- },
- {
- "v": "犯罪",
- "n": "犯罪"
- },
- {
- "v": "动作",
- "n": "动作"
- },
- {
- "v": "奇幻",
- "n": "奇幻"
- },
- {
- "v": "剧情",
- "n": "剧情"
- },
- {
- "v": "历史",
- "n": "历史"
- },
- {
- "v": "经典",
- "n": "经典"
- },
- {
- "v": "乡村",
- "n": "乡村"
- },
- {
- "v": "情景",
- "n": "情景"
- },
- {
- "v": "商战",
- "n": "商战"
- },
- {
- "v": "网剧",
- "n": "网剧"
- },
- {
- "v": "其他",
- "n": "其他"
- }
- ],
- "key": "class"
- },
- {
- "name": "地区",
- "value": [
- {
- "v": "中国大陆",
- "n": "中国大陆"
- },
- {
- "v": "大陆",
- "n": "大陆"
- },
- {
- "v": "内地",
- "n": "内地"
- },
- {
- "v": "韩国",
- "n": "韩国"
- },
- {
- "v": "香港",
- "n": "香港"
- },
- {
- "v": "台湾",
- "n": "台湾"
- },
- {
- "v": "日本",
- "n": "日本"
- },
- {
- "v": "美国",
- "n": "美国"
- },
- {
- "v": "泰国",
- "n": "泰国"
- },
- {
- "v": "英国",
- "n": "英国"
- },
- {
- "v": "新加坡",
- "n": "新加坡"
- },
- {
- "v": "其他",
- "n": "其他"
- }
- ],
- "key": "area"
- },
- {
- "name": "语言",
- "value": [
- {
- "v": "国语",
- "n": "国语"
- },
- {
- "v": "英语",
- "n": "英语"
- },
- {
- "v": "粤语",
- "n": "粤语"
- },
- {
- "v": "闽南语",
- "n": "闽南语"
- },
- {
- "v": "韩语",
- "n": "韩语"
- },
- {
- "v": "日语",
- "n": "日语"
- },
- {
- "v": "其它",
- "n": "其它"
- }
- ],
- "key": "lang"
- },
- {
- "name": "时间",
- "value": [
- {
- "v": "2024",
- "n": "2024"
- },
- {
- "v": "2023",
- "n": "2023"
- },
- {
- "v": "2022",
- "n": "2022"
- },
- {
- "v": "2021",
- "n": "2021"
- },
- {
- "v": "2020",
- "n": "2020"
- },
- {
- "v": "2019",
- "n": "2019"
- },
- {
- "v": "2018",
- "n": "2018"
- },
- {
- "v": "2017",
- "n": "2017"
- },
- {
- "v": "2016",
- "n": "2016"
- },
- {
- "v": "2015",
- "n": "2015"
- },
- {
- "v": "2014",
- "n": "2014"
- },
- {
- "v": "2013",
- "n": "2013"
- },
- {
- "v": "2012",
- "n": "2012"
- },
- {
- "v": "2011",
- "n": "2011"
- },
- {
- "v": "2010",
- "n": "2010"
- }
- ],
- "key": "year"
- },
- {
- "name": "字母查找",
- "value": [
- {
- "v": "A",
- "n": "A"
- },
- {
- "v": "B",
- "n": "B"
- },
- {
- "v": "C",
- "n": "C"
- },
- {
- "v": "D",
- "n": "D"
- },
- {
- "v": "E",
- "n": "E"
- },
- {
- "v": "F",
- "n": "F"
- },
- {
- "v": "G",
- "n": "G"
- },
- {
- "v": "H",
- "n": "H"
- },
- {
- "v": "I",
- "n": "I"
- },
- {
- "v": "J",
- "n": "J"
- },
- {
- "v": "K",
- "n": "K"
- },
- {
- "v": "L",
- "n": "L"
- },
- {
- "v": "M",
- "n": "M"
- },
- {
- "v": "N",
- "n": "N"
- },
- {
- "v": "O",
- "n": "O"
- },
- {
- "v": "P",
- "n": "P"
- },
- {
- "v": "Q",
- "n": "Q"
- },
- {
- "v": "R",
- "n": "R"
- },
- {
- "v": "S",
- "n": "S"
- },
- {
- "v": "T",
- "n": "T"
- },
- {
- "v": "U",
- "n": "U"
- },
- {
- "v": "V",
- "n": "V"
- },
- {
- "v": "W",
- "n": "W"
- },
- {
- "v": "X",
- "n": "X"
- },
- {
- "v": "Y",
- "n": "Y"
- },
- {
- "v": "Z",
- "n": "Z"
- },
- {
- "v": "0-9",
- "n": "0-9"
- }
- ],
- "key": "character"
- },
- {
- "name": "评分排序",
- "value": [
- {
- "v": "time",
- "n": "时间排序"
- },
- {
- "v": "hits",
- "n": "人气排序"
- },
- {
- "v": "score",
- "n": "评分排序"
- }
- ],
- "key": "order"
- }
- ],
- "3": [
- {
- "name": "类型",
- "value": [
- {
- "v": "20",
- "n": "国产"
- },
- {
- "v": "21",
- "n": "日韩"
- },
- {
- "v": "22",
- "n": "欧美"
- }
- ],
- "key": "type"
- },
- {
- "name": "时间",
- "value": [
- {
- "v": "2024",
- "n": "2024"
- },
- {
- "v": "2023",
- "n": "2023"
- },
- {
- "v": "2022",
- "n": "2022"
- },
- {
- "v": "2021",
- "n": "2021"
- },
- {
- "v": "2020",
- "n": "2020"
- },
- {
- "v": "2019",
- "n": "2019"
- },
- {
- "v": "2018",
- "n": "2018"
- },
- {
- "v": "2017",
- "n": "2017"
- },
- {
- "v": "2016",
- "n": "2016"
- },
- {
- "v": "2015",
- "n": "2015"
- },
- {
- "v": "2014",
- "n": "2014"
- },
- {
- "v": "2013",
- "n": "2013"
- },
- {
- "v": "2012",
- "n": "2012"
- },
- {
- "v": "2011",
- "n": "2011"
- },
- {
- "v": "2010",
- "n": "2010"
- }
- ],
- "key": "year"
- },
- {
- "name": "字母查找",
- "value": [
- {
- "v": "A",
- "n": "A"
- },
- {
- "v": "B",
- "n": "B"
- },
- {
- "v": "C",
- "n": "C"
- },
- {
- "v": "D",
- "n": "D"
- },
- {
- "v": "E",
- "n": "E"
- },
- {
- "v": "F",
- "n": "F"
- },
- {
- "v": "G",
- "n": "G"
- },
- {
- "v": "H",
- "n": "H"
- },
- {
- "v": "I",
- "n": "I"
- },
- {
- "v": "J",
- "n": "J"
- },
- {
- "v": "K",
- "n": "K"
- },
- {
- "v": "L",
- "n": "L"
- },
- {
- "v": "M",
- "n": "M"
- },
- {
- "v": "N",
- "n": "N"
- },
- {
- "v": "O",
- "n": "O"
- },
- {
- "v": "P",
- "n": "P"
- },
- {
- "v": "Q",
- "n": "Q"
- },
- {
- "v": "R",
- "n": "R"
- },
- {
- "v": "S",
- "n": "S"
- },
- {
- "v": "T",
- "n": "T"
- },
- {
- "v": "U",
- "n": "U"
- },
- {
- "v": "V",
- "n": "V"
- },
- {
- "v": "W",
- "n": "W"
- },
- {
- "v": "X",
- "n": "X"
- },
- {
- "v": "Y",
- "n": "Y"
- },
- {
- "v": "Z",
- "n": "Z"
- },
- {
- "v": "0-9",
- "n": "0-9"
- }
- ],
- "key": "character"
- },
- {
- "name": "评分排序",
- "value": [
- {
- "v": "time",
- "n": "时间排序"
- },
- {
- "v": "hits",
- "n": "人气排序"
- },
- {
- "v": "score",
- "n": "评分排序"
- }
- ],
- "key": "order"
- }
- ],
- "25": [
- {
- "name": "时间",
- "value": [
- {
- "v": "2024",
- "n": "2024"
- },
- {
- "v": "2023",
- "n": "2023"
- },
- {
- "v": "2022",
- "n": "2022"
- },
- {
- "v": "2021",
- "n": "2021"
- },
- {
- "v": "2020",
- "n": "2020"
- },
- {
- "v": "2019",
- "n": "2019"
- },
- {
- "v": "2018",
- "n": "2018"
- },
- {
- "v": "2017",
- "n": "2017"
- },
- {
- "v": "2016",
- "n": "2016"
- },
- {
- "v": "2015",
- "n": "2015"
- },
- {
- "v": "2014",
- "n": "2014"
- },
- {
- "v": "2013",
- "n": "2013"
- },
- {
- "v": "2012",
- "n": "2012"
- },
- {
- "v": "2011",
- "n": "2011"
- },
- {
- "v": "2010",
- "n": "2010"
- }
- ],
- "key": "year"
- },
- {
- "name": "字母查找",
- "value": [
- {
- "v": "A",
- "n": "A"
- },
- {
- "v": "B",
- "n": "B"
- },
- {
- "v": "C",
- "n": "C"
- },
- {
- "v": "D",
- "n": "D"
- },
- {
- "v": "E",
- "n": "E"
- },
- {
- "v": "F",
- "n": "F"
- },
- {
- "v": "G",
- "n": "G"
- },
- {
- "v": "H",
- "n": "H"
- },
- {
- "v": "I",
- "n": "I"
- },
- {
- "v": "J",
- "n": "J"
- },
- {
- "v": "K",
- "n": "K"
- },
- {
- "v": "L",
- "n": "L"
- },
- {
- "v": "M",
- "n": "M"
- },
- {
- "v": "N",
- "n": "N"
- },
- {
- "v": "O",
- "n": "O"
- },
- {
- "v": "P",
- "n": "P"
- },
- {
- "v": "Q",
- "n": "Q"
- },
- {
- "v": "R",
- "n": "R"
- },
- {
- "v": "S",
- "n": "S"
- },
- {
- "v": "T",
- "n": "T"
- },
- {
- "v": "U",
- "n": "U"
- },
- {
- "v": "V",
- "n": "V"
- },
- {
- "v": "W",
- "n": "W"
- },
- {
- "v": "X",
- "n": "X"
- },
- {
- "v": "Y",
- "n": "Y"
- },
- {
- "v": "Z",
- "n": "Z"
- },
- {
- "v": "0-9",
- "n": "0-9"
- }
- ],
- "key": "character"
- },
- {
- "name": "评分排序",
- "value": [
- {
- "v": "time",
- "n": "时间排序"
- },
- {
- "v": "hits",
- "n": "人气排序"
- },
- {
- "v": "score",
- "n": "评分排序"
- }
- ],
- "key": "order"
- }
- ],
- "4": [
- {
- "name": "时间",
- "value": [
- {
- "v": "2024",
- "n": "2024"
- },
- {
- "v": "2023",
- "n": "2023"
- },
- {
- "v": "2022",
- "n": "2022"
- },
- {
- "v": "2021",
- "n": "2021"
- },
- {
- "v": "2020",
- "n": "2020"
- },
- {
- "v": "2019",
- "n": "2019"
- },
- {
- "v": "2018",
- "n": "2018"
- },
- {
- "v": "2017",
- "n": "2017"
- },
- {
- "v": "2016",
- "n": "2016"
- },
- {
- "v": "2015",
- "n": "2015"
- },
- {
- "v": "2014",
- "n": "2014"
- },
- {
- "v": "2013",
- "n": "2013"
- },
- {
- "v": "2012",
- "n": "2012"
- },
- {
- "v": "2011",
- "n": "2011"
- },
- {
- "v": "2010",
- "n": "2010"
- }
- ],
- "key": "year"
- },
- {
- "name": "字母查找",
- "value": [
- {
- "v": "A",
- "n": "A"
- },
- {
- "v": "B",
- "n": "B"
- },
- {
- "v": "C",
- "n": "C"
- },
- {
- "v": "D",
- "n": "D"
- },
- {
- "v": "E",
- "n": "E"
- },
- {
- "v": "F",
- "n": "F"
- },
- {
- "v": "G",
- "n": "G"
- },
- {
- "v": "H",
- "n": "H"
- },
- {
- "v": "I",
- "n": "I"
- },
- {
- "v": "J",
- "n": "J"
- },
- {
- "v": "K",
- "n": "K"
- },
- {
- "v": "L",
- "n": "L"
- },
- {
- "v": "M",
- "n": "M"
- },
- {
- "v": "N",
- "n": "N"
- },
- {
- "v": "O",
- "n": "O"
- },
- {
- "v": "P",
- "n": "P"
- },
- {
- "v": "Q",
- "n": "Q"
- },
- {
- "v": "R",
- "n": "R"
- },
- {
- "v": "S",
- "n": "S"
- },
- {
- "v": "T",
- "n": "T"
- },
- {
- "v": "U",
- "n": "U"
- },
- {
- "v": "V",
- "n": "V"
- },
- {
- "v": "W",
- "n": "W"
- },
- {
- "v": "X",
- "n": "X"
- },
- {
- "v": "Y",
- "n": "Y"
- },
- {
- "v": "Z",
- "n": "Z"
- },
- {
- "v": "0-9",
- "n": "0-9"
- }
- ],
- "key": "character"
- },
- {
- "name": "评分排序",
- "value": [
- {
- "v": "time",
- "n": "时间排序"
- },
- {
- "v": "hits",
- "n": "人气排序"
- },
- {
- "v": "score",
- "n": "评分排序"
- }
- ],
- "key": "order"
- }
- ]
- }
-}
\ No newline at end of file
diff --git a/潇洒/XYQHiker/巴士动漫.json b/潇洒/json/bsdm.json
similarity index 83%
rename from 潇洒/XYQHiker/巴士动漫.json
rename to 潇洒/json/bsdm.json
index d2132d8..f0b465a 100644
--- a/潇洒/XYQHiker/巴士动漫.json
+++ b/潇洒/json/bsdm.json
@@ -1,16 +1,16 @@
{
"规则名": "动漫巴士",
"规则作者": "",
- "请求头参数": "User-Agent$MOBILE_UA#Accept$text/html#accept-language$zh-CN,zh;q=0.8",
+ "请求头参数": "User-Agent$MOBILE_UA#Referer$https://dm84.tv",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
- "首页推荐链接": "https://dm84.net",
+ "首页推荐链接": "https://dm84.tv",
"首页列表数组规则": "body&&.v_list",
"首页片单列表数组规则": "li",
"首页片单是否Jsoup写法": "1",
"分类起始页码": "1",
- "分类链接": "https://dm84.net/list-{cateId}-{catePg}.html[firstPage=https://dm84.net/list-{cateId}.html]",
+ "分类链接": "https://dm84.tv/list-{cateId}-{catePg}.html[firstPage=https://dm84.tv/list-{cateId}.html]",
"分类名称": "国产动漫&日本动漫&欧美动漫&动漫电影",
"分类名称替换词": "1&2&3&4",
"筛选数据": {},
@@ -40,10 +40,10 @@
"分类片单链接": "a&&href",
"分类片单图片": ".lazy&&data-bg",
"分类片单副标题": ".desc&&Text",
- "分类片单链接加前缀": "https://dm84.net",
+ "分类片单链接加前缀": "https://dm84.tv",
"分类片单链接加后缀": "",
- "搜索请求头参数": "User-Agent$手机#Accept$text/html#accept-language$zh-CN,zh;q=0.8",
- "搜索链接": "https://dm84.net/s-{wd}---------{SearchPg}.html",
+ "搜索请求头参数": "User-Agent$手机#Accept$text/html",
+ "搜索链接": "https://dm84.tv/s-{wd}---------{SearchPg}.html",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".v_list&&li",
@@ -52,7 +52,7 @@
"搜索片单标题": "a&&title!在线观看",
"搜索片单链接": "a&&href",
"搜索片单副标题": ".desc&&Text",
- "搜索片单链接加前缀": "https://dm84.net",
+ "搜索片单链接加前缀": "https://dm84.tv",
"搜索片单链接加后缀": "",
"链接是否直接播放": "0",
"直接播放链接加前缀": "",
@@ -72,7 +72,7 @@
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "1",
- "选集链接加前缀": "https://dm84.net",
+ "选集链接加前缀": "https://dm84.tv",
"选集链接加后缀": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "0",
diff --git a/潇洒/json/hm.json b/潇洒/json/hm.json
index 7c02c93..27a3d03 100644
--- a/潇洒/json/hm.json
+++ b/潇洒/json/hm.json
@@ -1,5 +1,5 @@
{
- "SiteUrl": "https://haimian.eu.org,https://www.haimianxz.com,https://www.hmxz.org,https://www.5536806.xyz,http://haimian.eu.org",
+ "SiteUrl": "https://www.haimianxz.com,https://www.hmxz.org,https://www.5536806.xyz,http://haimian.eu.org",
"Classes": [
{
"type_name": "电影",
@@ -18,5 +18,5 @@
"type_id": "3"
}
],
- "Cookie": "__51vcke__K2MEuBiiS0iv1Gsb=50317c8c-a927-5311-8f63-949521ddbf0c; __51vuft__K2MEuBiiS0iv1Gsb=1746033908927; _ga=GA1.1.1243371970.1746580792; __51uvsct__K2MEuBiiS0iv1Gsb=6; __vtins__K2MEuBiiS0iv1Gsb=%7B%22sid%22%3A%20%223cca69eb-bcd1-5ef4-bf3e-812319c6e2e0%22%2C%20%22vd%22%3A%2018%2C%20%22stt%22%3A%2047625%2C%20%22dr%22%3A%202161%2C%20%22expires%22%3A%201748073260198%2C%20%22ct%22%3A%201748071460198%7D; _ga_4HLWS2N0SW=GS2.1.s1748096693$o5$g0$t1748096693$j0$l0$h0; bbs_sid=44bo0pnqufjhkai0ecg2dno2rb; _xn_accesscount_visited=1; Hm_lvt_d8d486f5aec7b83ea1172477c2ecde4f=1748622198; HMACCOUNT=F2191C60A382CF45; bbs_token=cN2N5OuguYW1knrDFA3sw9J2hjMEkWi_2FSYX_2FQa91_2FR2_2FxmeY; Hm_lpvt_d8d486f5aec7b83ea1172477c2ecde4f=1748622484"
+ "Cookie": "bbs_sid=nll6gb39qj1e4fgkvsjh930ti5; _xn_accesscount_visited=1; __51uvsct__K2MEuBiiS0iv1Gsb=1; __51vcke__K2MEuBiiS0iv1Gsb=df02f20c-b83d-507b-b310-c3f8ab36a87a; __51vuft__K2MEuBiiS0iv1Gsb=1745249876903; bbs_token=rhHYDxTHFdsKEOsD84q8NBkSi6aTY8KlfnqpjudmsOxKBcJe; __vtins__K2MEuBiiS0iv1Gsb=%7B%22sid%22%3A%20%2299dcbd93-0d23-5a24-abb5-ec507c6c248a%22%2C%20%22vd%22%3A%2017%2C%20%22stt%22%3A%20464771%2C%20%22dr%22%3A%201425%2C%20%22expires%22%3A%201745251199999%2C%20%22ct%22%3A%201745250341665%7D"
}
\ No newline at end of file
diff --git a/潇洒/json/kf.json b/潇洒/json/kf.json
index 00a2e5b..db16411 100644
--- a/潇洒/json/kf.json
+++ b/潇洒/json/kf.json
@@ -1,5 +1,5 @@
{
- "SiteUrl": "https://www.kuafuzy.com,https://www.kfzy.cc,www.kuafuzys.com,www.kuafuzys.vip",
+ "SiteUrl": "https://www.kuafuzy.com,https://www.kfzy.cc",
"Classes": [
{
"type_name": "电影",
@@ -26,5 +26,5 @@
"type_id": "6"
}
],
- "Cookie": "bbs_token=zNQpYs_2BmC2e_2FcUM_2BmuihZ33Jswh_2Fj7sPtelqcw_3D_3D; bbs_sid=65idikju2chtl9sv5or02qlpjj"
+ "Cookie": "bbs_token=zNQpYs_2BmC2e_2FcUM_2BmuihZ33Jswh_2Fj7sPtelqcw_3D_3D; bbs_sid=lgs96gh42gevj7lsg5f8o3kjsi"
}
\ No newline at end of file
diff --git a/潇洒/json/pan1.json b/潇洒/json/pan1.json
deleted file mode 100644
index f8fbfdb..0000000
--- a/潇洒/json/pan1.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "SiteUrl": "https://time.123in.link,https://pan1.me,https://123.panbox.my",
- "Classes": [
- {
- "type_name": "电影",
- "type_id": "2"
- },
- {
- "type_name": "剧集",
- "type_id": "48"
- },
- {
- "type_name": "4K原盘",
- "type_id": "56"
- },
- {
- "type_name": "综艺",
- "type_id": "52"
- },
- {
- "type_name": "动漫",
- "type_id": "37"
- }
- ],
- "Cookie": "bbs_sid=rrru52bda4v655kl9u1c87f00m; bbs_token=dZRAvHbHcUZkuJ7oHALqWoUs00C1fGqqXDXH7I8LH6hMddXP"
-}
\ No newline at end of file
diff --git a/潇洒/json/wogg.json b/潇洒/json/wogg.json
index ffdc39f..f946ac9 100644
--- a/潇洒/json/wogg.json
+++ b/潇洒/json/wogg.json
@@ -1,7 +1,6 @@
{
"SiteUrl": "https://wogg.banye.tech:7086",
"Domains": [
- "http://woggpan.wogg.lol",
"https://wogg.xxooo.cf",
"https://wogg.333232.xyz",
"https://woggpan.333232.xyz",
@@ -571,8 +570,8 @@
"name": "时间",
"value": [
{
- "v": "2025",
- "n": "2025"
+ "v": "2025",
+ "n": "2025"
},
{
"v": "2024",
diff --git a/潇洒/json/jh.json b/潇洒/json/xbky.json
similarity index 91%
rename from 潇洒/json/jh.json
rename to 潇洒/json/xbky.json
index 83de831..01872d2 100644
--- a/潇洒/json/jh.json
+++ b/潇洒/json/xbky.json
@@ -3,8 +3,8 @@
"Domains": [
"http://xsayang.fun:12512"
],
- "SiteWord": "juhe",
- "SiteName": "聚合",
+ "SiteWord": "xbky",
+ "SiteName": "小斑快映",
"Classes": [
{
"type_name": "电影",
diff --git a/潇洒/json/xf.json b/潇洒/json/xf.json
deleted file mode 100644
index 2188258..0000000
--- a/潇洒/json/xf.json
+++ /dev/null
@@ -1,1461 +0,0 @@
-{
- "SiteUrl": "https://xiafan.banye.tech:7086",
- "Domains": [
- "http://154.204.177.231",
- "http://www.xn--ghqy10g1w0a.xyz"
- ],
- "SiteWord": "xf",
- "SiteName": "下饭",
- "Classes": [
- {
- "type_name": "下饭电影",
- "type_id": "1"
- },
- {
- "type_name": "下饭剧集",
- "type_id": "2"
- },
- {
- "type_name": "下饭综艺",
- "type_id": "4"
- },
- {
- "type_name": "下饭动漫",
- "type_id": "3"
- },
- {
- "type_name": "下饭记录片",
- "type_id": "28"
- },
- {
- "type_name": "臻彩世界",
- "type_id": "30"
- }
- ],
- "Filters": {
- "1": [
- {
- "name": "剧情",
- "value": [
- {
- "v": "喜剧",
- "n": "喜剧"
- },
- {
- "v": "爱情",
- "n": "爱情"
- },
- {
- "v": "恐怖",
- "n": "恐怖"
- },
- {
- "v": "动作",
- "n": "动作"
- },
- {
- "v": "科幻",
- "n": "科幻"
- },
- {
- "v": "剧情",
- "n": "剧情"
- },
- {
- "v": "战争",
- "n": "战争"
- },
- {
- "v": "警匪",
- "n": "警匪"
- },
- {
- "v": "犯罪",
- "n": "犯罪"
- },
- {
- "v": "动画",
- "n": "动画"
- },
- {
- "v": "奇幻",
- "n": "奇幻"
- },
- {
- "v": "武侠",
- "n": "武侠"
- },
- {
- "v": "冒险",
- "n": "冒险"
- },
- {
- "v": "枪战",
- "n": "枪战"
- },
- {
- "v": "恐怖",
- "n": "恐怖"
- },
- {
- "v": "悬疑",
- "n": "悬疑"
- },
- {
- "v": "惊悚",
- "n": "惊悚"
- },
- {
- "v": "经典",
- "n": "经典"
- },
- {
- "v": "青春",
- "n": "青春"
- },
- {
- "v": "文艺",
- "n": "文艺"
- },
- {
- "v": "微电影",
- "n": "微电影"
- },
- {
- "v": "古装",
- "n": "古装"
- },
- {
- "v": "历史",
- "n": "历史"
- },
- {
- "v": "运动",
- "n": "运动"
- },
- {
- "v": "农村",
- "n": "农村"
- },
- {
- "v": "儿童",
- "n": "儿童"
- },
- {
- "v": "网络电影",
- "n": "网络电影"
- }
- ],
- "key": "class"
- },
- {
- "name": "地区",
- "value": [
- {
- "v": "大陆",
- "n": "大陆"
- },
- {
- "v": "香港",
- "n": "香港"
- },
- {
- "v": "台湾",
- "n": "台湾"
- },
- {
- "v": "美国",
- "n": "美国"
- },
- {
- "v": "法国",
- "n": "法国"
- },
- {
- "v": "英国",
- "n": "英国"
- },
- {
- "v": "日本",
- "n": "日本"
- },
- {
- "v": "韩国",
- "n": "韩国"
- },
- {
- "v": "德国",
- "n": "德国"
- },
- {
- "v": "泰国",
- "n": "泰国"
- },
- {
- "v": "印度",
- "n": "印度"
- },
- {
- "v": "意大利",
- "n": "意大利"
- },
- {
- "v": "西班牙",
- "n": "西班牙"
- },
- {
- "v": "加拿大",
- "n": "加拿大"
- },
- {
- "v": "其他",
- "n": "其他"
- }
- ],
- "key": "area"
- },
- {
- "name": "语言",
- "value": [
- {
- "v": "国语",
- "n": "国语"
- },
- {
- "v": "英语",
- "n": "英语"
- },
- {
- "v": "粤语",
- "n": "粤语"
- },
- {
- "v": "闽南语",
- "n": "闽南语"
- },
- {
- "v": "韩语",
- "n": "韩语"
- },
- {
- "v": "日语",
- "n": "日语"
- },
- {
- "v": "法语",
- "n": "法语"
- },
- {
- "v": "德语",
- "n": "德语"
- },
- {
- "v": "其它",
- "n": "其它"
- }
- ],
- "key": "lang"
- },
- {
- "name": "时间",
- "value": [
- {
- "v": "2024",
- "n": "2024"
- },
- {
- "v": "2023",
- "n": "2023"
- },
- {
- "v": "2022",
- "n": "2022"
- },
- {
- "v": "2021",
- "n": "2021"
- },
- {
- "v": "2020",
- "n": "2020"
- },
- {
- "v": "2019",
- "n": "2019"
- },
- {
- "v": "2018",
- "n": "2018"
- },
- {
- "v": "2017",
- "n": "2017"
- },
- {
- "v": "2016",
- "n": "2016"
- },
- {
- "v": "2015",
- "n": "2015"
- },
- {
- "v": "2014",
- "n": "2014"
- },
- {
- "v": "2013",
- "n": "2013"
- },
- {
- "v": "2012",
- "n": "2012"
- },
- {
- "v": "2011",
- "n": "2011"
- },
- {
- "v": "2010",
- "n": "2010"
- }
- ],
- "key": "year"
- },
- {
- "name": "字母查找",
- "value": [
- {
- "v": "A",
- "n": "A"
- },
- {
- "v": "B",
- "n": "B"
- },
- {
- "v": "C",
- "n": "C"
- },
- {
- "v": "D",
- "n": "D"
- },
- {
- "v": "E",
- "n": "E"
- },
- {
- "v": "F",
- "n": "F"
- },
- {
- "v": "G",
- "n": "G"
- },
- {
- "v": "H",
- "n": "H"
- },
- {
- "v": "I",
- "n": "I"
- },
- {
- "v": "J",
- "n": "J"
- },
- {
- "v": "K",
- "n": "K"
- },
- {
- "v": "L",
- "n": "L"
- },
- {
- "v": "M",
- "n": "M"
- },
- {
- "v": "N",
- "n": "N"
- },
- {
- "v": "O",
- "n": "O"
- },
- {
- "v": "P",
- "n": "P"
- },
- {
- "v": "Q",
- "n": "Q"
- },
- {
- "v": "R",
- "n": "R"
- },
- {
- "v": "S",
- "n": "S"
- },
- {
- "v": "T",
- "n": "T"
- },
- {
- "v": "U",
- "n": "U"
- },
- {
- "v": "V",
- "n": "V"
- },
- {
- "v": "W",
- "n": "W"
- },
- {
- "v": "X",
- "n": "X"
- },
- {
- "v": "Y",
- "n": "Y"
- },
- {
- "v": "Z",
- "n": "Z"
- },
- {
- "v": "0-9",
- "n": "0-9"
- }
- ],
- "key": "character"
- },
- {
- "name": "评分排序",
- "value": [
- {
- "v": "time",
- "n": "时间排序"
- },
- {
- "v": "hits",
- "n": "人气排序"
- },
- {
- "v": "score",
- "n": "评分排序"
- }
- ],
- "key": "order"
- }
- ],
- "2": [
- {
- "name": "类型",
- "value": [
- {
- "v": "13",
- "n": "国产剧"
- },
- {
- "v": "14",
- "n": "欧美剧"
- },
- {
- "v": "15",
- "n": "日韩剧"
- },
- {
- "v": "16",
- "n": "港台剧"
- },
- {
- "v": "23",
- "n": "泰剧"
- }
- ],
- "key": "type"
- },
- {
- "name": "剧情",
- "value": [
- {
- "v": "古装",
- "n": "古装"
- },
- {
- "v": "战争",
- "n": "战争"
- },
- {
- "v": "青春偶像",
- "n": "青春偶像"
- },
- {
- "v": "喜剧",
- "n": "喜剧"
- },
- {
- "v": "家庭",
- "n": "家庭"
- },
- {
- "v": "犯罪",
- "n": "犯罪"
- },
- {
- "v": "动作",
- "n": "动作"
- },
- {
- "v": "奇幻",
- "n": "奇幻"
- },
- {
- "v": "剧情",
- "n": "剧情"
- },
- {
- "v": "历史",
- "n": "历史"
- },
- {
- "v": "经典",
- "n": "经典"
- },
- {
- "v": "乡村",
- "n": "乡村"
- },
- {
- "v": "情景",
- "n": "情景"
- },
- {
- "v": "商战",
- "n": "商战"
- },
- {
- "v": "网剧",
- "n": "网剧"
- },
- {
- "v": "其他",
- "n": "其他"
- }
- ],
- "key": "class"
- },
- {
- "name": "地区",
- "value": [
- {
- "v": "中国大陆",
- "n": "中国大陆"
- },
- {
- "v": "大陆",
- "n": "大陆"
- },
- {
- "v": "内地",
- "n": "内地"
- },
- {
- "v": "韩国",
- "n": "韩国"
- },
- {
- "v": "香港",
- "n": "香港"
- },
- {
- "v": "台湾",
- "n": "台湾"
- },
- {
- "v": "日本",
- "n": "日本"
- },
- {
- "v": "美国",
- "n": "美国"
- },
- {
- "v": "泰国",
- "n": "泰国"
- },
- {
- "v": "英国",
- "n": "英国"
- },
- {
- "v": "新加坡",
- "n": "新加坡"
- },
- {
- "v": "其他",
- "n": "其他"
- }
- ],
- "key": "area"
- },
- {
- "name": "语言",
- "value": [
- {
- "v": "国语",
- "n": "国语"
- },
- {
- "v": "英语",
- "n": "英语"
- },
- {
- "v": "粤语",
- "n": "粤语"
- },
- {
- "v": "闽南语",
- "n": "闽南语"
- },
- {
- "v": "韩语",
- "n": "韩语"
- },
- {
- "v": "日语",
- "n": "日语"
- },
- {
- "v": "其它",
- "n": "其它"
- }
- ],
- "key": "lang"
- },
- {
- "name": "时间",
- "value": [
- {
- "v": "2024",
- "n": "2024"
- },
- {
- "v": "2023",
- "n": "2023"
- },
- {
- "v": "2022",
- "n": "2022"
- },
- {
- "v": "2021",
- "n": "2021"
- },
- {
- "v": "2020",
- "n": "2020"
- },
- {
- "v": "2019",
- "n": "2019"
- },
- {
- "v": "2018",
- "n": "2018"
- },
- {
- "v": "2017",
- "n": "2017"
- },
- {
- "v": "2016",
- "n": "2016"
- },
- {
- "v": "2015",
- "n": "2015"
- },
- {
- "v": "2014",
- "n": "2014"
- },
- {
- "v": "2013",
- "n": "2013"
- },
- {
- "v": "2012",
- "n": "2012"
- },
- {
- "v": "2011",
- "n": "2011"
- },
- {
- "v": "2010",
- "n": "2010"
- }
- ],
- "key": "year"
- },
- {
- "name": "字母查找",
- "value": [
- {
- "v": "A",
- "n": "A"
- },
- {
- "v": "B",
- "n": "B"
- },
- {
- "v": "C",
- "n": "C"
- },
- {
- "v": "D",
- "n": "D"
- },
- {
- "v": "E",
- "n": "E"
- },
- {
- "v": "F",
- "n": "F"
- },
- {
- "v": "G",
- "n": "G"
- },
- {
- "v": "H",
- "n": "H"
- },
- {
- "v": "I",
- "n": "I"
- },
- {
- "v": "J",
- "n": "J"
- },
- {
- "v": "K",
- "n": "K"
- },
- {
- "v": "L",
- "n": "L"
- },
- {
- "v": "M",
- "n": "M"
- },
- {
- "v": "N",
- "n": "N"
- },
- {
- "v": "O",
- "n": "O"
- },
- {
- "v": "P",
- "n": "P"
- },
- {
- "v": "Q",
- "n": "Q"
- },
- {
- "v": "R",
- "n": "R"
- },
- {
- "v": "S",
- "n": "S"
- },
- {
- "v": "T",
- "n": "T"
- },
- {
- "v": "U",
- "n": "U"
- },
- {
- "v": "V",
- "n": "V"
- },
- {
- "v": "W",
- "n": "W"
- },
- {
- "v": "X",
- "n": "X"
- },
- {
- "v": "Y",
- "n": "Y"
- },
- {
- "v": "Z",
- "n": "Z"
- },
- {
- "v": "0-9",
- "n": "0-9"
- }
- ],
- "key": "character"
- },
- {
- "name": "评分排序",
- "value": [
- {
- "v": "time",
- "n": "时间排序"
- },
- {
- "v": "hits",
- "n": "人气排序"
- },
- {
- "v": "score",
- "n": "评分排序"
- }
- ],
- "key": "order"
- }
- ],
- "3": [
- {
- "name": "类型",
- "value": [
- {
- "v": "20",
- "n": "国产"
- },
- {
- "v": "21",
- "n": "日韩"
- },
- {
- "v": "22",
- "n": "欧美"
- }
- ],
- "key": "type"
- },
- {
- "name": "时间",
- "value": [
- {
- "v": "2024",
- "n": "2024"
- },
- {
- "v": "2023",
- "n": "2023"
- },
- {
- "v": "2022",
- "n": "2022"
- },
- {
- "v": "2021",
- "n": "2021"
- },
- {
- "v": "2020",
- "n": "2020"
- },
- {
- "v": "2019",
- "n": "2019"
- },
- {
- "v": "2018",
- "n": "2018"
- },
- {
- "v": "2017",
- "n": "2017"
- },
- {
- "v": "2016",
- "n": "2016"
- },
- {
- "v": "2015",
- "n": "2015"
- },
- {
- "v": "2014",
- "n": "2014"
- },
- {
- "v": "2013",
- "n": "2013"
- },
- {
- "v": "2012",
- "n": "2012"
- },
- {
- "v": "2011",
- "n": "2011"
- },
- {
- "v": "2010",
- "n": "2010"
- }
- ],
- "key": "year"
- },
- {
- "name": "字母查找",
- "value": [
- {
- "v": "A",
- "n": "A"
- },
- {
- "v": "B",
- "n": "B"
- },
- {
- "v": "C",
- "n": "C"
- },
- {
- "v": "D",
- "n": "D"
- },
- {
- "v": "E",
- "n": "E"
- },
- {
- "v": "F",
- "n": "F"
- },
- {
- "v": "G",
- "n": "G"
- },
- {
- "v": "H",
- "n": "H"
- },
- {
- "v": "I",
- "n": "I"
- },
- {
- "v": "J",
- "n": "J"
- },
- {
- "v": "K",
- "n": "K"
- },
- {
- "v": "L",
- "n": "L"
- },
- {
- "v": "M",
- "n": "M"
- },
- {
- "v": "N",
- "n": "N"
- },
- {
- "v": "O",
- "n": "O"
- },
- {
- "v": "P",
- "n": "P"
- },
- {
- "v": "Q",
- "n": "Q"
- },
- {
- "v": "R",
- "n": "R"
- },
- {
- "v": "S",
- "n": "S"
- },
- {
- "v": "T",
- "n": "T"
- },
- {
- "v": "U",
- "n": "U"
- },
- {
- "v": "V",
- "n": "V"
- },
- {
- "v": "W",
- "n": "W"
- },
- {
- "v": "X",
- "n": "X"
- },
- {
- "v": "Y",
- "n": "Y"
- },
- {
- "v": "Z",
- "n": "Z"
- },
- {
- "v": "0-9",
- "n": "0-9"
- }
- ],
- "key": "character"
- },
- {
- "name": "评分排序",
- "value": [
- {
- "v": "time",
- "n": "时间排序"
- },
- {
- "v": "hits",
- "n": "人气排序"
- },
- {
- "v": "score",
- "n": "评分排序"
- }
- ],
- "key": "order"
- }
- ],
- "25": [
- {
- "name": "时间",
- "value": [
- {
- "v": "2024",
- "n": "2024"
- },
- {
- "v": "2023",
- "n": "2023"
- },
- {
- "v": "2022",
- "n": "2022"
- },
- {
- "v": "2021",
- "n": "2021"
- },
- {
- "v": "2020",
- "n": "2020"
- },
- {
- "v": "2019",
- "n": "2019"
- },
- {
- "v": "2018",
- "n": "2018"
- },
- {
- "v": "2017",
- "n": "2017"
- },
- {
- "v": "2016",
- "n": "2016"
- },
- {
- "v": "2015",
- "n": "2015"
- },
- {
- "v": "2014",
- "n": "2014"
- },
- {
- "v": "2013",
- "n": "2013"
- },
- {
- "v": "2012",
- "n": "2012"
- },
- {
- "v": "2011",
- "n": "2011"
- },
- {
- "v": "2010",
- "n": "2010"
- }
- ],
- "key": "year"
- },
- {
- "name": "字母查找",
- "value": [
- {
- "v": "A",
- "n": "A"
- },
- {
- "v": "B",
- "n": "B"
- },
- {
- "v": "C",
- "n": "C"
- },
- {
- "v": "D",
- "n": "D"
- },
- {
- "v": "E",
- "n": "E"
- },
- {
- "v": "F",
- "n": "F"
- },
- {
- "v": "G",
- "n": "G"
- },
- {
- "v": "H",
- "n": "H"
- },
- {
- "v": "I",
- "n": "I"
- },
- {
- "v": "J",
- "n": "J"
- },
- {
- "v": "K",
- "n": "K"
- },
- {
- "v": "L",
- "n": "L"
- },
- {
- "v": "M",
- "n": "M"
- },
- {
- "v": "N",
- "n": "N"
- },
- {
- "v": "O",
- "n": "O"
- },
- {
- "v": "P",
- "n": "P"
- },
- {
- "v": "Q",
- "n": "Q"
- },
- {
- "v": "R",
- "n": "R"
- },
- {
- "v": "S",
- "n": "S"
- },
- {
- "v": "T",
- "n": "T"
- },
- {
- "v": "U",
- "n": "U"
- },
- {
- "v": "V",
- "n": "V"
- },
- {
- "v": "W",
- "n": "W"
- },
- {
- "v": "X",
- "n": "X"
- },
- {
- "v": "Y",
- "n": "Y"
- },
- {
- "v": "Z",
- "n": "Z"
- },
- {
- "v": "0-9",
- "n": "0-9"
- }
- ],
- "key": "character"
- },
- {
- "name": "评分排序",
- "value": [
- {
- "v": "time",
- "n": "时间排序"
- },
- {
- "v": "hits",
- "n": "人气排序"
- },
- {
- "v": "score",
- "n": "评分排序"
- }
- ],
- "key": "order"
- }
- ],
- "4": [
- {
- "name": "时间",
- "value": [
- {
- "v": "2024",
- "n": "2024"
- },
- {
- "v": "2023",
- "n": "2023"
- },
- {
- "v": "2022",
- "n": "2022"
- },
- {
- "v": "2021",
- "n": "2021"
- },
- {
- "v": "2020",
- "n": "2020"
- },
- {
- "v": "2019",
- "n": "2019"
- },
- {
- "v": "2018",
- "n": "2018"
- },
- {
- "v": "2017",
- "n": "2017"
- },
- {
- "v": "2016",
- "n": "2016"
- },
- {
- "v": "2015",
- "n": "2015"
- },
- {
- "v": "2014",
- "n": "2014"
- },
- {
- "v": "2013",
- "n": "2013"
- },
- {
- "v": "2012",
- "n": "2012"
- },
- {
- "v": "2011",
- "n": "2011"
- },
- {
- "v": "2010",
- "n": "2010"
- }
- ],
- "key": "year"
- },
- {
- "name": "字母查找",
- "value": [
- {
- "v": "A",
- "n": "A"
- },
- {
- "v": "B",
- "n": "B"
- },
- {
- "v": "C",
- "n": "C"
- },
- {
- "v": "D",
- "n": "D"
- },
- {
- "v": "E",
- "n": "E"
- },
- {
- "v": "F",
- "n": "F"
- },
- {
- "v": "G",
- "n": "G"
- },
- {
- "v": "H",
- "n": "H"
- },
- {
- "v": "I",
- "n": "I"
- },
- {
- "v": "J",
- "n": "J"
- },
- {
- "v": "K",
- "n": "K"
- },
- {
- "v": "L",
- "n": "L"
- },
- {
- "v": "M",
- "n": "M"
- },
- {
- "v": "N",
- "n": "N"
- },
- {
- "v": "O",
- "n": "O"
- },
- {
- "v": "P",
- "n": "P"
- },
- {
- "v": "Q",
- "n": "Q"
- },
- {
- "v": "R",
- "n": "R"
- },
- {
- "v": "S",
- "n": "S"
- },
- {
- "v": "T",
- "n": "T"
- },
- {
- "v": "U",
- "n": "U"
- },
- {
- "v": "V",
- "n": "V"
- },
- {
- "v": "W",
- "n": "W"
- },
- {
- "v": "X",
- "n": "X"
- },
- {
- "v": "Y",
- "n": "Y"
- },
- {
- "v": "Z",
- "n": "Z"
- },
- {
- "v": "0-9",
- "n": "0-9"
- }
- ],
- "key": "character"
- },
- {
- "name": "评分排序",
- "value": [
- {
- "v": "time",
- "n": "时间排序"
- },
- {
- "v": "hits",
- "n": "人气排序"
- },
- {
- "v": "score",
- "n": "评分排序"
- }
- ],
- "key": "order"
- }
- ]
- }
-}
\ No newline at end of file
diff --git a/潇洒/json/初中课堂.json b/潇洒/json/初中课堂.json
deleted file mode 100644
index 8e89f18..0000000
--- a/潇洒/json/初中课堂.json
+++ /dev/null
@@ -1,1398 +0,0 @@
-{
- "class": [
- {
- "type_name": "7年级语文",
- "type_id": "7年级语文"
- },
- {
- "type_name": "7年级数学",
- "type_id": "7年级数学"
- },
- {
- "type_name": "7年级英语",
- "type_id": "7年级英语"
- },
- {
- "type_name": "7年级历史",
- "type_id": "7年级历史"
- },
- {
- "type_name": "7年级地理",
- "type_id": "7年级地理"
- },
- {
- "type_name": "7年级生物",
- "type_id": "7年级生物"
- },
- {
- "type_name": "7年级物理",
- "type_id": "7年级物理"
- },
- {
- "type_name": "7年级化学",
- "type_id": "7年级化学"
- },
- {
- "type_name": "8年级语文",
- "type_id": "8年级语文"
- },
- {
- "type_name": "8年级数学",
- "type_id": "8年级数学"
- },
- {
- "type_name": "8年级英语",
- "type_id": "8年级英语"
- },
- {
- "type_name": "8年级历史",
- "type_id": "8年级历史"
- },
- {
- "type_name": "8年级地理",
- "type_id": "8年级地理"
- },
- {
- "type_name": "8年级生物",
- "type_id": "8年级生物"
- },
- {
- "type_name": "8年级物理",
- "type_id": "8年级物理"
- },
- {
- "type_name": "8年级化学",
- "type_id": "8年级化学"
- },
- {
- "type_name": "9年级语文",
- "type_id": "9年级语文"
- },
- {
- "type_name": "9年级数学",
- "type_id": "9年级数学"
- },
- {
- "type_name": "9年级英语",
- "type_id": "9年级英语"
- },
- {
- "type_name": "9年级历史",
- "type_id": "9年级历史"
- },
- {
- "type_name": "9年级地理",
- "type_id": "9年级地理"
- },
- {
- "type_name": "9年级生物",
- "type_id": "9年级生物"
- },
- {
- "type_name": "9年级物理",
- "type_id": "9年级物理"
- },
- {
- "type_name": "9年级化学",
- "type_id": "9年级化学"
- }
- ],
- "filters": {
- "7年级语文": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版7年级语文"
- },
- {
- "n": "人教版",
- "v": "人教版7年级语文"
- },
- {
- "n": "北师大版",
- "v": "北师大版7年级语文"
- },
- {
- "n": "苏教版",
- "v": "苏教版7年级语文"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "7年级英语": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版7年级英语"
- },
- {
- "n": "人教版",
- "v": "人教版7年级英语"
- },
- {
- "n": "北师大版",
- "v": "北师大版7年级英语"
- },
- {
- "n": "苏教版",
- "v": "苏教版7年级英语"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "7年级数学": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版7年级数学"
- },
- {
- "n": "人教版",
- "v": "人教版7年级数学"
- },
- {
- "n": "北师大版",
- "v": "北师大版7年级数学"
- },
- {
- "n": "苏教版",
- "v": "苏教版7年级数学"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "7年级化学": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版7年级化学"
- },
- {
- "n": "人教版",
- "v": "人教版7年级化学"
- },
- {
- "n": "北师大版",
- "v": "北师大版7年级化学"
- },
- {
- "n": "苏教版",
- "v": "苏教版7年级化学"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "7年级物理": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版7年级物理"
- },
- {
- "n": "人教版",
- "v": "人教版7年级物理"
- },
- {
- "n": "北师大版",
- "v": "北师大版7年级物理"
- },
- {
- "n": "苏教版",
- "v": "苏教版7年级物理"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "7年级生物": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版7年级生物"
- },
- {
- "n": "人教版",
- "v": "人教版7年级生物"
- },
- {
- "n": "北师大版",
- "v": "北师大版7年级生物"
- },
- {
- "n": "苏教版",
- "v": "苏教版7年级生物"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "7年级历史": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版7年级历史"
- },
- {
- "n": "人教版",
- "v": "人教版7年级历史"
- },
- {
- "n": "北师大版",
- "v": "北师大版7年级历史"
- },
- {
- "n": "苏教版",
- "v": "苏教版7年级历史"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "7年级地理": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版7年级地理"
- },
- {
- "n": "人教版",
- "v": "人教版7年级地理"
- },
- {
- "n": "北师大版",
- "v": "北师大版7年级地理"
- },
- {
- "n": "苏教版",
- "v": "苏教版7年级地理"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "8年级语文": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版8年级语文"
- },
- {
- "n": "人教版",
- "v": "人教版8年级语文"
- },
- {
- "n": "北师大版",
- "v": "北师大版8年级语文"
- },
- {
- "n": "苏教版",
- "v": "苏教版8年级语文"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "8年级英语": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版8年级英语"
- },
- {
- "n": "人教版",
- "v": "人教版8年级英语"
- },
- {
- "n": "北师大版",
- "v": "北师大版8年级英语"
- },
- {
- "n": "苏教版",
- "v": "苏教版8年级英语"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "8年级数学": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版8年级数学"
- },
- {
- "n": "人教版",
- "v": "人教版8年级数学"
- },
- {
- "n": "北师大版",
- "v": "北师大版8年级数学"
- },
- {
- "n": "苏教版",
- "v": "苏教版8年级数学"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "8年级化学": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版8年级化学"
- },
- {
- "n": "人教版",
- "v": "人教版8年级化学"
- },
- {
- "n": "北师大版",
- "v": "北师大版8年级化学"
- },
- {
- "n": "苏教版",
- "v": "苏教版8年级化学"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "8年级物理": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版8年级物理"
- },
- {
- "n": "人教版",
- "v": "人教版8年级物理"
- },
- {
- "n": "北师大版",
- "v": "北师大版8年级物理"
- },
- {
- "n": "苏教版",
- "v": "苏教版8年级物理"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "8年级生物": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版8年级生物"
- },
- {
- "n": "人教版",
- "v": "人教版8年级生物"
- },
- {
- "n": "北师大版",
- "v": "北师大版8年级生物"
- },
- {
- "n": "苏教版",
- "v": "苏教版8年级生物"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "8年级历史": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版8年级历史"
- },
- {
- "n": "人教版",
- "v": "人教版8年级历史"
- },
- {
- "n": "北师大版",
- "v": "北师大版8年级历史"
- },
- {
- "n": "苏教版",
- "v": "苏教版8年级历史"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "8年级地理": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版8年级地理"
- },
- {
- "n": "人教版",
- "v": "人教版8年级地理"
- },
- {
- "n": "北师大版",
- "v": "北师大版8年级地理"
- },
- {
- "n": "苏教版",
- "v": "苏教版8年级地理"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "9年级语文": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版9年级语文"
- },
- {
- "n": "人教版",
- "v": "人教版9年级语文"
- },
- {
- "n": "北师大版",
- "v": "北师大版9年级语文"
- },
- {
- "n": "苏教版",
- "v": "苏教版9年级语文"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "9年级英语": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版9年级英语"
- },
- {
- "n": "人教版",
- "v": "人教版9年级英语"
- },
- {
- "n": "北师大版",
- "v": "北师大版9年级英语"
- },
- {
- "n": "苏教版",
- "v": "苏教版9年级英语"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "9年级数学": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版9年级数学"
- },
- {
- "n": "人教版",
- "v": "人教版9年级数学"
- },
- {
- "n": "北师大版",
- "v": "北师大版9年级数学"
- },
- {
- "n": "苏教版",
- "v": "苏教版9年级数学"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "9年级化学": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版9年级化学"
- },
- {
- "n": "人教版",
- "v": "人教版9年级化学"
- },
- {
- "n": "北师大版",
- "v": "北师大版9年级化学"
- },
- {
- "n": "苏教版",
- "v": "苏教版9年级化学"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "9年级物理": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版9年级物理"
- },
- {
- "n": "人教版",
- "v": "人教版9年级物理"
- },
- {
- "n": "北师大版",
- "v": "北师大版9年级物理"
- },
- {
- "n": "苏教版",
- "v": "苏教版9年级物理"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "9年级生物": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版9年级生物"
- },
- {
- "n": "人教版",
- "v": "人教版9年级生物"
- },
- {
- "n": "北师大版",
- "v": "北师大版9年级生物"
- },
- {
- "n": "苏教版",
- "v": "苏教版9年级生物"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "9年级历史": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版9年级历史"
- },
- {
- "n": "人教版",
- "v": "人教版9年级历史"
- },
- {
- "n": "北师大版",
- "v": "北师大版9年级历史"
- },
- {
- "n": "苏教版",
- "v": "苏教版9年级历史"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "9年级地理": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "n": "沪教版",
- "v": "沪教版9年级地理"
- },
- {
- "n": "人教版",
- "v": "人教版9年级地理"
- },
- {
- "n": "北师大版",
- "v": "北师大版9年级地理"
- },
- {
- "n": "苏教版",
- "v": "苏教版9年级地理"
- }
- ]
- },
- {
- "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/潇洒/json/哔哩合集.json b/潇洒/json/哔哩合集.json
deleted file mode 100644
index b3aec1f..0000000
--- a/潇洒/json/哔哩合集.json
+++ /dev/null
@@ -1,5310 +0,0 @@
-{
- "class": [
- {
- "type_name": "沙雕动漫",
- "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": "球星"
- },
- {
- "type_name": "旅游",
- "type_id": "旅游"
- },
- {
- "type_name": "风景",
- "type_id": "风景4K"
- },
- {
- "type_name": "说案",
- "type_id": "说案"
- },
- {
- "type_name": "知名UP主",
- "type_id": "知名UP主"
- },
- {
- "type_name": "探索发现",
- "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": "戏曲"
- },
- {
- "type_name": "解说",
- "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": "太极拳"
- },
- {
- "type_name": "广场舞",
- "type_id": "广场舞"
- },
- {
- "type_name": "舞蹈",
- "type_id": "舞蹈"
- },
- {
- "type_name": "音乐",
- "type_id": "音乐"
- },
- {
- "type_name": "歌曲",
- "type_id": "歌曲"
- },
- {
- "type_name": "MV",
- "type_id": "MV4K"
- },
- {
- "type_name": "舞曲",
- "type_id": "舞曲超清"
- },
- {
- "type_name": "4K",
- "type_id": "4K"
- },
- {
- "type_name": "电影",
- "type_id": "电影"
- },
- {
- "type_name": "电视剧",
- "type_id": "电视剧"
- },
- {
- "type_name": "白噪音",
- "type_id": "白噪音超清"
- },
- {
- "type_name": "考公考证",
- "type_id": "考公考证"
- },
- {
- "type_name": "平面设计教学",
- "type_id": "平面设计教学"
- },
- {
- "type_name": "软件教程",
- "type_id": "软件教程"
- },
- {
- "type_name": "Windows",
- "type_id": "Windows"
- }
- ],
- "filters": {
- "考公考证": [
- {
- "key": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "演唱会超清"
- },
- {
- "n": "A阿杜",
- "v": "阿杜演唱会超清"
- },
- {
- "n": "A阿黛尔",
- "v": "阿黛尔演唱会超清"
- },
- {
- "n": "BBeyond",
- "v": "Beyond演唱会超清"
- },
- {
- "n": "BBy2",
- "v": "By2演唱会超清"
- },
- {
- "n": "BBIGBANG",
- "v": "BIGBANG演唱会超清"
- },
- {
- "n": "B布兰妮",
- "v": "布兰妮演唱会超清"
- },
- {
- "n": "B坂井泉水",
- "v": "坂井泉水演唱会超清"
- },
- {
- "n": "C陈奕迅",
- "v": "陈奕迅演唱会超清"
- },
- {
- "n": "C蔡依林",
- "v": "蔡依林演唱会超清"
- },
- {
- "n": "C初音未来",
- "v": "初音未来演唱会超清"
- },
- {
- "n": "C蔡健雅",
- "v": "蔡健雅演唱会超清"
- },
- {
- "n": "C陈小春",
- "v": "陈小春演唱会超清"
- },
- {
- "n": "C草蜢",
- "v": "草蜢演唱会超清"
- },
- {
- "n": "C陈慧娴",
- "v": "陈慧娴演唱会超清"
- },
- {
- "n": "C崔健",
- "v": "崔健演唱会超清"
- },
- {
- "n": "C仓木麻衣",
- "v": "仓木麻衣演唱会超清"
- },
- {
- "n": "D戴荃",
- "v": "戴荃演唱会超清"
- },
- {
- "n": "D动力火车",
- "v": "动力火车演唱会超清"
- },
- {
- "n": "D邓丽君",
- "v": "邓丽君演唱会超清"
- },
- {
- "n": "D丁当",
- "v": "丁当演唱会超清"
- },
- {
- "n": "D刀郎",
- "v": "刀郎演唱会超清"
- },
- {
- "n": "D邓紫棋",
- "v": "邓紫棋演唱会超清"
- },
- {
- "n": "D戴佩妮",
- "v": "戴佩妮演唱会超清"
- },
- {
- "n": "D邓丽君",
- "v": "邓丽君演唱会超清"
- },
- {
- "n": "F飞儿乐队",
- "v": "飞儿乐队演唱会超清"
- },
- {
- "n": "F费玉清",
- "v": "费玉清演唱会超清"
- },
- {
- "n": "F费翔",
- "v": "费翔演唱会超清"
- },
- {
- "n": "F方大同",
- "v": "方大同演唱会超清"
- },
- {
- "n": "F房东的猫",
- "v": "房东的猫演唱会超清"
- },
- {
- "n": "F凤飞飞",
- "v": "凤飞飞演唱会超清"
- },
- {
- "n": "F凤凰传奇",
- "v": "凤凰传奇演唱会超清"
- },
- {
- "n": "G郭采洁",
- "v": "郭采洁演唱会超清"
- },
- {
- "n": "G光良",
- "v": "光良演唱会超清"
- },
- {
- "n": "G郭静",
- "v": "郭静演唱会超清"
- },
- {
- "n": "G郭富城",
- "v": "郭富城演唱会超清"
- },
- {
- "n": "H胡彦斌",
- "v": "胡彦斌演唱会超清"
- },
- {
- "n": "H胡夏",
- "v": "胡夏演唱会超清"
- },
- {
- "n": "H韩红",
- "v": "韩红演唱会超清"
- },
- {
- "n": "H黄品源",
- "v": "黄品源演唱会超清"
- },
- {
- "n": "H黄小琥",
- "v": "黄小琥演唱会超清"
- },
- {
- "n": "H花儿乐队",
- "v": "花儿乐队演唱会超清"
- },
- {
- "n": "H黄家强",
- "v": "黄家强演唱会超清"
- },
- {
- "n": "H后街男孩",
- "v": "后街男孩演唱会超清"
- },
- {
- "n": "J经典老歌",
- "v": "经典老歌演唱会超清"
- },
- {
- "n": "J贾斯丁比伯",
- "v": "贾斯丁比伯演唱会超清"
- },
- {
- "n": "J金池",
- "v": "金池演唱会超清"
- },
- {
- "n": "J金志文",
- "v": "金志文演唱会超清"
- },
- {
- "n": "J焦迈奇",
- "v": "焦迈奇演唱会超清"
- },
- {
- "n": "K筷子兄弟",
- "v": "筷子兄弟演唱会超清"
- },
- {
- "n": "L李玟",
- "v": "李玟演唱会超清"
- },
- {
- "n": "L林忆莲",
- "v": "林忆莲演唱会超清"
- },
- {
- "n": "L李克勤",
- "v": "李克勤演唱会超清"
- },
- {
- "n": "L刘宪华",
- "v": "刘宪华演唱会超清"
- },
- {
- "n": "L李圣杰",
- "v": "李圣杰演唱会超清"
- },
- {
- "n": "L林宥嘉",
- "v": "林宥嘉演唱会超清"
- },
- {
- "n": "L梁静茹",
- "v": "梁静茹演唱会超清"
- },
- {
- "n": "L李健",
- "v": "李健演唱会超清"
- },
- {
- "n": "L林俊杰",
- "v": "林俊杰演唱会超清"
- },
- {
- "n": "L李玉刚",
- "v": "李玉刚演唱会超清"
- },
- {
- "n": "L林志炫",
- "v": "林志炫演唱会超清"
- },
- {
- "n": "L李荣浩",
- "v": "李荣浩演唱会超清"
- },
- {
- "n": "L李宇春",
- "v": "李宇春演唱会超清"
- },
- {
- "n": "L洛天依",
- "v": "洛天依演唱会超清"
- },
- {
- "n": "L林子祥",
- "v": "林子祥演唱会超清"
- },
- {
- "n": "L李宗盛",
- "v": "李宗盛演唱会超清"
- },
- {
- "n": "L黎明",
- "v": "黎明演唱会超清"
- },
- {
- "n": "L刘德华",
- "v": "刘德华演唱会超清"
- },
- {
- "n": "L罗大佑",
- "v": "罗大佑演唱会超清"
- },
- {
- "n": "L林肯公园",
- "v": "林肯公园演唱会超清"
- },
- {
- "n": "LLadyGaga",
- "v": "LadyGaga演唱会超清"
- },
- {
- "n": "L旅行团乐队",
- "v": "旅行团乐队演唱会超清"
- },
- {
- "n": "M莫文蔚",
- "v": "莫文蔚演唱会超清"
- },
- {
- "n": "M毛不易",
- "v": "毛不易演唱会超清"
- },
- {
- "n": "M梅艳芳",
- "v": "梅艳芳演唱会超清"
- },
- {
- "n": "M迈克尔杰克逊",
- "v": "迈克尔杰克逊演唱会超清"
- },
- {
- "n": "N南拳妈妈",
- "v": "南拳妈妈演唱会超清"
- },
- {
- "n": "P朴树",
- "v": "朴树演唱会超清"
- },
- {
- "n": "Q齐秦",
- "v": "齐秦演唱会超清"
- },
- {
- "n": "Q青鸟飞鱼",
- "v": "青鸟飞鱼演唱会超清"
- },
- {
- "n": "R容祖儿",
- "v": "容祖儿演唱会超清"
- },
- {
- "n": "R任贤齐",
- "v": "任贤齐演唱会超清"
- },
- {
- "n": "S水木年华",
- "v": "水木年华演唱会超清"
- },
- {
- "n": "S孙燕姿",
- "v": "孙燕姿演唱会超清"
- },
- {
- "n": "S苏打绿",
- "v": "苏打绿演唱会超清"
- },
- {
- "n": "SSHE",
- "v": "SHE演唱会超清"
- },
- {
- "n": "S孙楠",
- "v": "孙楠演唱会超清"
- },
- {
- "n": "T陶喆",
- "v": "陶喆演唱会超清"
- },
- {
- "n": "T谭咏麟",
- "v": "谭咏麟演唱会超清"
- },
- {
- "n": "T田馥甄",
- "v": "田馥甄演唱会超清"
- },
- {
- "n": "T谭维维",
- "v": "谭维维演唱会超清"
- },
- {
- "n": "T逃跑计划",
- "v": "逃跑计划演唱会超清"
- },
- {
- "n": "T田震",
- "v": "田震演唱会超清"
- },
- {
- "n": "T谭晶",
- "v": "谭晶演唱会超清"
- },
- {
- "n": "T屠洪刚",
- "v": "屠洪刚演唱会超清"
- },
- {
- "n": "T泰勒·斯威夫特",
- "v": "泰勒·斯威夫特演唱会超清"
- },
- {
- "n": "W王力宏",
- "v": "王力宏演唱会超清"
- },
- {
- "n": "W王杰",
- "v": "王杰演唱会超清"
- },
- {
- "n": "W吴克群",
- "v": "吴克群演唱会超清"
- },
- {
- "n": "W王心凌",
- "v": "王心凌演唱会超清"
- },
- {
- "n": "W王靖雯",
- "v": "好声音王靖雯演唱会超清"
- },
- {
- "n": "W汪峰",
- "v": "汪峰演唱会超清"
- },
- {
- "n": "W伍佰",
- "v": "伍佰演唱会超清"
- },
- {
- "n": "W王菲",
- "v": "王菲演唱会超清"
- },
- {
- "n": "W五月天",
- "v": "五月天演唱会超清"
- },
- {
- "n": "W汪苏泷",
- "v": "汪苏泷演唱会超清"
- },
- {
- "n": "X徐佳莹",
- "v": "徐佳莹演唱会超清"
- },
- {
- "n": "X弦子",
- "v": "弦子演唱会超清"
- },
- {
- "n": "X萧亚轩",
- "v": "萧亚轩演唱会超清"
- },
- {
- "n": "X许巍",
- "v": "许巍演唱会超清"
- },
- {
- "n": "X薛之谦",
- "v": "薛之谦演唱会超清"
- },
- {
- "n": "X许嵩",
- "v": "许嵩演唱会超清"
- },
- {
- "n": "X小虎队",
- "v": "小虎队演唱会超清"
- },
- {
- "n": "X萧敬腾",
- "v": "萧敬腾演唱会超清"
- },
- {
- "n": "X谢霆锋",
- "v": "谢霆锋演唱会超清"
- },
- {
- "n": "X徐小凤",
- "v": "徐小凤演唱会超清"
- },
- {
- "n": "X信乐队",
- "v": "信乐队演唱会超清"
- },
- {
- "n": "Y夜愿乐队",
- "v": "夜愿乐队演唱会超清"
- },
- {
- "n": "Y羽泉",
- "v": "羽泉演唱会超清"
- },
- {
- "n": "Y郁可唯",
- "v": "郁可唯演唱会超清"
- },
- {
- "n": "Y叶倩文",
- "v": "叶倩文演唱会超清"
- },
- {
- "n": "Y杨坤",
- "v": "杨坤演唱会超清"
- },
- {
- "n": "Y庾澄庆",
- "v": "庾澄庆演唱会超清"
- },
- {
- "n": "Y尤长靖",
- "v": "尤长靖演唱会超清"
- },
- {
- "n": "Y易烊千玺",
- "v": "易烊千玺演唱会超清"
- },
- {
- "n": "Y袁娅维",
- "v": "袁娅维演唱会超清"
- },
- {
- "n": "Y杨丞琳",
- "v": "杨丞琳演唱会超清"
- },
- {
- "n": "Y杨千嬅",
- "v": "杨千嬅演唱会超清"
- },
- {
- "n": "Y杨宗纬",
- "v": "杨宗纬演唱会超清"
- },
- {
- "n": "Z郑秀文",
- "v": "郑秀文演唱会超清"
- },
- {
- "n": "Z周杰伦",
- "v": "周杰伦演唱会超清"
- },
- {
- "n": "Z张学友",
- "v": "张学友演唱会超清"
- },
- {
- "n": "Z张信哲",
- "v": "张信哲演唱会超清"
- },
- {
- "n": "Z张宇",
- "v": "张宇演唱会超清"
- },
- {
- "n": "Z周华健",
- "v": "周华健演唱会超清"
- },
- {
- "n": "Z张韶涵",
- "v": "张韶涵演唱会超清"
- },
- {
- "n": "Z周深",
- "v": "周深演唱会超清"
- },
- {
- "n": "Z纵贯线",
- "v": "纵贯线演唱会超清"
- },
- {
- "n": "Z赵雷",
- "v": "赵雷演唱会超清"
- },
- {
- "n": "Z周传雄",
- "v": "周传雄演唱会超清"
- },
- {
- "n": "Z张国荣",
- "v": "张国荣演唱会超清"
- },
- {
- "n": "Z周慧敏",
- "v": "周慧敏演唱会超清"
- },
- {
- "n": "Z张惠妹",
- "v": "张惠妹演唱会超清"
- },
- {
- "n": "Z周笔畅",
- "v": "周笔畅演唱会超清"
- },
- {
- "n": "Z郑中基",
- "v": "郑中基演唱会超清"
- },
- {
- "n": "Z张艺兴",
- "v": "张艺兴演唱会超清"
- },
- {
- "n": "Z张震岳",
- "v": "张震岳演唱会超清"
- },
- {
- "n": "Z张雨生",
- "v": "张雨生演唱会超清"
- },
- {
- "n": "Z郑智化",
- "v": "郑智化演唱会超清"
- },
- {
- "n": "Z卓依婷",
- "v": "卓依婷演唱会超清"
- },
- {
- "n": "Z中岛美雪",
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "说案"
- },
- {
- "n": "汤圆",
- "v": "汤圆说案"
- },
- {
- "n": "唐唐",
- "v": "唐唐说案"
- },
- {
- "n": "罗翔",
- "v": "罗翔说刑法"
- },
- {
- "n": "何家弘",
- "v": "何家弘说案"
- },
- {
- "n": "韩诺",
- "v": "韩诺说案"
- },
- {
- "n": "老V",
- "v": "老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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "全部演讲4K"
- },
- {
- "n": "A艾跃进",
- "v": "艾跃进演讲4K"
- },
- {
- "n": "C超级演说家",
- "v": "超级演说家4K"
- },
- {
- "n": "D电影",
- "v": "电影演讲4K"
- },
- {
- "n": "D典籍里的中国",
- "v": "典籍里的中国4K"
- },
- {
- "n": "G感动中国",
- "v": "感动中国4K"
- },
- {
- "n": "G郭继承",
- "v": "郭继承演讲4K"
- },
- {
- "n": "H华春莹",
- "v": "华春莹演讲4K"
- },
- {
- "n": "L雷军",
- "v": "雷军演讲4K"
- },
- {
- "n": "L罗翔",
- "v": "罗翔演讲4K"
- },
- {
- "n": "R任正非",
- "v": "任正非演讲4K"
- },
- {
- "n": "TED",
- "v": "TED演讲4K"
- },
- {
- "n": "W汪文斌",
- "v": "汪文斌演讲4K"
- },
- {
- "n": "Y一刻",
- "v": "一刻演讲4K"
- },
- {
- "n": "Z赵立坚",
- "v": "赵立坚演讲4K"
- },
- {
- "n": "Z郑强",
- "v": "郑强演讲4K"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "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"
- }
- ]
- }
- ],
- "风景4K": [
- {
- "key": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "风景4K"
- },
- {
- "n": "A澳门",
- "v": "澳门风景4K"
- },
- {
- "n": "A安徽",
- "v": "安徽风景4K"
- },
- {
- "n": "B布达拉宫",
- "v": "布达拉宫风景4K"
- },
- {
- "n": "B北京",
- "v": "北京风景4K"
- },
- {
- "n": "C重庆",
- "v": "重庆风景4K"
- },
- {
- "n": "C草原",
- "v": "草原风景4K"
- },
- {
- "n": "D大海",
- "v": "大海风景4K"
- },
- {
- "n": "F福建",
- "v": "福建风景4K"
- },
- {
- "n": "G广东",
- "v": "广东风景4K"
- },
- {
- "n": "G广西",
- "v": "广西风景4K"
- },
- {
- "n": "G贵州",
- "v": "贵州风景4K"
- },
- {
- "n": "G甘肃",
- "v": "甘肃风景4K"
- },
- {
- "n": "H海南",
- "v": "海南风景4K"
- },
- {
- "n": "H河北",
- "v": "河北风景4K"
- },
- {
- "n": "H河南",
- "v": "河南风景4K"
- },
- {
- "n": "H湖北",
- "v": "湖北风景4K"
- },
- {
- "n": "H湖南",
- "v": "湖南风景4K"
- },
- {
- "n": "H黑龙江",
- "v": "黑龙江风景4K"
- },
- {
- "n": "J吉林",
- "v": "吉林风景4K"
- },
- {
- "n": "J江苏",
- "v": "江苏风景4K"
- },
- {
- "n": "J江西",
- "v": "江西风景4K"
- },
- {
- "n": "L辽宁",
- "v": "辽宁风景4K"
- },
- {
- "n": "M民宿",
- "v": "民宿风景4K"
- },
- {
- "n": "N内蒙古",
- "v": "内蒙古风景4K"
- },
- {
- "n": "N宁夏",
- "v": "宁夏风景4K"
- },
- {
- "n": "Q青海",
- "v": "青海风景4K"
- },
- {
- "n": "S上海",
- "v": "上海风景4K"
- },
- {
- "n": "S陕西",
- "v": "陕西风景4K"
- },
- {
- "n": "S四川",
- "v": "四川风景4K"
- },
- {
- "n": "S山西",
- "v": "山西风景4K"
- },
- {
- "n": "S山东",
- "v": "山东风景4K"
- },
- {
- "n": "T天津",
- "v": "天津风景4K"
- },
- {
- "n": "T台湾",
- "v": "台湾风景4K"
- },
- {
- "n": "T天空",
- "v": "天空风景4K"
- },
- {
- "n": "X西湖",
- "v": "西湖风景4K"
- },
- {
- "n": "X西藏",
- "v": "西藏风景4K"
- },
- {
- "n": "X新疆",
- "v": "新疆风景4K"
- },
- {
- "n": "X香港",
- "v": "香港风景4K"
- },
- {
- "n": "Y云南",
- "v": "云南风景4K"
- },
- {
- "n": "Z浙江",
- "v": "浙江风景4K"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "MV4K": [
- {
- "key": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "MV4K"
- },
- {
- "n": "A阿杜",
- "v": "阿杜MV4K"
- },
- {
- "n": "A阿黛尔",
- "v": "阿黛尔MV4K"
- },
- {
- "n": "BBeyond",
- "v": "BeyondMV4K"
- },
- {
- "n": "BBy2",
- "v": "By2MV4K"
- },
- {
- "n": "BBIGBANG",
- "v": "BIGBANGMV4K"
- },
- {
- "n": "B布兰妮",
- "v": "布兰妮MV4K"
- },
- {
- "n": "C陈奕迅",
- "v": "陈奕迅MV4K"
- },
- {
- "n": "C蔡依林",
- "v": "蔡依林MV4K"
- },
- {
- "n": "C初音未来",
- "v": "初音未来MV4K"
- },
- {
- "n": "C蔡健雅",
- "v": "蔡健雅MV4K"
- },
- {
- "n": "C陈小春",
- "v": "陈小春MV4K"
- },
- {
- "n": "C草蜢",
- "v": "草蜢MV4K"
- },
- {
- "n": "C陈慧娴",
- "v": "陈慧娴MV4K"
- },
- {
- "n": "C崔健",
- "v": "崔健MV4K"
- },
- {
- "n": "C仓木麻衣",
- "v": "仓木麻衣MV4K"
- },
- {
- "n": "D戴荃",
- "v": "戴荃MV4K"
- },
- {
- "n": "D动力火车",
- "v": "动力火车MV4K"
- },
- {
- "n": "D邓丽君",
- "v": "邓丽君MV4K"
- },
- {
- "n": "D丁当",
- "v": "丁当MV4K"
- },
- {
- "n": "D刀郎",
- "v": "刀郎MV4K"
- },
- {
- "n": "D邓紫棋",
- "v": "邓紫棋MV4K"
- },
- {
- "n": "D戴佩妮",
- "v": "戴佩妮MV4K"
- },
- {
- "n": "D邓丽君",
- "v": "邓丽君MV4K"
- },
- {
- "n": "F飞儿乐队",
- "v": "飞儿乐队MV4K"
- },
- {
- "n": "F费玉清",
- "v": "费玉清MV4K"
- },
- {
- "n": "F费翔",
- "v": "费翔MV4K"
- },
- {
- "n": "F方大同",
- "v": "方大同MV4K"
- },
- {
- "n": "F房东的猫",
- "v": "房东的猫MV4K"
- },
- {
- "n": "F凤飞飞",
- "v": "凤飞飞MV4K"
- },
- {
- "n": "F凤凰传奇",
- "v": "凤凰传奇MV4K"
- },
- {
- "n": "G古风歌曲",
- "v": "古风歌曲4K"
- },
- {
- "n": "G国乐大典",
- "v": "国乐大典4K"
- },
- {
- "n": "G郭采洁",
- "v": "郭采洁MV4K"
- },
- {
- "n": "G光良",
- "v": "光良MV4K"
- },
- {
- "n": "G郭静",
- "v": "郭静MV4K"
- },
- {
- "n": "G郭富城",
- "v": "郭富城MV4K"
- },
- {
- "n": "H胡彦斌",
- "v": "胡彦斌MV4K"
- },
- {
- "n": "H胡夏",
- "v": "胡夏MV4K"
- },
- {
- "n": "H韩红",
- "v": "韩红MV4K"
- },
- {
- "n": "H黄品源",
- "v": "黄品源MV4K"
- },
- {
- "n": "H黄小琥",
- "v": "黄小琥MV4K"
- },
- {
- "n": "H花儿乐队",
- "v": "花儿乐队MV4K"
- },
- {
- "n": "H黄家强",
- "v": "黄家强MV4K"
- },
- {
- "n": "H后街男孩",
- "v": "后街男孩MV4K"
- },
- {
- "n": "J经典老歌",
- "v": "经典老歌4K"
- },
- {
- "n": "J贾斯丁比伯",
- "v": "贾斯丁比伯MV4K"
- },
- {
- "n": "J金池",
- "v": "金池MV4K"
- },
- {
- "n": "J金志文",
- "v": "金志文MV4K"
- },
- {
- "n": "J焦迈奇",
- "v": "焦迈奇MV4K"
- },
- {
- "n": "K筷子兄弟",
- "v": "筷子兄弟MV4K"
- },
- {
- "n": "L李玟",
- "v": "李玟MV4K"
- },
- {
- "n": "L林忆莲",
- "v": "林忆莲MV4K"
- },
- {
- "n": "L李克勤",
- "v": "李克勤MV4K"
- },
- {
- "n": "L刘宪华",
- "v": "刘宪华MV4K"
- },
- {
- "n": "L李圣杰",
- "v": "李圣杰MV4K"
- },
- {
- "n": "L林宥嘉",
- "v": "林宥嘉MV4K"
- },
- {
- "n": "L梁静茹",
- "v": "梁静茹MV4K"
- },
- {
- "n": "L李健",
- "v": "李健MV4K"
- },
- {
- "n": "L林俊杰",
- "v": "林俊杰MV4K"
- },
- {
- "n": "L李玉刚",
- "v": "李玉刚MV4K"
- },
- {
- "n": "L林志炫",
- "v": "林志炫MV4K"
- },
- {
- "n": "L李荣浩",
- "v": "李荣浩MV4K"
- },
- {
- "n": "L李宇春",
- "v": "李宇春MV4K"
- },
- {
- "n": "L洛天依",
- "v": "洛天依MV4K"
- },
- {
- "n": "L林子祥",
- "v": "林子祥MV4K"
- },
- {
- "n": "L李宗盛",
- "v": "李宗盛MV4K"
- },
- {
- "n": "L黎明",
- "v": "黎明MV4K"
- },
- {
- "n": "L刘德华",
- "v": "刘德华MV4K"
- },
- {
- "n": "L罗大佑",
- "v": "罗大佑MV4K"
- },
- {
- "n": "L林肯公园",
- "v": "林肯公园MV4K"
- },
- {
- "n": "LLadyGaga",
- "v": "LadyGagaMV4K"
- },
- {
- "n": "L旅行团乐队",
- "v": "旅行团乐队MV4K"
- },
- {
- "n": "M莫文蔚",
- "v": "莫文蔚MV4K"
- },
- {
- "n": "M毛不易",
- "v": "毛不易MV4K"
- },
- {
- "n": "M梅艳芳",
- "v": "梅艳芳MV4K"
- },
- {
- "n": "M迈克尔杰克逊",
- "v": "迈克尔杰克逊MV4K"
- },
- {
- "n": "N南拳妈妈",
- "v": "南拳妈妈MV4K"
- },
- {
- "n": "P朴树",
- "v": "朴树MV4K"
- },
- {
- "n": "Q齐秦",
- "v": "齐秦MV4K"
- },
- {
- "n": "Q青鸟飞鱼",
- "v": "青鸟飞鱼MV4K"
- },
- {
- "n": "R容祖儿",
- "v": "容祖儿MV4K"
- },
- {
- "n": "R热歌",
- "v": "热歌MV4K"
- },
- {
- "n": "R任贤齐",
- "v": "任贤齐MV4K"
- },
- {
- "n": "S水木年华",
- "v": "水木年华MV4K"
- },
- {
- "n": "S孙燕姿",
- "v": "孙燕姿MV4K"
- },
- {
- "n": "S苏打绿",
- "v": "苏打绿MV4K"
- },
- {
- "n": "SSHE",
- "v": "SHEMV4K"
- },
- {
- "n": "S孙楠",
- "v": "孙楠MV4K"
- },
- {
- "n": "T陶喆",
- "v": "陶喆MV4K"
- },
- {
- "n": "T谭咏麟",
- "v": "谭咏麟MV4K"
- },
- {
- "n": "T田馥甄",
- "v": "田馥甄MV4K"
- },
- {
- "n": "T谭维维",
- "v": "谭维维MV4K"
- },
- {
- "n": "T逃跑计划",
- "v": "逃跑计划MV4K"
- },
- {
- "n": "T田震",
- "v": "田震MV4K"
- },
- {
- "n": "T谭晶",
- "v": "谭晶MV4K"
- },
- {
- "n": "T屠洪刚",
- "v": "屠洪刚MV4K"
- },
- {
- "n": "T泰勒·斯威夫特",
- "v": "泰勒·斯威夫特MV4K"
- },
- {
- "n": "W王力宏",
- "v": "王力宏MV4K"
- },
- {
- "n": "W王杰",
- "v": "王杰MV4K"
- },
- {
- "n": "W吴克群",
- "v": "吴克群MV4K"
- },
- {
- "n": "W王心凌",
- "v": "王心凌MV4K"
- },
- {
- "n": "W汪峰",
- "v": "汪峰MV4K"
- },
- {
- "n": "W伍佰",
- "v": "伍佰MV4K"
- },
- {
- "n": "W王菲",
- "v": "王菲MV4K"
- },
- {
- "n": "W五月天",
- "v": "五月天MV4K"
- },
- {
- "n": "W汪苏泷",
- "v": "汪苏泷MV4K"
- },
- {
- "n": "X徐佳莹",
- "v": "徐佳莹MV4K"
- },
- {
- "n": "X弦子",
- "v": "弦子MV4K"
- },
- {
- "n": "X萧亚轩",
- "v": "萧亚轩MV4K"
- },
- {
- "n": "X许巍",
- "v": "许巍MV4K"
- },
- {
- "n": "X薛之谦",
- "v": "薛之谦MV4K"
- },
- {
- "n": "X许嵩",
- "v": "许嵩MV4K"
- },
- {
- "n": "X小虎队",
- "v": "小虎队MV4K"
- },
- {
- "n": "X萧敬腾",
- "v": "萧敬腾MV4K"
- },
- {
- "n": "X谢霆锋",
- "v": "谢霆锋MV4K"
- },
- {
- "n": "X徐小凤",
- "v": "徐小凤MV4K"
- },
- {
- "n": "X信乐队",
- "v": "信乐队MV4K"
- },
- {
- "n": "Y夜愿乐队",
- "v": "夜愿乐队MV4K"
- },
- {
- "n": "Y原创音乐",
- "v": "原创音乐MV4K"
- },
- {
- "n": "Y羽泉",
- "v": "羽泉MV4K"
- },
- {
- "n": "Y粤语",
- "v": "粤语MV4K"
- },
- {
- "n": "Y郁可唯",
- "v": "郁可唯MV4K"
- },
- {
- "n": "Y叶倩文",
- "v": "叶倩文MV4K"
- },
- {
- "n": "Y杨坤",
- "v": "杨坤MV4K"
- },
- {
- "n": "Y庾澄庆",
- "v": "庾澄庆MV4K"
- },
- {
- "n": "Y尤长靖",
- "v": "尤长靖MV4K"
- },
- {
- "n": "Y易烊千玺",
- "v": "易烊千玺MV4K"
- },
- {
- "n": "Y袁娅维",
- "v": "袁娅维MV4K"
- },
- {
- "n": "Y杨丞琳",
- "v": "杨丞琳MV4K"
- },
- {
- "n": "Y杨千嬅",
- "v": "杨千嬅MV4K"
- },
- {
- "n": "Y杨宗纬",
- "v": "杨宗纬MV4K"
- },
- {
- "n": "Z周杰伦",
- "v": "周杰伦MV4K"
- },
- {
- "n": "Z张学友",
- "v": "张学友MV4K"
- },
- {
- "n": "Z张信哲",
- "v": "张信哲MV4K"
- },
- {
- "n": "Z张宇",
- "v": "张宇MV4K"
- },
- {
- "n": "Z周华健",
- "v": "周华健MV4K"
- },
- {
- "n": "Z张韶涵",
- "v": "张韶涵MV4K"
- },
- {
- "n": "Z周深",
- "v": "周深MV4K"
- },
- {
- "n": "Z纵贯线",
- "v": "纵贯线MV4K"
- },
- {
- "n": "Z赵雷",
- "v": "赵雷MV4K"
- },
- {
- "n": "Z周传雄",
- "v": "周传雄MV4K"
- },
- {
- "n": "Z张国荣",
- "v": "张国荣MV4K"
- },
- {
- "n": "Z周慧敏",
- "v": "周慧敏MV4K"
- },
- {
- "n": "Z张惠妹",
- "v": "张惠妹MV4K"
- },
- {
- "n": "Z周笔畅",
- "v": "周笔畅MV4K"
- },
- {
- "n": "Z郑中基",
- "v": "郑中基MV4K"
- },
- {
- "n": "Z张艺兴",
- "v": "张艺兴MV4K"
- },
- {
- "n": "Z张震岳",
- "v": "张震岳MV4K"
- },
- {
- "n": "Z中国好声音",
- "v": "中国好声音MV4K"
- },
- {
- "n": "Z张雨生",
- "v": "张雨生MV4K"
- },
- {
- "n": "Z郑智化",
- "v": "郑智化MV4K"
- },
- {
- "n": "Z卓依婷",
- "v": "卓依婷MV4K"
- },
- {
- "n": "Z中岛美雪",
- "v": "中岛美雪MV4K"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "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"
- }
- ]
- }
- ],
- "知名UP主": [
- {
- "key": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "知名UP主"
- },
- {
- "n": "菠萝赛东",
- "v": "菠萝赛东"
- },
- {
- "n": "冯提莫",
- "v": "冯提莫"
- },
- {
- "n": "林延秋",
- "v": "林延秋"
- },
- {
- "n": "-LKs-",
- "v": "-LKs-"
- },
- {
- "n": "小约翰可汗",
- "v": "小约翰可汗"
- },
- {
- "n": "low馆长",
- "v": "low馆长"
- },
- {
- "n": "自说自话的总裁",
- "v": "自说自话的总裁"
- },
- {
- "n": "所长林超",
- "v": "所长林超"
- },
- {
- "n": "世界未解之谜M",
- "v": "世界未解之谜M"
- },
- {
- "n": "李永乐老师官方",
- "v": "李永乐老师官方"
- },
- {
- "n": "罗兹",
- "v": "罗兹"
- },
- {
- "n": "回到2049",
- "v": "回到2049"
- },
- {
- "n": "二次元的中科院物理所",
- "v": "二次元的中科院物理所"
- },
- {
- "n": "毕导THU",
- "v": "毕导THU"
- },
- {
- "n": "罗翔讲刑法",
- "v": "罗翔讲刑法"
- },
- {
- "n": "戴博士实验室",
- "v": "戴博士实验室"
- },
- {
- "n": "芳斯塔芙",
- "v": "芳斯塔芙"
- },
- {
- "n": "参赛者网",
- "v": "参赛者网"
- },
- {
- "n": "三维地图看世界",
- "v": "三维地图看世界"
- },
- {
- "n": "有机社会",
- "v": "有机社会"
- },
- {
- "n": "乌鸦校尉CaptainWuya",
- "v": "乌鸦校尉CaptainWuya"
- },
- {
- "n": "果壳",
- "v": "果壳"
- },
- {
- "n": "严伯钧",
- "v": "严伯钧"
- },
- {
- "n": "是你们的康康",
- "v": "是你们的康康"
- },
- {
- "n": "老爸评测",
- "v": "老爸评测"
- },
- {
- "n": "硬核的半佛仙人",
- "v": "硬核的半佛仙人"
- },
- {
- "n": "盗月社食遇记",
- "v": "盗月社食遇记"
- },
- {
- "n": "我是郭杰瑞",
- "v": "我是郭杰瑞"
- },
- {
- "n": "无穷小亮的科普日常",
- "v": "无穷小亮的科普日常"
- },
- {
- "n": "papi酱",
- "v": "papi酱"
- },
- {
- "n": "老番茄",
- "v": "老番茄"
- },
- {
- "n": "绵羊料理",
- "v": "绵羊料理"
- },
- {
- "n": "老师好我叫何同学",
- "v": "老师好我叫何同学"
- },
- {
- "n": "敬汉卿",
- "v": "敬汉卿"
- },
- {
- "n": "周六野Zoey",
- "v": "周六野Zoey"
- },
- {
- "n": "木鱼水心",
- "v": "木鱼水心"
- },
- {
- "n": "凉风Kaze",
- "v": "凉风Kaze"
- },
- {
- "n": "小潮院长",
- "v": "小潮院长"
- },
- {
- "n": "中国BOY超级大猩猩",
- "v": "中国BOY超级大猩猩"
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "音乐"
- },
- {
- "n": "钢琴曲",
- "v": "钢琴曲"
- },
- {
- "n": "协奏曲",
- "v": "协奏曲r"
- },
- {
- "n": "中国古风音乐",
- "v": "中国古风音乐"
- },
- {
- "n": "背景音乐",
- "v": "背景音乐"
- },
- {
- "n": "助眠音乐r",
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "平面设计教学"
- },
- {
- "n": "Adobe Photoshop",
- "v": "Adobe Photoshop教程"
- },
- {
- "n": "Adobe Illustrator",
- "v": "Adobe Illustrator教程"
- },
- {
- "n": "CorelDRAW",
- "v": "CorelDRAW教程"
- },
- {
- "n": "Adobe InDesign",
- "v": "Adobe InDesign教程"
- },
- {
- "n": "Adobe Pagermaker",
- "v": "Adobe Pagermaker教程"
- },
- {
- "n": "SAI",
- "v": "SAI教程"
- },
- {
- "n": "Adobe Bridge",
- "v": "Adobe Bridge教程"
- },
- {
- "n": "Adobe Pagermaker",
- "v": "Adobe Pagermake教程r"
- },
- {
- "n": "3D Studio Max",
- "v": "3D Studio Max教程"
- },
- {
- "n": "PR",
- "v": "PR教程"
- },
- {
- "n": "AE",
- "v": "AE教程"
- },
- {
- "n": "CINEMA 4D",
- "v": "CINEMA 4D教程"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "软件教程"
- },
- {
- "n": "MT管理器",
- "v": "MT管理器"
- },
- {
- "n": "NP管理器",
- "v": "NP管理器"
- },
- {
- "n": "mixplorer",
- "v": "mixplorer"
- },
- {
- "n": "脱壳",
- "v": "脱壳"
- },
- {
- "n": "爬虫",
- "v": "爬虫"
- },
- {
- "n": "json&jar",
- "v": "json&jar"
- },
- {
- "n": "网盘挂载",
- "v": "网盘挂载"
- },
- {
- "n": "alist+WebDav",
- "v": "alist+WebDav"
- },
- {
- "n": "TVBox修改",
- "v": "TVBox修改教程"
- },
- {
- "n": "EXCEL",
- "v": "EXCEL教程"
- },
- {
- "n": "Git入门到精通",
- "v": "Git入门到精通"
- },
- {
- "n": "java",
- "v": "java教程"
- },
- {
- "n": "phyton",
- "v": "phyton教程"
- },
- {
- "n": "xml",
- "v": "xml教程"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "Windows": [
- {
- "key": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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"
- }
- ]
- }
- ],
- "4K": [
- {
- "key": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "苏菜食谱"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "西班牙菜"
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "order",
- "name": "排序",
- "value": [
- {
- "n": "综合排序",
- "v": "0"
- },
- {
- "n": "最多点击",
- "v": "click"
- },
- {
- "n": "最新发布",
- "v": "pubdate"
- },
- {
- "n": "最多弹幕",
- "v": "dm"
- },
- {
- "n": "最多收藏",
- "v": "stow"
- }
- ]
- },
- {
- "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": "自由泳"
- }
- ]
- },
- {
- "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/潇洒/json/小学课堂.json b/潇洒/json/小学课堂.json
deleted file mode 100644
index 7daba97..0000000
--- a/潇洒/json/小学课堂.json
+++ /dev/null
@@ -1,1050 +0,0 @@
-{
- "class": [
- {
- "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年级英语"
- }
- ],
- "filters": {
- "1年级语文": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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/潇洒/json/少儿教育.json b/潇洒/json/少儿教育.json
deleted file mode 100644
index db0d684..0000000
--- a/潇洒/json/少儿教育.json
+++ /dev/null
@@ -1,454 +0,0 @@
-{
- "class": [
- {
- "type_name": "儿童早教",
- "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": "儿童动画"
- },
- {
- "type_name": "儿童音乐",
- "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": "学而思"
- }
- ],
- "filters": {
- "儿童早教": [
- {
- "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": "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": "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": "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": "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": "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": "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"
- }
- ]
- }
- ]
- }
-}
\ No newline at end of file
diff --git a/潇洒/json/高中课堂.json b/潇洒/json/高中课堂.json
deleted file mode 100644
index ea8a3e0..0000000
--- a/潇洒/json/高中课堂.json
+++ /dev/null
@@ -1,1576 +0,0 @@
-{
- "class": [
- {
- "type_name": "高一语文",
- "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": "高一思想政治"
- },
- {
- "type_name": "高一物理",
- "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": "高二地理"
- },
- {
- "type_name": "高二生物",
- "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": "高三英语"
- },
- {
- "type_name": "高三历史",
- "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": "高中信息技术"
- }
- ],
- "filters": {
- "高一语文": [
- {
- "key": "tid",
- "name": "分类",
- "value": [
- {
- "n": "全部",
- "v": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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": "0"
- },
- {
- "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/潇洒/lives/AI直播.txt b/潇洒/lives/AI直播.txt
new file mode 100644
index 0000000..5c54329
--- /dev/null
+++ b/潇洒/lives/AI直播.txt
@@ -0,0 +1,936 @@
+央视频道,#genre#
+CCTV-1,http://php.jdshipin.com/TVOD/iptv.php?id=rthk33
+CCTV-1,http://[2409:8087:74f0:22::4]:6610/270000001128/9900000501/index.m3u8
+CCTV-1,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226016/index.m3u8
+CCTV-1,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226559/index.m3u8
+CCTV-1,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226559/index.m3u8
+CCTV-1,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8
+CCTV-1,http://iptv.huuc.edu.cn/hls/cctv1hd.m3u8
+CCTV-1,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226230/1.m3u8
+CCTV-2,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225588
+CCTV-2,http://goo.bkpcp.top/mg/CCTV2
+CCTV-2,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000502/index.m3u8
+CCTV-2,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225588/index.m3u8
+CCTV-2,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226540/index.m3u8
+CCTV-2,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226540/index.m3u8
+CCTV-2,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226893/1.m3u8
+CCTV-2,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226230/1.m3u8
+CCTV-2,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226371/1.m3u8
+CCTV-2,http://iptv.huuc.edu.cn/hls/cctv2hd.m3u8
+CCTV-3,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226021
+CCTV-3,http://[2409:8087:74f0:22::4]:6410/270000001111/1110000303/index.m3u8
+CCTV-3,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226021/index.m3u8
+CCTV-3,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226021/index.m3u8
+CCTV-3,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226021/index.m3u8
+CCTV-3,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226471/1.m3u8
+CCTV-3,http://[2409:8087:1a01:df::4041]:80/TVOD/88888888/224/3221225799/main.m3u8
+CCTV-3,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226456/1.m3u8
+CCTV-3,http://iptv.huuc.edu.cn/hls/cctv3hd.m3u8
+CCTV-4,https://global.cgtn.cicc.media.caton.cloud/master/cgtn-america.m3u8
+CCTV-4,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226428
+CCTV-4,http://z.b.bkpcp.top/m.php?id=CCTV-4国际
+CCTV-4,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000503/index.m3u8
+CCTV-4,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226007/index.m3u8
+CCTV-4,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226428/index.m3u8
+CCTV-4,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226428/index.m3u8
+CCTV-4,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8
+CCTV-4,http://iptv.huuc.edu.cn/hls/cctv4hd.m3u8
+CCTV-5,http://omnix.cn:4000/udp/225.1.8.89:8000
+CCTV-5,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226019
+CCTV-5,http://[2409:8087:74f0:22::4]:6410/270000001111/1110000305/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::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226019/index.m3u8
+CCTV-5,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226019/index.m3u8
+CCTV-5,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8
+CCTV-5,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226894/1.m3u8
+CCTV-5,http://iptv.huuc.edu.cn/hls/cctv5hd.m3u8
+CCTV-5,https://ldcctvwbcdks.v.kcdnvip.com/ldcctvwbcd/cdrmldcctv5plus_1/index.m3u8?b=200-2100
+CCTV-5+,http://qwt.zhibotv.top:2016/全网通.php?id=CCTV5+
+CCTV-5+,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225603
+CCTV-5+,http://[2409:8087:74f0:22::4]:6410/270000001111/1110000306/index.m3u8
+CCTV-5+,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000506/index.m3u8
+CCTV-5+,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000507/index.m3u8
+CCTV-5+,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225603/index.m3u8
+CCTV-5+,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225603/index.m3u8
+CCTV-5+,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225603/index.m3u8
+CCTV-5+,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226894/1.m3u8
+CCTV-6,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226010
+CCTV-6,http://[2409:8087:74f0:22::4]:6410/270000001111/1110000307/index.m3u8
+CCTV-6,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226010/index.m3u8
+CCTV-6,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226010/index.m3u8
+CCTV-6,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226010/index.m3u8
+CCTV-6,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226468/1.m3u8
+CCTV-6,http://iptv.huuc.edu.cn/hls/cctv6hd.m3u8
+CCTV-7,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225733
+CCTV-7,http://goo.bkpcp.top/mg/CCTV7
+CCTV-7,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000504/index.m3u8
+CCTV-7,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225733/index.m3u8
+CCTV-7,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225733/index.m3u8
+CCTV-7,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225733/index.m3u8
+CCTV-7,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226946/1.m3u8
+CCTV-7,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226234/1.m3u8
+CCTV-7,http://iptv.huuc.edu.cn/hls/cctv7hd.m3u8
+CCTV-8,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226008
+CCTV-8,http://goo.bkpcp.top/mg/cctv8
+CCTV-8,http://[2409:8087:74f0:22::9]:6410/270000001111/1110000309/index.m3u8
+CCTV-8,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226008/index.m3u8
+CCTV-8,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226008/index.m3u8
+CCTV-8,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226008/index.m3u8
+CCTV-8,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226485/1.m3u8
+CCTV-8,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226451/1.m3u8
+CCTV-8,http://[2409:8087:1a01:df::4051]:80/TVOD/88888888/224/3221225795/main.m3u8
+CCTV-8,http://iptv.huuc.edu.cn/hls/cctv8hd.m3u8
+CCTV-9,http://omnix.cn:4000/udp/225.1.8.9:8112
+CCTV-9,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225734
+CCTV-9,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000505/index.m3u8
+CCTV-9,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225734/index.m3u8
+CCTV-9,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225734/index.m3u8
+CCTV-9,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225734/index.m3u8
+CCTV-9,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8
+CCTV-9,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226236/1.m3u8
+CCTV-9,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226450/1.m3u8
+CCTV-10,http://z.b.bkpcp.top/m.php?id=CCTV-10科教科教
+CCTV-10,http://goo.bkpcp.top/mg/cctv10
+CCTV-10,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000506/index.m3u8
+CCTV-10,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225730/index.m3u8
+CCTV-10,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226473/index.m3u8
+CCTV-10,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226473/index.m3u8
+CCTV-10,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8
+CCTV-10,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226449/1.m3u8
+CCTV-10,http://iptv.huuc.edu.cn/hls/cctv10hd.m3u8
+CCTV-11,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226565
+CCTV-11,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000508/index.m3u8
+CCTV-11,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225597/index.m3u8
+CCTV-11,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226565/index.m3u8
+CCTV-11,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226565/index.m3u8
+CCTV-11,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8
+CCTV-11,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226448/1.m3u8
+CCTV-11,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8
+CCTV-12,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225731
+CCTV-12,http://z.b.bkpcp.top/m.php?id=CCTV-12社会与法社会与法
+CCTV-12,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000509/index.m3u8
+CCTV-12,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225731/index.m3u8
+CCTV-12,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226568/index.m3u8
+CCTV-12,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226568/index.m3u8
+CCTV-12,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226942/1.m3u8
+CCTV-12,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8
+CCTV-12,http://iptv.huuc.edu.cn/hls/cctv12hd.m3u8
+CCTV-12,http://lu.wqwqwq.sbs/itv/1000000005000265012.m3u8?cdn=ystenlive
+CCTV-13,http://ali-m-l.cztv.com/channels/lantian/channel21/1080p.m3u8
+CCTV-13,https://event.pull.hebtv.com/jishi/cp1.m3u8
+CCTV-13,http://z.b.bkpcp.top/m.php?id=cctv13
+CCTV-13,http://j.x.bkpcp.top/jx/CCTV13HD
+CCTV-13,http://jwplay.hebyun.com.cn/live/cctv13/1500k/tzwj_video.m3u8
+CCTV-13,https://ldncctvwbcdcnc.v.wscdns.com/ldncctvwbcd/cdrmldcctv13_1/index.m3u8
+CCTV-13,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000510/index.m3u8
+CCTV-13,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226011/index.m3u8
+CCTV-13,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226537/index.m3u8
+CCTV-13,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226537/index.m3u8
+CCTV-14,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225732
+CCTV-14,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000511/index.m3u8
+CCTV-14,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225732/index.m3u8
+CCTV-14,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226591/index.m3u8
+CCTV-14,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226591/index.m3u8
+CCTV-14,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8
+CCTV-14,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226229/1.m3u8
+CCTV-14,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226445/1.m3u8
+CCTV-14,https://event.pull.hebtv.com/jishi/cp2.m3u8
+CCTV-14,http://iptv.huuc.edu.cn/hls/cctv14hd.m3u8
+CCTV-15,http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221225641/index.m3u8
+CCTV-15,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000512/index.m3u8
+CCTV-15,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225601/index.m3u8
+CCTV-15,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226476/index.m3u8
+CCTV-15,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226476/index.m3u8
+CCTV-15,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8
+CCTV-15,http://[2409:8087:1a01:df::4033]:80/TVOD/88888888/224/3221226127/main.m3u8
+CCTV-15,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226444/1.m3u8
+CCTV-16,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226100
+CCTV-16,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000016/index.m3u8
+CCTV-16,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226100/index.m3u8
+CCTV-16,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226100/index.m3u8
+CCTV-16,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226100/index.m3u8
+CCTV-16,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227002/1.m3u8
+CCTV-16,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226887/1.m3u8
+CCTV-16,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226888/1.m3u8
+CCTV-16,http://livetv.wqwqwq.sbs/gaoma/cctv4k16.m3u8
+CCTV-16,http://lu.wqwqwq.sbs/itv/1000000006000233002.m3u8?cdn=ystenlive
+CCTV-17,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225765
+CCTV-17,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000513/index.m3u8
+CCTV-17,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225765/index.m3u8
+CCTV-17,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/index.m3u8
+CCTV-17,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/index.m3u8
+CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8
+CCTV-17,http://[2409:8087:1a01:df::4025]:80/TVOD/88888888/224/3221225708/main.m3u8
+CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226442/1.m3u8
+
+卫视频道,#genre#
+安徽卫视,http://satellitepull.cnr.cn/live/wxahws/playlist.m3u8
+安徽卫视,http://drive.mxmy.net:8888/udp/239.3.1.211:8064
+安徽卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226391
+安徽卫视,http://j.x.bkpcp.top/jx/ANHUIHD
+安徽卫视,http://[2409:8087:74f0:22::7]:6410/270000001128/9900000514/index.m3u8
+安徽卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8
+安徽卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.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:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226943/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0QmKQ_slRCwvVVUUfxPVbw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+安多卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225659
+安多卫视,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8
+安多卫视,https://liveout.xntv.tv/a65jur/96iln2.m3u8
+安多卫视,https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd
+北京卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010143
+北京卫视,http://z.b.bkpcp.top/m.php?id=bjws
+北京卫视,http://j.x.bkpcp.top/jx/BEIJHD
+北京卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226436/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ElMQ3ov45VmhzipweN5VstQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPg_yZ8DZHTaSU92MIl_o3b%2CEND
+北京卫视,http://[2409:8087:74f0:22::6]:6410/270000001128/9900000516/index.m3u8
+北京卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8
+北京卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.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:5e00:24::1e]:6060/200000001898/460000089800010043/1.m3u8
+兵团卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226439/index.m3u8
+重庆卫视,http://satellitepull.cnr.cn/live/wxcqws/playlist.m3u8
+重庆卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010053
+重庆卫视,http://z.b.bkpcp.top/m.php?id=cqws
+重庆卫视,http://j.x.bkpcp.top/jx/CHONGQHD
+重庆卫视,http://[2409:8087:74f0:22::7]:6410/270000001128/9900000517/index.m3u8
+重庆卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8
+重庆卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.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:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226337/1.m3u8
+东方卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010054
+东方卫视,http://z.b.bkpcp.top/m.php?id=dfws#rtsp://115.85.232.19/PLTV/88888910/224/3221225531/10000100000000060000000000107311_0.smil
+东方卫视,http://goo.bkpcp.top/mg/dfws
+东方卫视,http://[2409:8087:74f0:22::5]:6410/270000001128/9900000518/index.m3u8
+东方卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8
+东方卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.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:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226898/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0uh4lyjjBCCN7TCq21vSIQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+东方卫视,http://iptv.huuc.edu.cn/hls/dfhd.m3u8
+东南卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010096
+东南卫视,http://z.b.bkpcp.top/m.php?id=dnws
+东南卫视,http://j.x.bkpcp.top/jx/DONGNHD
+东南卫视,http://[2409:8087:74f0:22::4]:6610/270000001128/9900000519/index.m3u8
+东南卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8
+东南卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8
+东南卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010096/1.m3u8
+东南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226991/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EQ6F5Mjgs0tJyEArWFL3vQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+东南卫视,http://iptv.huuc.edu.cn/hls/dnhd.m3u8
+东南卫视,http://live.zohi.tv/video/s10001-fztv-3/index.m3u8
+甘肃卫视,http://qwt.zhibotv.top:2016/全网通.php?id=甘肃卫视
+甘肃卫视,http://live.zohi.tv/video/s10001-fztv-3/index.m3u8
+甘肃卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010098
+甘肃卫视,http://z.b.bkpcp.top/m.php?id=gsws
+甘肃卫视,http://j.x.bkpcp.top/jx/GSWS
+甘肃卫视,http://goo.bkpcp.top/mg/gsws
+甘肃卫视,http://[2409:8087:74f0:22::5]:6410/270000001128/9900000023/index.m3u8
+甘肃卫视,http://[2409:8087:74f0:22::7]:6410/270000001111/1110000322/index.m3u8
+甘肃卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8
+甘肃卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010098/1.m3u8
+广东卫视,http://satellitepull.cnr.cn/live/wxgdws/playlist.m3u8
+广东卫视,http://php.jdshipin.com:8880/TVOD/gsyd.php?id=9900000520
+广东卫视,http://z.b.bkpcp.top/m.php?id=gdws
+广东卫视,http://j.x.bkpcp.top/jx/GUANGDHD
+广东卫视,http://goo.bkpcp.top/mg/gdws
+广东卫视,http://[2409:8087:74f0:22::6]:6410/270000001128/9900000520/index.m3u8
+广东卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8
+广东卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.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://php.jdshipin.com/TVOD/hljyd.php?id=3221226549
+广西卫视,http://z.b.bkpcp.top/m.php?id=gxws
+广西卫视,https://mobilelive.gxtv.cn/live/gx_live1004/playlist.m3u8
+广西卫视,http://goo.bkpcp.top/mg/gxws
+广西卫视,http://live.cztv.cc:85/live/ggpd.m3u8
+广西卫视,http://[2409:8087:74f0:22::7]:6410/270000001128/9900000034/index.m3u8
+广西卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226549/index.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:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227010/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkAhb-89sxdm9fz6-heXCuw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+贵州卫视,http://satellitepull.cnr.cn/live/wx32gzws/playlist.m3u8
+贵州卫视,http://drive.mxmy.net:8888/udp/239.3.1.149:8076
+贵州卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226474
+贵州卫视,http://z.b.bkpcp.top/m.php?id=gzws
+贵州卫视,http://j.x.bkpcp.top/jx/GUIZHD
+贵州卫视,http://goo.bkpcp.top/mg/gzws
+贵州卫视,http://[2409:8087:74f0:22::7]:6410/270000001128/9900000036/index.m3u8
+贵州卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8
+贵州卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8
+贵州卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010100/1.m3u8
+海南卫视,http://satellitepull.cnr.cn/live/wxhainlyws/playlist.m3u8
+海南卫视,http://171.15.18.199:8180/TV00000000000000000028@HHZT
+海南卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010083
+海南卫视,http://z.b.bkpcp.top/m.php?id=hinws
+海南卫视,http://j.x.bkpcp.top/jx/HAINHD
+海南卫视,http://goo.bkpcp.top/mg/hinws
+海南卫视,http://[2409:8087:74f0:22::7]:6410/270000001128/9900000037/index.m3u8
+海南卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8
+海南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226574/1.m3u8
+海南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226922/1.m3u8
+河北卫视,http://171.15.18.199:8180/TV00000000000000000035@HHZT
+河北卫视,http://drive.mxmy.net:8888/udp/239.3.1.148:8072
+河北卫视,http://php.fjl626.cn/hebei.php?id=hbws
+河北卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010101
+河北卫视,http://z.b.bkpcp.top/m.php?id=hbws
+河北卫视,https://jwplay.hebyun.com.cn/live/hbwstv/1500k/tzwj_video.m3u8
+河北卫视,http://[2409:8087:74f0:22::7]:6410/270000001128/9900000057/index.m3u8
+河北卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8
+河北卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010101/1.m3u8
+河北卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227014/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErSGjhI3DMaaAASPrbQJYTg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+河南卫视,http://tvpull.dxhmt.cn:9081/tv/11425-1.m3u8
+河南卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226480
+河南卫视,http://z.b.bkpcp.top/m.php?id=hnws
+河南卫视,http://j.x.bkpcp.top/jx/HENHD
+河南卫视,http://goo.bkpcp.top/mg/hnws
+河南卫视,http://[2409:8087:74f0:22::7]:6410/270000001128/9900000027/index.m3u8
+河南卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8
+河南卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8
+河南卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887270.m3u8
+湖北卫视,http://satellitepull.cnr.cn/live/wx32hubws/playlist.m3u8
+湖北卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010057
+湖北卫视,http://z.b.bkpcp.top/m.php?id=hubws
+湖北卫视,http://j.x.bkpcp.top/jx/HUBEIHD
+湖北卫视,http://goo.bkpcp.top/mg/hubws
+湖北卫视,http://[2409:8087:74f0:22::5]:6410/270000001128/9900000522/index.m3u8
+湖北卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/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:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226952/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EREB40lnZnCEwjRy7LZuhIQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+湖南卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010058
+湖南卫视,http://z.b.bkpcp.top/m.php?id=hunws
+湖南卫视,http://j.x.bkpcp.top/jx/HUNANHD
+湖南卫视,http://[2409:8087:74f0:22::5]:6410/270000001128/9900000523/index.m3u8
+湖南卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.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:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226493/1.m3u8
+湖南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226509/1.m3u8
+湖南卫视,http://iptv.huuc.edu.cn/hls/hunanhd.m3u8
+黑龙江卫视,http://satellitepull.cnr.cn/live/wx32hljws/playlist.m3u8
+黑龙江卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010056
+黑龙江卫视,http://j.x.bkpcp.top/jx/HEILJHD
+黑龙江卫视,http://l.cztvcloud.com/channels/lantian/SXyuyao3/720p.m3u8
+黑龙江卫视,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN181356BESTVSMGSMG/index.m3u8
+黑龙江卫视,http://[2409:8087:74f0:22::6]:6410/270000001128/9900000521/index.m3u8
+黑龙江卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225799/index.m3u8
+黑龙江卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.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://satellitepull.cnr.cn/live/wxjlws/playlist.m3u8
+吉林卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010075
+吉林卫视,http://z.b.bkpcp.top/m.php?id=jlws
+吉林卫视,http://j.x.bkpcp.top/jx/JILHD
+吉林卫视,http://goo.bkpcp.top/mg/jlws
+吉林卫视,http://[2409:8087:74f0:22::5]:6410/270000001128/9900000030/index.m3u8
+吉林卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8
+吉林卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226533/1.m3u8
+吉林卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000004972569.m3u8
+江苏卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010059
+江苏卫视,http://z.b.bkpcp.top/m.php?id=jsws
+江苏卫视,http://goo.bkpcp.top/mg/jsws
+江苏卫视,http://[2409:8087:74f0:22::6]:6410/270000001128/9900000524/index.m3u8
+江苏卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8
+江苏卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.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:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226897/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0BmO6uHF7WFoTed__Xr3NQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+江苏卫视,http://iptv.huuc.edu.cn/hls/jshd.m3u8
+江西卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010060
+江西卫视,http://z.b.bkpcp.top/m.php?id=jxws
+江西卫视,http://goo.bkpcp.top/mg/jxws
+江西卫视,http://[2409:8087:74f0:22::4]:6610/270000001128/9900000525/index.m3u8
+江西卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8
+江西卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8
+江西卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010060/1.m3u8
+江西卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226956/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ei6ZIpVizXlewg-YfGvH8dA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+江西卫视,http://[2409:8087:1a01:df::4027]:80/TVOD/88888888/224/3221225935/main.m3u8
+江西卫视,http://iptv.huuc.edu.cn/hls/jxhd.m3u8
+康巴卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225660
+康巴卫视,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8
+康巴卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227027/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkHMvBpWz4rccMxNvSRekpQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+辽宁卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226546
+辽宁卫视,http://z.b.bkpcp.top/m.php?id=lnws
+辽宁卫视,http://j.x.bkpcp.top/jx/LIAONHD
+辽宁卫视,http://[2409:8087:74f0:22::7]:6410/270000001128/9900000526/index.m3u8
+辽宁卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.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:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226327/1.m3u8
+辽宁卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226336/1.m3u8
+辽宁卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226488/1.m3u8
+内蒙古卫视,http://qwt.zhibotv.top:2016/全网通.php?id=内蒙古卫视
+内蒙古卫视,http://satellitepull.cnr.cn/live/wx32nmgws/playlist.m3u8
+内蒙古卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225634
+内蒙古卫视,http://z.b.bkpcp.top/m.php?id=nmws
+内蒙古卫视,http://j.x.bkpcp.top/jx/NMGWS
+内蒙古卫视,http://goo.bkpcp.top/mg/nmws
+内蒙古卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8
+内蒙古卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226530/1.m3u8
+内蒙古卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887427.m3u8
+宁夏卫视,http://qwt.zhibotv.top:2016/全网通.php?id=宁夏卫视
+宁夏卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010110
+宁夏卫视,http://z.b.bkpcp.top/m.php?id=nxws
+宁夏卫视,http://j.x.bkpcp.top/jx/NXWS
+宁夏卫视,http://goo.bkpcp.top/mg/nxws
+宁夏卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225632/index.m3u8
+宁夏卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227003/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ESco1zinvdUYzleEkXYhIvA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+宁夏卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887433.m3u8
+青海卫视,http://satellitepull.cnr.cn/live/wx32qhws/playlist.m3u8
+青海卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010111
+青海卫视,http://z.b.bkpcp.top/m.php?id=qhws
+青海卫视,http://j.x.bkpcp.top/jx/QHWS
+青海卫视,http://goo.bkpcp.top/mg/qhws
+青海卫视,http://[2409:8087:74f0:22::5]:6410/270000001128/9900000042/index.m3u8
+青海卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225628/index.m3u8
+青海卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010111/1.m3u8
+青海卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226529/1.m3u8
+青海卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226916/1.m3u8
+山东卫视,http://satellitepull.cnr.cn/live/wxsdws/playlist.m3u8
+山东卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010066
+山东卫视,http://z.b.bkpcp.top/m.php?id=sdws
+山东卫视,http://j.x.bkpcp.top/jx/SHANDHD
+山东卫视,http://l.cztvcloud.com/channels/lantian/SXshengzhou1/720p.m3u8
+山东卫视,http://[2409:8087:74f0:22::5]:6410/270000001128/9900000527/index.m3u8
+山东卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8
+山东卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.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://qwt.zhibotv.top:2016/全网通.php?id=山西卫视
+山西卫视,http://satellitepull.cnr.cn/live/wxssxws/playlist.m3u8
+山西卫视,http://171.15.18.199:8180/TV00000000000000000038@HHZT
+山西卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010114
+山西卫视,http://j.x.bkpcp.top/jx/SXWS
+山西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225624/index.m3u8
+山西卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226531/1.m3u8
+山西卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226920/1.m3u8
+山西卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887413.m3u8
+山西卫视,http://m3u8.channel.wsrtv.com.cn/cms/videos/nmip-media/channellive/channel7/playlist.m3u8
+陕西卫视,http://qwt.zhibotv.top:2016/全网通.php?id=陕西卫视
+陕西卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010113
+陕西卫视,http://z.b.bkpcp.top/m.php?id=sxws
+陕西卫视,http://gat.bkpcp.top/ymg.php?id=sxws
+陕西卫视,http://goo.bkpcp.top/mg/sxws
+陕西卫视,http://hlsbkmgsplive.miguvideo.com/migu/kailu/shan3xiws/57/20220809/index.m3u8
+陕西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225625/index.m3u8
+陕西卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226532/1.m3u8
+陕西卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226926/1.m3u8
+陕西卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887404.m3u8
+四川卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226338
+四川卫视,http://z.b.bkpcp.top/m.php?id=scws
+四川卫视,http://j.x.bkpcp.top/jx/SICHD
+四川卫视,http://[2409:8087:74f0:22::6]:6410/270000001128/9900000025/index.m3u8
+四川卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8
+四川卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8
+四川卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010115/1.m3u8
+四川卫视,http://iptv.huuc.edu.cn/hls/schd.m3u8
+四川卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887274.m3u8
+四川卫视,http://live.wqwqwq.sbs/itv/5000000004000006119.m3u8?cdn=bestzb
+深圳卫视,http://satellitepull.cnr.cn/live/wxszws/playlist.m3u8
+深圳卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010068
+深圳卫视,http://[2409:8087:74f0:22::5]:6410/270000001128/9900000529/index.m3u8
+深圳卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8
+深圳卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8
+深圳卫视,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:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+深圳卫视,http://iptv.huuc.edu.cn/hls/szhd.m3u8
+深圳卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873474.m3u8
+三沙卫视,http://qwt.zhibotv.top:2016/全网通.php?id=三沙卫视
+三沙卫视,http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000117/1.m3u8
+三沙卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226544/1.m3u8
+三沙卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887452.m3u8
+三沙卫视,https://livessws.hnntv.cn/live/ssws_02hnntv.m3u8?_upt=c509d0ea1747156492
+天津卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226459
+天津卫视,http://j.x.bkpcp.top/jx/TIANJHD
+天津卫视,http://[2409:8087:74f0:22::6]:6410/270000001128/9900000530/index.m3u8
+天津卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8
+天津卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.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::4030]:80/TVOD/88888888/224/3221225972/main.m3u8
+天津卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226246/1.m3u8
+天津卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226489/1.m3u8
+新疆卫视,http://satellitepull.cnr.cn/live/wxxjws/playlist.m3u8
+新疆卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225635
+新疆卫视,http://z.b.bkpcp.top/m.php?id=xjws
+新疆卫视,http://j.x.bkpcp.top/jx/XJWS
+新疆卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225635/index.m3u8
+新疆卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226546/1.m3u8
+新疆卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226923/1.m3u8
+新疆卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887448.m3u8
+新疆卫视,http://goo.bkpcp.top/mg/xjws
+西藏卫视,http://qwt.zhibotv.top:2016/全网通.php?id=西藏卫视
+西藏卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225638
+西藏卫视,http://z.b.bkpcp.top/m.php?id=xzws
+西藏卫视,http://goo.bkpcp.top/mg/xzws
+西藏卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226527/1.m3u8
+西藏卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887434.m3u8
+云南卫视,http://qwt.zhibotv.top:2016/全网通.php?id=云南卫视
+云南卫视,http://satellitepull.cnr.cn/live/wxynws/playlist.m3u8
+云南卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226444
+云南卫视,http://z.b.bkpcp.top/m.php?id=ynws
+云南卫视,http://goo.bkpcp.top/mg/ynws
+云南卫视,http://[2409:8087:74f0:22::7]:6410/270000001128/9900000035/index.m3u8
+云南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226444/index.m3u8
+云南卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010119/1.m3u8
+云南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226543/1.m3u8
+云南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226928/1.m3u8
+延边卫视,http://qwt.zhibotv.top:2016/全网通.php?id=延边卫视
+延边卫视,http://satellitepull.cnr.cn/live/wxybws/playlist.m3u8
+延边卫视,http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8#
+延边卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8
+延边卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227045/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eq0D3NdTUN7FuRzr8eJsbQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+浙江卫视,http://8.138.7.223/tv/zjws.m3u8
+浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8
+浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel01/1080p.m3u8
+浙江卫视,http://zwebl02.cztv.com/live/channel011080P.m3u8?auth_key=2524708799-0-0-9a1229d8b9d311024ebea08c3fb1d63f
+浙江卫视,http://zhfivel02.cztv.com/channel01/1080p.m3u8?auth_key=2524708799-0-0-adde67b1b344fdd5e512f30a4ae31915
+浙江卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010070
+浙江卫视,http://z.b.bkpcp.top/m.php?id=zjws
+浙江卫视,http://goo.bkpcp.top/mg/zjws
+浙江卫视,http://l.cztvcloud.com/channels/lantian/SXpinghu3/720p.m3u8
+浙江卫视,http://[2409:8087:74f0:22::5]:6410/270000001128/9900000531/index.m3u8
+
+安徽频道,#genre#
+安徽导视,http://dspdhls.appcoo.com:8888/live/dspd/index.m3u8
+
+北京频道,#genre#
+北京卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010143
+北京卫视,http://z.b.bkpcp.top/m.php?id=bjws
+北京卫视,http://j.x.bkpcp.top/jx/BEIJHD
+北京卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226436/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ElMQ3ov45VmhzipweN5VstQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPg_yZ8DZHTaSU92MIl_o3b%2CEND
+北京卫视,http://[2409:8087:74f0:22::6]:6410/270000001128/9900000516/index.m3u8
+北京卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8
+北京卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.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:5e00:24::1e]:6060/200000001898/460000089800010043/1.m3u8
+北京文艺,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226440/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EWrJcgMpdGPvZavpf4dmmrQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNhmwDsUZnvQgU5E5wiGA2g%2CEND
+北京影视,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226433/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EygquRbh9L0wUPRY53fsZWw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNO62IynDcU1yYDL1b4Xte8T%2CEND
+北京财经,https://wstvcpudali.v.myalicdn.com/wstvcpud/udrmbtv5_1/index.m3u8?adapt=0&BR=audio
+北京财经,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226516/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eh9_SEkmWeMdS1TMnIILZgg%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPIiicEW7OIvk1s-X-PXHqO%2CEND
+北京财经,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226516/1.m3u8
+北京财经,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226560/1.m3u8
+北京生活,https://wstvcpudali.v.myalicdn.com/wstvcpud/udrmbtv7_1/index.m3u8?adapt=0&BR=audio
+北京生活,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226514/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Es-PVNcPJsjr_oBdcXGT40g%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMWvZ0r6eMXcXJOGrCpJiq1%2CEND
+北京生活,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226514/1.m3u8
+北京生活,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226561/1.m3u8
+北京新闻,https://satellitepull.cnr.cn/live/wxbjxwgb/playlist.m3u8
+北京新闻,https://wstvcpudali.v.myalicdn.com/wstvcpud/udrmbtv9_1/index.m3u8?adapt=0&BR=audio
+北京新闻,https://ls.qingting.fm/live/339/64k.m3u8
+北京新闻,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226437/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EncK5uEAdYwWMsf8WJWI1mQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNO_LSIQh_h2P54Cz-MqgJqC%2CEND
+北京新闻,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226437/1.m3u8
+北京新闻,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226512/1.m3u8
+北京新闻,http://dsj.motem.top:8880/bptv/10000100000000050000000003870780.m3u8
+北京新闻,http://iptv.huuc.edu.cn/hls/btv9hd.m3u8
+北京新闻,http://yc.myds.me:35455/bptv/10000100000000050000000003870780.m3u8
+北京新闻,https://brtv-radiolive.rbc.cn/alive/fm945.m3u8
+北京国际,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226510/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EIfgL7tTUNqHAIdgvKuwj8A%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPr9j5nfyiWS_jEXD6m401A%2CEND
+北京纪实科教,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226434/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ejj3PtVjzl6ZzFdM-Vi1dmQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPJa61jREJv4ZfZigyrxX0U%2CEND
+北京体育休闲,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226438/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EeVAybrHg955d_IRT9e_uHQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMLCKqkSfuGOusJwBMwlCbz%2CEND
+萌宠TV,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226555/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E_PpxWPtvSZRFtu_Ged-vQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNO0istnBuoA2R9ODSCqyIyS%2CEND
+淘电影,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226552/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EXOsrWMA-UCdUl1hQSR9EKw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNg3bzRax0E9tLmO9xgXVx8%2CEND
+淘电影,http://dsj.motem.top:8880/bptv/10000100000000050000000003887498.m3u8
+淘电影,http://yc.myds.me:35455/bptv/10000100000000050000000003887498.m3u8
+淘剧场,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226553/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EQaJ92NID2SpQlY6_VJVogg%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNOuQYJeiYEeFWTkFfE86Vq-%2CEND
+淘剧场,http://dsj.motem.top:8880/bptv/10000100000000050000000003887497.m3u8
+淘娱乐,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226551/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ex0efg9fpenP8E8lWJUb5Lg%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNg3bzRax0E9tLmO9xgXVx8%2CEND
+淘娱乐,http://dsj.motem.top:8880/bptv/10000100000000050000000003887499.m3u8
+
+重庆频道,#genre#
+重庆新闻,https://satellitepull.cnr.cn/live/wxcqxwgb/playlist.m3u8
+重庆汽摩,http://218.89.240.144:59901/tsfile/live/1010_1.m3u8?key=txiptv
+重庆汽摩,rtsp://123.147.112.17:8089/04000001/01000000004000000000000000000371?AuthInfo=xxx&userid=gf001&userid=gf001
+
+福建频道,#genre#
+东南卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010096
+东南卫视,http://z.b.bkpcp.top/m.php?id=dnws
+东南卫视,http://j.x.bkpcp.top/jx/DONGNHD
+东南卫视,http://[2409:8087:74f0:22::4]:6610/270000001128/9900000519/index.m3u8
+东南卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8
+东南卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8
+东南卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010096/1.m3u8
+东南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226991/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EQ6F5Mjgs0tJyEArWFL3vQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+东南卫视,http://iptv.huuc.edu.cn/hls/dnhd.m3u8
+东南卫视,http://live.zohi.tv/video/s10001-fztv-3/index.m3u8
+海峡卫视,http://hlsbkmgsplive.miguvideo.com/migu/kailu/haixiaws/57/20230724/01.m3u8
+海峡卫视,http://hlsbkmgsplive.miguvideo.com/migu/kailu/haixiaws/57/20230724/01.m3u8?msisdn=&Channel_ID=&ContentId=&HlsSubType=&HlsProfileId=&encrypt=
+海峡卫视,http://goo.bkpcp.top/mg/hxws
+福建综合,http://8.138.7.223/tv/fjtv.php?id=4
+福建公共,http://8.138.7.223/tv/fjtv.php?id=6
+福建新闻,http://satellitepull.cnr.cn/live/wx32fjxwgb/playlist.m3u8
+福建新闻,https://satellitepull.cnr.cn/live/wx32fjxwgb/playlist.m3u8
+福建电视剧,http://8.138.7.223/tv/fjtv.php?id=7
+福建旅游,http://8.138.7.223/tv/fjtv.php?id=8
+福建经济,http://satellitepull.cnr.cn/live/wx32fjdnjjgb/playlist.m3u8
+福建文体,http://8.138.7.223/tv/fjtv.php?id=10
+福建少儿,http://8.138.7.223/tv/fjtv.php?id=2
+
+甘肃频道,#genre#
+甘肃经济,https://hls.gstv.com.cn/49048r/10iv1j.m3u8
+甘肃文化影视,https://hls.gstv.com.cn/49048r/w1l6d5.m3u8
+甘肃公共应急,https://hls.gstv.com.cn/49048r/3t5xyc.m3u8
+甘肃都市,https://hls.gstv.com.cn/49048r/l54391.m3u8
+甘肃少儿,https://hls.gstv.com.cn/49048r/922k96.m3u8
+
+广东频道,#genre#
+广东珠江,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010091
+广东珠江,http://cdn2.163189.xyz/live/gdzj/stream.m3u8
+广东珠江,https://tv.cdn.com.mp/live/gdzj/stream.m3u8
+广东珠江,http://cdn2.132.us.kg/live/gdzj/stream.m3u8
+广东珠江,http://lu.wqwqwq.sbs/itv/2000000003000000033.m3u8?cdn=hnbblive
+广东体育,https://epg.pw/stream/7b470f9fc5c305db0c8622117b7b25ca00eb35ba3e93e865cf0ff9df5c736681.m3u8
+广东体育,http://cdn2.163189.xyz/live/gdty/stream.m3u8
+广东体育,http://cdn2.132.us.kg/live/gdty/stream.m3u8
+广东民生,http://183.237.95.108:9901/tsfile/live/1032_1.m3u8?key=txiptv&playlive=0&authid=0
+广东民生,http://183.11.239.36:808/hls/18/index.m3u8
+广东新闻,https://satellitepull.cnr.cn/live/wxgdxwgb/playlist.m3u8
+广东少儿,http://gmxw.7766.org:808/hls/175/index.m3u8
+大湾区卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010108
+大湾区卫视,http://z.b.bkpcp.top/m.php?id=dwqws
+大湾区卫视,http://goo.bkpcp.top/mg/dwqws
+大湾区卫视,http://jp1.jdiptv.cc/live/nfws.m3u8?kdstime=
+大湾区卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226540/1.m3u8
+深圳卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010068
+深圳卫视,http://[2409:8087:74f0:22::5]:6410/270000001128/9900000529/index.m3u8
+深圳卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8
+深圳卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8
+深圳卫视,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:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+深圳卫视,http://iptv.huuc.edu.cn/hls/szhd.m3u8
+深圳卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873474.m3u8
+广州综合,http://php.jdshipin.com:8880/gztv.php?id=zhonghe
+广州影视,http://php.jdshipin.com:8880/gztv.php?id=yingshi#https://tencentplay.gztv.com/live/yingshi.m3u8?txSecret=7e9bddad7c8911626ed1d2c09fc605d9&txTime=18d00acf487
+广州竞赛,http://php.jdshipin.com:8880/gztv.php?id=jingsai#https://tencentplay.gztv.com/live/jingsai.m3u8?txSecret=49c8041461997c7a97dbcc3c7fd11b4f&txTime=18d00acf487
+佛山综合,http://php.jdshipin.com:8880/fstv.php?id=fszh
+汕头文旅,http://tv.zzlag.top:9003/hls/5/index.m3u8
+
+广西频道,#genre#
+广西国际,https://hlscdn.liangtv.cn/live/0234c48e0bc24fe1b41b9999a253e581/1075ee38e04f490690f6a36a16e09c79.m3u8
+广西国际,http://hlscdn.liangtv.cn/live/0234c48e0bc24fe1b41b9999a253e581/1075ee38e04f490690f6a36a16e09c79.m3u8?fbl=
+广西新闻,https://mobilelive.gxtv.cn/live/gx_live1007/playlist.m3u8
+南宁公共,http://jzlive.jztvnews.com:90/live/jzgg.m3u8
+南宁公共,http://688b7cbf9b7a8d911a085372b6c70ab5.livehwc3.cn/hls.nntv.cn/nnlive/XWZH_24.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=d1391be1fc200f8e4700c5d82b44edae
+南宁影视娱乐,http://688b7cbf9b7a8d911a085372b6c70ab5.livehwc3.cn/hls.nntv.cn/nnlive/YSYL_244.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=e7eb508555e76e08cc1b198d04f41fb5
+南宁新闻综合,rtmp://tv.qntv.net/channellive/ch1?zguizd
+南宁新闻综合,http://688b7cbf9b7a8d911a085372b6c70ab5.livehwc3.cn/hls.nntv.cn/nnlive/XWZH_24.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=d1391be1fc200f8e4700c5d82b44edae
+
+贵州频道,#genre#
+
+海南频道,#genre#
+海南新闻,http://satellitepull.cnr.cn/live/wxhainxwgb/playlist.m3u8
+海南新闻,https://satellitepull.cnr.cn/live/wxhainxwgb/playlist.m3u8
+海南新闻,http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000111/1.m3u8
+海南新闻,http://ls.qingting.fm/live/1861.m3u8
+海南自贸,http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000116/1.m3u8
+海南公共,http://[2409:8087:5e00:24::1e]:6060/000000001000/460000100000000057/1.m3u8
+海南文旅,http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000113/1.m3u8
+海南少儿,http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000112/1.m3u8
+
+河北频道,#genre#
+河北都市,https://jwplay.hebyun.com.cn/live/hbdstv/1500k/tzwj_video.m3u8#http://tv.pull.hebtv.com/jishi/dushipindao.m3u8?t=2510710360&k=4380da13735a230c080ce8ff404033af
+河北都市,http://jwplay.hebyun.com.cn/live/hbnmtv/1500k/tzwj_video.m3u8
+河北少儿科教,http://php.fjl626.cn/hebei.php?id=sekj
+
+河南频道,#genre#
+河南民生,http://61.163.181.78:85/tsfile/live/1005_1.m3u8?key=txiptv&playlive=1&authid=0
+河南法治,http://www.cdnstv.com:6398/hls/1112/index.m3u8
+河南电视剧,http://www.cdnstv.com:6398/hls/1113/index.m3u8
+河南新闻,http://www.cdnstv.com:6398/hls/1114/index.m3u8
+河南乡村,http://www.cdnstv.com:6398/hls/1116/index.m3u8
+
+湖北频道,#genre#
+湖北综合,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072216f7da/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNLx3R3LdIBdA5q61lut1LwZcw4SC2tJubc%2Bq5t%2F61jvWCtjrJL0x%2BHncPgdmcbBW9I
+湖北经视,http://58.19.43.46:9901/tsfile/live/1017_1.m3u8
+湖北影视,http://58.19.43.46:9901/tsfile/live/1016_1.m3u8
+湖北教育,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072a6cbbf6/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNKTFQuOKNd5i0HMa3ydMWIQ6kJ2fBJGJ77BLTXK72CqUYQsX3ZguYt0954s9hfZTfc
+湖北生活,http://satellitepull.cnr.cn/live/wx32hubczshgb/playlist.m3u8
+湖北生活,https://satellitepull.cnr.cn/live/wx32hubczshgb/playlist.m3u8
+湖北生活,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072c62e405/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNKJPodw5BcDirSOw7egztI5bUvJjqPzSNAhrA37GrbRBIAjGQpzP0QmgsmuHnQyd2c
+
+湖南频道,#genre#
+湖南国际,http://php.jdshipin.com:8880/iptv.php
+湖南经视,http://php.jdshipin.com:8880/iptv.php
+湖南都市,http://php.jdshipin.com:8880/iptv.php
+湖南娱乐,http://php.jdshipin.com:8880/iptv.php
+湖南电视剧,http://php.jdshipin.com:8880/iptv.php
+湖南爱晚,http://p2.vzan.com/527645544/149039617847513156/live.m3u8
+湖南爱晚,http://php.jdshipin.com:8880/iptv.php
+湖南电影,http://php.jdshipin.com:8880/iptv.php
+金鹰卡通,http://[2409:8087:1a0b:df::4008]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225653/index.m3u8
+金鹰卡通,http://dsj.motem.top:8880/bptv/10000100000000050000000004796942.m3u8
+金鹰纪实,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226572/1.m3u8
+快乐垂钓,http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031206
+
+黑龙江频道,#genre#
+黑龙江影视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226298
+黑龙江影视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226298/index.m3u8
+黑龙江文体,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226239
+黑龙江文体,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226239/index.m3u8
+黑龙江文体,http://[2409:8087:1a01:df::4025]:80/TVOD/88888888/224/3221225965/main.m3u8
+黑龙江都市,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226301
+黑龙江都市,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226301/index.m3u8
+黑龙江都市,http://[2409:8087:1a01:df::4055]:80/TVOD/88888888/224/3221225969/main.m3u8
+黑龙江少儿,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226304
+黑龙江少儿,https://ls.qingting.fm/live/4972/64k.m3u8
+黑龙江少儿,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226304/index.m3u8
+哈尔滨新闻综合,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226434
+哈尔滨影视,http://111.43.126.240:9003/hls/5/index.m3u8
+哈尔滨影视,http://stream.hrbtv.net/yspd/sd/live.m3u8
+哈尔滨影视,https://stream.hrbtv.net/yspd/sd/live.m3u8
+哈尔滨资讯,http://stream.hrbtv.net/zxpd/sd/live.m3u8
+哈尔滨生活,http://111.43.126.240:9003/hls/3/index.m3u8
+哈尔滨生活,https://stream.hrbtv.net/shpd/sd/live.m3u8
+哈尔滨生活,https://stream.hrbtv.net/shpd/playlist.m3u8
+哈尔滨生活,http://stream.hrbtv.net/shpd/sd/live.m3u8
+哈尔滨娱乐,https://stream.hrbtv.net/ylpd/sd/live.m3u8
+哈尔滨娱乐,http://stream.hrbtv.net/ylpd/sd/live.m3u8
+
+吉林频道,#genre#
+吉林乡村,https://satellitepull.cnr.cn/live/wxjlxcgb/playlist.m3u8
+延边卫视,http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8#
+延边卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8
+延边卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227045/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eq0D3NdTUN7FuRzr8eJsbQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+
+江苏频道,#genre#
+江苏卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010059
+江苏卫视,http://z.b.bkpcp.top/m.php?id=jsws
+江苏卫视,http://goo.bkpcp.top/mg/jsws
+江苏卫视,http://[2409:8087:74f0:22::6]:6410/270000001128/9900000524/index.m3u8
+江苏卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8
+江苏卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.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:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226897/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0BmO6uHF7WFoTed__Xr3NQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+江苏卫视,http://iptv.huuc.edu.cn/hls/jshd.m3u8
+江苏城市,http://z.b.bkpcp.top/m.php?id=jscs
+江苏城市,https://stream1.freetv.fun/675206b8446ce719bfb293b5a5296db3aa26521c9810de7c996838247cc56964.ctv
+江苏综艺,https://stream1.freetv.fun/f8ef469943662bed2abc6609d9ef1720b9e93a8a0bd6f5789133461e36763f37.m3u8
+江苏影视,http://z.b.bkpcp.top/m.php?id=jsys
+江苏影视,https://stream1.freetv.fun/a89dd489fa013bc4f36bcc4afe388f1783e2251c276e2566a9359d68a61c6d91.ctv
+江苏体育休闲,https://stream1.freetv.fun/af1087a1c24fff7af556ac8e6c5c623303d52966f67a998cefb52c17811b09a2.ctv
+江苏教育,http://z.b.bkpcp.top/m.php?id=jsjy
+江苏教育,http://goo.bkpcp.top/mg/jsjy
+江苏教育,https://stream1.freetv.fun/7174b4fd66ddb2a7456b7040105dc27a1e57c166593870bb773cb5f6b4546c54.ctv
+南京新闻综合,http://z.b.bkpcp.top/m.php?id=njxwzh
+南京新闻综合,http://live.nbs.cn/channels/njtv/xwzh/nbs06.m3u8
+南京新闻综合,https://live.nbs.cn/channels/njtv/xwzh/nbs06.m3u8
+南京教科,http://live.nbs.cn/channels/njtv/jkpd/nbs06.m3u8
+南京教科,https://live.nbs.cn/channels/njtv/jkpd/nbs06.m3u8
+南京十八,http://z.b.bkpcp.top/m.php?id=njsb
+南京十八,http://live.nbs.cn/channels/njtv/sbpd/500k.m3u8
+南京十八,http://live.nbs.cn/channels/njtv/sbpd/m3u8:500k/live.m3u8
+南京十八,https://live.nbs.cn/channels/njtv/sbpd/m3u8:500k/live.m3u8
+南京十八,http://live.nbs.cn/channels/njtv/sbpd/500k.m3u8?zjiangsd
+南京信息,http://live.nbs.cn/channels/njtv/xxpd/500k.m3u8?zjiangsd
+南京娱乐,http://live.nbs.cn/channels/njtv/ylpd/500k.m3u8?zjiangsd
+南京少儿,http://live.nbs.cn/channels/njtv/sepd/nbs23.m3u8
+南京少儿,https://live.nbs.cn/channels/njtv/sepd/nbs23.m3u8
+南京少儿,http://live.nbs.cn/channels/njtv/sepd/m3u8:500k/live.m3u8
+南京少儿,http://live.nbs.cn/channels/njtv/sepd/500k.m3u8?zjiangsd
+南京生活,https://live.nbs.cn/channels/njtv/shpd/m3u8:500k/live.m3u8
+
+辽宁频道,#genre#
+辽宁都市,https://ls.qingting.fm/live/1099/64k.m3u8
+辽宁影视剧,http://120.76.248.139/live/bfgd/4200000070.m3u8
+辽宁影视剧,http://dassby.qqff.top:99/live/%E8%BE%BD%E5%AE%81%E5%BD%B1%E8%A7%86%E5%89%A7/index.m3u8
+辽宁生活,http://120.76.248.139/live/bfgd/4200000073.m3u8
+辽宁生活,http://dassby.qqff.top:99/live/辽宁生活/index.m3u8
+辽宁教育青少,http://120.76.248.139/live/bfgd/4200000075.m3u8
+辽宁教育青少,http://dassby.qqff.top:99/live/辽宁教育青少/index.m3u8
+辽宁北方,http://120.76.248.139/live/bfgd/4200000071.m3u8
+辽宁北方,http://dassby.qqff.top:99/live/辽宁北方/index.m3u8
+朝阳新闻综合,http://120.76.248.139/live/bfgd/4200000282.m3u8
+
+内蒙古频道,#genre#
+内蒙古经济生活,https://ls.qingting.fm/live/1885/64k.m3u8
+内蒙古农牧,http://play1-qk.nmtv.cn:80/live/1686561299036179.m3u8
+
+宁夏频道,#genre#
+宁夏经济,https://ls.qingting.fm/live/1841/64k.m3u8
+
+青海频道,#genre#
+安多卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225659
+安多卫视,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8
+安多卫视,https://liveout.xntv.tv/a65jur/96iln2.m3u8
+安多卫视,https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd
+
+山东频道,#genre#
+山东齐鲁,http://61.156.228.12:8154/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0
+山东齐鲁,http://111.14.181.15:9901/tsfile/live/1000_1.m3u8
+山东文旅,http://58.57.40.22:9901/tsfile/live/1023_1.m3u8
+山东综艺,http://123.129.70.178:9901/tsfile/live/1001_1.m3u8
+山东综艺,http://111.14.181.15:9901/tsfile/live/1004_1.m3u8
+山东生活,http://ls.qingting.fm/live/60260.m3u8
+山东新闻,http://ls.qingting.fm/live/60180.m3u8
+
+山西频道,#genre#
+
+陕西频道,#genre#
+陕西都市青春,http://112.46.105.20:8009/hls/19/index.m3u8
+农林卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226544/1.m3u8
+
+四川频道,#genre#
+四川科教,http://182.150.115.21:8030/pcgacg/pcgacg_0.m3u8
+
+上海频道,#genre#
+上海新闻综合,http://z.b.bkpcp.top/m.php?id=shxwzh
+上海第一财经,https://satellitepull.cnr.cn/live/wx32dycjgb/playlist.m3u8
+上海都市,http://yc.myds.me:35455/itv/5000000010000018926.m3u8?cdn=bestzb
+哈哈炫动,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010117
+哈哈炫动,http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8
+哈哈炫动,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226931/1.m3u8
+动漫秀场,http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031113
+游戏风云,http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031114
+游戏风云,http://z.b.bkpcp.top/m.php?id=yxfy
+游戏风云,http://gat.bkpcp.top/ymg.php?id=yxfy
+法治天地,http://php.jdshipin.com/itv6.php?cid=bestzb&id=9001547084732463424
+法治天地,http://z.b.bkpcp.top/m.php?id=fztd
+劲爆体育,http://php.jdshipin.com/itv6s.php?cid=hnbblive&id=2000000002000000008
+劲爆体育,http://z.b.bkpcp.top/m.php?id=jbty
+劲爆体育,http://goo.bkpcp.top/mg/jbty
+魅力足球,http://z.b.bkpcp.top/m.php?id=mlzq
+魅力足球,http://gat.bkpcp.top/ymg.php?id=mlzq
+魅力足球,http://goo.bkpcp.top/mg/mlzq
+欢笑剧场,http://z.b.bkpcp.top/m.php?id=hxjc
+欢笑剧场,http://gat.bkpcp.top/ymg.php?id=hxjc
+欢笑剧场,http://goo.bkpcp.top/mg/hxjc
+七彩戏剧,http://php.jdshipin.com/itv6s.php?cid=bestzb&id=5000000011000031116
+七彩戏剧,http://z.b.bkpcp.top/m.php?id=qcxj
+生活时尚,rtsp://115.153.245.70/PLTV/88888888/224/3221225603/iptv7992.smil
+生活时尚,rtsp://115.153.254.81/PLTV/88888888/224/3221225603/iptv7992.smil
+生活时尚,rtsp://115.153.240.228:554/PLTV/88888888/224/3221225603/iptv7992.smil
+生活时尚,rtsp://115.153.212.72/PLTV/88888888/224/3221225603/iptv7992.smil
+生活时尚,rtsp://115.153.247.80/PLTV/88888888/224/3221225603/iptv7992.smil
+生活时尚,rtsp://115.153.230.145/PLTV/88888888/224/3221225603/iptv7992.smil
+生活时尚,rtsp://115.153.222.112:554/PLTV/88888888/224/3221225603/iptv7992.smil
+生活时尚,rtsp://115.153.233.154/PLTV/88888888/224/3221225603/iptv7992.smil
+生活时尚,rtsp://123.147.112.17:8089/04000001/01000000004000000000000000000418?AuthInfo=xxx&userid=gf001&userid=gf001
+乐游,http://112.46.105.20:8009/hls/75/index.m3u8
+东方财经,http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000007000010003/index.m3u8?channel-id=bestzb&Contentid=5000000007000010003&livemode=1&stbId=3
+东方财经,http://yc.myds.me:35455/itv/5000000007000010003.m3u8?cdn=bestzb
+新视觉,http://120.76.248.139/live/bfgd/4200000249.m3u8
+
+天津频道,#genre#
+天津新闻,http://nas.hssvm.com:8888/udp/225.1.1.130:5002
+天津文艺,http://nas.hssvm.com:8888/udp/225.1.1.131:5002
+天津都市,http://nas.hssvm.com:8888/udp/225.1.1.128:5002
+滨海新闻,http://traffic.jbh.tjbh.com/live/bhtv10/playlist.m3u8
+
+新疆频道,#genre#
+兵团卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226439/index.m3u8
+
+云南频道,#genre#
+
+浙江频道,#genre#
+浙江卫视,http://zwebl02.cztv.com/live/channel011080P.m3u8?auth_key=2524708799-0-0-9a1229d8b9d311024ebea08c3fb1d63f
+浙江卫视,http://zhfivel02.cztv.com/channel01/1080p.m3u8?auth_key=2524708799-0-0-adde67b1b344fdd5e512f30a4ae31915
+浙江卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010070
+浙江卫视,http://z.b.bkpcp.top/m.php?id=zjws
+浙江卫视,http://goo.bkpcp.top/mg/zjws
+浙江卫视,http://l.cztvcloud.com/channels/lantian/SXpinghu3/720p.m3u8
+浙江卫视,http://[2409:8087:74f0:22::5]:6410/270000001128/9900000531/index.m3u8
+浙江卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8
+浙江卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8
+浙江卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8
+浙江钱江,http://l.cztvcloud.com/channels/lantian/SXyuyao2/720p.m3u8
+浙江经济生活,http://zwebl02.cztv.com/live/channel031080P.m3u8?auth_key=2524708799-0-0-cc09266f8e043a6df28eb148cb488d37
+浙江经济生活,http://zhfivel02.cztv.com/channel03/1080p.m3u8?auth_key=2524708799-0-0-76c0751e0f656453baf39803124fc08a
+浙江经济生活,http://l.cztvcloud.com/channels/lantian/SXxiaoshan2/720p.m3u8
+浙江经济生活,http://ali-vl.cztv.com/channels/lantian/channel003/360p.m3u8
+浙江经济生活,http://ls.qingting.fm/live/1099.m3u8
+浙江教科影视,http://zwebl02.cztv.com/live/channel041080P.m3u8?auth_key=2524708799-0-0-f195b808217db133bfd648edc01e91fa
+浙江教科影视,http://zhfivel02.cztv.com/channel04/1080p.m3u8?auth_key=2524708799-0-0-514823d0816d4af94a9f32bd7614ed67
+浙江教科影视,http://ali-vl.cztv.com/channels/lantian/channel004/360p.m3u8
+浙江影视娱乐,http://ali-m-l.cztv.com/channels/lantian/channel005/1080p.m3u8
+浙江民生休闲,http://zhfivel02.cztv.com/channel06/1080p.m3u8?auth_key=2524708799-0-0-59c4fe94512c59a90316fbf17ae2fbef
+浙江民生休闲,http://ali-vl.cztv.com/channels/lantian/channel006/360p.m3u8
+浙江新闻,http://zwebl02.cztv.com/live/channel071080P.m3u8?auth_key=2524708799-0-0-e3b50ca59d2c0883d5386d8bc4cdefbc
+浙江新闻,http://zhfivel02.cztv.com/channel07/1080p.m3u8?auth_key=2524708799-0-0-4af48ba83e791a300595dd0b2bb30e6e
+浙江新闻,http://ali-vl.cztv.com/channels/lantian/channel007/360p.m3u8
+浙江少儿,https://qiniup-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8
+浙江少儿,https://ct-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8
+浙江少儿,http://ali-vl.cztv.com/channels/lantian/channel008/360p.m3u8
+浙江少儿,http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8?fbl=
+浙江国际,http://zwebl02.cztv.com/live/channel101080P.m3u8?auth_key=2524708799-0-0-c9473fea1da3eff0f29f4c9cf2b36519
+浙江国际,http://zhfivel02.cztv.com/channel10/1080p.m3u8?auth_key=2524708799-0-0-646cad31c1d94b002a325cd75475d30f
+浙江国际,https://ct-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8
+浙江国际,https://qiniup-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8
+浙江国际,http://ali-vl.cztv.com/channels/lantian/channel010/360p.m3u8
+浙江之江纪录,http://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8
+杭州综合,http://goo.bkpcp.top/mg/hzzh
+杭州明珠,http://goo.bkpcp.top/mg/hzmz
+杭州生活,http://goo.bkpcp.top/mg/hzsh
+杭州影视,http://goo.bkpcp.top/mg/hzys
+杭州少体,http://goo.bkpcp.top/mg/hzse
+
+其它频道,#genre#
+CGTN,https://0472.org/hls/cgtn.m3u8
+CGTN,https://news.cgtn.com/resource/live/english/cgtn-news.m3u8
+CGTN阿语,https://0472.org/hls/cgtna.m3u8
+CGTN俄语,https://0472.org/hls/cgtne.m3u8
+CGTN法语,https://0472.org/hls/cgtnf.m3u8
+CGTN纪录,https://0472.org/hls/cgtnd.m3u8
+CGTN西语,https://0472.org/hls/cgtnx.m3u8
+CGTN英语,https://0472.org/hls/cgtn.m3u8
+CHC动作电影,http://z.b.bkpcp.top/m.php
+CHC动作电影,http://goo.bkpcp.top/mg/dzdy
+CHC动作电影,http://z.b.bkpcp.top/m.php?id=dzdy
+CHC动作电影,https://stream1.freetv.fun/chcdong-zuo-dian-ying-24.ctv
+CHC动作电影,http://eastscreen.tv/ooooo.php
+CHC动作电影,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226329/1.m3u8
+CHC家庭影院,http://gat.bkpcp.top/ymg.php?id=jtyy
+CHC家庭影院,http://goo.bkpcp.top/mg/jtyy
+CHC家庭影院,http://z.b.bkpcp.top/m.php?id=jtyy
+CHC家庭影院,https://stream1.freetv.fun/chcjia-ting-ying-yuan-17.ctv
+CHC家庭影院,http://eastscreen.tv/ooooo.php
+CHC影迷电影,https://stream1.freetv.fun/chcying-mi-dian-ying-12.ctv
+CHC影迷电影,https://stream1.freetv.fun/chcying-mi-dian-ying-15.ctv
+CHC影迷电影,http://eastscreen.tv/ooooo.php
+黑莓电影,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010073
+黑莓电影,http://[2409:8087:1:20:20::27]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8
+黑莓电影,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8
+黑莓电影,https://epg.pw/stream/ffcb6572863f0745a7369fbd9d901f1dfd0ab8fab8bad8bebb4e01c90b303c47.m3u8
+黑莓动画,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010002
+黑莓动画,http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8
+黑莓动画,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226935/1.m3u8
+
+港·澳·台,#genre#
+凤凰中文,https://cdn.iptv8k.top/dl/jrys.php?id=19&time=20240926215313&ip=111.229.253.40
+凤凰中文,http://playtv-live.ifeng.com/live/06OLEGEGM4G_audio.m3u8
+凤凰中文,http://php.jdshipin.com/TVOD/iptv.php
+凤凰资讯,http://playtv-live.ifeng.com/live/06OLEEWQKN4_audio.m3u8
+凤凰资讯,http://php.jdshipin.com/TVOD/iptv.php
+凤凰资讯,http://cdn3.132.us.kg/live/fhzx/stream.m3u8
+凤凰香港,https://cdn.iptv8k.top/dl/jrys.php?id=18&time=20240926215313&ip=111.229.253.40
+翡翠台,https://cdn.iptv8k.top/dl/jrys.php?id=3&time=20240926215313&ip=111.229.253.40『线路08』
+翡翠台,http://php.jdshipin.com:8880/TVOD/iptv.php?id=fct3&token=512df05ba47edb46400575c93e179adb7981226d414516400ed1d382cb126adc517715d4ccd3a2276bf3c7b72d52f58905225cf0b1cc461b7888443f
+翡翠台,http://cdn9.163189.xyz/smt1.1.php?id=jade_twn
+翡翠台,http://v2h.jdshipin.com/jade2/jade.stream/chunklist_w100.m3u8
+无线新闻,http://php.jdshipin.com:8880/TVOD/iptv.php?id=tvbxw
+无线新闻,https://cdn9.163189.xyz/smt3.1.1.php?id=inews_twn
+无线新闻,http://cdn9.163189.xyz/smt1.1.php?id=inews_twn
+无线新闻,https://v2hcdn.jdshipin.com/news/news.stream/chunklist_w105.m3u8
+无线新闻,http://v2hcdn.jdshipin.com/news/news.stream/chunklist_w1005.m3u8
+无线星河,http://php.jdshipin.com/smt.php?id=Xinhe
+美亚电影,https://live.tvfix.org/live/mydy/index.m3u8
+天映经典,https://cdn.iptv8k.top/dl/jrys.php?id=71&time=20240926215313&ip=111.229.253.40
+东森超视,https://cdn.iptv8k.top/dl/jrys.php?id=216&time=20240926215313&ip=111.229.253.40#rtmp://f13h.mine.nu/sat/tv331#rtmp://f13h.mine.nu/sat/tv331
+东森综合,https://cdn.iptv8k.top/dl/jrys.php?id=221&time=20240926215313&ip=111.229.253.40
+东森新闻,https://stream1.freetv.fun/dong-sen-xin-wen-1.m3u8
+三立新闻,https://cdn.iptv8k.top/dl/jrys.php?id=273&time=20240926215313&ip=111.229.253.40
+三立新闻,https://stream1.freetv.fun/san-li-xin-wen-3.m3u8
+龙华电影,https://cdn8.163189.xyz/live/lhdy/stream.m3u8
+纬来育乐,https://cdn.iptv8k.top/dl/jrys.php?id=289&time=20240926215313&ip=111.229.253.40
+纬来体育,https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40
+
+AKTV,#genre#
+TVB翡翠台,http://php.jdshipin.com:8880/smt.php?id=jade_twn
+东森新闻,https://stream1.freetv.fun/dong-sen-xin-wen-1.m3u8
+龙华电影,https://cdn8.163189.xyz/live/lhdy/stream.m3u8
+
+海外频道,#genre#
+AXS TV Now,https://dikcfc9915kp8.cloudfront.net/hls/1080p/playlist.m3u8
\ No newline at end of file
diff --git a/潇洒/lives/APTV.txt b/潇洒/lives/APTV.txt
new file mode 100644
index 0000000..2bed75d
--- /dev/null
+++ b/潇洒/lives/APTV.txt
@@ -0,0 +1,234 @@
+#EXTM3U x-tvg-url="https://epg.aptv.app/pp.xml.gz,https://epg.aptv.app/xml" catchup="append" catchup-source="?playbackbegin=${(b)yyyyMMddHHmmss}&playbackend=${(e)yyyyMMddHHmmss}"
+#EXT-X-APP APTV
+#EXT-X-APTV-TYPE remote
+#EXT-X-SUB-URL https://gh.aptv.app/https://raw.githubusercontent.com/Kimentanm/aptv/master/m3u/iptv.m3u
+
+#EXTINF:-1 tvg-name="CHC家庭影院" group-title="央视IPV4",CHC家庭影院
+http://148.135.93.213/live.php?id=CHC家庭影院
+#EXTINF:-1 tvg-name="CHC动作电影" http-user-agent="AptvPlayer-UA" group-title="央视IPV4",CHC动作电影
+http://118.89.87.74:88/live.php?id=CHC动作电影
+#EXTINF:-1 tvg-name="CHC影迷电影" group-title="央视IPV4",CHC影迷电影
+http://148.135.93.213/live.php?id=CHC影迷电影
+#EXTINF:-1 tvg-id="CCTV1" tvg-name="CCTV1" http-user-agent="AptvPlayer-UA" group-title="央视IPV4",CCTV1
+http://118.89.87.74:88/live.php?id=CCTV1
+#EXTINF:-1 tvg-id="CCTV2" tvg-name="CCTV2" group-title="央视IPV4",CCTV2
+http://148.135.93.213/live.php?id=CCTV2
+#EXTINF:-1 tvg-id="CCTV3" tvg-name="CCTV3" http-user-agent="AptvPlayer-UA" group-title="央视IPV4",CCTV3
+http://118.89.87.74:88/live.php?id=CCTV3
+#EXTINF:-1 tvg-id="CCTV4" tvg-name="CCTV4" group-title="央视IPV4",CCTV4
+http://148.135.93.213/live.php?id=CCTV4
+#EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" http-user-agent="AptvPlayer-UA" group-title="央视IPV4",CCTV5
+http://118.89.87.74:88/live.php?id=CCTV5
+#EXTINF:-1 tvg-id="CCTV5PLUS" tvg-name="CCTV5+" group-title="央视IPV4",CCTV5+
+http://148.135.93.213/live.php?id=CCTV5p
+#EXTINF:-1 tvg-id="CCTV6" tvg-name="CCTV6" http-user-agent="AptvPlayer-UA" group-title="央视IPV4",CCTV6
+http://118.89.87.74:88/live.php?id=CCTV6
+#EXTINF:-1 tvg-id="CCTV7" tvg-name="CCTV7" group-title="央视IPV4",CCTV7
+http://148.135.93.213/live.php?id=CCTV7
+#EXTINF:-1 tvg-id="CCTV8" tvg-name="CCTV8" http-user-agent="AptvPlayer-UA" group-title="央视IPV4",CCTV8
+http://118.89.87.74:88/live.php?id=CCTV8
+#EXTINF:-1 tvg-id="CCTV9" tvg-name="CCTV9" group-title="央视IPV4",CCTV9
+http://148.135.93.213/live.php?id=CCTV9
+#EXTINF:-1 tvg-id="CCTV10" tvg-name="CCTV10" http-user-agent="AptvPlayer-UA" group-title="央视IPV4",CCTV10
+http://118.89.87.74:88/live.php?id=CCTV10
+#EXTINF:-1 tvg-id="CCTV11" tvg-name="CCTV11" group-title="央视IPV4",CCTV11
+http://148.135.93.213/live.php?id=CCTV11
+#EXTINF:-1 tvg-id="CCTV12" tvg-name="CCTV12" http-user-agent="AptvPlayer-UA" group-title="央视IPV4",CCTV12
+http://118.89.87.74:88/live.php?id=CCTV12
+#EXTINF:-1 tvg-id="CCTV13" tvg-name="CCTV13" group-title="央视IPV4",CCTV13
+http://148.135.93.213/live.php?id=CCTV13
+#EXTINF:-1 tvg-id="CCTV14" tvg-name="CCTV14" http-user-agent="AptvPlayer-UA" group-title="央视IPV4",CCTV14
+http://118.89.87.74:88/live.php?id=CCTV14
+#EXTINF:-1 tvg-id="CCTV15" tvg-name="CCTV15" group-title="央视IPV4",CCTV15
+http://148.135.93.213/live.php?id=CCTV15
+#EXTINF:-1 tvg-id="CCTV16" tvg-name="CCTV16" http-user-agent="AptvPlayer-UA" group-title="央视IPV4",CCTV16
+http://118.89.87.74:88/live.php?id=CCTV16
+#EXTINF:-1 tvg-id="CCTV17" tvg-name="CCTV17" group-title="央视IPV4",CCTV17
+http://148.135.93.213/live.php?id=CCTV17
+#EXTINF:-1 tvg-id="CGTN" tvg-name="CGTN" group-title="央视IPV4",CGTN英语
+https://0472.org/hls/cgtn.m3u8
+#EXTINF:-1 tvg-id="CGTN纪录" tvg-name="CGTN纪录" group-title="央视IPV4",CGTN纪录
+https://0472.org/hls/cgtnd.m3u8
+#EXTINF:-1 tvg-id="CGTN西语" tvg-name="CGTN西语" group-title="央视IPV4",CGTN西语
+https://0472.org/hls/cgtnx.m3u8
+#EXTINF:-1 tvg-id="CGTN法语" tvg-name="CGTN法语" group-title="央视IPV4",CGTN法语
+https://0472.org/hls/cgtnf.m3u8
+#EXTINF:-1 tvg-id="CGTN阿语" tvg-name="CGTN阿语" group-title="央视IPV4",CGTN阿语
+https://0472.org/hls/cgtna.m3u8
+#EXTINF:-1 tvg-id="CGTN俄语" tvg-name="CGTN俄语" group-title="央视IPV4",CGTN俄语
+https://0472.org/hls/cgtne.m3u8
+
+#EXTINF:-1 tvg-id="重温经典" tvg-name="重温经典" http-user-agent="AptvPlayer-UA" group-title="卫视IPV4",重温经典
+http://118.89.87.74:88/live.php?id=重温经典
+#EXTINF:-1 tvg-id="翡翠台" tvg-name="翡翠台" http-user-agent="AptvPlayer-UA" group-title="卫视IPV4",翡翠台
+http://118.89.87.74:88/live.php?id=翡翠台
+#EXTINF:-1 tvg-id="五星体育" tvg-name="五星体育" http-user-agent="iPhone" http-header="Referer=https://live.kankanews.com/" group-title="卫视IPV4",五星体育
+http://118.89.87.74:88/live.php?id=五星体育
+#EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" http-user-agent="iPhone" group-title="卫视IPV4" catchup="append" catchup-source="?playseek=${(b)yyyyMMddHHmmss}-${(e)yyyyMMddHHmmss}",凤凰资讯
+http://118.89.87.74:88/phenix.php?id=fhzx
+#EXTINF:-1 tvg-id="凤凰中文" tvg-name="凤凰中文" http-user-agent="iPhone" group-title="卫视IPV4" catchup="append" catchup-source="?playseek=${(b)yyyyMMddHHmmss}-${(e)yyyyMMddHHmmss}",凤凰中文
+http://118.89.87.74:88/phenix.php?id=fhzw
+#EXTINF:-1 tvg-id="凤凰香港" tvg-name="凤凰香港" http-user-agent="iPhone" group-title="卫视IPV4" catchup="append" catchup-source="?playseek=${(b)yyyyMMddHHmmss}-${(e)yyyyMMddHHmmss}",凤凰香港
+http://118.89.87.74:88/phenix.php?id=fhhk
+#EXTINF:-1 tvg-id="香港卫视" tvg-name="香港卫视" http-user-agent="AptvPlayer-UA" group-title="卫视IPV4",香港卫视
+http://118.89.87.74:88/live.php?id=香港卫视
+#EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" http-user-agent="AptvPlayer-UA" group-title="卫视IPV4",湖南卫视
+http://118.89.87.74:88/live.php?id=湖南卫视
+#EXTINF:-1 tvg-id="北京卫视" tvg-name="北京卫视" http-user-agent="AptvPlayer-UA" group-title="卫视IPV4",北京卫视
+http://118.89.87.74:88/live.php?id=北京卫视
+#EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" http-user-agent="AptvPlayer-UA" group-title="卫视IPV4",深圳卫视
+http://118.89.87.74:88/live.php?id=深圳卫视
+#EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" http-user-agent="AptvPlayer-UA" group-title="卫视IPV4",浙江卫视
+http://118.89.87.74:88/live.php?id=浙江卫视
+#EXTINF:-1 tvg-id="江苏卫视" tvg-name="江苏卫视" http-user-agent="AptvPlayer-UA" http-header="Referer=https://litchi-play-encrypted-site.jstv.com/" group-title="卫视IPV4",江苏卫视
+http://118.89.87.74:88/live.php?id=江苏卫视
+#EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" http-user-agent="AptvPlayer-UA" group-title="卫视IPV4",陕西卫视
+http://118.89.87.74:88/live.php?id=陕西卫视
+#EXTINF:-1 tvg-id="湖北卫视" tvg-name="湖北卫视" http-user-agent="AptvPlayer-UA" group-title="卫视IPV4",湖北卫视
+http://118.89.87.74:88/live.php?id=湖北卫视
+#EXTINF:-1 tvg-id="内蒙古卫视" tvg-name="内蒙古卫视" http-user-agent="AptvPlayer-UA" group-title="卫视IPV4",内蒙古卫视
+http://118.89.87.74:88/live.php?id=内蒙古卫视
+#EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" http-user-agent="AptvPlayer-UA" group-title="卫视IPV4",江西卫视
+http://118.89.87.74:88/live.php?id=江西卫视
+#EXTINF:-1 tvg-id="广东卫视" tvg-name="广东卫视" http-user-agent="AptvPlayer-UA" group-title="卫视IPV4",广东卫视
+http://118.89.87.74:88/live.php?id=广东卫视
+#EXTINF:-1 tvg-id="东方卫视" tvg-name="东方卫视" http-user-agent="AptvPlayer-UA" group-title="卫视IPV4",东方卫视
+http://118.89.87.74:88/live.php?id=东方卫视
+#EXTINF:-1 tvg-id="西藏卫视" tvg-name="西藏卫视" http-user-agent="AptvPlayer-UA" group-title="卫视IPV4",西藏卫视
+http://118.89.87.74:88/live.php?id=西藏卫视
+#EXTINF:-1 tvg-id="新疆卫视" tvg-name="新疆卫视" http-user-agent="AptvPlayer-UA" group-title="卫视IPV4",新疆卫视
+http://118.89.87.74:88/live.php?id=新疆卫视
+#EXTINF:-1 tvg-id="青海卫视" tvg-name="青海卫视" group-title="卫视IPV4",青海卫视
+http://148.135.93.213/live.php?id=青海卫视
+#EXTINF:-1 tvg-id="东南卫视" tvg-name="东南卫视" group-title="卫视IPV4",东南卫视
+http://148.135.93.213/live.php?id=东南卫视
+#EXTINF:-1 tvg-id="吉林卫视" tvg-name="吉林卫视" group-title="卫视IPV4",吉林卫视
+http://148.135.93.213/live.php?id=吉林卫视
+#EXTINF:-1 tvg-id="四川卫视" tvg-name="四川卫视" group-title="卫视IPV4",四川卫视
+http://148.135.93.213/live.php?id=四川卫视
+#EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视IPV4",天津卫视
+http://148.135.93.213/live.php?id=天津卫视
+#EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" http-user-agent="iPhone" http-referer="https://www.ahtv.cn/" group-title="卫视IPV4",安徽卫视
+http://118.89.87.74:88/live.php?id=安徽卫视
+#EXTINF:-1 tvg-id="山东卫视" tvg-name="山东卫视" group-title="卫视IPV4",山东卫视
+http://148.135.93.213/live.php?id=山东卫视
+#EXTINF:-1 tvg-id="山西卫视" tvg-name="山西卫视" group-title="卫视IPV4",山西卫视
+http://148.135.93.213/live.php?id=山西卫视
+#EXTINF:-1 tvg-id="广西卫视" tvg-name="广西卫视" group-title="卫视IPV4",广西卫视
+http://148.135.93.213/live.php?id=广西卫视
+#EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视IPV4",河北卫视
+http://148.135.93.213/live.php?id=河北卫视
+#EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视IPV4",河南卫视
+http://148.135.93.213/live.php?id=河南卫视
+#EXTINF:-1 tvg-id="甘肃卫视" tvg-name="甘肃卫视" group-title="卫视IPV4",甘肃卫视
+http://148.135.93.213/live.php?id=甘肃卫视
+#EXTINF:-1 tvg-id="贵州卫视" tvg-name="贵州卫视" group-title="卫视IPV4",贵州卫视
+http://148.135.93.213/live.php?id=贵州卫视
+#EXTINF:-1 tvg-id="辽宁卫视" tvg-name="辽宁卫视" group-title="卫视IPV4",辽宁卫视
+http://148.135.93.213/live.php?id=辽宁卫视
+#EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视IPV4",重庆卫视
+http://148.135.93.213/live.php?id=重庆卫视
+#EXTINF:-1 tvg-id="黑龙江卫视" tvg-name="黑龙江卫视" group-title="卫视IPV4",黑龙江卫视
+http://148.135.93.213/live.php?id=黑龙江卫视
+#EXTINF:-1 tvg-id="海南卫视" tvg-name="海南卫视" group-title="卫视IPV4",海南卫视
+http://148.135.93.213/live.php?id=海南卫视
+#EXTINF:-1 tvg-id="大湾区卫视" tvg-name="大湾区卫视" group-title="卫视IPV4",大湾区卫视
+http://148.135.93.213/live.php?id=大湾区卫视
+
+#EXTINF:-1 tvg-id="北京卫视" tvg-name="北京卫视" http-user-agent="AptvPlayer-UA" group-title="4K8K频道",北京卫视-4K
+http://118.89.87.74:88/live.php?id=北京卫视
+#EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" http-user-agent="AptvPlayer-UA" group-title="4K8K频道",深圳卫视-4K
+http://118.89.87.74:88/live.php?id=深圳卫视
+#EXTINF:-1 tvg-id="苏州4K" tvg-name="苏州4K" group-title="4K8K频道",苏州4K
+https://tylive.kan0512.com/norecord/csztv4k_4k.m3u8
+#EXTINF:-1 tvg-id="河北4K" tvg-name="河北4K" group-title="4K8K频道",河北4K
+https://event.pull.hebtv.com:443/live/live101.m3u8
+#EXTINF:-1 tvg-id="北京纪实科教" tvg-name="北京纪实科教" http-user-agent="AptvPlayer-UA" group-title="4K8K频道" tvg-logo="https://gcore.jsdelivr.net/gh/taksssss/tv/icon/北京纪实科教.png",北京纪实科教8K
+http://118.89.87.74:88/brtv8k.php
+
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1983
+https://alimov2.a.kwimgs.com/upic/2022/01/31/15/BMjAyMjAxMzExNTU5MTRfNDAzMDAxOTlfNjYyNzMxNjcwMjBfMF8z_b_Beb3bda599f76c60c463c433ca7460153.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1984
+https://alimov2.a.kwimgs.com/upic/2022/01/31/15/BMjAyMjAxMzExNTU5NTRfNDAzMDAxOTlfNjYyNzMyMzg3MTRfMF8z_b_B192356dadbc90d207ba16964d4c2914c.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1985
+https://alimov2.a.kwimgs.com/upic/2022/01/31/16/BMjAyMjAxMzExNjAwMDFfNDAzMDAxOTlfNjYyNzMyNTAwMzJfMF8z_b_Be73c5abcbc0eeb2ec9fce6842e1362a4.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1986
+https://alimov2.a.kwimgs.com/upic/2022/01/31/16/BMjAyMjAxMzExNjAwMDRfNDAzMDAxOTlfNjYyNzMyNTU0OTRfMF8z_b_B24f7d19f1132fa5d7f502f8377ad5567.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1987
+https://alimov2.a.kwimgs.com/upic/2022/01/31/16/BMjAyMjAxMzExNjAwMDhfNDAzMDAxOTlfNjYyNzMyNjMyMDNfMF8z_b_B570493ed8f7200d4013a66b2d21b2de9.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1988
+https://alimov2.a.kwimgs.com/upic/2022/01/31/16/BMjAyMjAxMzExNjAwMTJfNDAzMDAxOTlfNjYyNzMyNjkxNjBfMF8z_b_B8c835b83a92d25bde81ba22c5cd9521e.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1989
+https://alimov2.a.kwimgs.com/upic/2022/01/31/16/BMjAyMjAxMzExNjAwMTVfNDAzMDAxOTlfNjYyNzMyNzQ2OTlfMF8z_b_Be477b27b9ce655d2372df56a5a3d96ef.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1990
+https://cdn8.yzzy-online.com/20220704/597_e0d90c37/1000k/hls/index.m3u8
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1991
+https://alimov2.a.kwimgs.com/upic/2022/01/31/16/BMjAyMjAxMzExNjI2MTVfNDAzMDAxOTlfNjYyNzYwNjUxNjVfMF8z_b_B8feb7b85888678d71bf37a259c6850f6.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1992
+https://txmov2.a.kwimgs.com/bs3/video-hls/5256826755663896297_hlshd15.m3u8
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1993
+https://alimov2.a.kwimgs.com/upic/2023/01/13/22/BMjAyMzAxMTMyMjEwMDNfNDAzMDAxOTlfOTM1MTIzMzYwODJfMF8z_b_B647d10e431b4cc5e48e6c77347d69021.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1994
+https://alimov2.a.kwimgs.com/upic/2023/01/13/22/BMjAyMzAxMTMyMjEwMDNfNDAzMDAxOTlfOTM1MTIzMzYxMjNfMF8z_b_B3dde97f36273f04403d4dc5eec611a35.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1995
+https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQwNzVfMF8z_b_B811c0dec6b9a3d3074a18522c185010a.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1996
+https://alimov2.a.kwimgs.com/upic/2023/01/13/22/BMjAyMzAxMTMyMjEwMDNfNDAzMDAxOTlfOTM1MTIzMzYxNTJfMF8z_b_Bd841eae10ab1c9955ef55fbedfae6c45.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1997
+https://txmov2.a.kwimgs.com/bs3/video-hls/5230649583590411879_hlshd15.m3u8
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1998
+https://txmov2.a.kwimgs.com/bs3/video-hls/5225864507896315430_hlshd15.m3u8
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚1999
+https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQxNTRfMF8z_b_B0b5e52bc003285ef66ec0cbb2be08556.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2000
+https://alimov2.a.kwimgs.com/upic/2023/01/13/21/BMjAyMzAxMTMyMTE4MzRfNDAzMDAxOTlfOTM1MDY4ODIxMTNfMF8z_b_Bdddf4e7ef0ff6cfd477857bb40e78419.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2001
+https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQyMDFfMF8z_b_B70592cb7c4054e9cabb675e849bbf4bd.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2002
+https://alimov2.a.kwimgs.com/upic/2023/01/13/21/BMjAyMzAxMTMyMTE4MzRfNDAzMDAxOTlfOTM1MDY4ODIxNDdfMF8z_b_Ba6271d10b7e6cfae83759033a091f257.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2003
+https://alimov2.a.kwimgs.com/upic/2023/01/14/23/BMjAyMzAxMTQyMzQxNDdfNDAzMDAxOTlfOTM2MTU0MTk1NDFfMF8z_b_B182749d2cd2ea9323639254af385f24b.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2004
+https://alimov2.a.kwimgs.com/upic/2023/01/13/21/BMjAyMzAxMTMyMTE4MzRfNDAzMDAxOTlfOTM1MDY4ODIxOTVfMF8z_b_B86c4430b82ff5a7f4e8132f6ee558536.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2005
+https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQyMzhfMF8z_b_B35ad7cc86aec8fc9e5ddfb31fc7bed63.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2006
+https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQyNzlfMF8z_b_Bbc3703fc331dc994c50859c19aad28ff.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2007
+https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQzMjNfMF8z_b_B00b069c7899976459ceeaa99353dfefe.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2008
+https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQzNTNfMF8z_b_Bd7346962e61bd7b84e11a1fa6e4616f9.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2009
+https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQzOTBfMF8z_b_B29a36a85e0277f6c2a1f033ef7c10708.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2010
+https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQ0MjlfMF8z_b_B8818807a00eed329a69fb494f405bd43.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2011
+https://alimov2.a.kwimgs.com/upic/2023/01/16/11/BMjAyMzAxMTYxMTA3MjFfNDAzMDAxOTlfOTM3MjcyMjA3ODhfMF8z_b_B8214200efc869dc6fcf99dad619fa4c1.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2012
+https://cdn8.yzzy-online.com/20220704/591_82b72f82/1000k/hls/index.m3u8
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2013
+https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQ1NjNfMF8z_b_B4fea55408dca4471a68a963ae096be59.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2014
+https://alimov2.a.kwimgs.com/upic/2023/01/06/16/BMjAyMzAxMDYxNjMxMTNfNDAzMDAxOTlfOTI4OTY2ODAzNjlfMF8z_b_Bdee65c77f9e7b2120a185c919dad81d2.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2015
+https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQ2MTZfMF8z_b_B4851f43f5a2bc2871a9b0ec87294a6e7.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2016
+https://cdn8.yzzy-online.com/20220704/577_cda9c8d1/1000k/hls/index.m3u8
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2017
+https://alimov2.a.kwimgs.com/upic/2023/01/13/20/BMjAyMzAxMTMyMDA5MjJfNDAzMDAxOTlfOTM0OTkwNDQ2NDhfMF8z_b_B6527b0c2ce3dda1d9b3f34edd4fdb9aa.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2018
+https://alimov2.a.kwimgs.com/upic/2023/01/06/16/BMjAyMzAxMDYxNjMxMTRfNDAzMDAxOTlfOTI4OTY2ODE2MTBfMF8z_b_B11a778e34390a21de42d407e94f45b91.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2019
+https://alimov2.a.kwimgs.com/upic/2023/01/06/16/BMjAyMzAxMDYxNjMxMTRfNDAzMDAxOTlfOTI4OTY2ODE2MTBfMF8z_b_B11a778e34390a21de42d407e94f45b91.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2020
+https://alimov2.a.kwimgs.com/upic/2022/01/30/17/BMjAyMjAxMzAxNzA5NDdfNDAzMDAxOTlfNjYxNzQ2MDAyMTFfMF8z_b_B5d51d9564c5670dc66faeba20aa7af3f.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2021
+https://alimov2.a.kwimgs.com/upic/2022/01/30/17/BMjAyMjAxMzAxNzE4NTJfNDAzMDAxOTlfNjYxNzUzOTg3NjlfMF8z_b_Be41d9503181d7b0608a839ed401e02c2.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2022
+https://alimov2.a.kwimgs.com/upic/2022/02/01/11/BMjAyMjAyMDExMTEwMjNfNDAzMDAxOTlfNjYzNzA4MTk4NzNfMF8z_b_B898cc7ddd0025bf54ddb18ec1f723c84.mp4
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2023
+https://txmov2.a.kwimgs.com/bs3/video-hls/5251197255879398624_hlshd15.m3u8
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2024
+https://p2.bdstatic.com/rtmp.liveshow.lss-user.baidubce.com/live/stream_bduid_6488563992_8982723413/merged_1707497046297_88536_25144_41936.m3u8
+#EXTINF:-1 tvg-name="春晚" group-title="历年春晚",春晚2025
+https://res.cctvnews.cctv.com/video/3005/record/cctv/merge1/133396667284143308839013005/8fbd6180bdef4da19f6155cf6b4652e1-4.m3u8
diff --git a/潇洒/lives/Guovin.txt b/潇洒/lives/Guovin.txt
new file mode 100644
index 0000000..1521c35
--- /dev/null
+++ b/潇洒/lives/Guovin.txt
@@ -0,0 +1,2693 @@
+#EXTM3U x-tvg-url="https://raw.githubusercontent.com/mytv-android/iptv-api/refs/heads/master/output/epg/epg.gz"
+#EXTINF:-1 tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png" group-title="📺央视频道",CCTV-1
+http://39.164.180.36:19901/tsfile/live/0001_2.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png" group-title="📺央视频道",CCTV-1
+http://123.160.232.254:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png" group-title="📺央视频道",CCTV-1
+http://www.dsk.cc/php/bfgd.php?id=cctv1&m.m3u8
+#EXTINF:-1 tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png" group-title="📺央视频道",CCTV-1
+http://120.76.248.139/live/bfgd/4200000201.m3u8
+#EXTINF:-1 tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png" group-title="📺央视频道",CCTV-1
+http://120.76.248.139/live/bfgd/4200000484.m3u8
+#EXTINF:-1 tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png" group-title="📺央视频道",CCTV-1
+http://ali-m-l.cztv.com/channels/lantian/channel15/1080p.m3u8
+#EXTINF:-1 tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png" group-title="📺央视频道",CCTV-1
+http://112.123.243.37:50085/tsfile/live/0001_1.m3u8
+#EXTINF:-1 tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png" group-title="📺央视频道",CCTV-1
+http://114.238.59.2:4000/rtp/239.49.8.19:9614
+#EXTINF:-1 tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png" group-title="📺央视频道",CCTV-1
+http://114.238.59.148:4000/rtp/239.49.8.19:9614
+#EXTINF:-1 tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png" group-title="📺央视频道",CCTV-1
+http://120.76.248.139/live/bfgd/4200000488.m3u8
+#EXTINF:-1 tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png" group-title="📺央视频道",CCTV-2
+http://www.dsk.cc/php/bfgd.php?id=cctv2&m.m3u8
+#EXTINF:-1 tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png" group-title="📺央视频道",CCTV-2
+http://120.76.248.139/live/bfgd/4200000061.m3u8
+#EXTINF:-1 tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png" group-title="📺央视频道",CCTV-2
+http://39.164.180.36:19901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png" group-title="📺央视频道",CCTV-2
+http://123.160.232.254:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png" group-title="📺央视频道",CCTV-2
+http://222.169.85.8:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png" group-title="📺央视频道",CCTV-2
+http://cz.crossec.com:35455/mgtv/631780532.m3u8
+#EXTINF:-1 tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png" group-title="📺央视频道",CCTV-2
+http://106.115.24.17:9901/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png" group-title="📺央视频道",CCTV-2
+http://b.zgjok.com:35455/mgtv/631780532.m3u8
+#EXTINF:-1 tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png" group-title="📺央视频道",CCTV-2
+http://114.238.59.148:4000/rtp/239.49.8.50:9802
+#EXTINF:-1 tvg-name="CCTV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV2.png" group-title="📺央视频道",CCTV-2
+http://223.241.247.214:9901/tsfile/live/0002_1.m3u8
+#EXTINF:-1 tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png" group-title="📺央视频道",CCTV-3
+http://39.164.180.36:19901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png" group-title="📺央视频道",CCTV-3
+http://123.160.232.254:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png" group-title="📺央视频道",CCTV-3
+http://101.74.30.190:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png" group-title="📺央视频道",CCTV-3
+http://106.115.24.17:9901/tsfile/live/1002_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png" group-title="📺央视频道",CCTV-3
+http://cz.crossec.com:35455/mgtv/624878271.m3u8
+#EXTINF:-1 tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png" group-title="📺央视频道",CCTV-3
+http://php.cqshushu.ggff.net/jzb.php?id=cctv3&公众号【医工学习日志】
+#EXTINF:-1 tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png" group-title="📺央视频道",CCTV-3
+http://home.yulei.online:9999/rtp/226.0.2.208:9576
+#EXTINF:-1 tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png" group-title="📺央视频道",CCTV-3
+http://222.169.85.8:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png" group-title="📺央视频道",CCTV-3
+http://qjrhc.jydjd.top:2911/udp/224.1.100.64:11111
+#EXTINF:-1 tvg-name="CCTV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV3.png" group-title="📺央视频道",CCTV-3
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226471/1.m3u8
+#EXTINF:-1 tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png" group-title="📺央视频道",CCTV-4
+http://39.164.180.36:19901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png" group-title="📺央视频道",CCTV-4
+http://123.160.232.254:9901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png" group-title="📺央视频道",CCTV-4
+http://b.zgjok.com:35455/mgtv/631780421.m3u8
+#EXTINF:-1 tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png" group-title="📺央视频道",CCTV-4
+http://drive.mxmy.net:8888/udp/239.3.1.214:4220
+#EXTINF:-1 tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png" group-title="📺央视频道",CCTV-4
+http://php.cqshushu.ggff.net/jzb.php?id=cctv5&公众号【医工学习日志】
+#EXTINF:-1 tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png" group-title="📺央视频道",CCTV-4
+http://home.yulei.online:9999/rtp/226.0.2.156:9160
+#EXTINF:-1 tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png" group-title="📺央视频道",CCTV-4
+http://fxgm.fxjf.work:19901/tsfile/live/0004_1.m3u8
+#EXTINF:-1 tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png" group-title="📺央视频道",CCTV-4
+http://qjrhc.jydjd.top:2911/udp/224.1.100.104:11111
+#EXTINF:-1 tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png" group-title="📺央视频道",CCTV-4
+http://120.76.248.139/live/bfgd/4200000063.m3u8
+#EXTINF:-1 tvg-name="CCTV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV4.png" group-title="📺央视频道",CCTV-4
+http://60.26.181.220:4022/rtp/225.1.1.150:5002
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="📺央视频道",CCTV-5
+http://120.76.248.139/live/bfgd/4200000064.m3u8
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="📺央视频道",CCTV-5
+http://123.160.232.254:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="📺央视频道",CCTV-5
+http://39.164.180.36:19901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="📺央视频道",CCTV-5
+http://b.zgjok.com:35455/mgtv/641886683.m3u8
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="📺央视频道",CCTV-5
+https://ldcctvwbcdbd.a.bdydns.com/ldcctvwbcd/cdrmldcctv5plus_1/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="📺央视频道",CCTV-5
+http://222.169.85.8:9901/tsfile/live/0005_1.m3u8
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="📺央视频道",CCTV-5
+https://ldcctvwbcdtxy.liveplay.myqcloud.com/ldcctvwbcd/cdrmldcctv5plus_1_td.m3u8
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="📺央视频道",CCTV-5
+https://ldcctvwbcdtxy.liveplay.myqcloud.com/ldcctvwbcd/cdrmldcctv5plus_1/index.m3u8?b=200-2100
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="📺央视频道",CCTV-5
+http://qjrhc.jydjd.top:2911/udp/224.1.100.82:11111
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="📺央视频道",CCTV-5
+https://ldcctvwbcdbd.a.bdydns.com/ldcctvwbcd/cdrmldcctv5plus_1/index.m3u8?BR=td
+#EXTINF:-1 tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png" group-title="📺央视频道",CCTV-6
+http://120.76.248.139/live/bfgd/4200000065.m3u8
+#EXTINF:-1 tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png" group-title="📺央视频道",CCTV-6
+http://39.164.180.36:19901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png" group-title="📺央视频道",CCTV-6
+http://123.160.232.254:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png" group-title="📺央视频道",CCTV-6
+http://i.880824.xyz:35455/mgtv/624878396.m3u8
+#EXTINF:-1 tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png" group-title="📺央视频道",CCTV-6
+http://cz.crossec.com:35455/mgtv/624878396.m3u8
+#EXTINF:-1 tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png" group-title="📺央视频道",CCTV-6
+http://www.dsk.cc/php/bfgd.php?id=cctv6&m.m3u8
+#EXTINF:-1 tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png" group-title="📺央视频道",CCTV-6
+http://101.74.30.190:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png" group-title="📺央视频道",CCTV-6
+http://60.26.181.220:4022/rtp/225.1.1.195:5002
+#EXTINF:-1 tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png" group-title="📺央视频道",CCTV-6
+http://222.169.85.8:9901/tsfile/live/0006_1.m3u8?key=txiptv
+#EXTINF:-1 tvg-name="CCTV6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV6.png" group-title="📺央视频道",CCTV-6
+http://qjrhc.jydjd.top:2911/udp/224.1.100.84:11111
+#EXTINF:-1 tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png" group-title="📺央视频道",CCTV-7
+http://cz.crossec.com:35455/mgtv/673168121.m3u8
+#EXTINF:-1 tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png" group-title="📺央视频道",CCTV-7
+http://123.160.232.254:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png" group-title="📺央视频道",CCTV-7
+http://39.164.180.36:19901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png" group-title="📺央视频道",CCTV-7
+http://live.junhao.mil.cn/rmt9502/3e6e7c5477314ec38f5e58e2a5c70024.m3u8?txSecret=57978fafb9c19880afa5c8687e8241d8&txTime=7A42BAFF
+#EXTINF:-1 tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png" group-title="📺央视频道",CCTV-7
+http://b.zgjok.com:35455/mgtv/673168121.m3u8
+#EXTINF:-1 tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png" group-title="📺央视频道",CCTV-7
+http://60.26.181.220:4022/rtp/225.1.1.138:5002
+#EXTINF:-1 tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png" group-title="📺央视频道",CCTV-7
+http://101.74.30.190:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png" group-title="📺央视频道",CCTV-7
+http://fxgm.fxjf.work:19901/tsfile/live/0007_1.m3u8
+#EXTINF:-1 tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png" group-title="📺央视频道",CCTV-7
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226946/1.m3u8
+#EXTINF:-1 tvg-name="CCTV7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV7.png" group-title="📺央视频道",CCTV-7
+http://[2409:8087:74f0:22::4]:6410/270000001128/9900000504/index.m3u8
+#EXTINF:-1 tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png" group-title="📺央视频道",CCTV-8
+http://cz.crossec.com:35455/mgtv/624878356.m3u8
+#EXTINF:-1 tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png" group-title="📺央视频道",CCTV-8
+http://123.160.232.254:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png" group-title="📺央视频道",CCTV-8
+http://39.164.180.36:19901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png" group-title="📺央视频道",CCTV-8
+http://106.115.24.16:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png" group-title="📺央视频道",CCTV-8
+http://101.74.30.190:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png" group-title="📺央视频道",CCTV-8
+http://60.26.181.220:4022/rtp/225.1.1.196:5002
+#EXTINF:-1 tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png" group-title="📺央视频道",CCTV-8
+http://220.169.100.41:10087/udp/239.76.253.158:9000
+#EXTINF:-1 tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png" group-title="📺央视频道",CCTV-8
+http://fxgm.fxjf.work:19901/tsfile/live/0008_1.m3u8
+#EXTINF:-1 tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png" group-title="📺央视频道",CCTV-8
+http://112.123.243.37:50085/tsfile/live/0009_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV8.png" group-title="📺央视频道",CCTV-8
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226485/1.m3u8
+#EXTINF:-1 tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png" group-title="📺央视频道",CCTV-9
+http://cz.crossec.com:35455/mgtv/673168140.m3u8
+#EXTINF:-1 tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png" group-title="📺央视频道",CCTV-9
+http://39.164.180.36:19901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=0&au
+#EXTINF:-1 tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png" group-title="📺央视频道",CCTV-9
+http://39.164.180.36:19901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png" group-title="📺央视频道",CCTV-9
+http://106.115.24.16:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png" group-title="📺央视频道",CCTV-9
+http://123.160.232.254:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png" group-title="📺央视频道",CCTV-9
+http://101.74.30.190:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png" group-title="📺央视频道",CCTV-9
+http://112.123.243.37:50085/tsfile/live/0010_1.m3u8
+#EXTINF:-1 tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png" group-title="📺央视频道",CCTV-9
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8
+#EXTINF:-1 tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png" group-title="📺央视频道",CCTV-9
+http://[2409:8087:74f0:22::4]:6410/270000001128/9900000505/index.m3u8
+#EXTINF:-1 tvg-name="CCTV9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV9.png" group-title="📺央视频道",CCTV-9
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225734/index.m3u8
+#EXTINF:-1 tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png" group-title="📺央视频道",CCTV-10
+http://cz.crossec.com:35455/mgtv/624878405.m3u8
+#EXTINF:-1 tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png" group-title="📺央视频道",CCTV-10
+http://39.164.180.36:19901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png" group-title="📺央视频道",CCTV-10
+http://123.160.232.254:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png" group-title="📺央视频道",CCTV-10
+http://fxgm.fxjf.work:19901/tsfile/live/0010_1.m3u8
+#EXTINF:-1 tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png" group-title="📺央视频道",CCTV-10
+http://220.169.100.41:10087/udp/239.76.253.160:9000
+#EXTINF:-1 tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png" group-title="📺央视频道",CCTV-10
+http://49.71.190.192:8000/rtp/239.49.8.54:9818
+#EXTINF:-1 tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png" group-title="📺央视频道",CCTV-10
+http://222.169.85.8:9901/tsfile/live/0010_1.m3u8
+#EXTINF:-1 tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png" group-title="📺央视频道",CCTV-10
+http://117.12.149.38:4022/rtp/225.1.1.140:5002
+#EXTINF:-1 tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png" group-title="📺央视频道",CCTV-10
+http://112.123.243.37:50085/tsfile/live/0011_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV10.png" group-title="📺央视频道",CCTV-10
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8
+#EXTINF:-1 tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png" group-title="📺央视频道",CCTV-11
+http://cz.crossec.com:35455/mgtv/667987558.m3u8
+#EXTINF:-1 tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png" group-title="📺央视频道",CCTV-11
+http://39.164.180.36:19901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png" group-title="📺央视频道",CCTV-11
+http://123.160.232.254:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png" group-title="📺央视频道",CCTV-11
+http://drive.mxmy.net:8888/udp/239.3.1.152:8120
+#EXTINF:-1 tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png" group-title="📺央视频道",CCTV-11
+http://nn.7x9d.cn/xzc2.php?ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA2LjAuMC4wIFNhZmFyaS81MzcuMzY=&hls=aHR0cDovL3d3dy5kc2suY2MvcGhwL3N4Z2QucGhwP2lkPWNjdHYxMQ==
+#EXTINF:-1 tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png" group-title="📺央视频道",CCTV-11
+http://222.169.85.8:9901/tsfile/live/0011_1.m3u8?key=txiptv
+#EXTINF:-1 tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png" group-title="📺央视频道",CCTV-11
+http://fxgm.fxjf.work:19901/tsfile/live/0011_1.m3u8
+#EXTINF:-1 tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png" group-title="📺央视频道",CCTV-11
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8
+#EXTINF:-1 tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png" group-title="📺央视频道",CCTV-11
+http://[2409:8087:74f0:22::4]:6410/270000001128/9900000508/index.m3u8
+#EXTINF:-1 tvg-name="CCTV11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV11.png" group-title="📺央视频道",CCTV-11
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225597/index.m3u8
+#EXTINF:-1 tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png" group-title="📺央视频道",CCTV-12
+http://cz.crossec.com:35455/mgtv/673168185.m3u8
+#EXTINF:-1 tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png" group-title="📺央视频道",CCTV-12
+http://39.164.180.36:19901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png" group-title="📺央视频道",CCTV-12
+http://123.160.232.254:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png" group-title="📺央视频道",CCTV-12
+http://b.zgjok.com:35455/mgtv/673168185.m3u8
+#EXTINF:-1 tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png" group-title="📺央视频道",CCTV-12
+http://drive.mxmy.net:8888/udp/239.3.1.64:8124
+#EXTINF:-1 tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png" group-title="📺央视频道",CCTV-12
+http://116.237.148.215:8881/rtp/239.45.3.10:5140
+#EXTINF:-1 tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png" group-title="📺央视频道",CCTV-12
+http://222.218.122.114:8188/udp/239.81.0.119:4056
+#EXTINF:-1 tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png" group-title="📺央视频道",CCTV-12
+http://112.123.243.37:50085/tsfile/live/0013_1.m3u8
+#EXTINF:-1 tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png" group-title="📺央视频道",CCTV-12
+http://49.71.190.192:8000/rtp/239.49.8.55:9822
+#EXTINF:-1 tvg-name="CCTV12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV12.png" group-title="📺央视频道",CCTV-12
+http://nn.7x9d.cn/xzc2.php?ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA2LjAuMC4wIFNhZmFyaS81MzcuMzY=&hls=aHR0cDovL3d3dy5kc2suY2MvcGhwL3N4Z2QucGhwP2lkPWNjdHYxMg==
+#EXTINF:-1 tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png" group-title="📺央视频道",CCTV-13
+http://39.164.180.36:19901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png" group-title="📺央视频道",CCTV-13
+http://cz.crossec.com:35455/mgtv/608807423.m3u8
+#EXTINF:-1 tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png" group-title="📺央视频道",CCTV-13
+http://b.zgjok.com:35455/mgtv/608807423.m3u8
+#EXTINF:-1 tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png" group-title="📺央视频道",CCTV-13
+http://ali-m-l.cztv.com/channels/lantian/channel21/1080p.m3u8
+#EXTINF:-1 tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png" group-title="📺央视频道",CCTV-13
+http://drive.mxmy.net:8888/udp/239.3.1.124:8128
+#EXTINF:-1 tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png" group-title="📺央视频道",CCTV-13
+http://123.160.232.254:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png" group-title="📺央视频道",CCTV-13
+http://aiony.top:35455/mgtv/608807423.m3u8
+#EXTINF:-1 tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png" group-title="📺央视频道",CCTV-13
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226316/1.m3u8
+#EXTINF:-1 tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png" group-title="📺央视频道",CCTV-13
+https://event.pull.hebtv.com/jishi/cp1.m3u8
+#EXTINF:-1 tvg-name="CCTV13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV13.png" group-title="📺央视频道",CCTV-13
+http://z.b.bkpcp.top/m.php?id=cctv13
+#EXTINF:-1 tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png" group-title="📺央视频道",CCTV-14
+http://cz.crossec.com:35455/mgtv/624878440.m3u8
+#EXTINF:-1 tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png" group-title="📺央视频道",CCTV-14
+http://39.164.180.36:19901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png" group-title="📺央视频道",CCTV-14
+http://123.160.232.254:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png" group-title="📺央视频道",CCTV-14
+http://60.26.181.220:4022/rtp/225.1.1.144:5002
+#EXTINF:-1 tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png" group-title="📺央视频道",CCTV-14
+http://drive.mxmy.net:8888/udp/239.3.1.65:8132
+#EXTINF:-1 tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png" group-title="📺央视频道",CCTV-14
+http://116.237.148.215:8881/rtp/239.45.3.23:5140
+#EXTINF:-1 tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png" group-title="📺央视频道",CCTV-14
+http://222.218.122.114:8188/udp/239.81.0.120:4056
+#EXTINF:-1 tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png" group-title="📺央视频道",CCTV-14
+http://114.238.59.148:4000/rtp/239.49.8.56:9826
+#EXTINF:-1 tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png" group-title="📺央视频道",CCTV-14
+http://fxgm.fxjf.work:19901/tsfile/live/0014_1.m3u8
+#EXTINF:-1 tvg-name="CCTV14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV14.png" group-title="📺央视频道",CCTV-14
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="📺央视频道",CCTV-15
+http://cz.crossec.com:35455/mgtv/673168223.m3u8
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="📺央视频道",CCTV-15
+http://222.134.245.16:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="📺央视频道",CCTV-15
+http://112.123.243.37:50085/tsfile/live/0016_1.m3u8
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="📺央视频道",CCTV-15
+http://drive.mxmy.net:8888/udp/239.3.1.153:8136
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="📺央视频道",CCTV-15
+http://123.160.232.254:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="📺央视频道",CCTV-15
+http://112.123.243.37:50085/tsfile/live/0016_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="📺央视频道",CCTV-15
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="📺央视频道",CCTV-15
+http://[2409:8087:74f0:22::4]:6410/270000001128/9900000512/index.m3u8
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="📺央视频道",CCTV-15
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225601/index.m3u8
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="📺央视频道",CCTV-15
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226476/index.m3u8
+#EXTINF:-1 tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png" group-title="📺央视频道",CCTV-16
+http://60.179.80.157:8888/udp/233.50.201.192:5140
+#EXTINF:-1 tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png" group-title="📺央视频道",CCTV-16
+http://117.12.149.38:4022/rtp/225.1.2.237:5002
+#EXTINF:-1 tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png" group-title="📺央视频道",CCTV-16
+http://60.26.181.220:4022/rtp/225.1.2.237:5002
+#EXTINF:-1 tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png" group-title="📺央视频道",CCTV-16
+http://221.219.101.18:4022/rtp/239.3.1.184:8001
+#EXTINF:-1 tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png" group-title="📺央视频道",CCTV-16
+http://drive.mxmy.net:8888/udp/239.3.1.184:8001
+#EXTINF:-1 tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png" group-title="📺央视频道",CCTV-16
+http://111.193.239.245:9999/rtp/239.3.1.184:8001
+#EXTINF:-1 tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png" group-title="📺央视频道",CCTV-16
+http://home.yulei.online:9999/rtp/226.0.2.169:9264
+#EXTINF:-1 tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png" group-title="📺央视频道",CCTV-16
+http://b.zgjok.com:35455/nptv/cctv16.m3u8
+#EXTINF:-1 tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png" group-title="📺央视频道",CCTV-16
+http://cz.crossec.com:35455/nptv/cctv16.m3u8
+#EXTINF:-1 tvg-name="CCTV16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV16.png" group-title="📺央视频道",CCTV-16
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227002/1.m3u8
+#EXTINF:-1 tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png" group-title="📺央视频道",CCTV-17
+http://cz.crossec.com:35455/mgtv/673168256.m3u8
+#EXTINF:-1 tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png" group-title="📺央视频道",CCTV-17
+http://117.12.149.38:4022/rtp/225.1.2.52:5002
+#EXTINF:-1 tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png" group-title="📺央视频道",CCTV-17
+http://drive.mxmy.net:8888/udp/239.3.1.151:8144
+#EXTINF:-1 tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png" group-title="📺央视频道",CCTV-17
+http://116.237.148.215:8881/rtp/239.45.3.52:5140
+#EXTINF:-1 tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png" group-title="📺央视频道",CCTV-17
+http://b.zgjok.com:35455/mgtv/673168256.m3u8
+#EXTINF:-1 tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png" group-title="📺央视频道",CCTV-17
+http://114.226.231.231:8787/rtp/239.49.8.52:9810
+#EXTINF:-1 tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png" group-title="📺央视频道",CCTV-17
+http://49.71.190.192:8000/rtp/239.49.8.52:9810
+#EXTINF:-1 tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png" group-title="📺央视频道",CCTV-17
+http://aiony.top:35455/mgtv/673168256.m3u8
+#EXTINF:-1 tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png" group-title="📺央视频道",CCTV-17
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8
+#EXTINF:-1 tvg-name="CCTV17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV17.png" group-title="📺央视频道",CCTV-17
+http://[2409:8087:74f0:22::4]:6410/270000001128/9900000513/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="📺央视频道",CCTV-5+
+http://39.164.180.36:19901/tsfile/live/0016_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="📺央视频道",CCTV-5+
+http://cz.crossec.com:35455/mgtv/641886773.m3u8
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="📺央视频道",CCTV-5+
+http://b.zgjok.com:35455/mgtv/641886773.m3u8
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="📺央视频道",CCTV-5+
+http://112.123.243.37:50085/tsfile/live/0006_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="📺央视频道",CCTV-5+
+http://60.26.181.220:4022/rtp/225.1.1.121:5002
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="📺央视频道",CCTV-5+
+http://117.12.149.38:4022/rtp/225.1.1.121:5002
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="📺央视频道",CCTV-5+
+http://omnix.cn:4000/udp/225.1.8.20:8004
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="📺央视频道",CCTV-5+
+http://114.226.231.231:8787/rtp/239.49.8.18:9610
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="📺央视频道",CCTV-5+
+http://49.71.190.192:8000/rtp/239.49.8.18:9610
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="📺央视频道",CCTV-5+
+http://drive.mxmy.net:8888/udp/239.3.1.130:8004
+#EXTINF:-1 tvg-name="CETV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV1.png" group-title="📺央视频道",CETV1
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226494/1.m3u8
+#EXTINF:-1 tvg-name="CETV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV1.png" group-title="📺央视频道",CETV1
+http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8
+#EXTINF:-1 tvg-name="CETV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV1.png" group-title="📺央视频道",CETV1
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221227021/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ELlgU9sgTT7iMtFgKHFa-dA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="CETV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV2.png" group-title="📺央视频道",CETV2
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226537/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7AxXs4eTU2oiWrhopr9sHw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNxsM0Bor098BJglrhfEQTl%2CEND
+#EXTINF:-1 tvg-name="CETV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV2.png" group-title="📺央视频道",CETV2
+http://[2409:8087:1a0b:df::4013]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8
+#EXTINF:-1 tvg-name="CETV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV2.png" group-title="📺央视频道",CETV2
+http://[2409:8087:74d6:22::7]:6410/270000001128/9900000071/index.m3u8
+#EXTINF:-1 tvg-name="CETV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV4.png" group-title="📺央视频道",CETV4
+https://gcalic.v.myalicdn.com/gc/wgw05_1/index.m3u8?contentid=2820180516001
+#EXTINF:-1 tvg-name="CETV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV4.png" group-title="📺央视频道",CETV4
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226997/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EAw_OvjRgJVjtlaOa0dcgzg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="CETV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV4.png" group-title="📺央视频道",CETV4
+http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8
+#EXTINF:-1 tvg-name="CETV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV4.png" group-title="📺央视频道",CETV4
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221226997/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EAw_OvjRgJVjtlaOa0dcgzg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="CETV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV1.png" group-title="📺央视频道",CETV-1
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226494/1.m3u8
+#EXTINF:-1 tvg-name="CETV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV1.png" group-title="📺央视频道",CETV-1
+http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8
+#EXTINF:-1 tvg-name="CETV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV1.png" group-title="📺央视频道",CETV-1
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221227021/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ELlgU9sgTT7iMtFgKHFa-dA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="CETV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV2.png" group-title="📺央视频道",CETV-2
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226537/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7AxXs4eTU2oiWrhopr9sHw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNxsM0Bor098BJglrhfEQTl%2CEND
+#EXTINF:-1 tvg-name="CETV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV2.png" group-title="📺央视频道",CETV-2
+http://[2409:8087:1a0b:df::4013]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8
+#EXTINF:-1 tvg-name="CETV2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV2.png" group-title="📺央视频道",CETV-2
+http://[2409:8087:74d6:22::7]:6410/270000001128/9900000071/index.m3u8
+#EXTINF:-1 tvg-name="CETV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV3.png" group-title="📺央视频道",CETV-3
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226577/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EhE2Z89HKgsQOlN9opVn1iw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNN03yUnk4zBVk1bynPPL3hZ%2CEND
+#EXTINF:-1 tvg-name="CETV3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV3.png" group-title="📺央视频道",CETV-3
+http://[2409:8087:7004:20:1000::22]:6610/yinhe/2/ch00000090990000001309/index.m3u8
+#EXTINF:-1 tvg-name="CETV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV4.png" group-title="📺央视频道",CETV-4
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226997/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EAw_OvjRgJVjtlaOa0dcgzg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="CETV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV4.png" group-title="📺央视频道",CETV-4
+http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8
+#EXTINF:-1 tvg-name="CETV4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CETV4.png" group-title="📺央视频道",CETV-4
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221226997/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EAw_OvjRgJVjtlaOa0dcgzg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="文化精品" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/文化精品.png" group-title="💰央视付费频道",文化精品
+http://[2409:8087:7001:20:2::3]/dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226981/index.m3u8
+#EXTINF:-1 tvg-name="央视台球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/央视台球.png" group-title="💰央视付费频道",央视台球
+http://[2409:8087:7001:20:2::3]/dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226956/index.m3u8
+#EXTINF:-1 tvg-name="风云音乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/风云音乐.png" group-title="💰央视付费频道",风云音乐
+http://[2409:8087:7001:20:2::3]/dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226953/index.m3u8
+#EXTINF:-1 tvg-name="第一剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/第一剧场.png" group-title="💰央视付费频道",第一剧场
+https://live.tvfix.org/live/cmc/index.m3u8
+#EXTINF:-1 tvg-name="第一剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/第一剧场.png" group-title="💰央视付费频道",第一剧场
+http://cdn.jdshipin.com:8880/huya.php?id=11342390
+#EXTINF:-1 tvg-name="第一剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/第一剧场.png" group-title="💰央视付费频道",第一剧场
+http://[2409:8087:7001:20:2::3]/dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226959/index.m3u8
+#EXTINF:-1 tvg-name="风云剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/风云剧场.png" group-title="💰央视付费频道",风云剧场
+http://[2409:8087:7001:20:2::3]/dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226950/index.m3u8
+#EXTINF:-1 tvg-name="怀旧剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/怀旧剧场.png" group-title="💰央视付费频道",怀旧剧场
+http://[2409:8087:7001:20:2::3]/dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226972/index.m3u8
+#EXTINF:-1 tvg-name="女性时尚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/女性时尚.png" group-title="💰央视付费频道",女性时尚
+http://[2409:8087:7001:20:2::3]/dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226969/index.m3u8
+#EXTINF:-1 tvg-name="高尔夫网球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/高尔夫网球.png" group-title="💰央视付费频道",高尔夫网球
+http://[2409:8087:7001:20:2::3]/dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226978/index.m3u8
+#EXTINF:-1 tvg-name="风云足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/风云足球.png" group-title="💰央视付费频道",风云足球
+http://[2409:8087:7001:20:2::3]/dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226984/index.m3u8
+#EXTINF:-1 tvg-name="电视指南" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/电视指南.png" group-title="💰央视付费频道",电视指南
+http://[2409:8087:7001:20:2::3]/dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226987/index.m3u8
+#EXTINF:-1 tvg-name="世界地理" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/世界地理.png" group-title="💰央视付费频道",世界地理
+http://[2409:8087:7001:20:2::3]/dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226947/index.m3u8
+#EXTINF:-1 tvg-name="兵器科技" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/兵器科技.png" group-title="💰央视付费频道",兵器科技
+http://[2409:8087:7001:20:2::3]/dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226975/index.m3u8
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="📡卫视频道",广东卫视
+https://txmov2.a.kwimgs.com/upic/2023/01/26/09/BMjAyMzAxMjYwOTE3NDVfNzM5MzQzNzIyXzk0NjI1OTUwNTA3XzBfMw==_b_B81ddda927d33445d544befd008e60109.mp4
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="📡卫视频道",广东卫视
+http://39.164.180.36:19901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="📡卫视频道",广东卫视
+http://123.160.232.254:9901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="📡卫视频道",广东卫视
+http://49.71.190.192:8000/rtp/239.49.8.13:9422
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="📡卫视频道",广东卫视
+http://b.zgjok.com:35455/nptv/guangdong.m3u8
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="📡卫视频道",广东卫视
+http://qjrhc.jydjd.top:2911/udp/224.1.100.96:11111
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="📡卫视频道",广东卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226961/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E2MGyx659D_aaDPP0qt3NgA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="📡卫视频道",广东卫视
+http://z.b.bkpcp.top/m.php?id=gdws
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="📡卫视频道",广东卫视
+http://j.x.bkpcp.top/jx/GUANGDHD
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="📡卫视频道",广东卫视
+http://[2409:8087:74f0:22::6]:6410/270000001128/9900000520/index.m3u8
+#EXTINF:-1 tvg-name="香港卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/香港卫视.png" group-title="📡卫视频道",香港卫视
+http://cctvtxyh5c.liveplay.myqcloud.com/cstv/xianggangweishi_2/index.m3u8
+#EXTINF:-1 tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江卫视.png" group-title="📡卫视频道",浙江卫视
+https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江卫视.png" group-title="📡卫视频道",浙江卫视
+http://39.164.180.36:19901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江卫视.png" group-title="📡卫视频道",浙江卫视
+http://123.160.232.254:9901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江卫视.png" group-title="📡卫视频道",浙江卫视
+http://112.123.243.37:50085/tsfile/live/0019_1.m3u8
+#EXTINF:-1 tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江卫视.png" group-title="📡卫视频道",浙江卫视
+http://139.155.142.13:9177/miguHD.php?id=浙江卫视
+#EXTINF:-1 tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江卫视.png" group-title="📡卫视频道",浙江卫视
+http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江卫视.png" group-title="📡卫视频道",浙江卫视
+http://222.218.122.114:8188/udp/239.81.0.108:4056
+#EXTINF:-1 tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江卫视.png" group-title="📡卫视频道",浙江卫视
+http://drive.mxmy.net:8888/udp/239.3.1.137:8036
+#EXTINF:-1 tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江卫视.png" group-title="📡卫视频道",浙江卫视
+http://cz.crossec.com:35455/nptv/zhejiang.m3u8
+#EXTINF:-1 tvg-name="浙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江卫视.png" group-title="📡卫视频道",浙江卫视
+http://112.123.243.37:50085/tsfile/live/0019_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖南卫视.png" group-title="📡卫视频道",湖南卫视
+https://txmov2.a.kwimgs.com/bs3/video-hls/5199687338554291078_hlsb.m3u8
+#EXTINF:-1 tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖南卫视.png" group-title="📡卫视频道",湖南卫视
+http://39.164.180.36:19901/tsfile/live/0128_2.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖南卫视.png" group-title="📡卫视频道",湖南卫视
+http://antvlive.ab5c6921.cdnviet.com/antv/playlist.m3u8
+#EXTINF:-1 tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖南卫视.png" group-title="📡卫视频道",湖南卫视
+http://123.160.232.254:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖南卫视.png" group-title="📡卫视频道",湖南卫视
+http://b.zgjok.com:35455/nptv/hunan.m3u8
+#EXTINF:-1 tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖南卫视.png" group-title="📡卫视频道",湖南卫视
+http://114.238.59.148:4000/rtp/239.49.8.12:9418
+#EXTINF:-1 tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖南卫视.png" group-title="📡卫视频道",湖南卫视
+http://220.169.100.41:10087/udp/239.76.253.100:9000
+#EXTINF:-1 tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖南卫视.png" group-title="📡卫视频道",湖南卫视
+http://nn.7x9d.cn/xzc2.php?ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA2LjAuMC4wIFNhZmFyaS81MzcuMzY=&hls=aHR0cDovL3d3dy5kc2suY2MvcGhwL3N4Z2QucGhwP2lkPWh1bndz
+#EXTINF:-1 tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖南卫视.png" group-title="📡卫视频道",湖南卫视
+http://qjrhc.jydjd.top:2911/udp/224.1.100.98:11111
+#EXTINF:-1 tvg-name="湖南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖南卫视.png" group-title="📡卫视频道",湖南卫视
+http://110.72.52.200:8181/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京卫视.png" group-title="📡卫视频道",北京卫视
+http://198.16.100.186:8278/beijing/playlist.m3u8?tid=MD5D2836914028369140&ct=20273&tsum=a5b068469f28162e31477052e2de91d6
+#EXTINF:-1 tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京卫视.png" group-title="📡卫视频道",北京卫视
+http://39.164.180.36:19901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京卫视.png" group-title="📡卫视频道",北京卫视
+http://123.160.232.254:9901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京卫视.png" group-title="📡卫视频道",北京卫视
+http://114.238.59.148:4000/rtp/239.49.8.11:9414
+#EXTINF:-1 tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京卫视.png" group-title="📡卫视频道",北京卫视
+http://49.71.190.192:8000/rtp/239.49.8.11:9414
+#EXTINF:-1 tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京卫视.png" group-title="📡卫视频道",北京卫视
+http://222.134.245.16:9901/tsfile/live/0122_1.m3u8
+#EXTINF:-1 tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京卫视.png" group-title="📡卫视频道",北京卫视
+http://106.115.24.16:9901/tsfile/live/1024_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京卫视.png" group-title="📡卫视频道",北京卫视
+http://qjrhc.jydjd.top:2911/udp/224.1.100.100:11111
+#EXTINF:-1 tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京卫视.png" group-title="📡卫视频道",北京卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226900/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EcYPi33WFyhvd6SjmqUKhJg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="北京卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京卫视.png" group-title="📡卫视频道",北京卫视
+http://z.b.bkpcp.top/m.php?id=bjws
+#EXTINF:-1 tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖北卫视.png" group-title="📡卫视频道",湖北卫视
+http://php.cqshushu.ggff.net/jzb.php?id=hbws&公众号【医工学习日志】
+#EXTINF:-1 tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖北卫视.png" group-title="📡卫视频道",湖北卫视
+http://web9916.w.computerqwq.cf/jzb.php?id=hbws&公众号【医工学习日志】
+#EXTINF:-1 tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖北卫视.png" group-title="📡卫视频道",湖北卫视
+http://39.164.180.36:19901/tsfile/live/0132_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖北卫视.png" group-title="📡卫视频道",湖北卫视
+http://60.26.181.220:4022/rtp/225.1.1.147:5002
+#EXTINF:-1 tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖北卫视.png" group-title="📡卫视频道",湖北卫视
+http://b.zgjok.com:35455/mgtv/947472496.m3u8
+#EXTINF:-1 tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖北卫视.png" group-title="📡卫视频道",湖北卫视
+http://114.238.59.148:4000/rtp/239.49.8.8:9632
+#EXTINF:-1 tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖北卫视.png" group-title="📡卫视频道",湖北卫视
+http://114.226.231.231:8787/rtp/239.49.8.8:9632
+#EXTINF:-1 tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖北卫视.png" group-title="📡卫视频道",湖北卫视
+http://fxgm.fxjf.work:19901/tsfile/live/0132_1.m3u8
+#EXTINF:-1 tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖北卫视.png" group-title="📡卫视频道",湖北卫视
+http://cz.crossec.com:35455/mgtv/947472496.m3u8
+#EXTINF:-1 tvg-name="湖北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖北卫视.png" group-title="📡卫视频道",湖北卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226952/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EREB40lnZnCEwjRy7LZuhIQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江卫视.png" group-title="📡卫视频道",黑龙江卫视
+https://s1.abntelevision.com/avivamientoabr/stream/avivamientohd/avivamientohd/chunks.m3u8
+#EXTINF:-1 tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江卫视.png" group-title="📡卫视频道",黑龙江卫视
+http://39.164.180.36:19901/tsfile/live/0143_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江卫视.png" group-title="📡卫视频道",黑龙江卫视
+http://114.238.59.2:4000/rtp/239.49.8.14:9426
+#EXTINF:-1 tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江卫视.png" group-title="📡卫视频道",黑龙江卫视
+http://114.238.59.148:4000/rtp/239.49.8.14:9426
+#EXTINF:-1 tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江卫视.png" group-title="📡卫视频道",黑龙江卫视
+http://114.226.231.231:8787/rtp/239.49.8.14:9426
+#EXTINF:-1 tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江卫视.png" group-title="📡卫视频道",黑龙江卫视
+http://220.169.100.41:10087/udp/239.76.253.200:9000
+#EXTINF:-1 tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江卫视.png" group-title="📡卫视频道",黑龙江卫视
+http://fxgm.fxjf.work:19901/tsfile/live/0143_1.m3u8
+#EXTINF:-1 tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江卫视.png" group-title="📡卫视频道",黑龙江卫视
+http://117.12.149.38:4022/rtp/225.1.1.115:5002
+#EXTINF:-1 tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江卫视.png" group-title="📡卫视频道",黑龙江卫视
+http://qjrhc.jydjd.top:2911/udp/224.1.100.139:11111
+#EXTINF:-1 tvg-name="黑龙江卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江卫视.png" group-title="📡卫视频道",黑龙江卫视
+http://j.x.bkpcp.top/jx/HEILJHD
+#EXTINF:-1 tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安徽卫视.png" group-title="📡卫视频道",安徽卫视
+http://39.164.180.36:19901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安徽卫视.png" group-title="📡卫视频道",安徽卫视
+http://203.205.191.53/live.ahsx.ahtv.cn/live/ahwssx.m3u8
+#EXTINF:-1 tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安徽卫视.png" group-title="📡卫视频道",安徽卫视
+http://114.238.59.148:4000/rtp/239.49.8.204:6000
+#EXTINF:-1 tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安徽卫视.png" group-title="📡卫视频道",安徽卫视
+http://49.71.190.192:8000/rtp/239.49.8.80:8000
+#EXTINF:-1 tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安徽卫视.png" group-title="📡卫视频道",安徽卫视
+http://114.226.231.231:8787/rtp/239.49.8.204:6000
+#EXTINF:-1 tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安徽卫视.png" group-title="📡卫视频道",安徽卫视
+http://222.134.245.16:9901/tsfile/live/0130_1.m3u8
+#EXTINF:-1 tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安徽卫视.png" group-title="📡卫视频道",安徽卫视
+http://qjrhc.jydjd.top:2911/udp/224.1.100.66:11111
+#EXTINF:-1 tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安徽卫视.png" group-title="📡卫视频道",安徽卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226943/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0QmKQ_slRCwvVVUUfxPVbw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安徽卫视.png" group-title="📡卫视频道",安徽卫视
+http://j.x.bkpcp.top/jx/ANHUIHD
+#EXTINF:-1 tvg-name="安徽卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安徽卫视.png" group-title="📡卫视频道",安徽卫视
+http://[2409:8087:74f0:22::7]:6410/270000001128/9900000514/index.m3u8
+#EXTINF:-1 tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/重庆卫视.png" group-title="📡卫视频道",重庆卫视
+http://39.164.180.36:19901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/重庆卫视.png" group-title="📡卫视频道",重庆卫视
+http://123.160.232.254:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/重庆卫视.png" group-title="📡卫视频道",重庆卫视
+http://60.26.181.220:4022/rtp/225.1.1.155:5002
+#EXTINF:-1 tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/重庆卫视.png" group-title="📡卫视频道",重庆卫视
+http://49.71.190.192:8000/rtp/239.49.8.57:9830
+#EXTINF:-1 tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/重庆卫视.png" group-title="📡卫视频道",重庆卫视
+http://z.b.bkpcp.top/m.php?id=cqws
+#EXTINF:-1 tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/重庆卫视.png" group-title="📡卫视频道",重庆卫视
+http://j.x.bkpcp.top/jx/CHONGQHD
+#EXTINF:-1 tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/重庆卫视.png" group-title="📡卫视频道",重庆卫视
+http://[2409:8087:74f0:22::7]:6410/270000001128/9900000517/index.m3u8
+#EXTINF:-1 tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/重庆卫视.png" group-title="📡卫视频道",重庆卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8
+#EXTINF:-1 tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/重庆卫视.png" group-title="📡卫视频道",重庆卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8
+#EXTINF:-1 tvg-name="重庆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/重庆卫视.png" group-title="📡卫视频道",重庆卫视
+http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010053/1.m3u8
+#EXTINF:-1 tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东方卫视.png" group-title="📡卫视频道",东方卫视
+https://txmov2.a.kwimgs.com/bs3/video-hls/5219953535631090825_hlsb.m3u8
+#EXTINF:-1 tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东方卫视.png" group-title="📡卫视频道",东方卫视
+http://39.164.180.36:19901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东方卫视.png" group-title="📡卫视频道",东方卫视
+http://123.160.232.254:9901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东方卫视.png" group-title="📡卫视频道",东方卫视
+http://114.238.59.2:4000/rtp/239.49.8.17:9606
+#EXTINF:-1 tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东方卫视.png" group-title="📡卫视频道",东方卫视
+http://114.238.59.148:4000/rtp/239.49.8.17:9606
+#EXTINF:-1 tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东方卫视.png" group-title="📡卫视频道",东方卫视
+http://117.12.149.38:4022/rtp/225.1.2.31:5002
+#EXTINF:-1 tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东方卫视.png" group-title="📡卫视频道",东方卫视
+http://qjrhc.jydjd.top:2911/udp/224.1.100.48:11111
+#EXTINF:-1 tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东方卫视.png" group-title="📡卫视频道",东方卫视
+http://b.zgjok.com:35455/nptv/dongfang.m3u8
+#EXTINF:-1 tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东方卫视.png" group-title="📡卫视频道",东方卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226898/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0uh4lyjjBCCN7TCq21vSIQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="东方卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东方卫视.png" group-title="📡卫视频道",东方卫视
+http://[2409:8087:74f0:22::5]:6410/270000001128/9900000518/index.m3u8
+#EXTINF:-1 tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东南卫视.png" group-title="📡卫视频道",东南卫视
+http://39.164.180.36:19901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东南卫视.png" group-title="📡卫视频道",东南卫视
+http://123.160.232.254:9901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东南卫视.png" group-title="📡卫视频道",东南卫视
+http://218.1.137.125:4022/rtp/239.45.1.121:5140
+#EXTINF:-1 tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东南卫视.png" group-title="📡卫视频道",东南卫视
+http://110.72.52.200:8181/tsfile/live/0137_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东南卫视.png" group-title="📡卫视频道",东南卫视
+http://49.71.190.192:8000/rtp/239.49.8.112:8000
+#EXTINF:-1 tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东南卫视.png" group-title="📡卫视频道",东南卫视
+http://144.255.44.160:7788/udp/239.21.1.113:5002
+#EXTINF:-1 tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东南卫视.png" group-title="📡卫视频道",东南卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226991/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EQ6F5Mjgs0tJyEArWFL3vQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东南卫视.png" group-title="📡卫视频道",东南卫视
+http://z.b.bkpcp.top/m.php?id=dnws
+#EXTINF:-1 tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东南卫视.png" group-title="📡卫视频道",东南卫视
+http://j.x.bkpcp.top/jx/DONGNHD
+#EXTINF:-1 tvg-name="东南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东南卫视.png" group-title="📡卫视频道",东南卫视
+http://[2409:8087:74f0:22::4]:6610/270000001128/9900000519/index.m3u8
+#EXTINF:-1 tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/甘肃卫视.png" group-title="📡卫视频道",甘肃卫视
+http://39.164.180.36:19901/tsfile/live/0141_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/甘肃卫视.png" group-title="📡卫视频道",甘肃卫视
+http://114.100.195.223:4022/rtp/238.1.79.36:4400
+#EXTINF:-1 tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/甘肃卫视.png" group-title="📡卫视频道",甘肃卫视
+http://222.218.122.114:8188/udp/239.81.0.207:4056
+#EXTINF:-1 tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/甘肃卫视.png" group-title="📡卫视频道",甘肃卫视
+http://144.255.44.160:7788/udp/239.21.2.22:5002
+#EXTINF:-1 tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/甘肃卫视.png" group-title="📡卫视频道",甘肃卫视
+http://nn.7x9d.cn/xzc2.php?ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA2LjAuMC4wIFNhZmFyaS81MzcuMzY=&hls=aHR0cDovL3d3dy5kc2suY2MvcGhwL3N4Z2QucGhwP2lkPWdzd3M=
+#EXTINF:-1 tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/甘肃卫视.png" group-title="📡卫视频道",甘肃卫视
+http://222.212.84.190:54123/udp/239.93.0.81:5140
+#EXTINF:-1 tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/甘肃卫视.png" group-title="📡卫视频道",甘肃卫视
+http://live.zohi.tv/video/s10001-fztv-3/index.m3u8
+#EXTINF:-1 tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/甘肃卫视.png" group-title="📡卫视频道",甘肃卫视
+http://z.b.bkpcp.top/m.php?id=gsws
+#EXTINF:-1 tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/甘肃卫视.png" group-title="📡卫视频道",甘肃卫视
+http://j.x.bkpcp.top/jx/GSWS
+#EXTINF:-1 tvg-name="甘肃卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/甘肃卫视.png" group-title="📡卫视频道",甘肃卫视
+http://[2409:8087:74f0:22::5]:6410/270000001128/9900000023/index.m3u8
+#EXTINF:-1 tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广西卫视.png" group-title="📡卫视频道",广西卫视
+http://39.164.180.36:19901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广西卫视.png" group-title="📡卫视频道",广西卫视
+http://123.160.232.254:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广西卫视.png" group-title="📡卫视频道",广西卫视
+http://117.12.149.38:4022/rtp/225.1.2.81:5002
+#EXTINF:-1 tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广西卫视.png" group-title="📡卫视频道",广西卫视
+http://222.134.245.16:9901/tsfile/live/0113_1.m3u8
+#EXTINF:-1 tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广西卫视.png" group-title="📡卫视频道",广西卫视
+http://b.zgjok.com:35455/nptv/guangxi.m3u8
+#EXTINF:-1 tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广西卫视.png" group-title="📡卫视频道",广西卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227010/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkAhb-89sxdm9fz6-heXCuw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广西卫视.png" group-title="📡卫视频道",广西卫视
+http://z.b.bkpcp.top/m.php?id=gxws
+#EXTINF:-1 tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广西卫视.png" group-title="📡卫视频道",广西卫视
+https://mobilelive.gxtv.cn/live/gx_live1004/playlist.m3u8
+#EXTINF:-1 tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广西卫视.png" group-title="📡卫视频道",广西卫视
+http://live.cztv.cc:85/live/ggpd.m3u8
+#EXTINF:-1 tvg-name="广西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广西卫视.png" group-title="📡卫视频道",广西卫视
+http://[2409:8087:74f0:22::7]:6410/270000001128/9900000034/index.m3u8
+#EXTINF:-1 tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/贵州卫视.png" group-title="📡卫视频道",贵州卫视
+http://39.164.180.36:19901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/贵州卫视.png" group-title="📡卫视频道",贵州卫视
+http://60.26.181.220:4022/rtp/225.1.2.28:5002
+#EXTINF:-1 tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/贵州卫视.png" group-title="📡卫视频道",贵州卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227012/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EnqBF03rFwPucF8ODtWxLQQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/贵州卫视.png" group-title="📡卫视频道",贵州卫视
+http://z.b.bkpcp.top/m.php?id=gzws
+#EXTINF:-1 tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/贵州卫视.png" group-title="📡卫视频道",贵州卫视
+http://j.x.bkpcp.top/jx/GUIZHD
+#EXTINF:-1 tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/贵州卫视.png" group-title="📡卫视频道",贵州卫视
+http://[2409:8087:74f0:22::7]:6410/270000001128/9900000036/index.m3u8
+#EXTINF:-1 tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/贵州卫视.png" group-title="📡卫视频道",贵州卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8
+#EXTINF:-1 tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/贵州卫视.png" group-title="📡卫视频道",贵州卫视
+http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010100/1.m3u8
+#EXTINF:-1 tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/贵州卫视.png" group-title="📡卫视频道",贵州卫视
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225728/2/index.m3u8
+#EXTINF:-1 tvg-name="贵州卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/贵州卫视.png" group-title="📡卫视频道",贵州卫视
+http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225974/main.m3u8
+#EXTINF:-1 tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南卫视.png" group-title="📡卫视频道",海南卫视
+http://php.cqshushu.ggff.net/jzb.php?id=hainws&公众号【医工学习日志】
+#EXTINF:-1 tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南卫视.png" group-title="📡卫视频道",海南卫视
+http://web9916.w.computerqwq.cf/jzb.php?id=hainws&公众号【医工学习日志】
+#EXTINF:-1 tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南卫视.png" group-title="📡卫视频道",海南卫视
+http://nn.7x9d.cn/地方台8563/海南.php?id=hnws
+#EXTINF:-1 tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南卫视.png" group-title="📡卫视频道",海南卫视
+http://z.b.bkpcp.top/m.php?id=hinws
+#EXTINF:-1 tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南卫视.png" group-title="📡卫视频道",海南卫视
+http://j.x.bkpcp.top/jx/HAINHD
+#EXTINF:-1 tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南卫视.png" group-title="📡卫视频道",海南卫视
+http://[2409:8087:74f0:22::7]:6410/270000001128/9900000037/index.m3u8
+#EXTINF:-1 tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南卫视.png" group-title="📡卫视频道",海南卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8
+#EXTINF:-1 tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南卫视.png" group-title="📡卫视频道",海南卫视
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225722/2/index.m3u8
+#EXTINF:-1 tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南卫视.png" group-title="📡卫视频道",海南卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226465/index.m3u8
+#EXTINF:-1 tvg-name="海南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南卫视.png" group-title="📡卫视频道",海南卫视
+http://[2409:8087:2001:20:2800:0:df6e:eb08]/wh7f454c46tw2843123663_1489055229/ott.mobaibox.com/PLTV/3/224/3221228139/index.m3u8?icpid=3&RTS=1669701444&from=40&popid=40&hms_devid=2037&prioritypopid=40&vqe=3
+#EXTINF:-1 tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河北卫视.png" group-title="📡卫视频道",河北卫视
+http://39.164.180.36:19901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河北卫视.png" group-title="📡卫视频道",河北卫视
+http://27.18.157.225:2701/rtp/239.254.96.113:9616
+#EXTINF:-1 tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河北卫视.png" group-title="📡卫视频道",河北卫视
+http://b.zgjok.com:35455/nptv/hebei.m3u8
+#EXTINF:-1 tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河北卫视.png" group-title="📡卫视频道",河北卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227014/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErSGjhI3DMaaAASPrbQJYTg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河北卫视.png" group-title="📡卫视频道",河北卫视
+http://z.b.bkpcp.top/m.php?id=hbws
+#EXTINF:-1 tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河北卫视.png" group-title="📡卫视频道",河北卫视
+https://jwplay.hebyun.com.cn/live/hbwstv/1500k/tzwj_video.m3u8
+#EXTINF:-1 tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河北卫视.png" group-title="📡卫视频道",河北卫视
+http://[2409:8087:74f0:22::7]:6410/270000001128/9900000057/index.m3u8
+#EXTINF:-1 tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河北卫视.png" group-title="📡卫视频道",河北卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8
+#EXTINF:-1 tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河北卫视.png" group-title="📡卫视频道",河北卫视
+http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010101/1.m3u8
+#EXTINF:-1 tvg-name="河北卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河北卫视.png" group-title="📡卫视频道",河北卫视
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225732/2/index.m3u8
+#EXTINF:-1 tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河南卫视.png" group-title="📡卫视频道",河南卫视
+http://150.158.10.195:80/dxxw.php
+#EXTINF:-1 tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河南卫视.png" group-title="📡卫视频道",河南卫视
+http://lxajh.top/tv/hn.php?id=hnws
+#EXTINF:-1 tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河南卫视.png" group-title="📡卫视频道",河南卫视
+http://1.94.31.214/php/hntv.php
+#EXTINF:-1 tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河南卫视.png" group-title="📡卫视频道",河南卫视
+http://xxwx.yoesun.com/xxw/河南网.php?id=hnws
+#EXTINF:-1 tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河南卫视.png" group-title="📡卫视频道",河南卫视
+http://123.160.232.254:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河南卫视.png" group-title="📡卫视频道",河南卫视
+http://tvpull.dxhmt.cn:9081/tv/11425-1.m3u8
+#EXTINF:-1 tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河南卫视.png" group-title="📡卫视频道",河南卫视
+http://z.b.bkpcp.top/m.php?id=hnws
+#EXTINF:-1 tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河南卫视.png" group-title="📡卫视频道",河南卫视
+http://j.x.bkpcp.top/jx/HENHD
+#EXTINF:-1 tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河南卫视.png" group-title="📡卫视频道",河南卫视
+http://[2409:8087:74f0:22::7]:6410/270000001128/9900000027/index.m3u8
+#EXTINF:-1 tvg-name="河南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河南卫视.png" group-title="📡卫视频道",河南卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8
+#EXTINF:-1 tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/吉林卫视.png" group-title="📡卫视频道",吉林卫视
+http://39.164.180.36:19901/tsfile/live/0116_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/吉林卫视.png" group-title="📡卫视频道",吉林卫视
+http://php.cqshushu.ggff.net/jzb.php?id=jlws&公众号【医工学习日志】
+#EXTINF:-1 tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/吉林卫视.png" group-title="📡卫视频道",吉林卫视
+http://web9916.w.computerqwq.cf/jzb.php?id=jlws&公众号【医工学习日志】
+#EXTINF:-1 tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/吉林卫视.png" group-title="📡卫视频道",吉林卫视
+http://60.26.181.220:4022/rtp/225.1.2.26:5002
+#EXTINF:-1 tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/吉林卫视.png" group-title="📡卫视频道",吉林卫视
+http://180.165.29.204:4022/rtp/239.45.0.6:5140
+#EXTINF:-1 tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/吉林卫视.png" group-title="📡卫视频道",吉林卫视
+http://fxgm.fxjf.work:19901/tsfile/live/0116_1.m3u8
+#EXTINF:-1 tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/吉林卫视.png" group-title="📡卫视频道",吉林卫视
+http://b.zgjok.com:35455/nptv/jiling.m3u8
+#EXTINF:-1 tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/吉林卫视.png" group-title="📡卫视频道",吉林卫视
+http://z.b.bkpcp.top/m.php?id=jlws
+#EXTINF:-1 tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/吉林卫视.png" group-title="📡卫视频道",吉林卫视
+http://j.x.bkpcp.top/jx/JILHD
+#EXTINF:-1 tvg-name="吉林卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/吉林卫视.png" group-title="📡卫视频道",吉林卫视
+http://[2409:8087:74f0:22::5]:6410/270000001128/9900000030/index.m3u8
+#EXTINF:-1 tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江苏卫视.png" group-title="📡卫视频道",江苏卫视
+http://39.164.180.36:19901/tsfile/live/0127_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江苏卫视.png" group-title="📡卫视频道",江苏卫视
+http://114.238.59.148:4000/rtp/239.49.8.16:9602
+#EXTINF:-1 tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江苏卫视.png" group-title="📡卫视频道",江苏卫视
+http://117.12.149.38:4022/rtp/225.1.1.126:5002
+#EXTINF:-1 tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江苏卫视.png" group-title="📡卫视频道",江苏卫视
+http://222.169.85.8:9901/tsfile/live/0127_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江苏卫视.png" group-title="📡卫视频道",江苏卫视
+http://101.74.30.190:9901/tsfile/live/0127_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江苏卫视.png" group-title="📡卫视频道",江苏卫视
+http://fxgm.fxjf.work:19901/tsfile/live/0127_1.m3u8
+#EXTINF:-1 tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江苏卫视.png" group-title="📡卫视频道",江苏卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226897/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0BmO6uHF7WFoTed__Xr3NQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江苏卫视.png" group-title="📡卫视频道",江苏卫视
+http://z.b.bkpcp.top/m.php?id=jsws
+#EXTINF:-1 tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江苏卫视.png" group-title="📡卫视频道",江苏卫视
+http://[2409:8087:74f0:22::6]:6410/270000001128/9900000524/index.m3u8
+#EXTINF:-1 tvg-name="江苏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江苏卫视.png" group-title="📡卫视频道",江苏卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8
+#EXTINF:-1 tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江西卫视.png" group-title="📡卫视频道",江西卫视
+http://39.164.180.36:19901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江西卫视.png" group-title="📡卫视频道",江西卫视
+http://112.30.73.119:9902/tsfile/live/0138_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江西卫视.png" group-title="📡卫视频道",江西卫视
+http://123.160.232.254:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江西卫视.png" group-title="📡卫视频道",江西卫视
+http://117.12.149.38:4022/rtp/225.1.2.29:5002
+#EXTINF:-1 tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江西卫视.png" group-title="📡卫视频道",江西卫视
+http://60.26.181.220:4022/rtp/225.1.2.29:5002
+#EXTINF:-1 tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江西卫视.png" group-title="📡卫视频道",江西卫视
+http://222.169.85.8:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江西卫视.png" group-title="📡卫视频道",江西卫视
+http://nas.hssvm.com:8888/udp/225.1.2.29:5002
+#EXTINF:-1 tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江西卫视.png" group-title="📡卫视频道",江西卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226956/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ei6ZIpVizXlewg-YfGvH8dA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江西卫视.png" group-title="📡卫视频道",江西卫视
+http://z.b.bkpcp.top/m.php?id=jxws
+#EXTINF:-1 tvg-name="江西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江西卫视.png" group-title="📡卫视频道",江西卫视
+http://[2409:8087:74f0:22::4]:6610/270000001128/9900000525/index.m3u8
+#EXTINF:-1 tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/辽宁卫视.png" group-title="📡卫视频道",辽宁卫视
+http://39.164.180.36:19901/tsfile/live/0121_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/辽宁卫视.png" group-title="📡卫视频道",辽宁卫视
+http://123.160.232.254:9901/tsfile/live/0121_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/辽宁卫视.png" group-title="📡卫视频道",辽宁卫视
+http://60.26.181.220:4022/rtp/225.1.1.154:5002
+#EXTINF:-1 tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/辽宁卫视.png" group-title="📡卫视频道",辽宁卫视
+http://z.b.bkpcp.top/m.php?id=lnws
+#EXTINF:-1 tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/辽宁卫视.png" group-title="📡卫视频道",辽宁卫视
+http://j.x.bkpcp.top/jx/LIAONHD
+#EXTINF:-1 tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/辽宁卫视.png" group-title="📡卫视频道",辽宁卫视
+http://[2409:8087:74f0:22::7]:6410/270000001128/9900000526/index.m3u8
+#EXTINF:-1 tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/辽宁卫视.png" group-title="📡卫视频道",辽宁卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.m3u8
+#EXTINF:-1 tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/辽宁卫视.png" group-title="📡卫视频道",辽宁卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.m3u8
+#EXTINF:-1 tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/辽宁卫视.png" group-title="📡卫视频道",辽宁卫视
+http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010061/1.m3u8
+#EXTINF:-1 tvg-name="辽宁卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/辽宁卫视.png" group-title="📡卫视频道",辽宁卫视
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225735/2/index.m3u8
+#EXTINF:-1 tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/内蒙古卫视.png" group-title="📡卫视频道",内蒙古卫视
+https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8
+#EXTINF:-1 tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/内蒙古卫视.png" group-title="📡卫视频道",内蒙古卫视
+http://z.b.bkpcp.top/m.php?id=nmws
+#EXTINF:-1 tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/内蒙古卫视.png" group-title="📡卫视频道",内蒙古卫视
+http://j.x.bkpcp.top/jx/NMGWS
+#EXTINF:-1 tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/内蒙古卫视.png" group-title="📡卫视频道",内蒙古卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8
+#EXTINF:-1 tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/内蒙古卫视.png" group-title="📡卫视频道",内蒙古卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226389/index.m3u8
+#EXTINF:-1 tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/内蒙古卫视.png" group-title="📡卫视频道",内蒙古卫视
+http://[2409:8087:1a01:df::401a]:80/wh7f454c46tw3029083262_-802204014/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8?icpid=88888888&RTS=1713969858&from=4&hms_devid=128&prioritypopid=4&online=1713969858&vqe=3
+#EXTINF:-1 tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/内蒙古卫视.png" group-title="📡卫视频道",内蒙古卫视
+http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000319/index.m3u8?IAS
+#EXTINF:-1 tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/内蒙古卫视.png" group-title="📡卫视频道",内蒙古卫视
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001068/index.m3u8
+#EXTINF:-1 tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/内蒙古卫视.png" group-title="📡卫视频道",内蒙古卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227244/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="内蒙古卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/内蒙古卫视.png" group-title="📡卫视频道",内蒙古卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221225846/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宁夏卫视.png" group-title="📡卫视频道",宁夏卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227003/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ESco1zinvdUYzleEkXYhIvA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宁夏卫视.png" group-title="📡卫视频道",宁夏卫视
+http://z.b.bkpcp.top/m.php?id=nxws
+#EXTINF:-1 tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宁夏卫视.png" group-title="📡卫视频道",宁夏卫视
+http://j.x.bkpcp.top/jx/NXWS
+#EXTINF:-1 tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宁夏卫视.png" group-title="📡卫视频道",宁夏卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225632/index.m3u8
+#EXTINF:-1 tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宁夏卫视.png" group-title="📡卫视频道",宁夏卫视
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225726/2/index.m3u8
+#EXTINF:-1 tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宁夏卫视.png" group-title="📡卫视频道",宁夏卫视
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/8/3221226454/index.m3u8
+#EXTINF:-1 tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宁夏卫视.png" group-title="📡卫视频道",宁夏卫视
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226454/index.m3u8
+#EXTINF:-1 tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宁夏卫视.png" group-title="📡卫视频道",宁夏卫视
+http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000309/index.m3u8?IAS
+#EXTINF:-1 tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宁夏卫视.png" group-title="📡卫视频道",宁夏卫视
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001074/index.m3u8
+#EXTINF:-1 tvg-name="宁夏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宁夏卫视.png" group-title="📡卫视频道",宁夏卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227254/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/青海卫视.png" group-title="📡卫视频道",青海卫视
+http://39.164.180.36:19901/tsfile/live/0140_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/青海卫视.png" group-title="📡卫视频道",青海卫视
+http://123.160.232.254:9901/tsfile/live/0140_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/青海卫视.png" group-title="📡卫视频道",青海卫视
+http://b.zgjok.com:35455/nptv/qinghai.m3u8
+#EXTINF:-1 tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/青海卫视.png" group-title="📡卫视频道",青海卫视
+http://qjrhc.jydjd.top:2911/udp/224.1.100.127:11111
+#EXTINF:-1 tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/青海卫视.png" group-title="📡卫视频道",青海卫视
+http://z.b.bkpcp.top/m.php?id=qhws
+#EXTINF:-1 tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/青海卫视.png" group-title="📡卫视频道",青海卫视
+http://j.x.bkpcp.top/jx/QHWS
+#EXTINF:-1 tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/青海卫视.png" group-title="📡卫视频道",青海卫视
+http://[2409:8087:74f0:22::5]:6410/270000001128/9900000042/index.m3u8
+#EXTINF:-1 tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/青海卫视.png" group-title="📡卫视频道",青海卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225628/index.m3u8
+#EXTINF:-1 tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/青海卫视.png" group-title="📡卫视频道",青海卫视
+http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010111/1.m3u8
+#EXTINF:-1 tvg-name="青海卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/青海卫视.png" group-title="📡卫视频道",青海卫视
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225727/2/index.m3u8
+#EXTINF:-1 tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山东卫视.png" group-title="📡卫视频道",山东卫视
+http://39.164.180.36:19901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山东卫视.png" group-title="📡卫视频道",山东卫视
+http://123.160.232.254:9901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山东卫视.png" group-title="📡卫视频道",山东卫视
+http://l.cztvcloud.com/channels/lantian/SXshengzhou1/720p.m3u8
+#EXTINF:-1 tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山东卫视.png" group-title="📡卫视频道",山东卫视
+http://qjrhc.jydjd.top:2911/udp/224.1.100.50:11111
+#EXTINF:-1 tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山东卫视.png" group-title="📡卫视频道",山东卫视
+http://z.b.bkpcp.top/m.php?id=sdws
+#EXTINF:-1 tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山东卫视.png" group-title="📡卫视频道",山东卫视
+http://j.x.bkpcp.top/jx/SHANDHD
+#EXTINF:-1 tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山东卫视.png" group-title="📡卫视频道",山东卫视
+http://[2409:8087:74f0:22::5]:6410/270000001128/9900000527/index.m3u8
+#EXTINF:-1 tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山东卫视.png" group-title="📡卫视频道",山东卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8
+#EXTINF:-1 tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山东卫视.png" group-title="📡卫视频道",山东卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8
+#EXTINF:-1 tvg-name="山东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山东卫视.png" group-title="📡卫视频道",山东卫视
+http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010066/1.m3u8
+#EXTINF:-1 tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山西卫视.png" group-title="📡卫视频道",山西卫视
+http://39.164.180.36:19901/tsfile/live/0118_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山西卫视.png" group-title="📡卫视频道",山西卫视
+http://j.x.bkpcp.top/jx/SXWS
+#EXTINF:-1 tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山西卫视.png" group-title="📡卫视频道",山西卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225624/index.m3u8
+#EXTINF:-1 tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山西卫视.png" group-title="📡卫视频道",山西卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226531/1.m3u8
+#EXTINF:-1 tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山西卫视.png" group-title="📡卫视频道",山西卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226920/1.m3u8
+#EXTINF:-1 tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山西卫视.png" group-title="📡卫视频道",山西卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887413.m3u8
+#EXTINF:-1 tvg-name="山西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山西卫视.png" group-title="📡卫视频道",山西卫视
+http://m3u8.channel.wsrtv.com.cn/cms/videos/nmip-media/channellive/channel7/playlist.m3u8
+#EXTINF:-1 tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/陕西卫视.png" group-title="📡卫视频道",陕西卫视
+http://39.164.180.36:19901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/陕西卫视.png" group-title="📡卫视频道",陕西卫视
+http://i.880824.xyz:35455/mgtv/738910838.m3u8
+#EXTINF:-1 tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/陕西卫视.png" group-title="📡卫视频道",陕西卫视
+http://z.b.bkpcp.top/m.php?id=sxws
+#EXTINF:-1 tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/陕西卫视.png" group-title="📡卫视频道",陕西卫视
+http://gat.bkpcp.top/ymg.php?id=sxws
+#EXTINF:-1 tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/陕西卫视.png" group-title="📡卫视频道",陕西卫视
+http://hlsbkmgsplive.miguvideo.com/migu/kailu/shan3xiws/57/20220809/index.m3u8
+#EXTINF:-1 tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/陕西卫视.png" group-title="📡卫视频道",陕西卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225625/index.m3u8
+#EXTINF:-1 tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/陕西卫视.png" group-title="📡卫视频道",陕西卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226532/1.m3u8
+#EXTINF:-1 tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/陕西卫视.png" group-title="📡卫视频道",陕西卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226926/1.m3u8
+#EXTINF:-1 tvg-name="陕西卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/陕西卫视.png" group-title="📡卫视频道",陕西卫视
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887404.m3u8
+#EXTINF:-1 tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/四川卫视.png" group-title="📡卫视频道",四川卫视
+http://39.164.180.36:19901/tsfile/live/0123_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/四川卫视.png" group-title="📡卫视频道",四川卫视
+http://web9916.w.computerqwq.cf/jzb.php?id=scws&公众号【医工学习日志】
+#EXTINF:-1 tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/四川卫视.png" group-title="📡卫视频道",四川卫视
+http://php.cqshushu.ggff.net/jzb.php?id=scws&公众号【医工学习日志】
+#EXTINF:-1 tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/四川卫视.png" group-title="📡卫视频道",四川卫视
+http://60.26.181.220:4022/rtp/225.1.1.123:5002
+#EXTINF:-1 tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/四川卫视.png" group-title="📡卫视频道",四川卫视
+http://qjrhc.jydjd.top:2911/udp/224.1.100.72:11111
+#EXTINF:-1 tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/四川卫视.png" group-title="📡卫视频道",四川卫视
+http://b.zgjok.com:35455/nptv/sichuan.m3u8
+#EXTINF:-1 tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/四川卫视.png" group-title="📡卫视频道",四川卫视
+http://z.b.bkpcp.top/m.php?id=scws
+#EXTINF:-1 tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/四川卫视.png" group-title="📡卫视频道",四川卫视
+http://j.x.bkpcp.top/jx/SICHD
+#EXTINF:-1 tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/四川卫视.png" group-title="📡卫视频道",四川卫视
+http://[2409:8087:74f0:22::6]:6410/270000001128/9900000025/index.m3u8
+#EXTINF:-1 tvg-name="四川卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/四川卫视.png" group-title="📡卫视频道",四川卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="📡卫视频道",深圳卫视
+http://yncbn.ks-cdn.gitv.tv/gitv_live/G_SHENZHEN-HQ/G_SHENZHEN-HQ.m3u8
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="📡卫视频道",深圳卫视
+http://39.164.180.36:19901/tsfile/live/0125_2.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="📡卫视频道",深圳卫视
+http://123.160.232.254:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="📡卫视频道",深圳卫视
+http://114.238.59.148:4000/rtp/239.49.8.15:9430
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="📡卫视频道",深圳卫视
+http://qjrhc.jydjd.top:2911/udp/224.1.100.40:11111
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="📡卫视频道",深圳卫视
+http://b.zgjok.com:35455/nptv/shenzheng.m3u8
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="📡卫视频道",深圳卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="📡卫视频道",深圳卫视
+http://[2409:8087:74f0:22::5]:6410/270000001128/9900000529/index.m3u8
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="📡卫视频道",深圳卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="📡卫视频道",深圳卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8
+#EXTINF:-1 tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/三沙卫视.png" group-title="📡卫视频道",三沙卫视
+http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000117/1.m3u8
+#EXTINF:-1 tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/三沙卫视.png" group-title="📡卫视频道",三沙卫视
+http://[2409:8087:2001:20:2800:0:df6e:eb21]:80/ott.mobaibox.com/PLTV/4/224/3221228626/index.m3u8
+#EXTINF:-1 tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/三沙卫视.png" group-title="📡卫视频道",三沙卫视
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001185/index.m3u8
+#EXTINF:-1 tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/三沙卫视.png" group-title="📡卫视频道",三沙卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227172/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/三沙卫视.png" group-title="📡卫视频道",三沙卫视
+http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221227172/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/三沙卫视.png" group-title="📡卫视频道",三沙卫视
+http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?IAS
+#EXTINF:-1 tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/三沙卫视.png" group-title="📡卫视频道",三沙卫视
+http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8
+#EXTINF:-1 tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/三沙卫视.png" group-title="📡卫视频道",三沙卫视
+http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?fmmv6
+#EXTINF:-1 tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/三沙卫视.png" group-title="📡卫视频道",三沙卫视
+http://wouu.net:9977/udp/239.93.42.58:5140
+#EXTINF:-1 tvg-name="三沙卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/三沙卫视.png" group-title="📡卫视频道",三沙卫视
+https://live3.hnntv.cn/srs/tv/ssws.m3u8
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="📡卫视频道",天津卫视
+http://php.cqshushu.ggff.net/jzb.php?id=tjws&公众号【医工学习日志】
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="📡卫视频道",天津卫视
+http://web9916.w.computerqwq.cf/jzb.php?id=tjws&公众号【医工学习日志】
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="📡卫视频道",天津卫视
+http://39.164.180.36:19901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="📡卫视频道",天津卫视
+http://123.160.232.254:9901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="📡卫视频道",天津卫视
+http://60.26.181.220:4022/rtp/225.1.1.111:5002
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="📡卫视频道",天津卫视
+http://b.zgjok.com:35455/nptv/tianjing.m3u8
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="📡卫视频道",天津卫视
+http://j.x.bkpcp.top/jx/TIANJHD
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="📡卫视频道",天津卫视
+http://[2409:8087:74f0:22::6]:6410/270000001128/9900000530/index.m3u8
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="📡卫视频道",天津卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="📡卫视频道",天津卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8
+#EXTINF:-1 tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西藏卫视.png" group-title="📡卫视频道",西藏卫视
+http://xxwx.yoesun.com/xxw/西藏网.php
+#EXTINF:-1 tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西藏卫视.png" group-title="📡卫视频道",西藏卫视
+http://z.b.bkpcp.top/m.php?id=xzws
+#EXTINF:-1 tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西藏卫视.png" group-title="📡卫视频道",西藏卫视
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225723/2/index.m3u8
+#EXTINF:-1 tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西藏卫视.png" group-title="📡卫视频道",西藏卫视
+http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000317/index.m3u8?IAS
+#EXTINF:-1 tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西藏卫视.png" group-title="📡卫视频道",西藏卫视
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001072/index.m3u8
+#EXTINF:-1 tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西藏卫视.png" group-title="📡卫视频道",西藏卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221226847/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西藏卫视.png" group-title="📡卫视频道",西藏卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227217/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西藏卫视.png" group-title="📡卫视频道",西藏卫视
+http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221226847/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西藏卫视.png" group-title="📡卫视频道",西藏卫视
+http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221227217/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="西藏卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西藏卫视.png" group-title="📡卫视频道",西藏卫视
+http://[2409:8087:5e00:24::1e]:6060/000000001000/6603041244077933770/1.m3u8
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="📡卫视频道",新疆卫视
+http://z.b.bkpcp.top/m.php?id=xjws
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="📡卫视频道",新疆卫视
+http://j.x.bkpcp.top/jx/XJWS
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="📡卫视频道",新疆卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225635/index.m3u8
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="📡卫视频道",新疆卫视
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225725/2/index.m3u8
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="📡卫视频道",新疆卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226460/index.m3u8
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="📡卫视频道",新疆卫视
+http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225635/index.m3u8
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="📡卫视频道",新疆卫视
+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
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="📡卫视频道",新疆卫视
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001065/index.m3u8
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="📡卫视频道",新疆卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227248/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="📡卫视频道",新疆卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221225852/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/云南卫视.png" group-title="📡卫视频道",云南卫视
+http://39.164.180.36:19901/tsfile/live/0119_1.m3u8?key=txiptv&playlive=0&authid=0
+#EXTINF:-1 tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/云南卫视.png" group-title="📡卫视频道",云南卫视
+http://123.160.232.254:9901/tsfile/live/0119_1.m3u8?key=txiptv&playlive=1&authid=0
+#EXTINF:-1 tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/云南卫视.png" group-title="📡卫视频道",云南卫视
+http://qjrhc.jydjd.top:2911/udp/224.1.100.21:11111
+#EXTINF:-1 tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/云南卫视.png" group-title="📡卫视频道",云南卫视
+http://b.zgjok.com:35455/nptv/yunnan.m3u8
+#EXTINF:-1 tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/云南卫视.png" group-title="📡卫视频道",云南卫视
+http://z.b.bkpcp.top/m.php?id=ynws
+#EXTINF:-1 tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/云南卫视.png" group-title="📡卫视频道",云南卫视
+http://[2409:8087:74f0:22::7]:6410/270000001128/9900000035/index.m3u8
+#EXTINF:-1 tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/云南卫视.png" group-title="📡卫视频道",云南卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226444/index.m3u8
+#EXTINF:-1 tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/云南卫视.png" group-title="📡卫视频道",云南卫视
+http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010119/1.m3u8
+#EXTINF:-1 tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/云南卫视.png" group-title="📡卫视频道",云南卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226444/index.m3u8
+#EXTINF:-1 tvg-name="云南卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/云南卫视.png" group-title="📡卫视频道",云南卫视
+http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000305/index.m3u8?IAS
+#EXTINF:-1 tvg-name="广东珠江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东珠江.png" group-title="☘️广东频道",广东珠江
+http://cdn2.163189.xyz/live/gdzj/stream.m3u8
+#EXTINF:-1 tvg-name="广东珠江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东珠江.png" group-title="☘️广东频道",广东珠江
+http://cdn2.132.us.kg/live/gdzj/stream.m3u8
+#EXTINF:-1 tvg-name="广东珠江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东珠江.png" group-title="☘️广东频道",广东珠江
+http://lu.wqwqwq.sbs/itv/2000000003000000033.m3u8?cdn=hnbblive
+#EXTINF:-1 tvg-name="广东珠江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东珠江.png" group-title="☘️广东频道",广东珠江
+https://smart.pendy.dpdns.org/Smart.php
+#EXTINF:-1 tvg-name="广东珠江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东珠江.png" group-title="☘️广东频道",广东珠江
+https://tv.cdn.com.mp/live/gdzj/stream.m3u8
+#EXTINF:-1 tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东体育.png" group-title="☘️广东频道",广东体育
+http://cdn2.163189.xyz/live/gdty/stream.m3u8
+#EXTINF:-1 tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东体育.png" group-title="☘️广东频道",广东体育
+http://cdn2.132.us.kg/live/gdty/stream.m3u8
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="☘️广东频道",广东卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226961/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E2MGyx659D_aaDPP0qt3NgA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="☘️广东频道",广东卫视
+http://z.b.bkpcp.top/m.php?id=gdws
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="☘️广东频道",广东卫视
+http://j.x.bkpcp.top/jx/GUANGDHD
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="☘️广东频道",广东卫视
+http://[2409:8087:74f0:22::6]:6410/270000001128/9900000520/index.m3u8
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="☘️广东频道",广东卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="☘️广东频道",广东卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="☘️广东频道",广东卫视
+http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010055/1.m3u8
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="☘️广东频道",广东卫视
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225742/2/index.m3u8
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="☘️广东频道",广东卫视
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225701/index.m3u8
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东卫视.png" group-title="☘️广东频道",广东卫视
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8
+#EXTINF:-1 tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/大湾区卫视.png" group-title="☘️广东频道",大湾区卫视
+http://z.b.bkpcp.top/m.php?id=dwqws
+#EXTINF:-1 tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/大湾区卫视.png" group-title="☘️广东频道",大湾区卫视
+http://jp1.jdiptv.cc/live/nfws.m3u8?kdstime=
+#EXTINF:-1 tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/大湾区卫视.png" group-title="☘️广东频道",大湾区卫视
+http://[2409:8087:5e00:24::1e]:6060/000000001000/1000000002000011619/index.m3u8
+#EXTINF:-1 tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/大湾区卫视.png" group-title="☘️广东频道",大湾区卫视
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226442/index.m3u8
+#EXTINF:-1 tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/大湾区卫视.png" group-title="☘️广东频道",大湾区卫视
+http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226218/index.m3u8
+#EXTINF:-1 tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/大湾区卫视.png" group-title="☘️广东频道",大湾区卫视
+http://alvin.ergotron.net:8000/udp/239.77.0.215:5146
+#EXTINF:-1 tvg-name="大湾区卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/大湾区卫视.png" group-title="☘️广东频道",大湾区卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226540/1.m3u8
+#EXTINF:-1 tvg-name="广州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广州综合.png" group-title="☘️广东频道",广州综合
+http://php.666230.xyz/公众号【睡眼迷离的猫】/proxy/p10.php
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="☘️广东频道",深圳卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="☘️广东频道",深圳卫视
+http://[2409:8087:74f0:22::5]:6410/270000001128/9900000529/index.m3u8
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="☘️广东频道",深圳卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="☘️广东频道",深圳卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="☘️广东频道",深圳卫视
+http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010068/1.m3u8
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="☘️广东频道",深圳卫视
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226313/index.m3u8
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="☘️广东频道",深圳卫视
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="☘️广东频道",深圳卫视
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226313/index.m3u8
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="☘️广东频道",深圳卫视
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225598/2/index.m3u8
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/深圳卫视.png" group-title="☘️广东频道",深圳卫视
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225700/2/index.m3u8
+#EXTINF:-1 tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江钱江.png" group-title="☘️浙江频道",浙江钱江
+http://ali-m-l.cztv.com/channels/lantian/channel02/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江钱江.png" group-title="☘️浙江频道",浙江钱江
+http://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江钱江.png" group-title="☘️浙江频道",浙江钱江
+http://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8?zzhed
+#EXTINF:-1 tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江钱江.png" group-title="☘️浙江频道",浙江钱江
+http://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8?fbl=
+#EXTINF:-1 tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江钱江.png" group-title="☘️浙江频道",浙江钱江
+https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江钱江.png" group-title="☘️浙江频道",浙江钱江
+http://l.cztvcloud.com/channels/lantian/SXyuyao2/720p.m3u8
+#EXTINF:-1 tvg-name="浙江钱江" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江钱江.png" group-title="☘️浙江频道",浙江钱江
+http://ali-m-l.cztv.com/channels/lantian/channel002/720p.m3u8
+#EXTINF:-1 tvg-name="浙江钱江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江钱江都市.png" group-title="☘️浙江频道",浙江钱江都市
+https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江钱江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江钱江都市.png" group-title="☘️浙江频道",浙江钱江都市
+http://zwebl02.cztv.com/live/channel021080P.m3u8?auth_key=2524708799-0-0-43f14b8147c890428975655007afb4cc
+#EXTINF:-1 tvg-name="浙江生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江生活.png" group-title="☘️浙江频道",浙江生活
+https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江经济生活.png" group-title="☘️浙江频道",浙江经济生活
+https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江经济生活.png" group-title="☘️浙江频道",浙江经济生活
+http://ali-m-l.cztv.com/channels/lantian/channel03/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江经济生活.png" group-title="☘️浙江频道",浙江经济生活
+http://l.cztvcloud.com/channels/lantian/SXxiaoshan2/720p.m3u8
+#EXTINF:-1 tvg-name="浙江经济生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江经济生活.png" group-title="☘️浙江频道",浙江经济生活
+http://zwebl02.cztv.com/live/channel031080P.m3u8?auth_key=2524708799-0-0-cc09266f8e043a6df28eb148cb488d37
+#EXTINF:-1 tvg-name="浙江教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江教育.png" group-title="☘️浙江频道",浙江教育
+https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江教育.png" group-title="☘️浙江频道",浙江教育
+http://ali-m-l.cztv.com/channels/lantian/channel04/720p.m3u8
+#EXTINF:-1 tvg-name="浙江民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江民生.png" group-title="☘️浙江频道",浙江民生
+https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江民生.png" group-title="☘️浙江频道",浙江民生
+http://ali-m-l.cztv.com/channels/lantian/channel06/720p.m3u8
+#EXTINF:-1 tvg-name="浙江新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江新闻.png" group-title="☘️浙江频道",浙江新闻
+http://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8?zzhed
+#EXTINF:-1 tvg-name="浙江新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江新闻.png" group-title="☘️浙江频道",浙江新闻
+http://ali-m-l.cztv.com/channels/lantian/channel007/720p.m3u8
+#EXTINF:-1 tvg-name="浙江新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江新闻.png" group-title="☘️浙江频道",浙江新闻
+http://ali-m-l.cztv.com/channels/lantian/channel07/720p.m3u8
+#EXTINF:-1 tvg-name="浙江新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江新闻.png" group-title="☘️浙江频道",浙江新闻
+https://ali-m-l.cztv.com/channels/lantian/channel07/720p.m3u8
+#EXTINF:-1 tvg-name="浙江新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江新闻.png" group-title="☘️浙江频道",浙江新闻
+http://zwebl02.cztv.com/live/channel071080P.m3u8?auth_key=2524708799-0-0-e3b50ca59d2c0883d5386d8bc4cdefbc
+#EXTINF:-1 tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江少儿.png" group-title="☘️浙江频道",浙江少儿
+https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江少儿.png" group-title="☘️浙江频道",浙江少儿
+http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江少儿.png" group-title="☘️浙江频道",浙江少儿
+http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8?fbl=
+#EXTINF:-1 tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江少儿.png" group-title="☘️浙江频道",浙江少儿
+https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8?#https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8#http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江教科" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江教科.png" group-title="☘️浙江频道",浙江教科
+http://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江经济.png" group-title="☘️浙江频道",浙江经济
+http://ali-m-l.cztv.com/channels/lantian/channel03/720p.m3u8
+#EXTINF:-1 tvg-name="浙江经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江经济.png" group-title="☘️浙江频道",浙江经济
+http://zwebl02.cztv.com/live/channel031080P.m3u8?auth_key=2524708799-0-0-cc09266f8e043a6df28eb148cb488d37
+#EXTINF:-1 tvg-name="之江纪录" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/之江纪录.png" group-title="☘️浙江频道",之江纪录
+http://ali-m-l.cztv.com/channels/lantian/channel12/1080p.m3u8
+#EXTINF:-1 tvg-name="之江纪录" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/之江纪录.png" group-title="☘️浙江频道",之江纪录
+https://ali-m-l.cztv.com/channels/lantian/channel12/720p.m3u8
+#EXTINF:-1 tvg-name="之江纪录" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/之江纪录.png" group-title="☘️浙江频道",之江纪录
+http://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8
+#EXTINF:-1 tvg-name="之江纪录" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/之江纪录.png" group-title="☘️浙江频道",之江纪录
+https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8
+#EXTINF:-1 tvg-name="之江纪录" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/之江纪录.png" group-title="☘️浙江频道",之江纪录
+http://zwebl02.cztv.com/live/channel121080P.m3u8?auth_key=2524708799-0-0-c33efdd495bcdd2ddc42e7c408405037
+#EXTINF:-1 tvg-name="浙江国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江国际.png" group-title="☘️浙江频道",浙江国际
+https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江国际.png" group-title="☘️浙江频道",浙江国际
+http://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8?zzhed
+#EXTINF:-1 tvg-name="浙江国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江国际.png" group-title="☘️浙江频道",浙江国际
+http://ali-m-l.cztv.com/channels/lantian/channel010/720p.m3u8
+#EXTINF:-1 tvg-name="浙江国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江国际.png" group-title="☘️浙江频道",浙江国际
+http://zwebl02.cztv.com/live/channel101080P.m3u8?auth_key=2524708799-0-0-c9473fea1da3eff0f29f4c9cf2b36519
+#EXTINF:-1 tvg-name="嘉兴新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/嘉兴新闻综合.png" group-title="☘️浙江频道",嘉兴新闻综合
+http://tvfile.jyrmt.cn:80/nmip-media/channellive/channel104452/playlist.m3u8
+#EXTINF:-1 tvg-name="嘉兴新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/嘉兴新闻综合.png" group-title="☘️浙江频道",嘉兴新闻综合
+http://live.zohi.tv/video/s10001-fztv-1/index.m3u8
+#EXTINF:-1 tvg-name="嘉兴公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/嘉兴公共.png" group-title="☘️浙江频道",嘉兴公共
+http://play-sh13.quklive.com/live/1675149601192103.m3u8?auth_key=2028730429-9ab7f7f0267946e880ec46ce3d57ec9e-0-eb04d7f7e549054293604b04150cefa1
+#EXTINF:-1 tvg-name="舟山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/舟山新闻综合.png" group-title="☘️浙江频道",舟山新闻综合
+http://play-sh13.quklive.com/live/1699001836208185.m3u8?auth_key=2027429324-c77bb6a7063c4cdea57f09ca22f9ef12-0-39c19a21f73b823db2150ea45b147eb2
+#EXTINF:-1 tvg-name="舟山公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/舟山公共.png" group-title="☘️浙江频道",舟山公共
+http://play-sh13.quklive.com/live/1699002430299200.m3u8?auth_key=2027429366-f4515e585a0347f780a01c73ae293945-0-b3699e931cf04290680745e989c63d86
+#EXTINF:-1 tvg-name="浙江民生休闲" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江民生休闲.png" group-title="☘️浙江频道",浙江民生休闲
+https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江民生休闲" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江民生休闲.png" group-title="☘️浙江频道",浙江民生休闲
+http://ali-m-l.cztv.com/channels/lantian/channel06/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江数码时代" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江数码时代.png" group-title="☘️浙江频道",浙江数码时代
+http://ali-m-l.cztv.com/channels/lantian/channel12/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="浙江数码时代" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江数码时代.png" group-title="☘️浙江频道",浙江数码时代
+https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8\r\n
+#EXTINF:-1 tvg-name="浙江教科影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江教科影院.png" group-title="☘️浙江频道",浙江教科影院
+http://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8?zzhed
+#EXTINF:-1 tvg-name="浙江教科影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江教科影视.png" group-title="☘️浙江频道",浙江教科影视
+https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江教科影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江教科影视.png" group-title="☘️浙江频道",浙江教科影视
+http://ali-m-l.cztv.com/channels/lantian/channel04/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江教科影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江教科影视.png" group-title="☘️浙江频道",浙江教科影视
+http://zwebl02.cztv.com/live/channel041080P.m3u8?auth_key=2524708799-0-0-f195b808217db133bfd648edc01e91fa
+#EXTINF:-1 tvg-name="浙江公共新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江公共新闻.png" group-title="☘️浙江频道",浙江公共新闻
+http://ali-m-l.cztv.com/channels/lantian/channel07/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江休闲台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江休闲台.png" group-title="☘️浙江频道",浙江休闲台
+http://ali-m-l.cztv.com/channels/lantian/channel006/720p.m3u8
+#EXTINF:-1 tvg-name="诸暨新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/诸暨新闻综合.png" group-title="☘️浙江频道",诸暨新闻综合
+http://l.cztvcloud.com/channels/lantian/SXzhuji3/720p.m3u8
+#EXTINF:-1 tvg-name="诸暨新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/诸暨新闻综合.png" group-title="☘️浙江频道",诸暨新闻综合
+http://l.cztvcloud.com/channels/lantian/SXzhuji3/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="诸暨新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/诸暨新闻综合.png" group-title="☘️浙江频道",诸暨新闻综合
+http://l.cztvcloud.com/channels/lantian/SXzhuji3/720p.m3u8?zzhed#EXTINF:-1%20group-title=%22%E2%80%A2%E9%9F%B3%E4%B9%90%22,%E9%9F%B3%E4%B9%90%E7%9F%B3%E6%A6%B4
+#EXTINF:-1 tvg-name="诸暨新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/诸暨新闻综合.png" group-title="☘️浙江频道",诸暨新闻综合
+https://l.cztvcloud.com/channels/lantian/SXzhuji3/720p.m3u8
+#EXTINF:-1 tvg-name="龙游生活娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/龙游生活娱乐.png" group-title="☘️浙江频道",龙游生活娱乐
+http://l.cztvcloud.com/channels/lantian/SXlongyou2/720p.m3u8
+#EXTINF:-1 tvg-name="龙游生活娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/龙游生活娱乐.png" group-title="☘️浙江频道",龙游生活娱乐
+https://l.cztvcloud.com/channels/lantian/SXlongyou2/720p.m3u8
+#EXTINF:-1 tvg-name="龙游新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/龙游新闻综合.png" group-title="☘️浙江频道",龙游新闻综合
+https://l.cztvcloud.com/channels/lantian/SXlongyou1/720p.m3u8
+#EXTINF:-1 tvg-name="龙游新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/龙游新闻综合.png" group-title="☘️浙江频道",龙游新闻综合
+http://l.cztvcloud.com/channels/lantian/SXlongyou1/720p.m3u8
+#EXTINF:-1 tvg-name="龙游新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/龙游新闻综合.png" group-title="☘️浙江频道",龙游新闻综合
+http://play-sh13.quklive.com/live/1703570877483349.m3u8?auth_key=2028414694-515206b2ec504fa3bc90bb1ec3b0c48e-0-eeeeb3d5a8f8e5415142bf430b916d79
+#EXTINF:-1 tvg-name="龙泉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/龙泉新闻综合.png" group-title="☘️浙江频道",龙泉新闻综合
+http://l.cztvcloud.com/channels/lantian/SXlongquan1/720p.m3u8?zzhed"
+#EXTINF:-1 tvg-name="龙泉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/龙泉新闻综合.png" group-title="☘️浙江频道",龙泉新闻综合
+http://l.cztvcloud.com/channels/lantian/SXlongquan1/720p.m3u8
+#EXTINF:-1 tvg-name="象山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/象山综合.png" group-title="☘️浙江频道",象山综合
+http://l.cztvcloud.com/channels/lantian/SXxiangshan1/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="象山电视台新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/象山电视台新闻综合.png" group-title="☘️浙江频道",象山电视台新闻综合
+http://play-sh13.quklive.com/live/1702360350551252.m3u8?auth_key=2037107484-800189c57a5a44d3b823b60cf84f6756-0-a6f6828a62d5c167cff5e68735fa0d39
+#EXTINF:-1 tvg-name="象山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/象山新闻综合.png" group-title="☘️浙江频道",象山新闻综合
+http://l.cztvcloud.com/channels/lantian/SXxiangshan1/720p.m3u8
+#EXTINF:-1 tvg-name="衢江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/衢江新闻综合.png" group-title="☘️浙江频道",衢江新闻综合
+http://l.cztvcloud.com/channels/lantian/SXqujiang1/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="衢江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/衢江新闻综合.png" group-title="☘️浙江频道",衢江新闻综合
+http://l.cztvcloud.com/channels/lantian/SXqujiang1/720p.m3u8?zzhed;http://l.cztvcloud.com/channels/lantian/SXqujiang1/720p.m3u8zzhed;http://l.cztvcloud.com/channels/lantian/SXqujiang1/720p.m3u8
+#EXTINF:-1 tvg-name="萧山生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/萧山生活.png" group-title="☘️浙江频道",萧山生活
+http://l.cztvcloud.com/channels/lantian/SXxiaoshan2/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="萧山生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/萧山生活.png" group-title="☘️浙江频道",萧山生活
+https://l.cztvcloud.com/channels/lantian/SXxiaoshan2/720p.m3u8
+#EXTINF:-1 tvg-name="萧山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/萧山新闻综合.png" group-title="☘️浙江频道",萧山新闻综合
+http://l.cztvcloud.com/channels/lantian/SXxiaoshan1/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="萧山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/萧山新闻综合.png" group-title="☘️浙江频道",萧山新闻综合
+http://l.cztvcloud.com/channels/lantian/SXxiaoshan1/720p.m3u8
+#EXTINF:-1 tvg-name="萧山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/萧山新闻综合.png" group-title="☘️浙江频道",萧山新闻综合
+https://l.cztvcloud.com/channels/lantian/SXxiaoshan1/720p.m3u8
+#EXTINF:-1 tvg-name="苍南新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/苍南新闻综合.png" group-title="☘️浙江频道",苍南新闻综合
+https://l.cztvcloud.com/channels/lantian/SXcangnan1/720p.m3u8
+#EXTINF:-1 tvg-name="苍南新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/苍南新闻综合.png" group-title="☘️浙江频道",苍南新闻综合
+http://l.cztvcloud.com/channels/lantian/SXcangnan1/720p.m3u8?zzhed;http://l.cztvcloud.com/channels/lantian/SXcangnan1/720p.m3u8;http://l.cztvcloud.com/channels/lantian/SXcangnan1/720p.m3u8zzhed
+#EXTINF:-1 tvg-name="苍南新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/苍南新闻综合.png" group-title="☘️浙江频道",苍南新闻综合
+http://l.cztvcloud.com/channels/lantian/SXcangnan1/720p.m3u8
+#EXTINF:-1 tvg-name="缙云综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/缙云综合.png" group-title="☘️浙江频道",缙云综合
+http://l.cztvcloud.com/channels/lantian/SXjinyun1/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="缙云综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/缙云综合.png" group-title="☘️浙江频道",缙云综合
+http://l.cztvcloud.com/channels/lantian/SXjinyun1/720p.m3u8?zzhed"
+#EXTINF:-1 tvg-name="缙云新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/缙云新闻综合.png" group-title="☘️浙江频道",缙云新闻综合
+http://l.cztvcloud.com/channels/lantian/SXjinyun1/720p.m3u8
+#EXTINF:-1 tvg-name="海宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海宁新闻综合.png" group-title="☘️浙江频道",海宁新闻综合
+https://p2hs.vzan.com/slowlive/317913155078575177/live.m3u8?zbid=293304&tpid=1708007815
+#EXTINF:-1 tvg-name="永嘉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/永嘉新闻综合.png" group-title="☘️浙江频道",永嘉新闻综合
+http://l.cztvcloud.com/channels/lantian/SXyongjia1/720p.m3u8?zzhed"
+#EXTINF:-1 tvg-name="永嘉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/永嘉新闻综合.png" group-title="☘️浙江频道",永嘉新闻综合
+http://l.cztvcloud.com/channels/lantian/SXyongjia1/720p.m3u8
+#EXTINF:-1 tvg-name="永嘉新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/永嘉新闻综合.png" group-title="☘️浙江频道",永嘉新闻综合
+http://l.cztvcloud.com/channels/lantian/SXyongjia1/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="松阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/松阳综合.png" group-title="☘️浙江频道",松阳综合
+http://l.cztvcloud.com/channels/lantian/SXsongyang1/720p.m3u8
+#EXTINF:-1 tvg-name="松阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/松阳综合.png" group-title="☘️浙江频道",松阳综合
+http://l.cztvcloud.com/channels/lantian/SXsongyang1/720p.m3u8?zzhed;http://l.cztvcloud.com/channels/lantian/SXsongyang1/720p.m3u8zzhed
+#EXTINF:-1 tvg-name="松阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/松阳综合.png" group-title="☘️浙江频道",松阳综合
+http://l.cztvcloud.com/channels/lantian/SXsongyang1/720p.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="松阳新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/松阳新闻综合.png" group-title="☘️浙江频道",松阳新闻综合
+http://l.cztvcloud.com/channels/lantian/SXsongyang1/720p.m3u8?fbl=
+#EXTINF:-1 tvg-name="普陀电视台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/普陀电视台.png" group-title="☘️浙江频道",普陀电视台
+http://l.cztvcloud.com/channels/lantian/SXputuo1/720p.m3u8?zzhed#http://l.cztvcloud.com/channels/lantian/SXputuo1/720p.m3u8
+#EXTINF:-1 tvg-name="普陀电视台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/普陀电视台.png" group-title="☘️浙江频道",普陀电视台
+https://l.cztvcloud.com/channels/lantian/SXputuo1/720p.m3u8
+#EXTINF:-1 tvg-name="普陀新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/普陀新闻综合.png" group-title="☘️浙江频道",普陀新闻综合
+http://l.cztvcloud.com/channels/lantian/SXputuo1/720p.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="普陀新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/普陀新闻综合.png" group-title="☘️浙江频道",普陀新闻综合
+http://l.cztvcloud.com/channels/lantian/SXputuo1/720p.m3u8
+#EXTINF:-1 tvg-name="新昌新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新昌新闻综合.png" group-title="☘️浙江频道",新昌新闻综合
+http://l.cztvcloud.com/channels/lantian/SXxinchang1/720p.m3u8
+#EXTINF:-1 tvg-name="新昌新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新昌新闻综合.png" group-title="☘️浙江频道",新昌新闻综合
+https://l.cztvcloud.com/channels/lantian/SXxinchang1/720p.m3u8
+#EXTINF:-1 tvg-name="文成综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/文成综合.png" group-title="☘️浙江频道",文成综合
+http://l.cztvcloud.com/channels/lantian/SXwencheng1/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="文成新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/文成新闻综合.png" group-title="☘️浙江频道",文成新闻综合
+http://l.cztvcloud.com/channels/lantian/SXwencheng1/720p.m3u8
+#EXTINF:-1 tvg-name="开化新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/开化新闻综合.png" group-title="☘️浙江频道",开化新闻综合
+http://l.cztvcloud.com/channels/lantian/SXkaihua1/720p.m3u8
+#EXTINF:-1 tvg-name="开化新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/开化新闻综合.png" group-title="☘️浙江频道",开化新闻综合
+http://l.cztvcloud.com/channels/lantian/SXkaihua1/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="开化国家公园" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/开化国家公园.png" group-title="☘️浙江频道",开化国家公园
+http://l.cztvcloud.com/channels/lantian/SXkaihua2/720p.m3u8zzhed
+#EXTINF:-1 tvg-name="开化国家公园" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/开化国家公园.png" group-title="☘️浙江频道",开化国家公园
+http://l.cztvcloud.com/channels/lantian/SXkaihua2/720p.m3u8
+#EXTINF:-1 tvg-name="庆元综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/庆元综合.png" group-title="☘️浙江频道",庆元综合
+http://l.cztvcloud.com/channels/lantian/SXqingyuan1/720p.m3u8?fbl=
+#EXTINF:-1 tvg-name="庆元综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/庆元综合.png" group-title="☘️浙江频道",庆元综合
+http://l.cztvcloud.com/channels/lantian/SXqingyuan1/720p.m3u8
+#EXTINF:-1 tvg-name="庆元综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/庆元综合.png" group-title="☘️浙江频道",庆元综合
+http://l.cztvcloud.com/channels/lantian/SXqingyuan1/720p.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="庆元综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/庆元综合.png" group-title="☘️浙江频道",庆元综合
+http://l.cztvcloud.com/channels/lantian/SXqingyuan1/720p.m3u8?zzhed[浙江]洞头综合频道
+#EXTINF:-1 tvg-name="平湖新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/平湖新闻综合.png" group-title="☘️浙江频道",平湖新闻综合
+http://play-sh13.quklive.com/live/1690167908295069.m3u8?auth_key=2027466211-f190eec410c24473825cbe1d8541e545-0-f21db57ae1b534802c1cf7be86cc3aef
+#EXTINF:-1 tvg-name="平湖新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/平湖新闻综合.png" group-title="☘️浙江频道",平湖新闻综合
+http://l.cztvcloud.com/channels/lantian/SXpinghu1/720p.m3u8
+#EXTINF:-1 tvg-name="平湖新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/平湖新闻综合.png" group-title="☘️浙江频道",平湖新闻综合
+http://l.cztvcloud.com/channels/lantian/SXpinghu1/720p.m3u8?cWlkPSZzPTg3OWMwYmMyZDMzYTFhZGY3NDQxMjgyYTg1MmUzNTY0JmVzPTE3MDY2Nzc4NzMmdXVpZD0yMjdiY2MzNGNiNGY0MThlYjRiY2IxYzcwNmZjODNkMS02NzQ3NDY2NyZ2PTImYXM9MCZjZG5leF9pZD10eF9waG9uZV9saXZl
+#EXTINF:-1 tvg-name="平湖新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/平湖新闻综合.png" group-title="☘️浙江频道",平湖新闻综合
+http://l.cztvcloud.com/channels/lantian/SXpinghu1/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="嵊泗综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/嵊泗综合.png" group-title="☘️浙江频道",嵊泗综合
+http://l.cztvcloud.com/channels/lantian/SXshengzhou1/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="嵊州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/嵊州新闻综合.png" group-title="☘️浙江频道",嵊州新闻综合
+http://l.cztvcloud.com/channels/lantian/SXshengzhou1/720p.m3u8?zzhed#http://l.cztvcloud.com/channels/lantian/SXshengzhou1/720p.m3u8
+#EXTINF:-1 tvg-name="兰溪新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/兰溪新闻综合.png" group-title="☘️浙江频道",兰溪新闻综合
+http://l.cztvcloud.com/channels/lantian/SXlanxi1/720p.m3u8
+#EXTINF:-1 tvg-name="兰溪新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/兰溪新闻综合.png" group-title="☘️浙江频道",兰溪新闻综合
+http://l.cztvcloud.com/channels/lantian/SXlanxi1/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="余杭综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/余杭综合.png" group-title="☘️浙江频道",余杭综合
+http://l.cztvcloud.com/channels/lantian/SXyuhang1/720p.m3u8
+#EXTINF:-1 tvg-name="余杭未来E" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/余杭未来E.png" group-title="☘️浙江频道",余杭未来E
+http://l.cztvcloud.com/channels/lantian/SXyuhang3/720p.m3u8
+#EXTINF:-1 tvg-name="余杭未来E" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/余杭未来E.png" group-title="☘️浙江频道",余杭未来E
+http://l.cztvcloud.com/channels/lantian/SXyuhang3/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="余姚综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/余姚综合.png" group-title="☘️浙江频道",余姚综合
+http://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8
+#EXTINF:-1 tvg-name="余姚综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/余姚综合.png" group-title="☘️浙江频道",余姚综合
+http://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="余姚综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/余姚综合.png" group-title="☘️浙江频道",余姚综合
+http://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8?cWlkPSZzPTg3OWMwYmMyZDMzYTFhZGY3NDQxMjgyYTg1MmUzNTY0JmVzPTE3MDY2Nzc4NzMmdXVpZD0yMjdiY2MzNGNiNGY0MThlYjRiY2IxYzcwNmZjODNkMS02NzQ3NDY2NyZ2PTImYXM9MCZjZG5leF9pZD10eF9waG9uZV9saXZl
+#EXTINF:-1 tvg-name="余姚综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/余姚综合.png" group-title="☘️浙江频道",余姚综合
+https://l.cztvcloud.com/channels/lantian/SXyuyao1/720p.m3u8
+#EXTINF:-1 tvg-name="余姚姚江文化" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/余姚姚江文化.png" group-title="☘️浙江频道",余姚姚江文化
+https://l.cztvcloud.com/channels/lantian/SXyuyao2/720p.m3u8
+#EXTINF:-1 tvg-name="云和新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/云和新闻综合.png" group-title="☘️浙江频道",云和新闻综合
+http://l.cztvcloud.com/channels/lantian/SXyunhe1/720p.m3u8
+#EXTINF:-1 tvg-name="云和新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/云和新闻综合.png" group-title="☘️浙江频道",云和新闻综合
+http://l.cztvcloud.com/channels/lantian/SXyunhe1/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="东阳影视生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东阳影视生活.png" group-title="☘️浙江频道",东阳影视生活
+http://l.cztvcloud.com/channels/lantian/SXdongyang1/720p.m3u8
+#EXTINF:-1 tvg-name="上虞新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/上虞新闻综合.png" group-title="☘️浙江频道",上虞新闻综合
+http://l.cztvcloud.com/channels/lantian/SXshangyu1/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="上虞新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/上虞新闻综合.png" group-title="☘️浙江频道",上虞新闻综合
+http://l.cztvcloud.com/channels/lantian/SXshangyu1/720p.m3u8
+#EXTINF:-1 tvg-name="上虞新商都" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/上虞新商都.png" group-title="☘️浙江频道",上虞新商都
+http://l.cztvcloud.com/channels/lantian/SXshangyu3/720p.m3u8
+#EXTINF:-1 tvg-name="上虞新商都" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/上虞新商都.png" group-title="☘️浙江频道",上虞新商都
+http://l.cztvcloud.com/channels/lantian/SXshangyu3/720p.m3u8?zzhed\r\n
+#EXTINF:-1 tvg-name="上虞文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/上虞文化影院.png" group-title="☘️浙江频道",上虞文化影院
+http://l.cztvcloud.com/channels/lantian/SXshangyu2/720p.m3u8
+#EXTINF:-1 tvg-name="上虞文化影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/上虞文化影院.png" group-title="☘️浙江频道",上虞文化影院
+http://l.cztvcloud.com/channels/lantian/SXshangyu2/720p.m3u8?zzhed
+#EXTINF:-1 tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京新闻.png" group-title="☘️北京频道",北京新闻
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226437/1.m3u8
+#EXTINF:-1 tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京新闻.png" group-title="☘️北京频道",北京新闻
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226512/1.m3u8
+#EXTINF:-1 tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京新闻.png" group-title="☘️北京频道",北京新闻
+http://dsj.motem.top:8880/bptv/10000100000000050000000003870780.m3u8
+#EXTINF:-1 tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京新闻.png" group-title="☘️北京频道",北京新闻
+http://iptv.huuc.edu.cn/hls/btv9hd.m3u8
+#EXTINF:-1 tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京新闻.png" group-title="☘️北京频道",北京新闻
+http://yc.myds.me:35455/bptv/10000100000000050000000003870780.m3u8
+#EXTINF:-1 tvg-name="北京新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京新闻.png" group-title="☘️北京频道",北京新闻
+http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226437/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EncK5uEAdYwWMsf8WJWI1mQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNO_LSIQh_h2P54Cz-MqgJqC%2CEND
+#EXTINF:-1 tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京生活.png" group-title="☘️北京频道",北京生活
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226514/1.m3u8
+#EXTINF:-1 tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京生活.png" group-title="☘️北京频道",北京生活
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226561/1.m3u8
+#EXTINF:-1 tvg-name="北京生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京生活.png" group-title="☘️北京频道",北京生活
+http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226514/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Es-PVNcPJsjr_oBdcXGT40g%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMWvZ0r6eMXcXJOGrCpJiq1%2CEND
+#EXTINF:-1 tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京财经.png" group-title="☘️北京频道",北京财经
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226516/1.m3u8
+#EXTINF:-1 tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京财经.png" group-title="☘️北京频道",北京财经
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226560/1.m3u8
+#EXTINF:-1 tvg-name="北京财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/北京财经.png" group-title="☘️北京频道",北京财经
+http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226516/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eh9_SEkmWeMdS1TMnIILZgg%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPIiicEW7OIvk1s-X-PXHqO%2CEND
+#EXTINF:-1 tvg-name="七彩戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/七彩戏剧.png" group-title="☘️上海频道",七彩戏剧
+http://z.b.bkpcp.top/m.php?id=qcxj
+#EXTINF:-1 tvg-name="七彩戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/七彩戏剧.png" group-title="☘️上海频道",七彩戏剧
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000002000000010/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000010&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 tvg-name="上海外语" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/上海外语.png" group-title="☘️上海频道",上海外语
+http://z.b.bkpcp.top/m.php?id=shics
+#EXTINF:-1 tvg-name="上海外语" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/上海外语.png" group-title="☘️上海频道",上海外语
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000002000000001/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000001&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 tvg-name="上海外语" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/上海外语.png" group-title="☘️上海频道",上海外语
+http://[2409:8087:5e00:24::029]:6610/000000001000/2000000002000000001/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000001&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 tvg-name="上海教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/上海教育.png" group-title="☘️上海频道",上海教育
+http://sh.tonytuya.xyz:4022/udp/239.45.0.13:5140
+#EXTINF:-1 tvg-name="上海新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/上海新闻综合.png" group-title="☘️上海频道",上海新闻综合
+http://z.b.bkpcp.top/m.php?id=shxwzh
+#EXTINF:-1 tvg-name="上海都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/上海都市.png" group-title="☘️上海频道",上海都市
+http://yc.myds.me:35455/itv/5000000010000018926.m3u8?cdn=bestzb
+#EXTINF:-1 tvg-name="上海都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/上海都市.png" group-title="☘️上海频道",上海都市
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000002000000012/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000012&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 tvg-name="东方影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东方影视.png" group-title="☘️上海频道",东方影视
+http://z.b.bkpcp.top/m.php?id=shys
+#EXTINF:-1 tvg-name="东方影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东方影视.png" group-title="☘️上海频道",东方影视
+http://gat.bkpcp.top/ymg.php?id=shys
+#EXTINF:-1 tvg-name="东方影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东方影视.png" group-title="☘️上海频道",东方影视
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000002000000013/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000013&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 tvg-name="东方财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东方财经.png" group-title="☘️上海频道",东方财经
+http://yc.myds.me:35455/itv/5000000007000010003.m3u8?cdn=bestzb
+#EXTINF:-1 tvg-name="东方财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东方财经.png" group-title="☘️上海频道",东方财经
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000002000000090/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000090&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 tvg-name="东方财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东方财经.png" group-title="☘️上海频道",东方财经
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000007000010003/index.m3u8?channel-id=bestzb&Contentid=5000000007000010003&livemode=1&stbId=3
+#EXTINF:-1 tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/动漫秀场.png" group-title="☘️上海频道",动漫秀场
+http://180.165.29.204:4022/rtp/239.45.3.134:5140
+#EXTINF:-1 tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/动漫秀场.png" group-title="☘️上海频道",动漫秀场
+http://[2409:8087:1e03:21::42]:6610/cms001/ch00000090990000001196/index.m3u8
+#EXTINF:-1 tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/动漫秀场.png" group-title="☘️上海频道",动漫秀场
+http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000011000031113/1.m3u8
+#EXTINF:-1 tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/动漫秀场.png" group-title="☘️上海频道",动漫秀场
+http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226197/index.m3u8
+#EXTINF:-1 tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/哈哈炫动.png" group-title="☘️上海频道",哈哈炫动
+http://180.165.29.204:4022/rtp/239.45.1.55:5140
+#EXTINF:-1 tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/哈哈炫动.png" group-title="☘️上海频道",哈哈炫动
+http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8
+#EXTINF:-1 tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/哈哈炫动.png" group-title="☘️上海频道",哈哈炫动
+http://[2409:8087:1e03:21::42]:6610/cms001/ch00000090990000001232/index.m3u8
+#EXTINF:-1 tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/哈哈炫动.png" group-title="☘️上海频道",哈哈炫动
+http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225657/index.m3u8
+#EXTINF:-1 tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/哈哈炫动.png" group-title="☘️上海频道",哈哈炫动
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225657/2.m3u8
+#EXTINF:-1 tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/哈哈炫动.png" group-title="☘️上海频道",哈哈炫动
+http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226618/index.m3u8
+#EXTINF:-1 tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/哈哈炫动.png" group-title="☘️上海频道",哈哈炫动
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221227025/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7RoPnbSvRPd3KyTpQ76WpA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="哈哈炫动" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/哈哈炫动.png" group-title="☘️上海频道",哈哈炫动
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226931/1.m3u8
+#EXTINF:-1 tvg-name="欢笑剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/欢笑剧场.png" group-title="☘️上海频道",欢笑剧场
+http://z.b.bkpcp.top/m.php?id=hxjc
+#EXTINF:-1 tvg-name="欢笑剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/欢笑剧场.png" group-title="☘️上海频道",欢笑剧场
+http://gat.bkpcp.top/ymg.php?id=hxjc
+#EXTINF:-1 tvg-name="法治天地" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/法治天地.png" group-title="☘️上海频道",法治天地
+http://z.b.bkpcp.top/m.php?id=fztd
+#EXTINF:-1 tvg-name="法治天地" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/法治天地.png" group-title="☘️上海频道",法治天地
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000002000000014/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000014&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 tvg-name="第一财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/第一财经.png" group-title="☘️上海频道",第一财经
+http://yc.myds.me:35455/itv/5000000010000027146.m3u8?cdn=bestzb
+#EXTINF:-1 tvg-name="第一财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/第一财经.png" group-title="☘️上海频道",第一财经
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000002000000004/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000004&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 tvg-name="第一财经" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/第一财经.png" group-title="☘️上海频道",第一财经
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000010000027146/index.m3u8?channel-id=bestzb&Contentid=5000000010000027146&livemode=1&stbId=3
+#EXTINF:-1 tvg-name="纪实人文" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/纪实人文.png" group-title="☘️上海频道",纪实人文
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225738/index.m3u8
+#EXTINF:-1 tvg-name="纪实人文" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/纪实人文.png" group-title="☘️上海频道",纪实人文
+http://[2409:8087:5e08:24::2]:6610/000000001000/5000000004000010282/index.m3u8?channel-id=bestzb&Contentid=5000000004000010282&livemode=1&stbId=3
+#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/优漫卡通.png" group-title="☘️江苏频道",优漫卡通
+http://z.b.bkpcp.top/m.php?id=ymkt
+#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/优漫卡通.png" group-title="☘️江苏频道",优漫卡通
+http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8
+#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/优漫卡通.png" group-title="☘️江苏频道",优漫卡通
+http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225656/index.m3u8
+#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/优漫卡通.png" group-title="☘️江苏频道",优漫卡通
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225656/2.m3u8
+#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/优漫卡通.png" group-title="☘️江苏频道",优漫卡通
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221227007/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EhHDWGhkwx_zJcJUYE9TAaA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/优漫卡通.png" group-title="☘️江苏频道",优漫卡通
+http://wouu.net:9977/udp/239.93.0.251:5140
+#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/优漫卡通.png" group-title="☘️江苏频道",优漫卡通
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226932/1.m3u8
+#EXTINF:-1 tvg-name="六合新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/六合新闻综合.png" group-title="☘️江苏频道",六合新闻综合
+http://p2hs.vzan.com/720020/432453820030502236/live.m3u8
+#EXTINF:-1 tvg-name="南京十八" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/南京十八.png" group-title="☘️江苏频道",南京十八
+http://z.b.bkpcp.top/m.php?id=njsb
+#EXTINF:-1 tvg-name="南京新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/南京新闻综合.png" group-title="☘️江苏频道",南京新闻综合
+http://z.b.bkpcp.top/m.php?id=njxwzh
+#EXTINF:-1 tvg-name="南通新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/南通新闻综合.png" group-title="☘️江苏频道",南通新闻综合
+http://cm-live.ntjoy.com/live/4f1.m3u8
+#EXTINF:-1 tvg-name="南通新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/南通新闻综合.png" group-title="☘️江苏频道",南通新闻综合
+https://cm-live.ntjoy.com/live/4f1.m3u8
+#EXTINF:-1 tvg-name="南通都市生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/南通都市生活.png" group-title="☘️江苏频道",南通都市生活
+https://cm-live.ntjoy.com/live/4f3.m3u8
+#EXTINF:-1 tvg-name="句容生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/句容生活.png" group-title="☘️江苏频道",句容生活
+http://jrlive.jrntv.com/live/_definst_/shenghuos/playlist.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="宜兴新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宜兴新闻.png" group-title="☘️江苏频道",宜兴新闻
+https://yixing-tv-ori-hls.jstv.com/yixing-tv-ori/yixing_xw.m3u8
+#EXTINF:-1 tvg-name="宜兴新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宜兴新闻.png" group-title="☘️江苏频道",宜兴新闻
+http://yixing-tv-ori-hls.jstv.com/yixing-tv-ori/yixing_xw.m3u8?zjiangsd
+#EXTINF:-1 tvg-name="常熟民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/常熟民生.png" group-title="☘️江苏频道",常熟民生
+rtmp://cstvplay.21cs.cn/cstv2/cstv2
+#EXTINF:-1 tvg-name="徐州新聞綜合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/徐州新聞綜合.png" group-title="☘️江苏频道",徐州新聞綜合
+http://z.b.bkpcp.top/m.php?id=xzxwzh
+#EXTINF:-1 tvg-name="新沂新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新沂新闻.png" group-title="☘️江苏频道",新沂新闻
+http://live.xysrmt.cn/xwzh/sd/live.m3u8?zjiangsd"
+#EXTINF:-1 tvg-name="新沂生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新沂生活.png" group-title="☘️江苏频道",新沂生活
+http://live.xysrmt.cn/shpd/sd/live.m3u8?zjiangsd
+#EXTINF:-1 tvg-name="无锡娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡娱乐.png" group-title="☘️江苏频道",无锡娱乐
+https://stream.thmz.com/wxtv2/playlist.m3u8
+#EXTINF:-1 tvg-name="无锡娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡娱乐.png" group-title="☘️江苏频道",无锡娱乐
+http://stream.thmz.com/wxtv2/sd/live.m3u8
+#EXTINF:-1 tvg-name="无锡娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡娱乐.png" group-title="☘️江苏频道",无锡娱乐
+http://stream.thmz.com/wxtv2/sd/live.m3u8?_upt=978cd8731706199708
+#EXTINF:-1 tvg-name="无锡娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡娱乐.png" group-title="☘️江苏频道",无锡娱乐
+http://stream.thmz.com/wxtv2/sd/live.m3u8?_upt=acffe97a1704940314
+#EXTINF:-1 tvg-name="无锡娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡娱乐.png" group-title="☘️江苏频道",无锡娱乐
+http://stream.thmz.com/wxtv2/playlist.m3u8
+#EXTINF:-1 tvg-name="无锡新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡新闻综合.png" group-title="☘️江苏频道",无锡新闻综合
+http://stream.thmz.com/wxtv1/sd/live.m3u8
+#EXTINF:-1 tvg-name="无锡新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡新闻综合.png" group-title="☘️江苏频道",无锡新闻综合
+http://stream.thmz.com/wxtv1/sd/live.m3u8?_upt=4ba3ab191698644028
+#EXTINF:-1 tvg-name="无锡新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡新闻综合.png" group-title="☘️江苏频道",无锡新闻综合
+http://stream.thmz.com/wxtv1/playlist.m3u8
+#EXTINF:-1 tvg-name="无锡生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡生活.png" group-title="☘️江苏频道",无锡生活
+https://stream.thmz.com/wxtv4/playlist.m3u8
+#EXTINF:-1 tvg-name="无锡生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡生活.png" group-title="☘️江苏频道",无锡生活
+http://stream.thmz.com/wxtv4/sd/live.m3u8
+#EXTINF:-1 tvg-name="无锡生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡生活.png" group-title="☘️江苏频道",无锡生活
+http://stream.thmz.com/wxtv4/sd/live.m3u8?_upt=978cd8731706199708
+#EXTINF:-1 tvg-name="无锡生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡生活.png" group-title="☘️江苏频道",无锡生活
+http://stream.thmz.com/wxtv4/playlist.m3u8
+#EXTINF:-1 tvg-name="无锡经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡经济.png" group-title="☘️江苏频道",无锡经济
+https://stream.thmz.com/wxtv5/playlist.m3u8
+#EXTINF:-1 tvg-name="无锡经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡经济.png" group-title="☘️江苏频道",无锡经济
+http://stream.thmz.com/wxtv5/sd/live.m3u8
+#EXTINF:-1 tvg-name="无锡经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡经济.png" group-title="☘️江苏频道",无锡经济
+http://stream.thmz.com/wxtv5/playlist.m3u8
+#EXTINF:-1 tvg-name="无锡都市资讯" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡都市资讯.png" group-title="☘️江苏频道",无锡都市资讯
+http://stream.thmz.com/wxtv3/sd/live.m3u8
+#EXTINF:-1 tvg-name="无锡都市资讯" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡都市资讯.png" group-title="☘️江苏频道",无锡都市资讯
+http://stream.thmz.com/wxtv3/sd/live.m3u8?_upt=978cd8731706199708
+#EXTINF:-1 tvg-name="无锡都市资讯" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/无锡都市资讯.png" group-title="☘️江苏频道",无锡都市资讯
+http://stream.thmz.com/wxtv3/playlist.m3u8
+#EXTINF:-1 tvg-name="江苏城市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江苏城市.png" group-title="☘️江苏频道",江苏城市
+http://z.b.bkpcp.top/m.php?id=jscs
+#EXTINF:-1 tvg-name="江苏影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江苏影视.png" group-title="☘️江苏频道",江苏影视
+http://z.b.bkpcp.top/m.php?id=jsys
+#EXTINF:-1 tvg-name="江苏教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/江苏教育.png" group-title="☘️江苏频道",江苏教育
+http://z.b.bkpcp.top/m.php?id=jsjy
+#EXTINF:-1 tvg-name="泗洪新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/泗洪新闻综合.png" group-title="☘️江苏频道",泗洪新闻综合
+http://live1.habctv.com/ggpdsl/sd/live.m3u8?zjiangsd#http://live1.habctv.com/ggpdsl/sd/live.m3u8
+#EXTINF:-1 tvg-name="淮安公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/淮安公共.png" group-title="☘️江苏频道",淮安公共
+http://live1.habctv.com/ggpdsl/sd/live.m3u8?zjiangsd#http://live1.habctv.com/ggpdsl/sd/live.m3u8
+#EXTINF:-1 tvg-name="淮安影院娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/淮安影院娱乐.png" group-title="☘️江苏频道",淮安影院娱乐
+http://live1.habctv.com/ysylsl/sd/live.m3u8
+#EXTINF:-1 tvg-name="淮安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/淮安新闻综合.png" group-title="☘️江苏频道",淮安新闻综合
+http://z.b.bkpcp.top/m.php?id=haxwzh
+#EXTINF:-1 tvg-name="淮安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/淮安新闻综合.png" group-title="☘️江苏频道",淮安新闻综合
+http://live1.habctv.com/zhpdsl/sd/live.m3u8
+#EXTINF:-1 tvg-name="淮阴综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/淮阴综合.png" group-title="☘️江苏频道",淮阴综合
+https://huaiyin-tv-replay.cm.jstv.com/huaiyin-tv/huaiyinf.m3u8
+#EXTINF:-1 tvg-name="溧水新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/溧水新闻综合.png" group-title="☘️江苏频道",溧水新闻综合
+https://lishui-tv-hls.cm.jstv.com/lishui-tv/lsxwzh.m3u8
+#EXTINF:-1 tvg-name="溧水新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/溧水新闻综合.png" group-title="☘️江苏频道",溧水新闻综合
+http://lishui-tv-hls.cm.jstv.com/lishui-tv/lsxwzh.m3u8
+#EXTINF:-1 tvg-name="滨海新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/滨海新闻综合.png" group-title="☘️江苏频道",滨海新闻综合
+http://traffic.jbh.tjbh.com/live/bhtv10/playlist.m3u8
+#EXTINF:-1 tvg-name="苏州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/苏州新闻综合.png" group-title="☘️江苏频道",苏州新闻综合
+https://live-auth.51kandianshi.com/szgd/csztv1.m3u8
+#EXTINF:-1 tvg-name="苏州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/苏州新闻综合.png" group-title="☘️江苏频道",苏州新闻综合
+http://z.b.bkpcp.top/m.php?id=szxwzh
+#EXTINF:-1 tvg-name="苏州社会经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/苏州社会经济.png" group-title="☘️江苏频道",苏州社会经济
+https://live-auth.51kandianshi.com/szgd/csztv2.m3u8
+#EXTINF:-1 tvg-name="连云港公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/连云港公共.png" group-title="☘️江苏频道",连云港公共
+http://live.lyg1.com/ggpd/sd/live.m3u8
+#EXTINF:-1 tvg-name="连云港新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/连云港新闻综合.png" group-title="☘️江苏频道",连云港新闻综合
+http://z.b.bkpcp.top/m.php?id=lygxwzh
+#EXTINF:-1 tvg-name="连云港新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/连云港新闻综合.png" group-title="☘️江苏频道",连云港新闻综合
+http://live.lyg1.com/zhpd/sd/live.m3u8
+#EXTINF:-1 tvg-name="镇江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/镇江新闻综合.png" group-title="☘️江苏频道",镇江新闻综合
+http://zjtv-wshls.homecdn.com/live/2aa50.m3u8
+#EXTINF:-1 tvg-name="镇江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/镇江新闻综合.png" group-title="☘️江苏频道",镇江新闻综合
+http://zjtv-wshls.homecdn.com/live/2aa50.m3u8?wsSession=a263bdc5a26cd01b57a80359-170493712215358&wsIPSercert=f56bd6194d219a5172dbed60eca6e9b0
+#EXTINF:-1 tvg-name="湖南爱晚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖南爱晚.png" group-title="☘️湖南频道",湖南爱晚
+http://p2.vzan.com/527645544/149039617847513156/live.m3u8
+#EXTINF:-1 tvg-name="湖南爱晚" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖南爱晚.png" group-title="☘️湖南频道",湖南爱晚
+http://pili-live-snapshot.tv.hntvcloud.com/mg-tv/channel-9.m3u8
+#EXTINF:-1 tvg-name="湖南国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖南国际.png" group-title="☘️湖南频道",湖南国际
+http://pili-live-snapshot.tv.hntvcloud.com/mg-tv/channel-4.m3u8
+#EXTINF:-1 tvg-name="金鹰纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/金鹰纪实.png" group-title="☘️湖南频道",金鹰纪实
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226572/1.m3u8
+#EXTINF:-1 tvg-name="金鹰纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/金鹰纪实.png" group-title="☘️湖南频道",金鹰纪实
+http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226667/1.m3u8
+#EXTINF:-1 tvg-name="金鹰纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/金鹰纪实.png" group-title="☘️湖南频道",金鹰纪实
+http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000011000031203/1.m3u8
+#EXTINF:-1 tvg-name="湖南金鹰纪实" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖南金鹰纪实.png" group-title="☘️湖南频道",湖南金鹰纪实
+http://yc.myds.me:35455/itv/5000000011000031203.m3u8?cdn=bestzb
+#EXTINF:-1 tvg-name="茶陵新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/茶陵新闻综合.png" group-title="☘️湖南频道",茶陵新闻综合
+http://liveplay-nanyue.rednet.cn/live/chaling-telev.m3u8
+#EXTINF:-1 tvg-name="湖北综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖北综合.png" group-title="☘️湖北频道",湖北综合
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072216f7da/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNLx3R3LdIBdA5q61lut1LwZcw4SC2tJubc%2Bq5t%2F61jvWCtjrJL0x%2BHncPgdmcbBW9I
+#EXTINF:-1 tvg-name="湖北生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖北生活.png" group-title="☘️湖北频道",湖北生活
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072c62e405/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNKJPodw5BcDirSOw7egztI5bUvJjqPzSNAhrA37GrbRBIAjGQpzP0QmgsmuHnQyd2c
+#EXTINF:-1 tvg-name="湖北教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖北教育.png" group-title="☘️湖北频道",湖北教育
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072a6cbbf6/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNKTFQuOKNd5i0HMa3ydMWIQ6kJ2fBJGJ77BLTXK72CqUYQsX3ZguYt0954s9hfZTfc
+#EXTINF:-1 tvg-name="湖北垄上" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/湖北垄上.png" group-title="☘️湖北频道",湖北垄上
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638072463c333/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUUAdKgLqNB5aOAUhcp5CeNL%2Be1h4FfA5QqwJ7IPOz3p2qIS7djSxm17Htd%2FckZkm%2FVqsKHEJFJt26ju9iibzMEo
+#EXTINF:-1 tvg-name="十堰新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/十堰新闻.png" group-title="☘️湖北频道",十堰新闻
+https://p8.vzan.com/slowlive/034028687228317362/live.m3u8?zbid=351104&tpid=868100086
+#EXTINF:-1 tvg-name="荆门新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/荆门新闻综合.png" group-title="☘️湖北频道",荆门新闻综合
+https://stream.jmtv.com.cn/xwzh/playlist.m3u8?_upt=3e28e7271664278691
+#EXTINF:-1 tvg-name="荆门新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/荆门新闻综合.png" group-title="☘️湖北频道",荆门新闻综合
+http://stream.jmtv.com.cn/xwzh/sd/live.m3u8
+#EXTINF:-1 tvg-name="南宁公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/南宁公共.png" group-title="☘️广西频道",南宁公共
+http://688b7cbf9b7a8d911a085372b6c70ab5.livehwc3.cn/hls.nntv.cn/nnlive/XWZH_24.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=d1391be1fc200f8e4700c5d82b44edae
+#EXTINF:-1 tvg-name="南宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/南宁新闻综合.png" group-title="☘️广西频道",南宁新闻综合
+rtmp://tv.qntv.net/channellive/ch1?zguizd
+#EXTINF:-1 tvg-name="南宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/南宁新闻综合.png" group-title="☘️广西频道",南宁新闻综合
+rtmp://hls.nntv.cn/nnlive/XWZH_24
+#EXTINF:-1 tvg-name="南宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/南宁新闻综合.png" group-title="☘️广西频道",南宁新闻综合
+http://688b7cbf9b7a8d911a085372b6c70ab5.livehwc3.cn/hls.nntv.cn/nnlive/XWZH_24.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=d1391be1fc200f8e4700c5d82b44edae
+#EXTINF:-1 tvg-name="南宁都市生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/南宁都市生活.png" group-title="☘️广西频道",南宁都市生活
+http://hls.nntv.cn/nnlive/WLSH_24.m3u8
+#EXTINF:-1 tvg-name="南宁都市生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/南宁都市生活.png" group-title="☘️广西频道",南宁都市生活
+http://615bbf179ba53515dccad7b1da5d1ad9.livehwc3.cn/hls.nntv.cn/nnlive/WLSH_24.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=2598844eaee8a4265e706fc14b3fc11d
+#EXTINF:-1 tvg-name="宾阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宾阳综合.png" group-title="☘️广西频道",宾阳综合
+http://pulls.myun.tv/live/0dkp33j5.m3u8
+#EXTINF:-1 tvg-name="贺州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/贺州综合.png" group-title="☘️广西频道",贺州综合
+http://zhz.gxhzxw.com:2935/live/HZXW-HD/playlist.m3u8
+#EXTINF:-1 tvg-name="广西新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广西新闻.png" group-title="☘️广西频道",广西新闻
+https://mobilelive.gxtv.cn/live/gx_live1007/playlist.m3u8
+#EXTINF:-1 tvg-name="广西国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广西国际.png" group-title="☘️广西频道",广西国际
+https://hlscdn.liangtv.cn/live/0234c48e0bc24fe1b41b9999a253e581/1075ee38e04f490690f6a36a16e09c79.m3u8
+#EXTINF:-1 tvg-name="广西国际" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广西国际.png" group-title="☘️广西频道",广西国际
+http://hlscdn.liangtv.cn/live/0234c48e0bc24fe1b41b9999a253e581/1075ee38e04f490690f6a36a16e09c79.m3u8
+#EXTINF:-1 tvg-name="南宁影视娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/南宁影视娱乐.png" group-title="☘️广西频道",南宁影视娱乐
+rtmp://hls.nntv.cn/nnlive/YSYL_244
+#EXTINF:-1 tvg-name="南宁影视娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/南宁影视娱乐.png" group-title="☘️广西频道",南宁影视娱乐
+http://688b7cbf9b7a8d911a085372b6c70ab5.livehwc3.cn/hls.nntv.cn/nnlive/YSYL_244.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=e7eb508555e76e08cc1b198d04f41fb5
+#EXTINF:-1 tvg-name="津南一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/津南一套.png" group-title="☘️天津频道",津南一套
+http://play.jinnantv.top/live/JNTV1.m3u8?ztianjd
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="☘️天津频道",天津卫视
+http://j.x.bkpcp.top/jx/TIANJHD
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="☘️天津频道",天津卫视
+http://[2409:8087:74f0:22::6]:6410/270000001128/9900000530/index.m3u8
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="☘️天津频道",天津卫视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="☘️天津频道",天津卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="☘️天津频道",天津卫视
+http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010069/1.m3u8
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="☘️天津频道",天津卫视
+http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225972/main.m3u8
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="☘️天津频道",天津卫视
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="☘️天津频道",天津卫视
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226459/index.m3u8
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="☘️天津频道",天津卫视
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225485/2/index.m3u8
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天津卫视.png" group-title="☘️天津频道",天津卫视
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225739/2/index.m3u8
+#EXTINF:-1 tvg-name="井研综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/井研综合.png" group-title="☘️四川频道",井研综合
+http://tvfile.jyrmt.cn/nmip-media/channellive/channel104452/playlist.m3u8
+#EXTINF:-1 tvg-name="凉山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/凉山新闻综合.png" group-title="☘️四川频道",凉山新闻综合
+http://tvfile.lzgbdst.com/nmip-media/channellive/channel106876/playlist.m3u8?zsicdhttp://tv.drs.lzgbdst.com:8100/channellive/lztv2.flv?zsicd
+#EXTINF:-1 tvg-name="利州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/利州综合.png" group-title="☘️四川频道",利州综合
+http://tvfile.lzgbdst.com/nmip-media/channellive/channel106876/playlist.m3u8?zsicd
+#EXTINF:-1 tvg-name="剑阁综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/剑阁综合.png" group-title="☘️四川频道",剑阁综合
+https://m3u8.channel.dzsm.com/nmip-media/channellive/channel105549/playlist.m3u8
+#EXTINF:-1 tvg-name="双流综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/双流综合.png" group-title="☘️四川频道",双流综合
+http://171.221.250.130:18888/27e684978eb642eeb90ab815f6cc51bf/c41893de5e8645b3b43aef1640859b0d.m3u8?zsicd,
+#EXTINF:-1 tvg-name="叙永综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/叙永综合.png" group-title="☘️四川频道",叙永综合
+rtmp://luzhi.xuyongrongmei.com:1935/live/xyxw?zsicd
+#EXTINF:-1 tvg-name="叙永综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/叙永综合.png" group-title="☘️四川频道",叙永综合
+http://luzhi.xuyongrongmei.com:1935/live/_definst_/xyxw/playlist.m3u8?zsicd#rtmp://luzhi.xuyongrongmei.com:1935/live/xyxw?zsicd
+#EXTINF:-1 tvg-name="名山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/名山综合.png" group-title="☘️四川频道",名山综合
+rtmp://tv.yunxya.com:1937/channellive/mingshan
+#EXTINF:-1 tvg-name="名山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/名山综合.png" group-title="☘️四川频道",名山综合
+https://m3u8channel-bx.yunxya.com/nmip-media/channellive/channel104666/playlist.m3u8
+#EXTINF:-1 tvg-name="四川科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/四川科教.png" group-title="☘️四川频道",四川科教
+http://182.150.115.21:8030/pcgacg/pcgacg_0.m3u8
+#EXTINF:-1 tvg-name="四川科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/四川科教.png" group-title="☘️四川频道",四川科教
+http://wouu.net:9977/udp/239.93.42.44:5140
+#EXTINF:-1 tvg-name="夹江新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/夹江新闻综合.png" group-title="☘️四川频道",夹江新闻综合
+http://tvfile.jjrm.org.cn/nmip-media/channellive/channel106282/playlist.m3u8
+#EXTINF:-1 tvg-name="宝兴综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宝兴综合.png" group-title="☘️四川频道",宝兴综合
+rtmp://tv.yunxya.com:1937/channellive/baoxing
+#EXTINF:-1 tvg-name="小金综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/小金综合.png" group-title="☘️四川频道",小金综合
+rtmp://xjlive.xjxrmt.cn/live/xwpd
+#EXTINF:-1 tvg-name="广元公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广元公共.png" group-title="☘️四川频道",广元公共
+https://m3u8.channel.dzsm.com/nmip-media/channellive/channel101257/playlist.m3u8
+#EXTINF:-1 tvg-name="广元综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广元综合.png" group-title="☘️四川频道",广元综合
+https://m3u8.channel.dzsm.com/nmip-media/channellive/channel100999/playlist.m3u8
+#EXTINF:-1 tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/康巴卫视.png" group-title="☘️四川频道",康巴卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227027/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkHMvBpWz4rccMxNvSRekpQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/康巴卫视.png" group-title="☘️四川频道",康巴卫视
+http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8
+#EXTINF:-1 tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/康巴卫视.png" group-title="☘️四川频道",康巴卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221225856/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/康巴卫视.png" group-title="☘️四川频道",康巴卫视
+http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221225856/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/康巴卫视.png" group-title="☘️四川频道",康巴卫视
+http://[2409:8087:2001:20:2800:0:df6e:eb10]:80/wh7f454c46tw3423902933_-437655574/ott.mobaibox.com/PLTV/3/224/3221227645/index.m3u8
+#EXTINF:-1 tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/康巴卫视.png" group-title="☘️四川频道",康巴卫视
+http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225660/index.m3u8
+#EXTINF:-1 tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/康巴卫视.png" group-title="☘️四川频道",康巴卫视
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221227027/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkHMvBpWz4rccMxNvSRekpQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/康巴卫视.png" group-title="☘️四川频道",康巴卫视
+http://wouu.net:9977/udp/239.93.0.41:5140
+#EXTINF:-1 tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/康巴卫视.png" group-title="☘️四川频道",康巴卫视
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8
+#EXTINF:-1 tvg-name="康巴卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/康巴卫视.png" group-title="☘️四川频道",康巴卫视
+http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221226263/index.m3u8
+#EXTINF:-1 tvg-name="旺苍新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/旺苍新闻综合.png" group-title="☘️四川频道",旺苍新闻综合
+rtmp://tv.wcrmt.cn/channellive/ch1
+#EXTINF:-1 tvg-name="旺苍新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/旺苍新闻综合.png" group-title="☘️四川频道",旺苍新闻综合
+http://channel.wcrmt.cn:80/nmip-media/channellive/channel105268/playlist.m3u8
+#EXTINF:-1 tvg-name="旺苍新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/旺苍新闻综合.png" group-title="☘️四川频道",旺苍新闻综合
+http://live.spccmc.com:90/live/spxwzh.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="松潘新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/松潘新闻综合.png" group-title="☘️四川频道",松潘新闻综合
+http://live.spccmc.com:90/live/spxwzh.m3u8
+#EXTINF:-1 tvg-name="松潘新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/松潘新闻综合.png" group-title="☘️四川频道",松潘新闻综合
+http://live.spccmc.com:90/live/spxwzh.m3u8?zsicd
+#EXTINF:-1 tvg-name="汉源综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/汉源综合.png" group-title="☘️四川频道",汉源综合
+http://live.hyxrmt.com:85/live/xwpd.m3u8
+#EXTINF:-1 tvg-name="汶川新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/汶川新闻综合.png" group-title="☘️四川频道",汶川新闻综合
+rtmp://live.iwcmt.cn:1936/live/zhxw
+#EXTINF:-1 tvg-name="汶川新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/汶川新闻综合.png" group-title="☘️四川频道",汶川新闻综合
+http://live.iwcmt.cn:90/live/zhxw.m3u8
+#EXTINF:-1 tvg-name="汶川新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/汶川新闻综合.png" group-title="☘️四川频道",汶川新闻综合
+http://live.iwcmt.cn:90/live/zhxw.m3u8?zsicd
+#EXTINF:-1 tvg-name="沐川综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/沐川综合.png" group-title="☘️四川频道",沐川综合
+rtmp://tv.mcrm.org.cn:1935/channellive/tv01
+#EXTINF:-1 tvg-name="沐川综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/沐川综合.png" group-title="☘️四川频道",沐川综合
+http://file.ysxtv.cn/cms/videos/nmip-media/channellive/channel4/playlist.m3u8?zsicd
+#EXTINF:-1 tvg-name="泸县新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/泸县新闻综合.png" group-title="☘️四川频道",泸县新闻综合
+http://lxfile.lxxcb.cn/nmip-media/channellive/channel103799/playlist.m3u8
+#EXTINF:-1 tvg-name="泸县新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/泸县新闻综合.png" group-title="☘️四川频道",泸县新闻综合
+http://lxfile.lxxcb.cn:80/nmip-media/channellive/channel103799/playlist.m3u8
+#EXTINF:-1 tvg-name="泸县新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/泸县新闻综合.png" group-title="☘️四川频道",泸县新闻综合
+https://m3u8channel.ganzitv.com/nmip-media/channellive/channel1/playlist.m3u8
+#EXTINF:-1 tvg-name="泸县新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/泸县新闻综合.png" group-title="☘️四川频道",泸县新闻综合
+http://lxfile.lxxcb.cn/nmip-media/channellive/channel103799/playlist.m3u8?zsicd
+#EXTINF:-1 tvg-name="甘孜综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/甘孜综合.png" group-title="☘️四川频道",甘孜综合
+https://m3u8channel.ganzitv.com/nmip-media/channellive/channel1/playlist.m3u8
+#EXTINF:-1 tvg-name="石棉综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/石棉综合.png" group-title="☘️四川频道",石棉综合
+rtmp://tv.yunxya.com:1937/channellive/shimian
+#EXTINF:-1 tvg-name="石棉综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/石棉综合.png" group-title="☘️四川频道",石棉综合
+https://m3u8channel-sm.yunxya.com/nmip-media/channellive/channel100420/playlist.m3u8
+#EXTINF:-1 tvg-name="绵阳科技" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/绵阳科技.png" group-title="☘️四川频道",绵阳科技
+http://livepull.myntv.cn:80/rtmp/mykj.m3u8
+#EXTINF:-1 tvg-name="荥经综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/荥经综合.png" group-title="☘️四川频道",荥经综合
+rtmp://tv.yunxya.com:1937/channellive/yingjing
+#EXTINF:-1 tvg-name="荥经综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/荥经综合.png" group-title="☘️四川频道",荥经综合
+https://m3u8channel-yj.yunxya.com/nmip-media/channellive/channel101140/playlist.m3u8
+#EXTINF:-1 tvg-name="荥经综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/荥经综合.png" group-title="☘️四川频道",荥经综合
+http://file.ysxtv.cn/cms/videos/nmip-media/channellive/channel4/playlist.m3u8
+#EXTINF:-1 tvg-name="荥经综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/荥经综合.png" group-title="☘️四川频道",荥经综合
+https://file.ysxtv.cn/nmip-media/channellive/channel101492/playlist.m3u8
+#EXTINF:-1 tvg-name="营山电视台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/营山电视台.png" group-title="☘️四川频道",营山电视台
+https://file.ysxtv.cn/nmip-media/channellive/channel101492/playlist.m3u8
+#EXTINF:-1 tvg-name="营山电视台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/营山电视台.png" group-title="☘️四川频道",营山电视台
+http://file.ysxtv.cn/cms/videos/nmip-media/channellive/channel4/playlist.m3u8?zsicd#http://file.ysxtv.cn/cms/videos/nmip-media/channellive/channel4/playlist.m3u8
+#EXTINF:-1 tvg-name="金川新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/金川新闻综合.png" group-title="☘️四川频道",金川新闻综合
+rtmp://live.jinchuanrmt.com/live/zhxw
+#EXTINF:-1 tvg-name="金川新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/金川新闻综合.png" group-title="☘️四川频道",金川新闻综合
+rtmp://139.203.180.9/live/zhxw
+#EXTINF:-1 tvg-name="长宁综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/长宁综合.png" group-title="☘️四川频道",长宁综合
+rtmp://cnpull.sccnfb.com/live/123456
+#EXTINF:-1 tvg-name="青川综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/青川综合.png" group-title="☘️四川频道",青川综合
+http://qcfile.qcrmt.com/nmip-media/channellive/channel100933/playlist.m3u8
+#EXTINF:-1 tvg-name="云霄综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/云霄综合.png" group-title="☘️福建频道",云霄综合
+https://live.zzyxxw.com:2443/live/xwzh.m3u8
+#EXTINF:-1 tvg-name="云霄综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/云霄综合.png" group-title="☘️福建频道",云霄综合
+http://live.zzyxxw.com:85/live/xwzh.m3u8
+#EXTINF:-1 tvg-name="云霄综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/云霄综合.png" group-title="☘️福建频道",云霄综合
+http://live.zzyxxw.com:85/live/xwzh.m3u8?fujian
+#EXTINF:-1 tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/厦门卫视.png" group-title="☘️福建频道",厦门卫视
+http://[2409:8087:5e00:24::1e]:6060/000000001000/1000000005000266006/1.m3u8
+#EXTINF:-1 tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/厦门卫视.png" group-title="☘️福建频道",厦门卫视
+http://[2409:8087:74F1:0021::0008]/270000001128/9900000058/index.m3u8
+#EXTINF:-1 tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/厦门卫视.png" group-title="☘️福建频道",厦门卫视
+http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000193/index.m3u8?IAS
+#EXTINF:-1 tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/厦门卫视.png" group-title="☘️福建频道",厦门卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221226964/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/厦门卫视.png" group-title="☘️福建频道",厦门卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221226781/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/厦门卫视.png" group-title="☘️福建频道",厦门卫视
+http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221226964/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/厦门卫视.png" group-title="☘️福建频道",厦门卫视
+http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221226781/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/厦门卫视.png" group-title="☘️福建频道",厦门卫视
+http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000193/index.m3u8
+#EXTINF:-1 tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/厦门卫视.png" group-title="☘️福建频道",厦门卫视
+http://wouu.net:9977/udp/239.93.42.57:5140
+#EXTINF:-1 tvg-name="厦门卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/厦门卫视.png" group-title="☘️福建频道",厦门卫视
+http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226219/index.m3u8
+#EXTINF:-1 tvg-name="福州少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/福州少儿.png" group-title="☘️福建频道",福州少儿
+http://live.zohi.tv/video/s10001-fztv-4/index.m3u8
+#EXTINF:-1 tvg-name="福州生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/福州生活.png" group-title="☘️福建频道",福州生活
+http://live.zohi.tv:80/video/s10001-fztv-3/index.m3u8
+#EXTINF:-1 tvg-name="福州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/福州综合.png" group-title="☘️福建频道",福州综合
+http://live.zohi.tv/video/s10001-fztv-1/index.m3u8
+#EXTINF:-1 tvg-name="海南新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南新闻.png" group-title="☘️海南频道",海南新闻
+http://nn.7x9d.cn/地方台8563/海南.php?id=xwpd
+#EXTINF:-1 tvg-name="海南新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南新闻.png" group-title="☘️海南频道",海南新闻
+http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000111/1.m3u8
+#EXTINF:-1 tvg-name="海南自贸" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南自贸.png" group-title="☘️海南频道",海南自贸
+http://nn.7x9d.cn/地方台8563/海南.php
+#EXTINF:-1 tvg-name="海南自贸" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南自贸.png" group-title="☘️海南频道",海南自贸
+http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000116/1.m3u8
+#EXTINF:-1 tvg-name="海南文旅" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南文旅.png" group-title="☘️海南频道",海南文旅
+http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000113/1.m3u8
+#EXTINF:-1 tvg-name="海南少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南少儿.png" group-title="☘️海南频道",海南少儿
+http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000112/1.m3u8
+#EXTINF:-1 tvg-name="海南公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海南公共.png" group-title="☘️海南频道",海南公共
+http://[2409:8087:5e00:24::1e]:6060/000000001000/460000100000000057/1.m3u8
+#EXTINF:-1 tvg-name="临颍综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/临颍综合.png" group-title="☘️河南频道",临颍综合
+http://tvpull.dxhmt.cn:9081/tv/11122-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="义马新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/义马新闻综合.png" group-title="☘️河南频道",义马新闻综合
+http://tvpull.dxhmt.cn:9081/tv/11281-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="光山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/光山综合.png" group-title="☘️河南频道",光山综合
+http://tvpull.dxhmt.cn:9081/tv/11522-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="兰考新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/兰考新闻.png" group-title="☘️河南频道",兰考新闻
+http://tvpull.dxhmt.cn:9081/tv/10225-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="卫辉综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/卫辉综合.png" group-title="☘️河南频道",卫辉综合
+http://tvpull.dxhmt.cn:9081/tv/10781-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="叶县" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/叶县.png" group-title="☘️河南频道",叶县
+http://tvpull.dxhmt.cn:9081/tv/10422-1.m3u8#
+#EXTINF:-1 tvg-name="唐河一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/唐河一套.png" group-title="☘️河南频道",唐河一套
+http://tvpull.dxhmt.cn:9081/tv/11328-1.m3u8
+#EXTINF:-1 tvg-name="固始综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/固始综合.png" group-title="☘️河南频道",固始综合
+http://tvpull.dxhmt.cn:9081/tv/11525-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="宝丰综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宝丰综合.png" group-title="☘️河南频道",宝丰综合
+http://tvpull.dxhmt.cn:9081/tv/10421-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="巩义新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/巩义新闻综合.png" group-title="☘️河南频道",巩义新闻综合
+http://tvpull.dxhmt.cn:9081/tv/10181-1.m3u8?zhend
+#EXTINF:-1 tvg-name="扶沟综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/扶沟综合.png" group-title="☘️河南频道",扶沟综合
+http://tvpull.dxhmt.cn:9081/tv/11621-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="新乡县电视台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新乡县电视台.png" group-title="☘️河南频道",新乡县电视台
+http://tvpull.dxhmt.cn:9081/tv/10721-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="新县综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新县综合.png" group-title="☘️河南频道",新县综合
+http://tvpull.dxhmt.cn:9081/tv/11523-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="新蔡综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新蔡综合.png" group-title="☘️河南频道",新蔡综合
+http://tvpull.dxhmt.cn:9081/tv/11729-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="泌阳新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/泌阳新闻综合.png" group-title="☘️河南频道",泌阳新闻综合
+http://tvpull.dxhmt.cn:9081/tv/11726-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="渑池新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/渑池新闻综合.png" group-title="☘️河南频道",渑池新闻综合
+http://tvpull.dxhmt.cn:9081/tv/11221-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="温县综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/温县综合.png" group-title="☘️河南频道",温县综合
+http://tvpull.dxhmt.cn:9081/tv/10825-1.m3u8?zhend
+#EXTINF:-1 tvg-name="潢川综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/潢川综合.png" group-title="☘️河南频道",潢川综合
+http://tvpull.dxhmt.cn:9081/tv/11526-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="登封综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/登封综合.png" group-title="☘️河南频道",登封综合
+http://tvpull.dxhmt.cn:9081/tv/10185-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="禹州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/禹州综合.png" group-title="☘️河南频道",禹州综合
+http://tvpull.dxhmt.cn:9081/tv/11081-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="西华综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西华综合.png" group-title="☘️河南频道",西华综合
+http://tvpull.dxhmt.cn:9081/tv/11622-1.m3u8
+#EXTINF:-1 tvg-name="郏县综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/郏县综合.png" group-title="☘️河南频道",郏县综合
+http://tvpull.dxhmt.cn:9081/tv/10425-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="郸城新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/郸城新闻综合.png" group-title="☘️河南频道",郸城新闻综合
+http://tvpull.dxhmt.cn:9081/tv/11625-1.m3u8?wsSecret=df15530a0abec41b14bca00fc96270d1&wsTime=1654956569
+#EXTINF:-1 tvg-name="鄢陵综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/鄢陵综合.png" group-title="☘️河南频道",鄢陵综合
+http://tvpull.dxhmt.cn:9081/tv/11024-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="项城新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/项城新闻.png" group-title="☘️河南频道",项城新闻
+http://tvpull.dxhmt.cn:9081/tv/11681-1.m3u8#@http://live.dxhmt.cn:9081/tv/11681-1.m3u8#@http://p2.weizan.cn/978354/131995006225520039/live.m3u8
+#EXTINF:-1 tvg-name="邓州新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/邓州新闻.png" group-title="☘️河南频道",邓州新闻
+http://tvpull.dxhmt.cn:9081/tv/11381-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="荥阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/荥阳综合.png" group-title="☘️河南频道",荥阳综合
+http://tvpull.dxhmt.cn:9081/tv/10182-1.m3u8
+#EXTINF:-1 tvg-name="荥阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/荥阳综合.png" group-title="☘️河南频道",荥阳综合
+http://tvpull.dxhmt.cn:9081/tv/10182-1.m3u8?zhend
+#EXTINF:-1 tvg-name="灵宝新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/灵宝新闻综合.png" group-title="☘️河南频道",灵宝新闻综合
+http://tvpull.dxhmt.cn:9081/tv/11282-1.m3u8?zhend
+#EXTINF:-1 tvg-name="滑县新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/滑县新闻.png" group-title="☘️河南频道",滑县新闻
+http://tvpull.dxhmt.cn:9081/tv/10526-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="济源电视一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/济源电视一套.png" group-title="☘️河南频道",济源电视一套
+http://tvpull.dxhmt.cn:9081/tv/19001-1.m3u8
+#EXTINF:-1 tvg-name="洛阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/洛阳综合.png" group-title="☘️河南频道",洛阳综合
+https://wshlslive.migucloud.com/live/6AL7GTQX_C0/playlist.m3u8
+#EXTINF:-1 tvg-name="洛阳科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/洛阳科教.png" group-title="☘️河南频道",洛阳科教
+https://wshlslive.migucloud.com/live/RJ0EYBCZ_C0/playlist.m3u8
+#EXTINF:-1 tvg-name="洛阳文旅" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/洛阳文旅.png" group-title="☘️河南频道",洛阳文旅
+https://wshlslive.migucloud.com/live/CVN934JS_C0/playlist.m3u8
+#EXTINF:-1 tvg-name="河南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河南都市.png" group-title="☘️河南频道",河南都市
+http://1.94.31.214/php/hntv.php?id=hnds
+#EXTINF:-1 tvg-name="河南都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河南都市.png" group-title="☘️河南频道",河南都市
+http://www.lwfz.fun:8800/rtp/239.16.20.164:11640
+#EXTINF:-1 tvg-name="河南民生" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河南民生.png" group-title="☘️河南频道",河南民生
+http://www.lwfz.fun:8800/rtp/239.16.20.165:11650
+#EXTINF:-1 tvg-name="沁阳新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/沁阳新闻综合.png" group-title="☘️河南频道",沁阳新闻综合
+http://tvpull.dxhmt.cn:9081/tv/10882-1.m3u8
+#EXTINF:-1 tvg-name="永城综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/永城综合.png" group-title="☘️河南频道",永城综合
+http://tvpull.dxhmt.cn:9081/tv/11481-1.m3u8
+#EXTINF:-1 tvg-name="方城一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/方城一套.png" group-title="☘️河南频道",方城一套
+http://tvpull.dxhmt.cn:9081/tv/11322-1.m3u8
+#EXTINF:-1 tvg-name="新野综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新野综合.png" group-title="☘️河南频道",新野综合
+http://tvpull.dxhmt.cn:9081/tv/11329-1.m3u8?zhend
+#EXTINF:-1 tvg-name="新安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新安新闻综合.png" group-title="☘️河南频道",新安新闻综合
+http://tvpull.dxhmt.cn:9081/tv/10323-1.m3u8
+#EXTINF:-1 tvg-name="新安新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新安新闻综合.png" group-title="☘️河南频道",新安新闻综合
+http://tvpull.dxhmt.cn:9081/tv/10323-1.m3u8?zhend
+#EXTINF:-1 tvg-name="开封新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/开封新闻综合.png" group-title="☘️河南频道",开封新闻综合
+http://tvpull.dxhmt.cn:9081/tv/10200-2.m3u8?zhend
+#EXTINF:-1 tvg-name="开封文化旅游" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/开封文化旅游.png" group-title="☘️河南频道",开封文化旅游
+http://tvpull.dxhmt.cn:9081/tv/10200-3.m3u8
+#EXTINF:-1 tvg-name="开封文化旅游" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/开封文化旅游.png" group-title="☘️河南频道",开封文化旅游
+http://tvpull.dxhmt.cn:9081/tv/10200-3.m3u8?zhend
+#EXTINF:-1 tvg-name="嵩县综合新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/嵩县综合新闻.png" group-title="☘️河南频道",嵩县综合新闻
+http://tvpull.dxhmt.cn:9081/tv/10325-1.m3u8?zhendhttp://wshls.live.migucloud.com/live/MZCYG799_C0/playlist.m3u8?zhend
+#EXTINF:-1 tvg-name="宜阳综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宜阳综合.png" group-title="☘️河南频道",宜阳综合
+http://tvpull.dxhmt.cn:9081/tv/10327-1.m3u8
+#EXTINF:-1 tvg-name="内黄综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/内黄综合.png" group-title="☘️河南频道",内黄综合
+http://tvpull.dxhmt.cn:9081/tv/10527-1.m3u8?wsSecret=df15530a0abec41b14bca00fc96270d1&wsTime=1654956569
+#EXTINF:-1 tvg-name="内乡综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/内乡综合.png" group-title="☘️河南频道",内乡综合
+http://tvpull.dxhmt.cn:9081/tv/11325-1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="偃师新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/偃师新闻.png" group-title="☘️河南频道",偃师新闻
+http://tvpull.dxhmt.cn:9081/tv/10381-1.m3u8?wsSecret=df15530a0abec41b14bca00fc96270d1&wsTime=1654956569
+#EXTINF:-1 tvg-name="鹿泉一套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/鹿泉一套.png" group-title="☘️河北频道",鹿泉一套
+https://jwcdnqx.hebyun.com.cn/live/luquanyi/1500k/tzwj_video.m3u8
+#EXTINF:-1 tvg-name="邯郸科技教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/邯郸科技教育.png" group-title="☘️河北频道",邯郸科技教育
+https://jwcdnqx.hebyun.com.cn/live/hdkj/1500k/tzwj_video.m3u8
+#EXTINF:-1 tvg-name="邢台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/邢台综合.png" group-title="☘️河北频道",邢台综合
+http://jwplay.hebyun.com.cn/live/xtsrmtzs/1500k/tzwj_video.m3u8
+#EXTINF:-1 tvg-name="邢台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/邢台综合.png" group-title="☘️河北频道",邢台综合
+https://jwplay.hebyun.com.cn/live/xttv/1500k/tzwj_video.m3u8
+#EXTINF:-1 tvg-name="邢台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/邢台综合.png" group-title="☘️河北频道",邢台综合
+https://jwplay.hebyun.com.cn:443/live/xtsrmtzs/1500k/tzwj_video.m3u8
+#EXTINF:-1 tvg-name="邢台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/邢台综合.png" group-title="☘️河北频道",邢台综合
+https://jwplay.hebyun.com.cn/live/xttv/1500k/tzwj_video.m3u8?zhebd
+#EXTINF:-1 tvg-name="石家庄新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/石家庄新闻综合.png" group-title="☘️河北频道",石家庄新闻综合
+http://nn.7x9d.cn/石家庄.php?id=4
+#EXTINF:-1 tvg-name="滦平新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/滦平新闻.png" group-title="☘️河北频道",滦平新闻
+http://jwplay.hebyun.com.cn/live/LPTV001/1500k/tzwj_video.m3u8
+#EXTINF:-1 tvg-name="河北都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河北都市.png" group-title="☘️河北频道",河北都市
+https://jwplay.hebyun.com.cn/live/hbdstv/1500k/tzwj_video.m3u8#http://tv.pull.hebtv.com/jishi/dushipindao.m3u8?t=2510710360&k=4380da13735a230c080ce8ff404033af
+#EXTINF:-1 tvg-name="河北都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河北都市.png" group-title="☘️河北频道",河北都市
+http://jwplay.hebyun.com.cn/live/hbnmtv/1500k/tzwj_video.m3u8
+#EXTINF:-1 tvg-name="河北都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河北都市.png" group-title="☘️河北频道",河北都市
+http://tv.pull.hebtv.com/jishi/dushipindao.m3u8?t=2510710360&k=4380da13735a230c080ce8ff404033af
+#EXTINF:-1 tvg-name="河北农民" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河北农民.png" group-title="☘️河北频道",河北农民
+https://jwplay.hebyun.com.cn/live/hbnmtv/1500k/tzwj_video.m3u8?zhebd#http://hbfc.chinashadt.com:2036/live/1003.stream/playlist.m3u8#http://tv.pull.hebtv.com/jishi/nongminpindao.m3u8?t=2510710360&k=75118c17760542fe4385e93cc4f03d38
+#EXTINF:-1 tvg-name="河北农民" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河北农民.png" group-title="☘️河北频道",河北农民
+https://jwcdnqx.hebyun.com.cn/live/clzhpd/1500k/tzwj_video.m3u8
+#EXTINF:-1 tvg-name="河北农民" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/河北农民.png" group-title="☘️河北频道",河北农民
+https://tv.pull.hebtv.com/jishi/nongminpindao.m3u8?t=1963555153&k=322fe32502d1e3695b0bdef5e698635e
+#EXTINF:-1 tvg-name="昌黎综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/昌黎综合.png" group-title="☘️河北频道",昌黎综合
+https://jwcdnqx.hebyun.com.cn/live/clzhpd/1500k/tzwj_video.m3u8
+#EXTINF:-1 tvg-name="任丘综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/任丘综合.png" group-title="☘️河北频道",任丘综合
+https://jwcdnqx.hebyun.com.cn/live/rqtv1/1500k/tzwj_video.m3u8
+#EXTINF:-1 tvg-name="兴隆综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/兴隆综合.png" group-title="☘️河北频道",兴隆综合
+https://jwcdnqx.hebyun.com.cn/live/xlzh/1500k/tzwj_video.m3u8
+#EXTINF:-1 tvg-name="平泉综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/平泉综合.png" group-title="☘️河北频道",平泉综合
+https://jwcdnqx.hebyun.com.cn/live/pqzh/1500k/tzwj_video.m3u8
+#EXTINF:-1 tvg-name="清河新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/清河新闻综合.png" group-title="☘️河北频道",清河新闻综合
+https://jwcdnqx.hebyun.com.cn/live/qinghe/1500k/tzwj_video.m3u8
+#EXTINF:-1 tvg-name="清河经济综艺" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/清河经济综艺.png" group-title="☘️河北频道",清河经济综艺
+https://jwcdnqx.hebyun.com.cn/live/qinghe1/1500k/tzwj_video.m3u8
+#EXTINF:-1 tvg-name="七星关电视台" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/七星关电视台.png" group-title="☘️贵州频道",七星关电视台
+https://p8.vzan.com:443/slowlive/147077707554082780/live.m3u8
+#EXTINF:-1 tvg-name="安顺新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安顺新闻.png" group-title="☘️贵州频道",安顺新闻
+http://hplayer1.juyun.tv/camera/154379194.m3u8
+#EXTINF:-1 tvg-name="甘肃经济" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/甘肃经济.png" group-title="☘️甘肃频道",甘肃经济
+https://hls.gstv.com.cn/49048r/10iv1j.m3u8
+#EXTINF:-1 tvg-name="甘肃都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/甘肃都市.png" group-title="☘️甘肃频道",甘肃都市
+https://hls.gstv.com.cn/49048r/l54391.m3u8
+#EXTINF:-1 tvg-name="嘉峪关综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/嘉峪关综合.png" group-title="☘️甘肃频道",嘉峪关综合
+http://play.kankanlive.com/live/1720583434627241.m3u8
+#EXTINF:-1 tvg-name="天祝综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天祝综合.png" group-title="☘️甘肃频道",天祝综合
+https://play.kankanlive.com/live/1656487214793905.m3u8
+#EXTINF:-1 tvg-name="成县综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/成县综合.png" group-title="☘️甘肃频道",成县综合
+https://play.kankanlive.com/live/1702454377323961.m3u8
+#EXTINF:-1 tvg-name="永昌综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/永昌综合.png" group-title="☘️甘肃频道",永昌综合
+rtmp://play.kankanlive.com/live/1652755738635915
+#EXTINF:-1 tvg-name="甘肃少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/甘肃少儿.png" group-title="☘️甘肃频道",甘肃少儿
+https://hls.gstv.com.cn/49048r/922k96.m3u8
+#EXTINF:-1 tvg-name="白银综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/白银综合.png" group-title="☘️甘肃频道",白银综合
+http://play.kankanlive.com/live/1720408089419110.m3u8
+#EXTINF:-1 tvg-name="秦安综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/秦安综合.png" group-title="☘️甘肃频道",秦安综合
+rtmp://play.kankanlive.com/live/1680577080200944
+#EXTINF:-1 tvg-name="西和综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西和综合.png" group-title="☘️甘肃频道",西和综合
+https://play.kankanlive.com/live/1659926941626981.m3u8
+#EXTINF:-1 tvg-name="西峰综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西峰综合.png" group-title="☘️甘肃频道",西峰综合
+https://play.kankanlive.com/live/1683944827526991.m3u8
+#EXTINF:-1 tvg-name="酒泉综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/酒泉综合.png" group-title="☘️甘肃频道",酒泉综合
+https://3ee63cd9178a070a2db29f77915c49d4.livehwc3.cn/play.kankanlive.com/live/1702033926169975.m3u8
+#EXTINF:-1 tvg-name="靖远综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/靖远综合.png" group-title="☘️甘肃频道",靖远综合
+http://play.kankanlive.com/live/1692005762394912.m3u8
+#EXTINF:-1 tvg-name="哈密二套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/哈密二套.png" group-title="☘️新疆频道",哈密二套
+https://tvpull.hmgbtv.com/hmtv/channel108259412c6a6711/playlist.m3u8
+#EXTINF:-1 tvg-name="哈密三套" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/哈密三套.png" group-title="☘️新疆频道",哈密三套
+https://tvpull.hmgbtv.com/hmtv/channelfb0e5c505477aa44/playlist.m3u8
+#EXTINF:-1 tvg-name="伊犁汉语综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/伊犁汉语综合.png" group-title="☘️新疆频道",伊犁汉语综合
+http://110.153.180.106:55555/out_1/index.m3u8
+#EXTINF:-1 tvg-name="伊犁汉语综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/伊犁汉语综合.png" group-title="☘️新疆频道",伊犁汉语综合
+http://110.153.180.106:55555/out_1/index.m3u8?zxinjd
+#EXTINF:-1 tvg-name="伊犁维吾尔" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/伊犁维吾尔.png" group-title="☘️新疆频道",伊犁维吾尔
+http://110.153.180.106:55555/out_2/index.m3u8
+#EXTINF:-1 tvg-name="伊犁哈萨克" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/伊犁哈萨克.png" group-title="☘️新疆频道",伊犁哈萨克
+http://110.153.180.106:55555/out_3/index.m3u8?zxinjd
+#EXTINF:-1 tvg-name="伊犁经济法制" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/伊犁经济法制.png" group-title="☘️新疆频道",伊犁经济法制
+http://110.153.180.106:55555/out_4/index.m3u8
+#EXTINF:-1 tvg-name="伊犁经济法制" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/伊犁经济法制.png" group-title="☘️新疆频道",伊犁经济法制
+http://110.153.180.106:55555/out_4/index.m3u8?zxinjd
+#EXTINF:-1 tvg-name="兵团八师石河子新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/兵团八师石河子新闻综合.png" group-title="☘️新疆频道",兵团八师石河子新闻综合
+http://124.88.144.73:1935/live/xwzh/playlist.m3u8?zxinjd
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="☘️新疆频道",新疆卫视
+http://z.b.bkpcp.top/m.php?id=xjws
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="☘️新疆频道",新疆卫视
+http://j.x.bkpcp.top/jx/XJWS
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="☘️新疆频道",新疆卫视
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225635/index.m3u8
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="☘️新疆频道",新疆卫视
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225725/2/index.m3u8
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="☘️新疆频道",新疆卫视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226460/index.m3u8
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="☘️新疆频道",新疆卫视
+http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225635/index.m3u8
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="☘️新疆频道",新疆卫视
+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
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="☘️新疆频道",新疆卫视
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001065/index.m3u8
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="☘️新疆频道",新疆卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227248/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新疆卫视.png" group-title="☘️新疆频道",新疆卫视
+http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221225852/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178
+#EXTINF:-1 tvg-name="石河子教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/石河子教育.png" group-title="☘️新疆频道",石河子教育
+rtmp://124.88.144.73:1935/live/jiaoyu
+#EXTINF:-1 tvg-name="石河子新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/石河子新闻综合.png" group-title="☘️新疆频道",石河子新闻综合
+rtmp://124.88.144.73:1935/live/xwzh
+#EXTINF:-1 tvg-name="石河子新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/石河子新闻综合.png" group-title="☘️新疆频道",石河子新闻综合
+http://124.88.144.73:1935/live/xwzh/playlist.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="山东教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山东教育.png" group-title="☘️山东频道",山东教育
+https://test1.live.sdetv.com.cn/live/dianshizhibo/playlist.m3u8
+#EXTINF:-1 tvg-name="山东教育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/山东教育.png" group-title="☘️山东频道",山东教育
+http://z.b.bkpcp.top/m.php?id=sdjy
+#EXTINF:-1 tvg-name="青州综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/青州综合.png" group-title="☘️山东频道",青州综合
+http://m3u8-channel.lytv.tv/nmip-media/channellive/channel113571/playlist.m3u8
+#EXTINF:-1 tvg-name="临沂公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/临沂公共.png" group-title="☘️山东频道",临沂公共
+https://m3u8-channel.lytv.tv/nmip-media/channellive/channel113571/playlist.m3u8
+#EXTINF:-1 tvg-name="临沂农科" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/临沂农科.png" group-title="☘️山东频道",临沂农科
+https://m3u8-channel.lytv.tv/nmip-media/channellive/channel115062/playlist.m3u8
+#EXTINF:-1 tvg-name="临沂新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/临沂新闻综合.png" group-title="☘️山东频道",临沂新闻综合
+https://m3u8-channel.lytv.tv/nmip-media/channellive/channel111841/playlist.m3u8
+#EXTINF:-1 tvg-name="五台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/五台综合.png" group-title="☘️山西频道",五台综合
+https://568slnjf.live.sxmty.com/live/hls/90c8b2efeb164cc0a6c2409eed668d6b/f77cbb89ec57435b9ba4c47589c16e4f-1.m3u8
+#EXTINF:-1 tvg-name="五台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/五台综合.png" group-title="☘️山西频道",五台综合
+https://568slnjf.live.sxmty.com/live/hls/90c8b2efeb164cc0a6c2409eed668d6b/f77cbb89ec57435b9ba4c47589c16e4f-1.m3u8?zshanxd
+#EXTINF:-1 tvg-name="五台综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/五台综合.png" group-title="☘️山西频道",五台综合
+https://568slnjf.live.sxmty.com/live/hls/90c8b2efeb164cc0a6c2409eed668d6b/f77cbb89ec57435b9ba4c47589c16e4f-1.m3u8?zshanxd"
+#EXTINF:-1 tvg-name="古县综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/古县综合.png" group-title="☘️山西频道",古县综合
+https://l2fpdktp.live.sxmty.com/live/hls/e4c3b363cc4549788e2d983f403e07db/d99ce1eb686e41b9afc888110bd95aa7.m3u8?zshanxd
+#EXTINF:-1 tvg-name="太谷新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/太谷新闻综合.png" group-title="☘️山西频道",太谷新闻综合
+https://p2.vzan.com/slowlive/596867413819827251/live.m3u8?zbid=1725814272&tpid=1516989100&type=0
+#EXTINF:-1 tvg-name="定襄综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/定襄综合.png" group-title="☘️山西频道",定襄综合
+http://lbyzztfe.live.sxmty.com/live/hls/645ff4c60e0a49f0a203abbd73dd8be9/0720e665f10f48e98c9639f4f492fb4a-1.m3u8?zshanxd
+#EXTINF:-1 tvg-name="平遥新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/平遥新闻综合.png" group-title="☘️山西频道",平遥新闻综合
+https://tntgjhjb.live.sxmty.com/live/hls/3a4585ac11ec4e1bb07b419101b370c3/baf63e2b313440c2a25d7859f9b73b05-1.m3u8?zshanxd
+#EXTINF:-1 tvg-name="怀仁综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/怀仁综合.png" group-title="☘️山西频道",怀仁综合
+https://1yp7hc5p.live.sxmty.com/live/hls/bff8529922344209985b6e49baa9555a/efa2543628fc4a7ea93d3d6c975f77dc-1.m3u8
+#EXTINF:-1 tvg-name="怀仁综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/怀仁综合.png" group-title="☘️山西频道",怀仁综合
+http://1yp7hc5p.live.sxmty.com/live/hls/bff8529922344209985b6e49baa9555a/efa2543628fc4a7ea93d3d6c975f77dc.m3u8?zshanxd
+#EXTINF:-1 tvg-name="武乡新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/武乡新闻综合.png" group-title="☘️山西频道",武乡新闻综合
+http://uzoiczhh.live.sxmty.com/live/hls/0d41f1480c4042d49927858f01fde707/53130407737b417b9a6259b57246bae3.m3u8?zshanxd
+#EXTINF:-1 tvg-name="汾西综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/汾西综合.png" group-title="☘️山西频道",汾西综合
+https://qmmqvzoz.live.sxmty.com/live/hls/f24f8a390c084386a564074c9260100c/be3fdf07606145739ab2c4b80fe0136a.m3u8?zshanxd
+#EXTINF:-1 tvg-name="祁县新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/祁县新闻综合.png" group-title="☘️山西频道",祁县新闻综合
+http://ggpagerl.live.sxmty.com/live/hls/b350dc1ac5da45c2b2233f6eb122ddf4/49d3766c7f204685a2a8f027b234c33d.m3u8?zshanxd
+#EXTINF:-1 tvg-name="阳曲综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/阳曲综合.png" group-title="☘️山西频道",阳曲综合
+https://83awgyp5.live.sxmty.com/live/hls/6f6f4b36f9bd42628b718b595ba507ed/724b7e8907a8414d873eb2a2f69bfa18.m3u8?zshanxd
+#EXTINF:-1 tvg-name="黄山新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黄山新闻综合.png" group-title="☘️安徽频道",黄山新闻综合
+http://hslive.hsnewsnet.com/lsdream/hve9Wjs/1000/live.m3u8
+#EXTINF:-1 tvg-name="黄山公共生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黄山公共生活.png" group-title="☘️安徽频道",黄山公共生活
+http://hslive.hsnewsnet.com/lsdream/iY92ady/1000/live.m3u8?zanhd
+#EXTINF:-1 tvg-name="祁门综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/祁门综合.png" group-title="☘️安徽频道",祁门综合
+rtmp://tv.qmxrmt.com/chan/ch1?zanhd#rtmp://tv.qmxrmt.com/chan/ch1
+#EXTINF:-1 tvg-name="滁州科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/滁州科教.png" group-title="☘️安徽频道",滁州科教
+http://live.cztv.cc:85/live/sjpd.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
+#EXTINF:-1 tvg-name="滁州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/滁州新闻综合.png" group-title="☘️安徽频道",滁州新闻综合
+http://live.cztv.cc:85/live/xwpd.m3u8
+#EXTINF:-1 tvg-name="滁州市广播电视台 新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/滁州市广播电视台 新闻综合.png" group-title="☘️安徽频道",滁州市广播电视台 新闻综合
+http://live.cztv.cc:85/live/xwpd.m3u8
+#EXTINF:-1 tvg-name="滁州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/滁州公共.png" group-title="☘️安徽频道",滁州公共
+http://live.cztv.cc:85/live/ggpd.m3u8?zanhd#http://live.cztv.cc:85/live/ggpd.m3u8
+#EXTINF:-1 tvg-name="广德生活" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广德生活.png" group-title="☘️安徽频道",广德生活
+https://live.gdtv.ah.cn/live/newsTV.m3u8
+#EXTINF:-1 tvg-name="宿州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宿州新闻综合.png" group-title="☘️安徽频道",宿州新闻综合
+rtmp://live.ahsz.tv/video?token=5ee5b1c3db702657f412ed18d270cdb7/s10001-szzh
+#EXTINF:-1 tvg-name="亳州新闻" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/亳州新闻.png" group-title="☘️安徽频道",亳州新闻
+http://zbbf2.ahbztv.com/live/416.m3u8?zanhd
+#EXTINF:-1 tvg-name="亳州农村" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/亳州农村.png" group-title="☘️安徽频道",亳州农村
+http://zbbf2.ahbztv.com/live/418.m3u8
+#EXTINF:-1 tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/延边卫视.png" group-title="☘️吉林频道",延边卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227045/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eq0D3NdTUN7FuRzr8eJsbQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/延边卫视.png" group-title="☘️吉林频道",延边卫视
+http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8
+#EXTINF:-1 tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/延边卫视.png" group-title="☘️吉林频道",延边卫视
+http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001470/index.m3u8
+#EXTINF:-1 tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/延边卫视.png" group-title="☘️吉林频道",延边卫视
+http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226516/index.m3u8
+#EXTINF:-1 tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/延边卫视.png" group-title="☘️吉林频道",延边卫视
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221227045/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eq0D3NdTUN7FuRzr8eJsbQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/延边卫视.png" group-title="☘️吉林频道",延边卫视
+http://tvbox6.com/tv/bfgd.php?id=117
+#EXTINF:-1 tvg-name="延边卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/延边卫视.png" group-title="☘️吉林频道",延边卫视
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8
+#EXTINF:-1 tvg-name="长白朝语" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/长白朝语.png" group-title="☘️吉林频道",长白朝语
+http://hplayer1.juyun.tv:80/camera/11344136.m3u8
+#EXTINF:-1 tvg-name="文山州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/文山州公共.png" group-title="☘️云南频道",文山州公共
+http://m3u8.channel.wsrtv.com.cn/cms/videos/nmip-media/channellive/channel8/playlist.m3u8
+#EXTINF:-1 tvg-name="文山州公共" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/文山州公共.png" group-title="☘️云南频道",文山州公共
+http://m3u8.channel.wsrtv.com.cn/cms/videos/nmip-media/channellive/channel8/playlist.m3u8?zyund
+#EXTINF:-1 tvg-name="文山州新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/文山州新闻综合.png" group-title="☘️云南频道",文山州新闻综合
+http://m3u8.channel.wsrtv.com.cn/cms/videos/nmip-media/channellive/channel7/playlist.m3u8?zyund
+#EXTINF:-1 tvg-name="易门综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/易门综合.png" group-title="☘️云南频道",易门综合
+https://zb-live.ynurl.com/yimen/3b75a2f9-7941-46b7-992d-a9796fbca5fe.m3u8
+#EXTINF:-1 tvg-name="陇川综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/陇川综合.png" group-title="☘️云南频道",陇川综合
+https://zb-live.ynurl.com/longchuan/58f88df3-605e-4c57-865c-8e8f85241ca1.m3u8
+#EXTINF:-1 tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安多卫视.png" group-title="☘️青海频道",安多卫视
+http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8
+#EXTINF:-1 tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安多卫视.png" group-title="☘️青海频道",安多卫视
+http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225659/index.m3u8
+#EXTINF:-1 tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安多卫视.png" group-title="☘️青海频道",安多卫视
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8
+#EXTINF:-1 tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安多卫视.png" group-title="☘️青海频道",安多卫视
+https://liveout.xntv.tv/a65jur/96iln2.m3u8
+#EXTINF:-1 tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安多卫视.png" group-title="☘️青海频道",安多卫视
+https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd
+#EXTINF:-1 tvg-name="安多卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/安多卫视.png" group-title="☘️青海频道",安多卫视
+rtmp://liveout.xntv.tv/a65jur/96iln2
+#EXTINF:-1 tvg-name="西宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西宁新闻综合.png" group-title="☘️青海频道",西宁新闻综合
+https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd#https://liveout.xntv.tv/a65jur/90p2i1.m3u8#http://dtrmlive.qhdtrm.cn/xnds/sd/live.m3u8
+#EXTINF:-1 tvg-name="西宁新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西宁新闻综合.png" group-title="☘️青海频道",西宁新闻综合
+https://liveout.xntv.tv/a65jur/96iln2.m3u8?zqinghd
+#EXTINF:-1 tvg-name="西宁生活服务" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西宁生活服务.png" group-title="☘️青海频道",西宁生活服务
+https://liveout.xntv.tv/a65jur/90p2i1.m3u8
+#EXTINF:-1 tvg-name="黑龙江文体" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江文体.png" group-title="☘️黑龙江频道",黑龙江文体
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226239/index.m3u8
+#EXTINF:-1 tvg-name="黑龙江文体" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江文体.png" group-title="☘️黑龙江频道",黑龙江文体
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226239/index.m3u8
+#EXTINF:-1 tvg-name="黑龙江新闻法治" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江新闻法治.png" group-title="☘️黑龙江频道",黑龙江新闻法治
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226330/index.m3u8
+#EXTINF:-1 tvg-name="黑龙江影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江影视.png" group-title="☘️黑龙江频道",黑龙江影视
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226298/index.m3u8
+#EXTINF:-1 tvg-name="黑龙江影视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江影视.png" group-title="☘️黑龙江频道",黑龙江影视
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226298/index.m3u8
+#EXTINF:-1 tvg-name="黑龙江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江都市.png" group-title="☘️黑龙江频道",黑龙江都市
+http://[2409:8087:1a01:df::4055]:80/TVOD/88888888/224/3221225969/main.m3u8
+#EXTINF:-1 tvg-name="黑龙江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江都市.png" group-title="☘️黑龙江频道",黑龙江都市
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226301/index.m3u8
+#EXTINF:-1 tvg-name="黑龙江都市" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江都市.png" group-title="☘️黑龙江频道",黑龙江都市
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226301/index.m3u8
+#EXTINF:-1 tvg-name="黑龙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江少儿.png" group-title="☘️黑龙江频道",黑龙江少儿
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226304/index.m3u8
+#EXTINF:-1 tvg-name="黑龙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江少儿.png" group-title="☘️黑龙江频道",黑龙江少儿
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226304/index.m3u8
+#EXTINF:-1 tvg-name="黑龙江科教" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑龙江科教.png" group-title="☘️黑龙江频道",黑龙江科教
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226242/index.m3u8
+#EXTINF:-1 tvg-name="鹤岗新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/鹤岗新闻综合.png" group-title="☘️黑龙江频道",鹤岗新闻综合
+http://[2409:8087:1a01:df::4059]:80/TVOD/88888888/224/3221226073/main.m3u8
+#EXTINF:-1 tvg-name="鹤岗新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/鹤岗新闻综合.png" group-title="☘️黑龙江频道",鹤岗新闻综合
+http://[2409:8087:1a01:df::4060]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226534/index.m3u8
+#EXTINF:-1 tvg-name="佳木斯新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/佳木斯新闻综合.png" group-title="☘️黑龙江频道",佳木斯新闻综合
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226451/index.m3u8
+#EXTINF:-1 tvg-name="齐齐哈尔新闻综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/齐齐哈尔新闻综合.png" group-title="☘️黑龙江频道",齐齐哈尔新闻综合
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226437/index.m3u8
+#EXTINF:-1 tvg-name="齐齐哈尔经济法制" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/齐齐哈尔经济法制.png" group-title="☘️黑龙江频道",齐齐哈尔经济法制
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226555/index.m3u8
+#EXTINF:-1 tvg-name="双鸭山综合" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/双鸭山综合.png" group-title="☘️黑龙江频道",双鸭山综合
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226529/index.m3u8
+#EXTINF:-1 tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC家庭影院.png" group-title="🎬电影频道",CHC家庭影院
+http://42.238.243.56:8012/rtp/225.1.4.209:1262
+#EXTINF:-1 tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC家庭影院.png" group-title="🎬电影频道",CHC家庭影院
+http://ndnas.top:3300/udp/225.1.4.209:1262
+#EXTINF:-1 tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC家庭影院.png" group-title="🎬电影频道",CHC家庭影院
+http://122.189.103.90:8010/rtp/228.0.0.211:6108
+#EXTINF:-1 tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC家庭影院.png" group-title="🎬电影频道",CHC家庭影院
+http://qjrhc.jydjd.top:2911/udp/224.1.100.149:11111
+#EXTINF:-1 tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC家庭影院.png" group-title="🎬电影频道",CHC家庭影院
+http://gat.bkpcp.top/ymg.php?id=jtyy
+#EXTINF:-1 tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC家庭影院.png" group-title="🎬电影频道",CHC家庭影院
+http://eastscreen.tv/ooooo.php
+#EXTINF:-1 tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC家庭影院.png" group-title="🎬电影频道",CHC家庭影院
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807601b19dd/index.m3u8?m3u8_level=2
+#EXTINF:-1 tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC家庭影院.png" group-title="🎬电影频道",CHC家庭影院
+http://eastscreen.tv/ooooo.php?id=chcjt
+#EXTINF:-1 tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC家庭影院.png" group-title="🎬电影频道",CHC家庭影院
+http://sport.pendy.dpdns.org/migu/644368373?token=BCDxUPC2aE0y0iz8JYzYhWA21b8DBPXm4Tw9nHe0T-ftD1MRmsBCXZPPiHXeDz7cNybVmmXGazeeaHKpxyYgEA
+#EXTINF:-1 tvg-name="CHC家庭影院" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC家庭影院.png" group-title="🎬电影频道",CHC家庭影院
+http://z.b.bkpcp.top/m.php?id=jtyy
+#EXTINF:-1 tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC动作电影.png" group-title="🎬电影频道",CHC动作电影
+http://ndnas.top:3300/udp/225.1.4.208:1261
+#EXTINF:-1 tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC动作电影.png" group-title="🎬电影频道",CHC动作电影
+http://42.238.243.56:8012/rtp/225.1.4.208:1261
+#EXTINF:-1 tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC动作电影.png" group-title="🎬电影频道",CHC动作电影
+http://ds920.dsmynas.net:5555/rtp/226.0.2.94:8012%24%E5%B1%B1%E8%A5%BFuni2+
+#EXTINF:-1 tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC动作电影.png" group-title="🎬电影频道",CHC动作电影
+http://122.189.103.90:8010/rtp/228.0.0.212:6108
+#EXTINF:-1 tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC动作电影.png" group-title="🎬电影频道",CHC动作电影
+http://z.b.bkpcp.top/m.php
+#EXTINF:-1 tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC动作电影.png" group-title="🎬电影频道",CHC动作电影
+http://eastscreen.tv/ooooo.php
+#EXTINF:-1 tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC动作电影.png" group-title="🎬电影频道",CHC动作电影
+http://[2409:8087:1a01:df::4021]:80/TVOD/88888888/224/3221225555/main.m3u8
+#EXTINF:-1 tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC动作电影.png" group-title="🎬电影频道",CHC动作电影
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380763222d00/index.m3u8?m3u8_level=2
+#EXTINF:-1 tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC动作电影.png" group-title="🎬电影频道",CHC动作电影
+http://eastscreen.tv/ooooo.php?id=chcdz
+#EXTINF:-1 tvg-name="CHC动作电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CHC动作电影.png" group-title="🎬电影频道",CHC动作电影
+https://stream.freetv.fun/2f2e29b8759a2458730dc1f3686024472691952a50e787fe075944d0cb17f36e.ctv
+#EXTINF:-1 tvg-name="淘剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/淘剧场.png" group-title="🎬电影频道",淘剧场
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887497.m3u8
+#EXTINF:-1 tvg-name="淘剧场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/淘剧场.png" group-title="🎬电影频道",淘剧场
+http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226553/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EQaJ92NID2SpQlY6_VJVogg%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNOuQYJeiYEeFWTkFfE86Vq-%2CEND
+#EXTINF:-1 tvg-name="淘娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/淘娱乐.png" group-title="🎬电影频道",淘娱乐
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887499.m3u8
+#EXTINF:-1 tvg-name="淘娱乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/淘娱乐.png" group-title="🎬电影频道",淘娱乐
+http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226551/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ex0efg9fpenP8E8lWJUb5Lg%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNg3bzRax0E9tLmO9xgXVx8%2CEND
+#EXTINF:-1 tvg-name="淘电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/淘电影.png" group-title="🎬电影频道",淘电影
+http://dsj.motem.top:8880/bptv/10000100000000050000000003887498.m3u8
+#EXTINF:-1 tvg-name="淘电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/淘电影.png" group-title="🎬电影频道",淘电影
+http://yc.myds.me:35455/bptv/10000100000000050000000003887498.m3u8
+#EXTINF:-1 tvg-name="淘电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/淘电影.png" group-title="🎬电影频道",淘电影
+http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226552/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EXOsrWMA-UCdUl1hQSR9EKw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNg3bzRax0E9tLmO9xgXVx8%2CEND
+#EXTINF:-1 tvg-name="NewTV惊悚悬疑" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/NewTV惊悚悬疑.png" group-title="🎬电影频道",NewTV惊悚悬疑
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8
+#EXTINF:-1 tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓电影.png" group-title="🎬电影频道",黑莓电影
+http://[2409:8087:1:20:20::27]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8
+#EXTINF:-1 tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓电影.png" group-title="🎬电影频道",黑莓电影
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225764/2/index.m3u8
+#EXTINF:-1 tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓电影.png" group-title="🎬电影频道",黑莓电影
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225769/2/index.m3u8
+#EXTINF:-1 tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓电影.png" group-title="🎬电影频道",黑莓电影
+http://[2409:8087:1a01:df::4001]:80/TVOD/88888888/224/3221225681/main.m3u8
+#EXTINF:-1 tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓电影.png" group-title="🎬电影频道",黑莓电影
+http://[2409:8087:1a0b:df::4014]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225743/index.m3u8
+#EXTINF:-1 tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓电影.png" group-title="🎬电影频道",黑莓电影
+http://[2409:8087:1a0b:df::4014]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225743/index.m3u8
+#EXTINF:-1 tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓电影.png" group-title="🎬电影频道",黑莓电影
+http://[2409:8087:2001:20:2800:0:df6e:eb08]/ott.mobaibox.com/PLTV/3/224/3221227520/index.m3u8
+#EXTINF:-1 tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓电影.png" group-title="🎬电影频道",黑莓电影
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkBVQL3MtyiM0GGQzuPjqAQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓电影.png" group-title="🎬电影频道",黑莓电影
+http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225743/1.m3u8
+#EXTINF:-1 tvg-name="黑莓电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓电影.png" group-title="🎬电影频道",黑莓电影
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8
+#EXTINF:-1 tvg-name="靖天映画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/靖天映画.png" group-title="🎬电影频道",靖天映画
+https://tv.iill.top/litv/4gtv-4gtv055
+#EXTINF:-1 tvg-name="靖天戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/靖天戏剧.png" group-title="🎬电影频道",靖天戏剧
+http://serv00.bkpcp.top/litv3.php?id=4gtv-4gtv058
+#EXTINF:-1 tvg-name="靖天戏剧" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/靖天戏剧.png" group-title="🎬电影频道",靖天戏剧
+https://tv.iill.top/litv/4gtv-4gtv058
+#EXTINF:-1 tvg-name="IPTV经典电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/IPTV经典电影.png" group-title="🎬电影频道",IPTV经典电影
+http://43.138.0.72:35455/yy/1382754187
+#EXTINF:-1 tvg-name="天映经典" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天映经典.png" group-title="🎬电影频道",天映经典
+https://cdn9.163189.xyz/smt1.1.php
+#EXTINF:-1 tvg-name="星空卫视" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/星空卫视.png" group-title="🎬电影频道",星空卫视
+http://wouu.net:9977/udp/239.93.0.156:2193
+#EXTINF:-1 tvg-name="东森电影" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/东森电影.png" group-title="🎬电影频道",东森电影
+http://mytv.cdn.com.mp/live/dsdy/stream.m3u8
+#EXTINF:-1 tvg-name="咪咕直播2" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播2.png" group-title="🎥咪咕直播",咪咕直播2
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000001000005969/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000005969&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播3" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播3.png" group-title="🎥咪咕直播",咪咕直播3
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000001000007218/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000007218&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播4" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播4.png" group-title="🎥咪咕直播",咪咕直播4
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000001000008001/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000008001&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播5.png" group-title="🎥咪咕直播",咪咕直播5
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000001000008176/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000008176&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播6" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播6.png" group-title="🎥咪咕直播",咪咕直播6
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000001000008379/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000008379&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播7" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播7.png" group-title="🎥咪咕直播",咪咕直播7
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000001000010129/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000010129&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播8" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播8.png" group-title="🎥咪咕直播",咪咕直播8
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000001000010948/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000010948&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播9" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播9.png" group-title="🎥咪咕直播",咪咕直播9
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000001000028638/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000028638&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播10" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播10.png" group-title="🎥咪咕直播",咪咕直播10
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000001000031494/index.m3u8?channel-id=FifastbLive&Contentid=3000000001000031494&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播11" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播11.png" group-title="🎥咪咕直播",咪咕直播11
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000000097/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000000097&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播12" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播12.png" group-title="🎥咪咕直播",咪咕直播12
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000002019/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000002019&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播13" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播13.png" group-title="🎥咪咕直播",咪咕直播13
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000002809/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000002809&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播14" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播14.png" group-title="🎥咪咕直播",咪咕直播14
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000003915/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000003915&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播15.png" group-title="🎥咪咕直播",咪咕直播15
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000004193/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000004193&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播16" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播16.png" group-title="🎥咪咕直播",咪咕直播16
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000005837/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000005837&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播17" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播17.png" group-title="🎥咪咕直播",咪咕直播17
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000006077/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000006077&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播18" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播18.png" group-title="🎥咪咕直播",咪咕直播18
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000006658/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000006658&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播19" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播19.png" group-title="🎥咪咕直播",咪咕直播19
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000009788/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000009788&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播20" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播20.png" group-title="🎥咪咕直播",咪咕直播20
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000010833/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000010833&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播21" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播21.png" group-title="🎥咪咕直播",咪咕直播21
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000011297/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000011297&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播22" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播22.png" group-title="🎥咪咕直播",咪咕直播22
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000011518/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000011518&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播23" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播23.png" group-title="🎥咪咕直播",咪咕直播23
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000012558/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000012558&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播24" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播24.png" group-title="🎥咪咕直播",咪咕直播24
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000012616/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000012616&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播25" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播25.png" group-title="🎥咪咕直播",咪咕直播25
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000015470/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000015470&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播26" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播26.png" group-title="🎥咪咕直播",咪咕直播26
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000015560/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000015560&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播27" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播27.png" group-title="🎥咪咕直播",咪咕直播27
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000017678/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000017678&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播28" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播28.png" group-title="🎥咪咕直播",咪咕直播28
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000019839/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000019839&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播29" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播29.png" group-title="🎥咪咕直播",咪咕直播29
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000021904/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000021904&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播30" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播30.png" group-title="🎥咪咕直播",咪咕直播30
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000023434/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000023434&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播31" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播31.png" group-title="🎥咪咕直播",咪咕直播31
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000025380/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000025380&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播32" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播32.png" group-title="🎥咪咕直播",咪咕直播32
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000027691/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000027691&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播33" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播33.png" group-title="🎥咪咕直播",咪咕直播33
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000010000031669/index.m3u8?channel-id=FifastbLive&Contentid=3000000010000031669&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播34" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播34.png" group-title="🎥咪咕直播",咪咕直播34
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000020000011518/index.m3u8?channel-id=FifastbLive&Contentid=3000000020000011518&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播35" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播35.png" group-title="🎥咪咕直播",咪咕直播35
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000020000011519/index.m3u8?channel-id=FifastbLive&Contentid=3000000020000011519&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播36" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播36.png" group-title="🎥咪咕直播",咪咕直播36
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000020000011520/index.m3u8?channel-id=FifastbLive&Contentid=3000000020000011520&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播37" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播37.png" group-title="🎥咪咕直播",咪咕直播37
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000020000011521/index.m3u8?channel-id=FifastbLive&Contentid=3000000020000011521&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="咪咕直播38" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/咪咕直播38.png" group-title="🎥咪咕直播",咪咕直播38
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/3000000020000011522/index.m3u8?channel-id=FifastbLive&Contentid=3000000020000011522&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="🏀体育频道",CCTV-5
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="🏀体育频道",CCTV-5
+http://[2409:8087:74f0:22::4]:6410/270000001111/1110000305/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="🏀体育频道",CCTV-5
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226019/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="🏀体育频道",CCTV-5
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226019/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="🏀体育频道",CCTV-5
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226019/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="🏀体育频道",CCTV-5
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226019/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="🏀体育频道",CCTV-5
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226019/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="🏀体育频道",CCTV-5
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225633/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="🏀体育频道",CCTV-5
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226019/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5.png" group-title="🏀体育频道",CCTV-5
+http://[2409:8087:2001:20:2800:0:df6e:eb22]/ott.mobaibox.com/PLTV/4/224/3221228502/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="🏀体育频道",CCTV-5+
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226894/1.m3u8
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="🏀体育频道",CCTV-5+
+http://[2409:8087:74f0:22::4]:6410/270000001111/1110000306/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="🏀体育频道",CCTV-5+
+http://[2409:8087:74f0:22::4]:6410/270000001128/9900000506/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="🏀体育频道",CCTV-5+
+http://[2409:8087:74f0:22::4]:6410/270000001128/9900000507/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="🏀体育频道",CCTV-5+
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225603/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="🏀体育频道",CCTV-5+
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225603/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="🏀体育频道",CCTV-5+
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225603/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="🏀体育频道",CCTV-5+
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225706/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="🏀体育频道",CCTV-5+
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225603/index.m3u8
+#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV5+.png" group-title="🏀体育频道",CCTV-5+
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221225603/index.m3u8
+#EXTINF:-1 tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东体育.png" group-title="🏀体育频道",广东体育
+http://cdn2.163189.xyz/live/gdty/stream.m3u8
+#EXTINF:-1 tvg-name="广东体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/广东体育.png" group-title="🏀体育频道",广东体育
+http://cdn2.132.us.kg/live/gdty/stream.m3u8
+#EXTINF:-1 tvg-name="纬来体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/纬来体育.png" group-title="🏀体育频道",纬来体育
+https://smart.pendy.dpdns.org/Smart.php
+#EXTINF:-1 tvg-name="五星体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/五星体育.png" group-title="🏀体育频道",五星体育
+http://[2409:8087:5e08:24::15]:6610/000000001000/2000000002000000007/index.m3u8?IAS
+#EXTINF:-1 tvg-name="五星体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/五星体育.png" group-title="🏀体育频道",五星体育
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000002000000007/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000007&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 tvg-name="劲爆体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/劲爆体育.png" group-title="🏀体育频道",劲爆体育
+http://z.b.bkpcp.top/m.php?id=jbty
+#EXTINF:-1 tvg-name="劲爆体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/劲爆体育.png" group-title="🏀体育频道",劲爆体育
+http://[2409:8087:5e01:24::8]:6610/000000001000/2000000002000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000008&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 tvg-name="劲爆体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/劲爆体育.png" group-title="🏀体育频道",劲爆体育
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000002000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000008&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 tvg-name="爱体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/爱体育.png" group-title="🏀体育频道",爱体育
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000004000000060/index.m3u8
+#EXTINF:-1 tvg-name="爱体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/爱体育.png" group-title="🏀体育频道",爱体育
+http://[2409:8087:5e08:24::17]:6610/000000001000/2000000004000000060/index.m3u8
+#EXTINF:-1 tvg-name="爱体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/爱体育.png" group-title="🏀体育频道",爱体育
+http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000000/index.m3u8
+#EXTINF:-1 tvg-name="爱体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/爱体育.png" group-title="🏀体育频道",爱体育
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000004000000060/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000060&IASHttpSessionId=OTT19019320240419154124000281
+#EXTINF:-1 tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/超级体育.png" group-title="🏀体育频道",超级体育
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8
+#EXTINF:-1 tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/超级体育.png" group-title="🏀体育频道",超级体育
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226232/1.m3u8
+#EXTINF:-1 tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/超级体育.png" group-title="🏀体育频道",超级体育
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226348/1.m3u8
+#EXTINF:-1 tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/超级体育.png" group-title="🏀体育频道",超级体育
+http://yc.myds.me:35455/itv/1000000001000009601.m3u8?cdn=ystenlive
+#EXTINF:-1 tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/超级体育.png" group-title="🏀体育频道",超级体育
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8
+#EXTINF:-1 tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/超级体育.png" group-title="🏀体育频道",超级体育
+http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225715/index.m3u8
+#EXTINF:-1 tvg-name="超级体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/超级体育.png" group-title="🏀体育频道",超级体育
+http://[2409:8087:74d9:21::6]:80/270000001128/9900000020/index.m3u8
+#EXTINF:-1 tvg-name="精品体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/精品体育.png" group-title="🏀体育频道",精品体育
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226328/1.m3u8
+#EXTINF:-1 tvg-name="精品体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/精品体育.png" group-title="🏀体育频道",精品体育
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8
+#EXTINF:-1 tvg-name="精品体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/精品体育.png" group-title="🏀体育频道",精品体育
+http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225674/index.m3u8
+#EXTINF:-1 tvg-name="精品体育" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/精品体育.png" group-title="🏀体育频道",精品体育
+http://[2409:8087:74d9:21::6]:80/270000001128/9900000102/index.m3u8
+#EXTINF:-1 tvg-name="睛彩篮球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/睛彩篮球.png" group-title="🏀体育频道",睛彩篮球
+http://[2409:8087:1a01:df::4055]:80/TVOD/88888888/224/3221225901/main.m3u8
+#EXTINF:-1 tvg-name="睛彩篮球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/睛彩篮球.png" group-title="🏀体育频道",睛彩篮球
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226147/index.m3u8
+#EXTINF:-1 tvg-name="睛彩广场舞" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/睛彩广场舞.png" group-title="🏀体育频道",睛彩广场舞
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226472/index.m3u8
+#EXTINF:-1 tvg-name="风云足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/风云足球.png" group-title="🏀体育频道",风云足球
+http://[2409:8087:7001:20:2::3]/dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226984/index.m3u8
+#EXTINF:-1 tvg-name="魅力足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/魅力足球.png" group-title="🏀体育频道",魅力足球
+http://z.b.bkpcp.top/m.php?id=mlzq
+#EXTINF:-1 tvg-name="魅力足球" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/魅力足球.png" group-title="🏀体育频道",魅力足球
+http://gat.bkpcp.top/ymg.php?id=mlzq
+#EXTINF:-1 tvg-name="天元围棋" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天元围棋.png" group-title="🏀体育频道",天元围棋
+http://wouu.net:9977/udp/239.93.42.55:5140
+#EXTINF:-1 tvg-name="快乐垂钓" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/快乐垂钓.png" group-title="🏀体育频道",快乐垂钓
+http://[2409:8087:5e08:24::2]:6610/000000001000/5000000011000031206/index.m3u8?channel-id=bestzb&Contentid=5000000011000031206&livemode=1&stbId=3
+#EXTINF:-1 tvg-name="JJ斗地主" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/JJ斗地主.png" group-title="🏀体育频道",JJ斗地主
+http://tc-tct.douyucdn2.cn/dyliveflv1a/488743rAHScWyyII_2000.m3u8?wsAuth=fd695c444eeee99cc6122ed396c805ba&token=cpn-androidmpro-0-488743-df8b1830ef2e6ce156759645768df95bf77749da61fcc901&logo=0&expire=0&did=d010b07dcb997ada9934081c873542f0&origin=tct&vhost=play2
+#EXTINF:-1 tvg-name="JJ斗地主" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/JJ斗地主.png" group-title="🏀体育频道",JJ斗地主
+https://lunbo.freetv.top/douyu/488743
+#EXTINF:-1 tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/动漫秀场.png" group-title="🪁动画频道",动漫秀场
+http://[2409:8087:1e03:21::42]:6610/cms001/ch00000090990000001196/index.m3u8
+#EXTINF:-1 tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/动漫秀场.png" group-title="🪁动画频道",动漫秀场
+http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000011000031113/1.m3u8
+#EXTINF:-1 tvg-name="动漫秀场" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/动漫秀场.png" group-title="🪁动画频道",动漫秀场
+http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226197/index.m3u8
+#EXTINF:-1 tvg-name="青春动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/青春动漫.png" group-title="🪁动画频道",青春动漫
+http://wouu.net:9977/udp/239.93.0.146:5140
+#EXTINF:-1 tvg-name="青春动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/青春动漫.png" group-title="🪁动画频道",青春动漫
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000011000288008/index.m3u8?channel-id=bestzb&Contentid=5000000011000288008&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="爱动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/爱动漫.png" group-title="🪁动画频道",爱动漫
+http://[2409:8087:5e08:24::17]:6610/000000001000/2000000004000000059/index.m3u8
+#EXTINF:-1 tvg-name="爱动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/爱动漫.png" group-title="🪁动画频道",爱动漫
+http://[2409:8087:5e08:24::11]:6610/000000001000/2000000004000000059/index.m3u8
+#EXTINF:-1 tvg-name="爱动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/爱动漫.png" group-title="🪁动画频道",爱动漫
+http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000000/index.m3u8
+#EXTINF:-1 tvg-name="宝宝动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/宝宝动画.png" group-title="🪁动画频道",宝宝动画
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000011000288002/index.m3u8?channel-id=bestzb&Contentid=5000000011000288002&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/优漫卡通.png" group-title="🪁动画频道",优漫卡通
+http://z.b.bkpcp.top/m.php?id=ymkt
+#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/优漫卡通.png" group-title="🪁动画频道",优漫卡通
+http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8
+#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/优漫卡通.png" group-title="🪁动画频道",优漫卡通
+http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225656/index.m3u8
+#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/优漫卡通.png" group-title="🪁动画频道",优漫卡通
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225656/2.m3u8
+#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/优漫卡通.png" group-title="🪁动画频道",优漫卡通
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221227007/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EhHDWGhkwx_zJcJUYE9TAaA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/优漫卡通.png" group-title="🪁动画频道",优漫卡通
+http://wouu.net:9977/udp/239.93.0.251:5140
+#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/优漫卡通.png" group-title="🪁动画频道",优漫卡通
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226932/1.m3u8
+#EXTINF:-1 tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/金鹰卡通.png" group-title="🪁动画频道",金鹰卡通
+http://218.1.137.125:4022/rtp/239.45.0.38:5140
+#EXTINF:-1 tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/金鹰卡通.png" group-title="🪁动画频道",金鹰卡通
+http://[2409:8087:1a0b:df::4008]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225653/index.m3u8
+#EXTINF:-1 tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/金鹰卡通.png" group-title="🪁动画频道",金鹰卡通
+http://[2409:8087:1a0b:df::4008]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225653/index.m3u8
+#EXTINF:-1 tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/金鹰卡通.png" group-title="🪁动画频道",金鹰卡通
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225653/2.m3u8
+#EXTINF:-1 tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/金鹰卡通.png" group-title="🪁动画频道",金鹰卡通
+http://wouu.net:9977/udp/239.93.0.108:5140
+#EXTINF:-1 tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/金鹰卡通.png" group-title="🪁动画频道",金鹰卡通
+http://nas.suntao.online:35455/bptv/10000100000000050000000004796942.m3u8
+#EXTINF:-1 tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/金鹰卡通.png" group-title="🪁动画频道",金鹰卡通
+http://dsj.motem.top:8880/bptv/10000100000000050000000004796942.m3u8
+#EXTINF:-1 tvg-name="金鹰卡通" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/金鹰卡通.png" group-title="🪁动画频道",金鹰卡通
+http://[2409:8087:5e08:24::2]:6610/000000001000/5000000006000040024/index.m3u8?channel-id=bestzb&Contentid=5000000006000040024&livemode=1&stbId=3
+#EXTINF:-1 tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓动画.png" group-title="🪁动画频道",黑莓动画
+http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8
+#EXTINF:-1 tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓动画.png" group-title="🪁动画频道",黑莓动画
+http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225662/index.m3u8
+#EXTINF:-1 tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓动画.png" group-title="🪁动画频道",黑莓动画
+http://[2409:8087:1a01:df::4007]:80/TVOD/88888888/224/3221225529/main.m3u8
+#EXTINF:-1 tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓动画.png" group-title="🪁动画频道",黑莓动画
+http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221226935/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EUc618y1E09GbQwwuOzEKaQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓动画.png" group-title="🪁动画频道",黑莓动画
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226935/1.m3u8
+#EXTINF:-1 tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓动画.png" group-title="🪁动画频道",黑莓动画
+http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8
+#EXTINF:-1 tvg-name="黑莓动画" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/黑莓动画.png" group-title="🪁动画频道",黑莓动画
+http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225662/index.m3u8
+#EXTINF:-1 tvg-name="24H国漫热播" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/24H国漫热播.png" group-title="🪁动画频道",24H国漫热播
+https://www.goodiptv.club/yy/1353937086
+#EXTINF:-1 tvg-name="浙江少儿" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/浙江少儿.png" group-title="🪁动画频道",浙江少儿
+https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8
+#EXTINF:-1 tvg-name="七龙珠" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/七龙珠.png" group-title="🪁动画频道",七龙珠
+http://tv.666150.xyz/huya.php?id=11601966
+#EXTINF:-1 tvg-name="火影忍者" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/火影忍者.png" group-title="🪁动画频道",火影忍者
+https://hd.ijycnd.com/play/Yer3NWLa/index.m3u8
+#EXTINF:-1 tvg-name="海绵宝宝" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/海绵宝宝.png" group-title="🪁动画频道",海绵宝宝
+https://live.metshop.top/douyu/3949681
+#EXTINF:-1 tvg-name="中华小当家" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/中华小当家.png" group-title="🪁动画频道",中华小当家
+https://live.metshop.top/huya/11342413
+#EXTINF:-1 tvg-name="中华小当家" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/中华小当家.png" group-title="🪁动画频道",中华小当家
+http://tv.666150.xyz/huya.php?id=11342413
+#EXTINF:-1 tvg-name="猫和老鼠" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/猫和老鼠.png" group-title="🪁动画频道",猫和老鼠
+http://tv.666150.xyz/huya.php?id=11352879
+#EXTINF:-1 tvg-name="经典动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/经典动漫.png" group-title="🪁动画频道",经典动漫
+http://luobo.bkpcp.top/yy/24180320
+#EXTINF:-1 tvg-name="经典动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/经典动漫.png" group-title="🪁动画频道",经典动漫
+https://www.goodiptv.club/yy/22777075
+#EXTINF:-1 tvg-name="经典动漫" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/经典动漫.png" group-title="🪁动画频道",经典动漫
+https://www.goodiptv.club/yy/24180320
+#EXTINF:-1 tvg-name="蜡笔小新" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/蜡笔小新.png" group-title="🪁动画频道",蜡笔小新
+http://home.kuaidi521.com:35455/bilibili/30837590
+#EXTINF:-1 tvg-name="蜡笔小新" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/蜡笔小新.png" group-title="🪁动画频道",蜡笔小新
+http://www.douzhicloud.site:35455/bilibili/30837590
+#EXTINF:-1 tvg-name="漫画解说" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/漫画解说.png" group-title="🪁动画频道",漫画解说
+http://luobo.bkpcp.top/yy/1382735568
+#EXTINF:-1 tvg-name="漫画解说" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/漫画解说.png" group-title="🪁动画频道",漫画解说
+https://www.goodiptv.club/douyu/5907076
+#EXTINF:-1 tvg-name="游戏风云" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/游戏风云.png" group-title="🎮游戏频道",游戏风云
+http://z.b.bkpcp.top/m.php?id=yxfy
+#EXTINF:-1 tvg-name="游戏风云" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/游戏风云.png" group-title="🎮游戏频道",游戏风云
+http://gat.bkpcp.top/ymg.php?id=yxfy
+#EXTINF:-1 tvg-name="电竞天堂" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/电竞天堂.png" group-title="🎮游戏频道",电竞天堂
+http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000011000288003/index.m3u8?channel-id=bestzb&Contentid=5000000011000288003&livemode=1&stbId=YanG-1989
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="🎵音乐频道",CCTV-15
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="🎵音乐频道",CCTV-15
+http://[2409:8087:74f0:22::4]:6410/270000001128/9900000512/index.m3u8
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="🎵音乐频道",CCTV-15
+http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225601/index.m3u8
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="🎵音乐频道",CCTV-15
+http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226476/index.m3u8
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="🎵音乐频道",CCTV-15
+http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226476/index.m3u8
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="🎵音乐频道",CCTV-15
+http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225641/index.m3u8
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="🎵音乐频道",CCTV-15
+http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221225601/index.m3u8
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="🎵音乐频道",CCTV-15
+http://[2409:8087:1a01:df::4033]:80/TVOD/88888888/224/3221226127/main.m3u8
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="🎵音乐频道",CCTV-15
+http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000055BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Tdo%2FUL80msfbhDYvoWpNl31Dy7jHvMl%2FzVUrNxhL1ek1YEGVDZ7lCg0LtKJY4Ku%2B8
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV15.png" group-title="🎵音乐频道",CCTV-15
+http://[2409:8087:5e01:34::38]:6610/ZTE_CMS/00000001000000060000000000000501/index.m3u8
+#EXTINF:-1 tvg-name="风云音乐" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/风云音乐.png" group-title="🎵音乐频道",风云音乐
+http://[2409:8087:7001:20:2::3]/dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226953/index.m3u8
+#EXTINF:-1 tvg-name="音乐之声" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/音乐之声.png" group-title="🎵音乐频道",音乐之声
+https://radio.0472.org/?id=641
+#EXTINF:-1 tvg-name="笑傲江湖" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/笑傲江湖.png" group-title="🏛经典剧场",笑傲江湖
+https://lunbo.freetv.top/yy/1352833750
+#EXTINF:-1 tvg-name="笑傲江湖" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/笑傲江湖.png" group-title="🏛经典剧场",笑傲江湖
+http://live.nctv.top/huya.php?id=23865142
+#EXTINF:-1 tvg-name="笑傲江湖" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/笑傲江湖.png" group-title="🏛经典剧场",笑傲江湖
+http://lu.wqwqwq.sbs/yy/1354930909
+#EXTINF:-1 tvg-name="笑傲江湖" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/笑傲江湖.png" group-title="🏛经典剧场",笑傲江湖
+http://tv.666150.xyz/huya.php?id=26355790
+#EXTINF:-1 tvg-name="笑傲江湖" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/笑傲江湖.png" group-title="🏛经典剧场",笑傲江湖
+http://tv.666150.xyz/huya.php?id=23865142
+#EXTINF:-1 tvg-name="笑傲江湖" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/笑傲江湖.png" group-title="🏛经典剧场",笑傲江湖
+https://www.goodiptv.club/yy/1354930909
+#EXTINF:-1 tvg-name="笑傲江湖" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/笑傲江湖.png" group-title="🏛经典剧场",笑傲江湖
+https://www.goodiptv.club/yy/1352833750
+#EXTINF:-1 tvg-name="笑傲江湖" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/笑傲江湖.png" group-title="🏛经典剧场",笑傲江湖
+https://live.metshop.top/yy/1354936128
+#EXTINF:-1 tvg-name="天龙八部" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天龙八部.png" group-title="🏛经典剧场",天龙八部
+http://luobo.bkpcp.top/yy/1382736855
+#EXTINF:-1 tvg-name="天龙八部" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天龙八部.png" group-title="🏛经典剧场",天龙八部
+http://www.clmy.cc:35455/yy/1355067965
+#EXTINF:-1 tvg-name="天龙八部" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天龙八部.png" group-title="🏛经典剧场",天龙八部
+https://live.metshop.top/huya/23903123
+#EXTINF:-1 tvg-name="天龙八部" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天龙八部.png" group-title="🏛经典剧场",天龙八部
+http://tv.666150.xyz/huya.php?id=20985816
+#EXTINF:-1 tvg-name="天龙八部" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天龙八部.png" group-title="🏛经典剧场",天龙八部
+https://www.goodiptv.club/yy/1351814644
+#EXTINF:-1 tvg-name="天龙八部" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天龙八部.png" group-title="🏛经典剧场",天龙八部
+https://www.goodiptv.club/yy/1382749944
+#EXTINF:-1 tvg-name="天龙八部" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/天龙八部.png" group-title="🏛经典剧场",天龙八部
+https://live.metshop.top/yy/1351814644
+#EXTINF:-1 tvg-name="鹿鼎记" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/鹿鼎记.png" group-title="🏛经典剧场",鹿鼎记
+http://live.nctv.top/douyu.php?id=12128227
+#EXTINF:-1 tvg-name="鹿鼎记" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/鹿鼎记.png" group-title="🏛经典剧场",鹿鼎记
+https://live.metshop.top/yy/28265277
+#EXTINF:-1 tvg-name="仙剑奇侠传" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/仙剑奇侠传.png" group-title="🏛经典剧场",仙剑奇侠传
+https://live.metshop.top/yy/1382749903
+#EXTINF:-1 tvg-name="西游记" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西游记.png" group-title="🏛经典剧场",西游记
+http://live.nctv.top/douyu.php?id=3700024
+#EXTINF:-1 tvg-name="西游记" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/西游记.png" group-title="🏛经典剧场",西游记
+http://tv.666150.xyz/huya.php?id=26355861
+#EXTINF:-1 tvg-name="三国演义" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/三国演义.png" group-title="🏛经典剧场",三国演义
+http://tv.666150.xyz/huya.php?id=11602081
+#EXTINF:-1 tvg-name="三国演义" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/三国演义.png" group-title="🏛经典剧场",三国演义
+https://www.goodiptv.club/yy/32788000
+#EXTINF:-1 tvg-name="三国演义" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/三国演义.png" group-title="🏛经典剧场",三国演义
+https://live.metshop.top/yy/32788000
+#EXTINF:-1 tvg-name="三国演义" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/三国演义.png" group-title="🏛经典剧场",三国演义
+https://live.metshop.top/yy/1354936241
+#EXTINF:-1 tvg-name="水浒传" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/水浒传.png" group-title="🏛经典剧场",水浒传
+http://www.clmy.cc:35455/yy/1353873252
+#EXTINF:-1 tvg-name="新白娘子传奇" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新白娘子传奇.png" group-title="🏛经典剧场",新白娘子传奇
+http://lu.wqwqwq.sbs/yy/1354490667
+#EXTINF:-1 tvg-name="新白娘子传奇" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新白娘子传奇.png" group-title="🏛经典剧场",新白娘子传奇
+http://luobo.bkpcp.top/yy/1354490667
+#EXTINF:-1 tvg-name="新白娘子传奇" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新白娘子传奇.png" group-title="🏛经典剧场",新白娘子传奇
+http://www.clmy.cc:35455/yy/1354490667
+#EXTINF:-1 tvg-name="新白娘子传奇" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新白娘子传奇.png" group-title="🏛经典剧场",新白娘子传奇
+https://www.goodiptv.club/yy/1354490667
+#EXTINF:-1 tvg-name="新白娘子传奇" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/新白娘子传奇.png" group-title="🏛经典剧场",新白娘子传奇
+https://live.metshop.top/yy/1354490667
+#EXTINF:-1 tvg-name="济公游记" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/济公游记.png" group-title="🏛经典剧场",济公游记
+https://www.goodiptv.club/yy/1355265814
+#EXTINF:-1 tvg-name="封神榜" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/封神榜.png" group-title="🏛经典剧场",封神榜
+https://lunbo.freetv.top/yy/1382797534
+#EXTINF:-1 tvg-name="封神榜" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/封神榜.png" group-title="🏛经典剧场",封神榜
+http://luobo.bkpcp.top/yy/1353426319
+#EXTINF:-1 tvg-name="封神榜" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/封神榜.png" group-title="🏛经典剧场",封神榜
+http://www.clmy.cc:35455/yy/1353426319
+#EXTINF:-1 tvg-name="封神榜" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/封神榜.png" group-title="🏛经典剧场",封神榜
+http://tv.666150.xyz/huya.php?id=29465849
+#EXTINF:-1 tvg-name="封神榜" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/封神榜.png" group-title="🏛经典剧场",封神榜
+https://www.goodiptv.club/yy/1382797534
+#EXTINF:-1 tvg-name="封神榜" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/封神榜.png" group-title="🏛经典剧场",封神榜
+https://live.metshop.top/yy/1353426319
+#EXTINF:-1 tvg-name="上海滩" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/上海滩.png" group-title="🏛经典剧场",上海滩
+http://luobo.bkpcp.top/yy/1382745184
+#EXTINF:-1 tvg-name="上海滩" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/上海滩.png" group-title="🏛经典剧场",上海滩
+https://www.goodiptv.club/yy/1382745184
+#EXTINF:-1 tvg-name="上海滩" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/上海滩.png" group-title="🏛经典剧场",上海滩
+https://live.metshop.top/yy/1382745184
+#EXTINF:-1 tvg-name="射雕英雄传" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/射雕英雄传.png" group-title="🏛经典剧场",射雕英雄传
+http://tv.666150.xyz/huya.php?id=23824164
+#EXTINF:-1 tvg-name="射雕英雄传" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/射雕英雄传.png" group-title="🏛经典剧场",射雕英雄传
+https://live.metshop.top/yy/40959929
+#EXTINF:-1 tvg-name="CCTV1" tvg-logo="https://gitee.com/mytv-android/myTVlogo/raw/main/img/CCTV1.png" group-title="🕘️更新时间",2025-07-12 08:38:32
+http://39.164.180.36:19901/tsfile/live/0001_2.m3u8?key=txiptv&playlive=0&authid=0
diff --git a/潇洒/lives/范明明.txt b/潇洒/lives/范明明.txt
new file mode 100644
index 0000000..f13ea57
--- /dev/null
+++ b/潇洒/lives/范明明.txt
@@ -0,0 +1,167 @@
+#EXTM3U x-tvg-url="https://live.fanmingming.cn/e.xml" catchup="append" catchup-source="?playseek=${(b)yyyyMMddHHmmss}-${(e)yyyyMMddHHmmss}"
+#EXTINF:-1 tvg-name="CCTV1" tvg-logo="https://live.fanmingming.cn/tv/CCTV1.png" group-title="央视频道",CCTV-1综合
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV2" tvg-logo="https://live.fanmingming.cn/tv/CCTV2.png" group-title="央视频道",CCTV-2财经
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226893/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV3" tvg-logo="https://live.fanmingming.cn/tv/CCTV3.png" group-title="央视频道",CCTV-3综艺
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226471/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV4" tvg-logo="https://live.fanmingming.cn/tv/CCTV4.png" group-title="央视频道",CCTV-4中文国际
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://live.fanmingming.cn/tv/CCTV5.png" group-title="央视频道",CCTV-5体育
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://live.fanmingming.cn/tv/CCTV5.png" group-title="央视频道",CCTV-5+体育赛事
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226894/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV6" tvg-logo="https://live.fanmingming.cn/tv/CCTV6.png" group-title="央视频道",CCTV-6电影
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226468/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV7" tvg-logo="https://live.fanmingming.cn/tv/CCTV7.png" group-title="央视频道",CCTV-7国防军事
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226946/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV8" tvg-logo="https://live.fanmingming.cn/tv/CCTV8.png" group-title="央视频道",CCTV-8电视剧
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226485/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV9" tvg-logo="https://live.fanmingming.cn/tv/CCTV9.png" group-title="央视频道",CCTV-9纪录
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV10" tvg-logo="https://live.fanmingming.cn/tv/CCTV10.png" group-title="央视频道",CCTV-10科教
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV11" tvg-logo="https://live.fanmingming.cn/tv/CCTV11.png" group-title="央视频道",CCTV-11戏曲
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV12" tvg-logo="https://live.fanmingming.cn/tv/CCTV12.png" group-title="央视频道",CCTV-12社会与法
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226942/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV13" tvg-logo="https://live.fanmingming.cn/tv/CCTV13.png" group-title="央视频道",CCTV-13新闻
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226316/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV14" tvg-logo="https://live.fanmingming.cn/tv/CCTV14.png" group-title="央视频道",CCTV-14少儿
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://live.fanmingming.cn/tv/CCTV15.png" group-title="央视频道",CCTV-15音乐
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV16" tvg-logo="https://live.fanmingming.cn/tv/CCTV16.png" group-title="央视频道",CCTV-16奥林匹克
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227002/1.m3u8?
+#EXTINF:-1 tvg-name="CCTV17" tvg-logo="https://live.fanmingming.cn/tv/CCTV17.png" group-title="央视频道",CCTV-17农业农村
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?
+#EXTINF:-1 tvg-name="北京卫视" tvg-logo="https://live.fanmingming.cn/tv/北京卫视.png" group-title="卫视频道",北京卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226900/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EcYPi33WFyhvd6SjmqUKhJg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="东方卫视" tvg-logo="https://live.fanmingming.cn/tv/东方卫视.png" group-title="卫视频道",东方卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226898/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0uh4lyjjBCCN7TCq21vSIQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="浙江卫视" tvg-logo="https://live.fanmingming.cn/tv/浙江卫视.png" group-title="卫视频道",浙江卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226899/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ETYfTgTra_pUx2cPrgZ_BDw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="江苏卫视" tvg-logo="https://live.fanmingming.cn/tv/江苏卫视.png" group-title="卫视频道",江苏卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226897/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0BmO6uHF7WFoTed__Xr3NQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://live.fanmingming.cn/tv/广东卫视.png" group-title="卫视频道",广东卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226961/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E2MGyx659D_aaDPP0qt3NgA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="湖南卫视" tvg-logo="https://live.fanmingming.cn/tv/湖南卫视.png" group-title="卫视频道",湖南卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226509/1.m3u8?zoneoffset=480&servicetype=1&icpid=&limitflux=-1&limitdur=-1&tenantId=8601&accountinfo=%7E%7EV2.0%7EIGb_ib7rnBX9_sANRKq9sg%7EpK8OKM5JoJWWbLRyLfPcUMkwWZ90MzSI9S9PDltJsYzd0ZGcS3Tkh7syciNKJa-w60mDOdwtDyoNwCx9aRgzHNH9AUREV_qvNJtXHRPzYw0%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3D%3D%3A20221022013542%2C915973%2C119.123.71.209%2C20221022013542%2C10000100000000050000000003873458%2C915973%2C-1%2C0%2C1%2C%2C%2C2%2C%2C%2C%2C2%2C%2C10000100000000060000000007253514_0%2CEND&GuardEncType=2
+#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://live.fanmingming.cn/tv/深圳卫视.png" group-title="卫视频道",深圳卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="四川卫视" tvg-logo="https://live.fanmingming.cn/tv/四川卫视.png" group-title="卫视频道",四川卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226995/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EBQiz3wrGrpG0CUSRIJ-7Jg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://live.fanmingming.cn/tv/天津卫视.png" group-title="卫视频道",天津卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="辽宁卫视" tvg-logo="https://live.fanmingming.cn/tv/辽宁卫视.png" group-title="卫视频道",辽宁卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226966/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E6qJH8Fd-zgCGx3P-Ce86cA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="黑龙江卫视" tvg-logo="https://live.fanmingming.cn/tv/黑龙江卫视.png" group-title="卫视频道",黑龙江卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226965/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7UiKL56-L86ihmTWaZ6csw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="吉林卫视" tvg-logo="https://live.fanmingming.cn/tv/吉林卫视.png" group-title="卫视频道",吉林卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227015/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EW5-3AVdwD5KlUpuA4mz7Cg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="海南卫视" tvg-logo="https://live.fanmingming.cn/tv/海南卫视.png" group-title="卫视频道",海南卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227029/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EEuBMjt2kLMD8fAO7QYER7Q%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="广西卫视" tvg-logo="https://live.fanmingming.cn/tv/广西卫视.png" group-title="卫视频道",广西卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227010/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkAhb-89sxdm9fz6-heXCuw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="河北卫视" tvg-logo="https://live.fanmingming.cn/tv/河北卫视.png" group-title="卫视频道",河北卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227014/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErSGjhI3DMaaAASPrbQJYTg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="山东卫视" tvg-logo="https://live.fanmingming.cn/tv/山东卫视.png" group-title="卫视频道",山东卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226957/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EjW26v5VaHGy1jQuIA-4EbA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="山西卫视" tvg-logo="https://live.fanmingming.cn/tv/山西卫视.png" group-title="卫视频道",山西卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227016/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ESb5Qr3NTpE2ZugIroKoyTw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="湖北卫视" tvg-logo="https://live.fanmingming.cn/tv/湖北卫视.png" group-title="卫视频道",湖北卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226952/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EREB40lnZnCEwjRy7LZuhIQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="江西卫视" tvg-logo="https://live.fanmingming.cn/tv/江西卫视.png" group-title="卫视频道",江西卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226956/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ei6ZIpVizXlewg-YfGvH8dA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="重庆卫视" tvg-logo="https://live.fanmingming.cn/tv/重庆卫视.png" group-title="卫视频道",重庆卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226963/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EjTXsJprEx2nE38tdvu5lhA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="东南卫视" tvg-logo="https://live.fanmingming.cn/tv/东南卫视.png" group-title="卫视频道",东南卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226991/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EQ6F5Mjgs0tJyEArWFL3vQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="陕西卫视" tvg-logo="https://live.fanmingming.cn/tv/陕西卫视.png" group-title="卫视频道",陕西卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226999/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EsGLKaSqf0wDZMbAjeQtfyw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="青海卫视" tvg-logo="https://live.fanmingming.cn/tv/青海卫视.png" group-title="卫视频道",青海卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227017/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EacviHy_ucMT27Ymf2iLtZA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="安徽卫视" tvg-logo="https://live.fanmingming.cn/tv/安徽卫视.png" group-title="卫视频道",安徽卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226943/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0QmKQ_slRCwvVVUUfxPVbw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="云南卫视" tvg-logo="https://live.fanmingming.cn/tv/云南卫视.png" group-title="卫视频道",云南卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227028/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGfQPqRNVeBjTMsZ48qu0SA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="贵州卫视" tvg-logo="https://live.fanmingming.cn/tv/贵州卫视.png" group-title="卫视频道",贵州卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227012/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EnqBF03rFwPucF8ODtWxLQQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="宁夏卫视" tvg-logo="https://live.fanmingming.cn/tv/宁夏卫视.png" group-title="卫视频道",宁夏卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227003/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ESco1zinvdUYzleEkXYhIvA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="甘肃卫视" tvg-logo="https://live.fanmingming.cn/tv/甘肃卫视.png" group-title="卫视频道",甘肃卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227020/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Err-CLugPnTcUinEM8JeySg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="内蒙古卫视" tvg-logo="https://live.fanmingming.cn/tv/内蒙古卫视.png" group-title="卫视频道",内蒙古卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227018/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErN_hoRDwApMKnJqiNHvn9w%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://live.fanmingming.cn/tv/新疆卫视.png" group-title="卫视频道",新疆卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227011/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ExAUu61iVvo_xYbANWJhgXw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="西藏卫视" tvg-logo="https://live.fanmingming.cn/tv/西藏卫视.png" group-title="卫视频道",西藏卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227033/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EdeTB7OZ9G_VNJk5C3t96fQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="延边卫视" tvg-logo="https://live.fanmingming.cn/tv/延边卫视.png" group-title="卫视频道",延边卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227045/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eq0D3NdTUN7FuRzr8eJsbQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="康巴卫视" tvg-logo="https://live.fanmingming.cn/tv/康巴卫视.png" group-title="卫视频道",康巴卫视
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227027/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkHMvBpWz4rccMxNvSRekpQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+#EXTINF:-1 tvg-name="中国教育1台" tvg-logo="https://live.fanmingming.cn/tv/中国教育1台.png" group-title="卫视频道",中国教育1台
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226494/1.m3u8?
+#EXTINF:-1 tvg-name="中国教育2台" tvg-logo="https://live.fanmingming.cn/tv/中国教育2台.png" group-title="卫视频道",中国教育2台
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226537/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7AxXs4eTU2oiWrhopr9sHw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNxsM0Bor098BJglrhfEQTl%2CEND
+#EXTINF:-1 tvg-name="中国教育3台" tvg-logo="https://live.fanmingming.cn/tv/中国教育3台.png" group-title="卫视频道",中国教育3台
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226577/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EhE2Z89HKgsQOlN9opVn1iw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNN03yUnk4zBVk1bynPPL3hZ%2CEND
+#EXTINF:-1 tvg-name="中国教育4台" tvg-logo="https://live.fanmingming.cn/tv/中国教育4台.png" group-title="卫视频道",中国教育4台
+http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226997/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EAw_OvjRgJVjtlaOa0dcgzg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
+
+
+#EXTINF:-1 tvg-name="浙江公共新闻" tvg-logo="https://live.fanmingming.cn/tv/浙江新闻.png" group-title="浙江频道",浙江新闻
+https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江国际" tvg-logo="https://live.fanmingming.cn/tv/浙江国际.png" group-title="浙江频道",浙江国际
+https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江少儿" tvg-logo="https://live.fanmingming.cn/tv/浙江少儿.png" group-title="浙江频道",浙江少儿
+https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江教科影视" tvg-logo="https://live.fanmingming.cn/tv/浙江教科影视.png" group-title="浙江频道",浙江教科
+https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8
+#EXTINF:-1 tvg-name="之江纪录" tvg-logo="https://live.fanmingming.cn/tv/之江纪录.png" group-title="浙江频道",之江纪录
+https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江民生休闲" tvg-logo="https://live.fanmingming.cn/tv/浙江民生休闲.png" group-title="浙江频道",浙江民生
+https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江经视" tvg-logo="https://live.fanmingming.cn/tv/浙江经济生活.png" group-title="浙江频道",浙江经济
+https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8
+#EXTINF:-1 tvg-name="浙江钱江都市" tvg-logo="https://live.fanmingming.cn/tv/钱江都市.png" group-title="浙江频道",浙江钱江
+https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8
+#EXTINF:-1 tvg-name="内蒙古综合" tvg-logo="https://live.fanmingming.cn/tv/内蒙古新闻综合.png" group-title="内蒙频道",内蒙新闻
+https://livestream-bt.nmtv.cn/nmtv/2316general.m3u8?txSecret=b4373417a82ed64e52b0982a66da8df2&txTime=771E8800
+#EXTINF:-1 tvg-name="内蒙古经济生活" tvg-logo="https://live.fanmingming.cn/tv/内蒙古经济生活.png" group-title="内蒙频道",内蒙经济
+https://livestream-bt.nmtv.cn/nmtv/2317general.m3u8?txSecret=112b2c4c872de52b0f37aff6ead63ef0&txTime=771E8800
+#EXTINF:-1 tvg-name="内蒙古少儿" tvg-logo="https://live.fanmingming.cn/tv/内蒙古少儿.png" group-title="内蒙频道",内蒙少儿
+https://livestream-bt.nmtv.cn/nmtv/2318general.m3u8?txSecret=a2c948908728a0733cecbe1fadea23dc&txTime=771E8800
+#EXTINF:-1 tvg-name="内蒙古文体娱乐" tvg-logo="https://live.fanmingming.cn/tv/内蒙古文体娱乐.png" group-title="内蒙频道",内蒙文体
+https://livestream-bt.nmtv.cn/nmtv/2319general.m3u8?txSecret=c7b5c515d2bb6df442492d54955329a3&txTime=771E8800
+#EXTINF:-1 tvg-name="内蒙古农牧" tvg-logo="https://live.fanmingming.cn/tv/内蒙古农牧.png" group-title="内蒙频道",内蒙农牧
+https://livestream-bt.nmtv.cn/nmtv/2320general.m3u8?txSecret=4d368a175afa19737a9f5be10af24fe2&txTime=771E8800
+#EXTINF:-1 tvg-name="内蒙古蒙语卫视" tvg-logo="https://live.fanmingming.cn/tv/内蒙古蒙语卫视.png" group-title="内蒙频道",蒙语卫视
+https://livestream-bt.nmtv.cn/nmtv/2315general.m3u8?txSecret=4971666599ef9411629213c9a300bf66&txTime=771EF880
+#EXTINF:-1 tvg-name="内蒙古蒙语文化" tvg-logo="https://live.fanmingming.cn/tv/内蒙古蒙语文化.png" group-title="内蒙频道",蒙语文化
+https://livestream-bt.nmtv.cn/nmtv/2321general.m3u8?txSecret=d9d0fd7a252ef56b515c46a2e21830f4&txTime=771E8800
+#EXTINF:-1 tvg-name="呼和浩特新闻综合" tvg-logo="https://live.fanmingming.cn/tv/呼和浩特新闻综合.png" group-title="内蒙频道",呼市新闻综合
+https://livestream-bt.nmtv.cn/nmtv/2331general.m3u8?txSecret=4d7342ca5cd74480526ab6d292247aff&txTime=771E8800
+#EXTINF:-1 tvg-name="包头新闻综合" tvg-logo="https://live.fanmingming.cn/tv/包头新闻综合.png" group-title="内蒙频道",包头新闻综合
+https://livestream-bt.nmtv.cn/nmtv/2358general.m3u8?txSecret=98390a77c143a68f0fd64bfe6e181dcb&txTime=771E8800
+#EXTINF:-1 tvg-name="鄂尔多斯新闻综合" tvg-logo="https://live.fanmingming.cn/tv/鄂尔多斯新闻综合.png" group-title="内蒙频道",鄂尔多斯新闻
+https://livestream-bt.nmtv.cn/nmtv/2349general.m3u8?txSecret=e44477052aba305cadeea45aaf1c674a&txTime=771E8800
+#EXTINF:-1 tvg-name="巴彦淖尔新闻综合" tvg-logo="https://live.fanmingming.cn/tv/巴彦淖尔新闻综合.png" group-title="内蒙频道",巴彦淖尔新闻
+https://livestream-bt.nmtv.cn/nmtv/2348general.m3u8?txSecret=6a4ddce077e41b976fe33619fbef2b30&txTime=771E8800
+#EXTINF:-1 tvg-name="赤峰新闻综合" tvg-logo="https://live.fanmingming.cn/tv/赤峰新闻综合.png" group-title="内蒙频道",赤峰新闻综合
+https://livestream-bt.nmtv.cn/nmtv/2351general.m3u8?txSecret=8857087aeec2cec44d178a18550fdb8a&txTime=771E8800
+#EXTINF:-1 tvg-name="乌兰察布新闻综合" tvg-logo="https://live.fanmingming.cn/tv/乌兰察布.png" group-title="内蒙频道",乌兰察布新闻
+https://livestream-bt.nmtv.cn/nmtv/2354general.m3u8?txSecret=cf5f71d0000862b18f5813607b3dfd5b&txTime=771E8800
+#EXTINF:-1 tvg-name="CGTN" tvg-logo="https://live.fanmingming.cn/tv/CGTN.png" group-title="央视频道",CGTN英语
+https://0472.org/hls/cgtn.m3u8
+#EXTINF:-1 tvg-name="CGTN纪录" tvg-logo="https://live.fanmingming.cn/tv/CGTN纪录.png" group-title="央视频道",CGTN记录
+https://0472.org/hls/cgtnd.m3u8
+#EXTINF:-1 tvg-name="CGTN俄语" tvg-logo="https://live.fanmingming.cn/tv/CGTN俄语.png" group-title="央视频道",CGTN俄语
+https://0472.org/hls/cgtne.m3u8
+#EXTINF:-1 tvg-name="CGTN法语" tvg-logo="https://live.fanmingming.cn/tv/CGTN法语.png" group-title="央视频道",CGTN法语
+https://0472.org/hls/cgtnf.m3u8
+#EXTINF:-1 tvg-name="CGTN西语" tvg-logo="https://live.fanmingming.cn/tv/CGTN西语.png" group-title="央视频道",CGTN西语
+https://0472.org/hls/cgtnx.m3u8
+#EXTINF:-1 tvg-name="CGTN阿语" tvg-logo="https://live.fanmingming.cn/tv/CGTN阿语.png" group-title="央视频道",CGTN阿语
+https://0472.org/hls/cgtna.m3u8
diff --git a/潇洒/py/APPV2.py b/潇洒/py/APPV2.py
deleted file mode 100644
index c3fe418..0000000
--- a/潇洒/py/APPV2.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# -*- coding: utf-8 -*-
-# by @嗷呜
-import sys
-sys.path.append('..')
-from base.spider import Spider
-
-class Spider(Spider):
-
- def init(self, extend=""):
- '''
- example:
- {
- "key": "py_appV2",
- "name": "xxx",
- "type": 3,
- "searchable": 1,
- "quickSearch": 1,
- "filterable": 1,
- "api": "./py/APPV2.py",
- "ext": "http://cmsyt.lyyytv.cn"
- }
-
- '''
- self.host=extend
- pass
-
- def getName(self):
- pass
-
- def isVideoFormat(self, url):
- pass
-
- def manualVideoCheck(self):
- pass
-
- def destroy(self):
- pass
-
- headers = {
- 'User-Agent': 'okhttp/4.12.0',
- }
-
- def homeContent(self, filter):
- data = self.fetch(f"{self.host}//api.php/app/nav?token=",headers=self.headers).json()
- keys = ["class", "area", "lang", "year", "letter", "by", "sort"]
- filters = {}
- classes = []
- for item in data['list']:
- has_non_empty_field = False
- jsontype_extend = item["type_extend"]
- classes.append({"type_name": item["type_name"], "type_id": item["type_id"]})
- for key in keys:
- if key in jsontype_extend and jsontype_extend[key].strip() != "":
- has_non_empty_field = True
- break
- if has_non_empty_field:
- filters[str(item["type_id"])] = []
- for dkey in jsontype_extend:
- if dkey in keys and jsontype_extend[dkey].strip() != "":
- values = jsontype_extend[dkey].split(",")
- value_array = [{"n": value.strip(), "v": value.strip()} for value in values if
- value.strip() != ""]
- filters[str(item["type_id"])].append({"key": dkey, "name": dkey, "value": value_array})
- result = {}
- result["class"] = classes
- result["filters"] = filters
- return result
-
- def homeVideoContent(self):
- data=self.fetch(f"{self.host}/api.php/app/index_video?token=",headers=self.headers).json()
- videos=[]
- for item in data['list']:videos.extend(item['vlist'])
- return {'list':videos}
-
- def categoryContent(self, tid, pg, filter, extend):
- params = {'tid':tid,'class':extend.get('class',''),'area':extend.get('area',''),'lang':extend.get('lang',''),'year':extend.get('year',''),'limit':'18','pg':pg}
- data=self.fetch(f"{self.host}/api.php/app/video",params=params,headers=self.headers).json()
- return data
-
- def detailContent(self, ids):
- data=self.fetch(f"{self.host}/api.php/app/video_detail?id={ids[0]}",headers=self.headers).json()
- return {'list':[data['data']]}
-
- def searchContent(self, key, quick, pg="1"):
- data=self.fetch(f"{self.host}/api.php/app/search?text={key}&pg={pg}",headers=self.headers).json()
- videos=data['list']
- for item in data['list']:
- item.pop('type', None)
- return {'list':videos,'page':pg}
-
- def playerContent(self, flag, id, vipFlags):
- return {'jx':1,'playUrl':'','parse': 1, 'url': id, 'header': self.headers}
-
- def localProxy(self, param):
- pass
-
-
diff --git a/潇洒/py/优酷视频.py b/潇洒/py/优酷视频.py
deleted file mode 100644
index 399d0db..0000000
--- a/潇洒/py/优酷视频.py
+++ /dev/null
@@ -1,301 +0,0 @@
-# -*- coding: utf-8 -*-
-# by @嗷呜
-import json
-import sys
-import time
-from concurrent.futures import ThreadPoolExecutor, as_completed
-from urllib.parse import quote
-from Crypto.Hash import MD5
-import requests
-sys.path.append('..')
-from base.spider import Spider
-
-
-class Spider(Spider):
-
- def init(self, extend=""):
- self.session = requests.Session()
- self.session.headers.update(self.headers)
- self.session.cookies.update(self.cookie)
- self.get_ctoken()
- pass
-
- def getName(self):
- pass
-
- def isVideoFormat(self, url):
- pass
-
- def manualVideoCheck(self):
- pass
-
- def destroy(self):
- pass
-
- host='https://www.youku.com'
-
- shost='https://search.youku.com'
-
- h5host='https://acs.youku.com'
-
- ihost='https://v.youku.com'
-
- headers = {
- 'User-Agent': 'Mozilla/5.0 (; Windows 10.0.26100.3194_64 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Electron/14.2.0 Safari/537.36 Node/14.17.0 YoukuDesktop/9.2.60 UOSYouku (2.0.1)-Electron(UTDID ZYmGMAAAACkDAMU8hbiMmYdd;CHANNEL official;ZREAL 0;BTYPE TM2013;BRAND TIMI;BUILDVER 9.2.60.1001)',
- 'Referer': f'{host}/'
- }
-
- cookie={
- "__ysuid": "17416134165380iB",
- "__aysid": "1741613416541WbD",
- "xlly_s": "1",
- "isI18n": "false",
- "cna": "bNdVIKmmsHgCAXW9W6yrQ1/s",
- "__ayft": "1741672162330",
- "__arpvid": "1741672162331FBKgrn-1741672162342",
- "__ayscnt": "1",
- "__aypstp": "1",
- "__ayspstp": "3",
- "tfstk": "gZbiib4JpG-6DqW-B98_2rwPuFrd1fTXQt3vHEp4YpJIBA3OgrWcwOi90RTOo9XVQ5tAM5NcK_CP6Ep97K2ce1XDc59v3KXAgGFLyzC11ET2n8U8yoyib67M3xL25e8gS8pbyzC1_ET4e8URWTsSnHv2uh8VTeJBgEuN3d-ELQAWuKWV36PHGpJ2uEWVTxvicLX1ewyUXYSekxMf-CxMEqpnoqVvshvP_pABOwvXjL5wKqeulm52np_zpkfCDGW9Ot4uKFIRwZtP7vP9_gfAr3KEpDWXSIfWRay-DHIc_Z-hAzkD1i5Ooi5LZ0O5YO_1mUc476YMI3R6xzucUnRlNe_zemKdm172xMwr2L7CTgIkbvndhFAVh3_YFV9Ng__52U4SQKIdZZjc4diE4EUxlFrfKmiXbBOHeP72v7sAahuTtWm78hRB1yV3tmg9bBOEhWVnq5KwOBL5."
- }
-
- def homeContent(self, filter):
- result = {}
- categories = ["电视剧", "电影", "综艺", "动漫", "少儿", "纪录片", "文化", "亲子", "教育", "搞笑", "生活",
- "体育", "音乐", "游戏"]
- classes = [{'type_name': category, 'type_id': category} for category in categories]
- filters = {}
- self.typeid = {}
- with ThreadPoolExecutor(max_workers=len(categories)) as executor:
- tasks = {
- executor.submit(self.cf, {'type': category}, True): category
- for category in categories
- }
-
- for future in as_completed(tasks):
- try:
- category = tasks[future]
- session, ft = future.result()
- filters[category] = ft
- self.typeid[category] = session
- except Exception as e:
- print(f"处理分类 {tasks[future]} 时出错: {str(e)}")
-
- result['class'] = classes
- result['filters'] = filters
- return result
-
- def homeVideoContent(self):
- try:
- vlist = []
- params={"ms_codes":"2019061000","params":"{\"debug\":0,\"gray\":0,\"pageNo\":1,\"utdid\":\"ZYmGMAAAACkDAMU8hbiMmYdd\",\"userId\":\"\",\"bizKey\":\"YOUKU_WEB\",\"appPackageKey\":\"com.youku.YouKu\",\"showNodeList\":0,\"reqSubNode\":0,\"nodeKey\":\"WEBHOME\",\"bizContext\":\"{\\\"spmA\\\":\\\"a2hja\\\"}\"}","system_info":"{\"device\":\"pcweb\",\"os\":\"pcweb\",\"ver\":\"1.0.0.0\",\"userAgent\":\"Mozilla/5.0 (; Windows 10.0.26100.3194_64 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Electron/14.2.0 Safari/537.36 Node/14.17.0 YoukuDesktop/9.2.60 UOSYouku (2.0.1)-Electron(UTDID ZYmGMAAAACkDAMU8hbiMmYdd;CHANNEL official;ZREAL 0;BTYPE TM2013;BRAND TIMI;BUILDVER 9.2.60.1001)\",\"guid\":\"1590141704165YXe\",\"appPackageKey\":\"com.youku.pcweb\",\"young\":0,\"brand\":\"\",\"network\":\"\",\"ouid\":\"\",\"idfa\":\"\",\"scale\":\"\",\"operator\":\"\",\"resolution\":\"\",\"pid\":\"\",\"childGender\":0,\"zx\":0}"}
- data=self.getdata(f'{self.h5host}/h5/mtop.youku.columbus.home.query/1.0/',params)
- okey=list(data['data'].keys())[0]
- for i in data['data'][okey]['data']['nodes'][0]['nodes'][-1]['nodes'][0]['nodes']:
- if i.get('nodes') and i['nodes'][0].get('data'):
- i=i['nodes'][0]['data']
- if i.get('assignId'):
- vlist.append({
- 'vod_id': i['assignId'],
- 'vod_name': i.get('title'),
- 'vod_pic': i.get('vImg') or i.get('img'),
- 'vod_year': i.get('mark',{}).get('data',{}).get('text'),
- 'vod_remarks': i.get('summary')
- })
- return {'list': vlist}
- except Exception as e:
- print(f"处理主页视频数据时出错: {str(e)}")
- return {'list': []}
-
- def categoryContent(self, tid, pg, filter, extend):
- result = {}
- vlist = []
- result['page'] = pg
- result['limit'] = 90
- result['total'] = 999999
- pagecount = 9999
- params = {'type': tid}
- id = self.typeid[tid]
- params.update(extend)
- if pg == '1':
- id=self.cf(params)
- data=self.session.get(f'{self.host}/category/data?session={id}¶ms={quote(json.dumps(params))}&pageNo={pg}').json()
- try:
- data=data['data']['filterData']
- for i in data['listData']:
- if i.get('videoLink') and 's=' in i['videoLink']:
- vlist.append({
- 'vod_id': i.get('videoLink').split('s=')[-1],
- 'vod_name': i.get('title'),
- 'vod_pic': i.get('img'),
- 'vod_year': i.get('rightTagText'),
- 'vod_remarks': i.get('summary')
- })
- self.typeid[tid]=quote(json.dumps(data['session']))
- except:
- pagecount=pg
- result['list'] = vlist
- result['pagecount'] = pagecount
- return result
-
- def detailContent(self, ids):
- try:
- data=self.session.get(f'{self.ihost}/v_getvideo_info/?showId={ids[0]}').json()
- v=data['data']
- vod = {
- 'type_name': v.get('showVideotype'),
- 'vod_year': v.get('lastUpdate'),
- 'vod_remarks': v.get('rc_title'),
- 'vod_actor': v.get('_personNameStr'),
- 'vod_content': v.get('showdesc'),
- 'vod_play_from': '优酷',
- 'vod_play_url': ''
- }
- params={"biz":"new_detail_web2","videoId":v.get('vid'),"scene":"web_page","componentVersion":"3","ip":data.get('ip'),"debug":0,"utdid":"ZYmGMAAAACkDAMU8hbiMmYdd","userId":0,"platform":"pc","nextSession":"","gray":0,"source":"pcNoPrev","showId":ids[0]}
- sdata,index=self.getinfo(params)
- pdata=sdata['nodes']
- if index > len(pdata):
- batch_size = len(pdata)
- total_batches = ((index + batch_size - 1) // batch_size) - 1
- ssj = json.loads(sdata['data']['session'])
- with ThreadPoolExecutor(max_workers=total_batches) as executor:
- futures = []
- for batch in range(total_batches):
- start = batch_size + 1 + (batch * batch_size)
- end = start + batch_size - 1
- next_session = ssj.copy()
- next_session.update({
- "itemStartStage": start,
- "itemEndStage": min(end, index)
- })
- current_params = params.copy()
- current_params['nextSession'] = json.dumps(next_session)
- futures.append((start, executor.submit(self.getvinfo, current_params)))
- futures.sort(key=lambda x: x[0])
-
- for _, future in futures:
- try:
- result = future.result()
- pdata.extend(result['nodes'])
- except Exception as e:
- print(f"Error fetching data: {str(e)}")
- vod['vod_play_url'] = '#'.join([f"{i['data'].get('title')}${i['data']['action'].get('value')}" for i in pdata])
- return {'list': [vod]}
- except Exception as e:
- print(e)
- return {'list': [{'vod_play_from': '哎呀翻车啦', 'vod_play_url': f'呜呜呜${self.host}'}]}
-
- def searchContent(self, key, quick, pg="1"):
- data=self.session.get(f'{self.shost}/api/search?pg={pg}&keyword={key}').json()
- vlist = []
- for i in data['pageComponentList']:
- if i.get('commonData') and (i['commonData'].get('showId') or i['commonData'].get('realShowId')):
- i=i['commonData']
- vlist.append({
- 'vod_id': i.get('showId') or i.get('realShowId'),
- 'vod_name': i['titleDTO'].get('displayName'),
- 'vod_pic': i['posterDTO'].get('vThumbUrl'),
- 'vod_year': i.get('feature'),
- 'vod_remarks': i.get('updateNotice')
- })
- return {'list': vlist, 'page': pg}
-
- def playerContent(self, flag, id, vipFlags):
- return {'jx':1,'parse': 1, 'url': f"{self.ihost}/video?vid={id}", 'header': ''}
-
- def localProxy(self, param):
- pass
-
- def cf(self,params,b=False):
- response = self.session.get(f'{self.host}/category/data?params={quote(json.dumps(params))}&optionRefresh=1&pageNo=1').json()
- data=response['data']['filterData']
- session=quote(json.dumps(data['session']))
- if b:
- return session,self.get_filter_data(data['filter']['filterData'][1:])
- return session
-
- def process_key(self, key):
- if '_' not in key:
- return key
- parts = key.split('_')
- result = parts[0]
- for part in parts[1:]:
- if part:
- result += part[0].upper() + part[1:]
- return result
-
- def get_filter_data(self, data):
- result = []
- try:
- for item in data:
- if not item.get('subFilter'):
- continue
- first_sub = item['subFilter'][0]
- if not first_sub.get('filterType'):
- continue
- filter_item = {
- 'key': self.process_key(first_sub['filterType']),
- 'name': first_sub['title'],
- 'value': []
- }
- for sub in item['subFilter']:
- if 'value' in sub:
- filter_item['value'].append({
- 'n': sub['title'],
- 'v': sub['value']
- })
- if filter_item['value']:
- result.append(filter_item)
-
- except Exception as e:
- print(f"处理筛选数据时出错: {str(e)}")
-
- return result
-
- def get_ctoken(self):
- data=self.session.get(f'{self.h5host}/h5/mtop.ykrec.recommendservice.recommend/1.0/?jsv=2.6.1&appKey=24679788')
-
- def md5(self,t,text):
- h = MD5.new()
- token=self.session.cookies.get('_m_h5_tk').split('_')[0]
- data=f"{token}&{t}&24679788&{text}"
- h.update(data.encode('utf-8'))
- return h.hexdigest()
-
- def getdata(self, url, params, recursion_count=0, max_recursion=3):
- data = json.dumps(params)
- t = int(time.time() * 1000)
- jsdata = {
- 'appKey': '24679788',
- 't': t,
- 'sign': self.md5(t, data),
- 'data': data
- }
- response = self.session.get(url, params=jsdata)
- if '令牌过期' in response.text:
- if recursion_count >= max_recursion:
- raise Exception("达到最大递归次数,无法继续请求")
- self.get_ctoken()
- return self.getdata(url, params, recursion_count + 1, max_recursion)
- else:
- return response.json()
-
- def getvinfo(self,params):
- body = {
- "ms_codes": "2019030100",
- "params": json.dumps(params),
- "system_info": "{\"os\":\"iku\",\"device\":\"iku\",\"ver\":\"9.2.9\",\"appPackageKey\":\"com.youku.iku\",\"appPackageId\":\"pcweb\"}"
- }
- data = self.getdata(f'{self.h5host}/h5/mtop.youku.columbus.gateway.new.execute/1.0/', body)
- okey = list(data['data'].keys())[0]
- i = data['data'][okey]['data']
- return i
-
- def getinfo(self,params):
- i = self.getvinfo(params)
- jdata=i['nodes'][0]['nodes'][3]
- info=i['data']['extra']['episodeTotal']
- if i['data']['extra']['showCategory'] in ['电影','游戏']:
- jdata = i['nodes'][0]['nodes'][4]
- return jdata,info
-
diff --git a/潇洒/py/光速影视.py b/潇洒/py/光速影视.py
deleted file mode 100644
index 33b1204..0000000
--- a/潇洒/py/光速影视.py
+++ /dev/null
@@ -1,222 +0,0 @@
-# -*- coding: utf-8 -*-
-# by @嗷呜
-import re
-import sys
-from Crypto.Hash import MD5
-sys.path.append('..')
-from Crypto.Cipher import AES
-from Crypto.Util.Padding import pad, unpad
-from urllib.parse import quote, urlparse
-from base64 import b64encode, b64decode
-import json
-import time
-from base.spider import Spider
-
-class Spider(Spider):
-
- def init(self, extend=""):
- self.host = self.gethost()
- pass
-
- def getName(self):
- pass
-
-
- def isVideoFormat(self, url):
- pass
-
- def manualVideoCheck(self):
- pass
-
- def action(self, action):
- pass
-
- def destroy(self):
- pass
-
- def homeContent(self, filter):
- data = self.getdata("/api.php/getappapi.index/initV119")
- dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序",
- "sort": "排序"}
- filters = {}
- classes = []
- json_data = data["type_list"]
- homedata = data["banner_list"][8:]
- for item in json_data:
- if item["type_name"] == "全部":
- continue
- has_non_empty_field = False
- jsontype_extend = json.loads(item["type_extend"])
- homedata.extend(item["recommend_list"])
- jsontype_extend["sort"] = "最新,最热,最赞"
- classes.append({"type_name": item["type_name"], "type_id": item["type_id"]})
- for key in dy:
- if key in jsontype_extend and jsontype_extend[key].strip() != "":
- has_non_empty_field = True
- break
- if has_non_empty_field:
- filters[str(item["type_id"])] = []
- for dkey in jsontype_extend:
- if dkey in dy and jsontype_extend[dkey].strip() != "":
- values = jsontype_extend[dkey].split(",")
- value_array = [{"n": value.strip(), "v": value.strip()} for value in values if
- value.strip() != ""]
- filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array})
- result = {}
- result["class"] = classes
- result["filters"] = filters
- result["list"] = homedata[1:]
- return result
-
- def homeVideoContent(self):
- pass
-
- def categoryContent(self, tid, pg, filter, extend):
- body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg,
- "sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'),
- "class": extend.get('class', '全部')}
- result = {}
- data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body)
- result["list"] = data["recommend_list"]
- result["page"] = pg
- result["pagecount"] = 9999
- result["limit"] = 90
- result["total"] = 999999
- return result
-
- def detailContent(self, ids):
- body = f"vod_id={ids[0]}"
- data = self.getdata("/api.php/getappapi.index/vodDetail", body)
- vod = data["vod"]
- play = []
- names = []
- for itt in data["vod_play_list"]:
- a = []
- names.append(itt["player_info"]["show"])
- for it in itt['urls']:
- it['user_agent']=itt["player_info"].get("user_agent")
- it["parse"]=itt["player_info"].get("parse")
- a.append(f"{it['name']}${self.e64(json.dumps(it))}")
- play.append("#".join(a))
- vod["vod_play_from"] = "$$$".join(names)
- vod["vod_play_url"] = "$$$".join(play)
- result = {"list": [vod]}
- return result
-
- def searchContent(self, key, quick, pg="1"):
- body = f"keywords={key}&type_id=0&page={pg}"
- data = self.getdata("/api.php/getappapi.index/searchList", body)
- result = {"list": data["search_list"], "page": pg}
- return result
-
- def playerContent(self, flag, id, vipFlags):
- ids = json.loads(self.d64(id))
- h = {"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")}
- try:
- if re.search(r'url=', ids['parse_api_url']):
- data = self.fetch(ids['parse_api_url'], headers=h, timeout=10).json()
- url = data.get('url') or data['data'].get('url')
- else:
- body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes(ids['url'], True))}&token={ids.get('token')}"
- b = self.getdata("/api.php/getappapi.index/vodParse", body)['json']
- url = json.loads(b)['url']
- if 'error' in url: raise ValueError(f"解析失败: {url}")
- p = 0
- except Exception as e:
- print('错误信息:', e)
- url, p = ids['url'], 1
-
- if re.search(r'\.jpg|\.png|\.jpeg', url):
- url = self.Mproxy(url)
- result = {}
- result["parse"] = p
- result["url"] = url
- result["header"] = h
- return result
-
- def localProxy(self, param):
- return self.Mlocal(param)
-
- def gethost(self):
- headers = {
- 'User-Agent': 'okhttp/3.14.9'
- }
- host = self.fetch('https://jingyu-1312635929.cos.ap-nanjing.myqcloud.com/1.json',
- headers=headers).text.strip()
- return host
-
- phend = {
- 'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)',
- 'allowCrossProtocolRedirects': 'true'
- }
-
- def aes(self, operation, text):
- key = "4d83b87c4c5ea111".encode("utf-8")
- iv = key
- if operation == "encrypt":
- cipher = AES.new(key, AES.MODE_CBC, iv)
- ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size))
- ct = b64encode(ct_bytes).decode("utf-8")
- return ct
- elif operation == "decrypt":
- cipher = AES.new(key, AES.MODE_CBC, iv)
- pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size)
- return pt.decode("utf-8")
-
- def header(self):
- t = str(int(time.time()))
- header = {"Referer":self.host,
- "User-Agent": "okhttp/3.14.9", "app-version-code": "300", "app-ui-mode": "light",
- "app-api-verify-time": t, "app-user-device-id": self.md5(t),
- "app-api-verify-sign": self.aes("encrypt", t),
- "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}
- return header
-
- def getdata(self, path, data=None):
- vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data']
- data1 = self.aes("decrypt", vdata)
- return json.loads(data1)
-
- def Mproxy(self, url):
- return self.getProxyUrl() + "&url=" + b64encode(url.encode('utf-8')).decode('utf-8') + "&type=m3u8"
-
- def Mlocal(self, param,header=None):
- url = self.d64(param["url"])
- ydata = self.fetch(url, headers=header, allow_redirects=False)
- data = ydata.content.decode('utf-8')
- if ydata.headers.get('Location'):
- url = ydata.headers['Location']
- data = self.fetch(url, headers=header).content.decode('utf-8')
- parsed_url = urlparse(url)
- durl = parsed_url.scheme + "://" + parsed_url.netloc
- lines = data.strip().split('\n')
- for index, string in enumerate(lines):
- if '#EXT' not in string and 'http' not in string:
- last_slash_index = string.rfind('/')
- lpath = string[:last_slash_index + 1]
- lines[index] = durl + ('' if lpath.startswith('/') else '/') + lpath
- data = '\n'.join(lines)
- return [200, "application/vnd.apple.mpegur", data]
-
- def e64(self, text):
- try:
- text_bytes = text.encode('utf-8')
- encoded_bytes = b64encode(text_bytes)
- return encoded_bytes.decode('utf-8')
- except Exception as e:
- print(f"Base64编码错误: {str(e)}")
- return ""
-
- def d64(self,encoded_text):
- try:
- encoded_bytes = encoded_text.encode('utf-8')
- decoded_bytes = b64decode(encoded_bytes)
- return decoded_bytes.decode('utf-8')
- except Exception as e:
- print(f"Base64解码错误: {str(e)}")
- return ""
-
- def md5(self, text):
- h = MD5.new()
- h.update(text.encode('utf-8'))
- return h.hexdigest()
diff --git a/潇洒/py/爱奇艺.py b/潇洒/py/爱奇艺.py
deleted file mode 100644
index 2b0af3d..0000000
--- a/潇洒/py/爱奇艺.py
+++ /dev/null
@@ -1,248 +0,0 @@
-# -*- coding: utf-8 -*-
-# by @嗷呜
-import random
-import sys
-from base64 import b64encode, b64decode
-from concurrent.futures import ThreadPoolExecutor, as_completed
-from urllib.parse import urlencode
-sys.path.append('..')
-from base.spider import Spider
-
-
-class Spider(Spider):
-
- def init(self, extend=""):
- self.did = self.random_str(32)
- pass
-
- def getName(self):
- pass
-
- def isVideoFormat(self, url):
- pass
-
- def manualVideoCheck(self):
- pass
-
- def destroy(self):
- pass
-
- rhost = 'https://www.iqiyi.com'
-
- hhost='https://mesh.if.iqiyi.com'
-
- dhost='https://miniapp.iqiyi.com'
-
- headers = {
- 'Origin': rhost,
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36',
- 'Referer': f'{rhost}/',
- }
-
- def homeContent(self, filter):
- result = {}
- cateManual = {
- "全部": "1009",
- "电影": "1",
- "剧集": "2",
- "综艺": "6",
- "动漫": "4",
- "儿童": "15",
- "微剧": "35",
- "纪录片": "3"
- }
- classes = []
- filters = {}
- for k in cateManual:
- classes.append({
- 'type_name': k,
- 'type_id': cateManual[k]
- })
- with ThreadPoolExecutor(max_workers=len(classes)) as executor:
- results = executor.map(self.getf, classes)
- for id, ft in results:
- if len(ft):filters[id] = ft
- result['class'] = classes
- result['filters'] = filters
- return result
-
- def homeVideoContent(self):
- data=self.fetch(f'{self.hhost}/portal/lw/v5/channel/recommend?v=13.014.21150', headers=self.headers).json()
- vlist = []
- for i in data['items'][1:]:
- for j in i['video'][0]['data']:
- id = j.get('firstId')
- pic=j.get('prevue',{}).get('image_url') or j.get('album_image_url_hover')
- if id and pic:
- pu=j.get('prevue',{}).get('page_url') or j.get('page_url').split('?')[0]
- id = f'{id}@{self.e64(pu)}'
- vlist.append({
- 'vod_id': id,
- 'vod_name': j.get('display_name'),
- 'vod_pic': pic,
- 'vod_year': j.get('sns_score'),
- 'vod_remarks': j.get('dq_updatestatus') or j.get('rank_prefix')
- })
- return {'list':vlist}
-
- def categoryContent(self, tid, pg, filter, extend):
- if pg == "1":
- self.sid = ''
- new_data = {'mode':'24'}
- for key, value in extend.items():
- if value:
- key_value_pairs = self.d64(value).split(',')
- for pair in key_value_pairs:
- k, v = pair.split('=')
- if k in new_data:
- new_data[k] += "," + v
- else:
- new_data[k] = v
- path=f'/portal/lw/videolib/data?uid=&passport_id=&ret_num=60&version=13.014.21150&device_id={self.did}&channel_id={tid}&page_id={pg}&session={self.sid}&os=&conduit_id=&vip=0&auth&recent_selected_tag=&ad=%5B%7B%22lm%22:%225%22,%22ai%22:%225%22,%22fp%22:%226%22,%22sei%22:%22Sa867aa9d326e2bd8654d8c2a8636055e%22,%22position%22:%22library%22%7D%5D&adExt=%7B%22r%22:%221.2.1-ares6-pure%22%7D&dfp=a12f96215b2f7842a98c082799ca0c3d9236be00946701b106829754d8ece3aaf8&filter={urlencode(new_data)}'
- data=self.fetch(f'{self.hhost}{path}', headers=self.headers).json()
- self.sid = data['session']
- videos = []
- for i in data['data']:
- id = i.get('firstId') or i.get('tv_id')
- if not id:
- id=i.get('play_url').split(';')[0].split('=')[-1]
- if id and not i.get('h'):
- id=f'{id}@{self.e64(i.get("page_url"))}'
- videos.append({
- 'vod_id': id,
- 'vod_name': i.get('display_name'),
- 'vod_pic': i.get('album_image_url_hover'),
- 'vod_year': i.get('sns_score'),
- 'vod_remarks': i.get('dq_updatestatus') or i.get('pay_mark')
- })
- result = {}
- result['list'] = videos
- result['page'] = pg
- result['pagecount'] = 9999
- result['limit'] = 90
- result['total'] = 999999
- return result
-
- def detailContent(self, ids):
- ids = ids[0].split('@')
- ids[-1] = self.d64(ids[-1])
- data = self.fetch(f'{self.dhost}/h5/mina/baidu/play/body/v1/{ids[0]}/', headers=self.headers).json()
- v=data['data']['playInfo']
- vod = {
- 'vod_name': v.get('albumName'),
- 'type_name': v.get('tags'),
- 'vod_year': v.get('albumYear'),
- 'vod_remarks': v.get('updateStrategy'),
- 'vod_actor': v.get('mainActors'),
- 'vod_director': v.get('directors'),
- 'vod_content': v.get('albumDesc'),
- 'vod_play_from': '爱奇艺',
- 'vod_play_url': ''
- }
- if data.get('data') and data['data'].get('videoList') and data['data']['videoList'].get('videos'):
- purl=[f'{i["shortTitle"]}${i["pageUrl"]}' for i in data['data']['videoList']['videos']]
- pg=data['data']['videoList'].get('totalPages')
- if pg and pg > 1:
- id = v['albumId']
- pages = list(range(2, pg + 1))
- page_results = {}
- with ThreadPoolExecutor(max_workers=10) as executor:
- future_to_page = {
- executor.submit(self.fetch_page_data, page, id): page
- for page in pages
- }
- for future in as_completed(future_to_page):
- page = future_to_page[future]
- try:
- result = future.result()
- page_results[page] = result
- except Exception as e:
- print(f"Error fetching page {page}: {e}")
- for page in sorted(page_results.keys()):
- purl.extend(page_results[page])
- vod['vod_play_url'] = '#'.join(purl)
- else:
- vdata=self.fetch(f'{self.dhost}/h5/mina/baidu/play/head/v1/{ids[0]}/', headers=self.headers).json()
- v=vdata['data']['playInfo']
- vod = {
- 'vod_name': v.get('shortTitle'),
- 'type_name': v.get('channelName'),
- 'vod_year': v.get('year'),
- 'vod_remarks': v.get('focus'),
- 'vod_actor': v.get('mainActors'),
- 'vod_director': v.get('directors'),
- 'vod_content': v.get('desc'),
- 'vod_play_from': '爱奇艺',
- 'vod_play_url': f'{v.get("shortTitle")}${ids[-1]}'
- }
- return {'list':[vod]}
-
- def searchContent(self, key, quick, pg="1"):
- data=self.fetch(f'{self.hhost}/portal/lw/search/homePageV3?key={key}¤t_page={pg}&mode=1&source=input&suggest=&version=13.014.21150&pageNum={pg}&pageSize=25&pu=&u={self.did}&scale=150&token=&userVip=0&conduit=&vipType=-1&os=&osShortName=win10&dataType=&appMode=', headers=self.headers).json()
- videos = []
- vdata=data['data']['templates']
- for i in data['data']['templates']:
- if i.get('intentAlbumInfos'):
- vdata=[{'albumInfo': c} for c in i['intentAlbumInfos']]+vdata
-
- for i in vdata:
- if i.get('albumInfo') and (i['albumInfo'].get('playQipuId','') or i['albumInfo'].get('qipuId')) and i['albumInfo'].get('pageUrl'):
- b=i['albumInfo']
- id=f"{(b.get('playQipuId','') or b.get('qipuId'))}@{self.e64(b.get('pageUrl'))}"
- videos.append({
- 'vod_id': id,
- 'vod_name': b.get('title'),
- 'vod_pic': b.get('img'),
- 'vod_year': (b.get('year',{}) or {}).get('value'),
- 'vod_remarks': b.get('subscriptContent') or b.get('channel') or b.get('vipTips')
- })
- return {'list':videos,'page':pg}
-
- def playerContent(self, flag, id, vipFlags):
- return {'jx':1,'parse': 1, 'url': id, 'header': ''}
-
- def localProxy(self, param):
- pass
-
- def fetch_page_data(self, page, id):
- try:
- url = f'{self.dhost}/h5/mina/avlist/{page}/{id}/'
- data = self.fetch(url, headers=self.headers).json()
- return [f'{i["shortTitle"]}${i["pageUrl"]}' for i in data['data']['videoList']['videos']]
- except:
- return []
-
- def getf(self,body):
- data=self.fetch(f'{self.hhost}/portal/lw/videolib/tag?channel_id={body["type_id"]}&tagAdd=&selected_tag_name=&version=13.014.21150&device={self.did}&uid=', headers=self.headers).json()
- ft = []
- # for i in data[:-1]:
- for i in data:
- try:
- value_array = [{"n": value['text'], "v": self.e64(value['tag_param'])} for value in i['tags'] if
- value.get('tag_param')]
- ft.append({"key": i['group'], "name": i['group'], "value": value_array})
- except:
- print(i)
- return (body['type_id'], ft)
-
- def e64(self, text):
- try:
- text_bytes = text.encode('utf-8')
- encoded_bytes = b64encode(text_bytes)
- return encoded_bytes.decode('utf-8')
- except Exception as e:
- print(f"Base64编码错误: {str(e)}")
- return ""
-
- def d64(self,encoded_text: str):
- try:
- encoded_bytes = encoded_text.encode('utf-8')
- decoded_bytes = b64decode(encoded_bytes)
- return decoded_bytes.decode('utf-8')
- except Exception as e:
- print(f"Base64解码错误: {str(e)}")
- return ""
-
- def random_str(self,length=16):
- hex_chars = '0123456789abcdef'
- return ''.join(random.choice(hex_chars) for _ in range(length))
diff --git a/潇洒/py/腾讯视频.py b/潇洒/py/腾讯视频.py
deleted file mode 100644
index 7a5218f..0000000
--- a/潇洒/py/腾讯视频.py
+++ /dev/null
@@ -1,323 +0,0 @@
-# -*- coding: utf-8 -*-
-# by @嗷呜
-import json
-import sys
-import uuid
-import copy
-sys.path.append('..')
-from base.spider import Spider
-from concurrent.futures import ThreadPoolExecutor, as_completed
-
-
-class Spider(Spider):
-
- def init(self, extend=""):
- self.dbody = {
- "page_params": {
- "channel_id": "",
- "filter_params": "sort=75",
- "page_type": "channel_operation",
- "page_id": "channel_list_second_page"
- }
- }
- self.body = self.dbody
- pass
-
- def getName(self):
- pass
-
- def isVideoFormat(self, url):
- pass
-
- def manualVideoCheck(self):
- pass
-
- def destroy(self):
- pass
-
- host = 'https://v.qq.com'
-
- apihost = 'https://pbaccess.video.qq.com'
-
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5410.0 Safari/537.36',
- 'origin': host,
- 'referer': f'{host}/'
- }
-
- def homeContent(self, filter):
- cdata = {
- "电视剧": "100113",
- "电影": "100173",
- "综艺": "100109",
- "纪录片": "100105",
- "动漫": "100119",
- "少儿": "100150",
- "短剧": "110755"
- }
- result = {}
- classes = []
- filters = {}
- for k in cdata:
- classes.append({
- 'type_name': k,
- 'type_id': cdata[k]
- })
- with ThreadPoolExecutor(max_workers=len(classes)) as executor:
- futures = [executor.submit(self.get_filter_data, item['type_id']) for item in classes]
- for future in futures:
- cid, data = future.result()
- if not data.get('data', {}).get('module_list_datas'):
- continue
- filter_dict = {}
- try:
- items = data['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas']
- for item in items:
- if not item.get('item_params', {}).get('index_item_key'):
- continue
- params = item['item_params']
- filter_key = params['index_item_key']
- if filter_key not in filter_dict:
- filter_dict[filter_key] = {
- 'key': filter_key,
- 'name': params['index_name'],
- 'value': []
- }
- filter_dict[filter_key]['value'].append({
- 'n': params['option_name'],
- 'v': params['option_value']
- })
- except (IndexError, KeyError):
- continue
- filters[cid] = list(filter_dict.values())
- result['class'] = classes
- result['filters'] = filters
- return result
-
- def homeVideoContent(self):
- json_data = {'page_context':None,'page_params':{'page_id':'100101','page_type':'channel','skip_privacy_types':'0','support_click_scan':'1','new_mark_label_enabled':'1','ams_cookies':'',},'page_bypass_params':{'params':{'caller_id':'','data_mode':'default','page_id':'','page_type':'channel','platform_id':'2','user_mode':'default',},'scene':'channel','abtest_bypass_id':'',}}
- data = self.post(f'{self.apihost}/trpc.vector_layout.page_view.PageService/getPage',headers=self.headers, json=json_data).json()
- vlist = []
- for it in data['data']['CardList'][0]['children_list']['list']['cards']:
- if it.get('params'):
- p = it['params']
- tag = json.loads(p.get('uni_imgtag', '{}') or p.get('imgtag', '{}') or '{}')
- id = it.get('id') or p.get('cid')
- name = p.get('mz_title') or p.get('title')
- if name and 'http' not in id:
- vlist.append({
- 'vod_id': id,
- 'vod_name': name,
- 'vod_pic': p.get('image_url'),
- 'vod_year': tag.get('tag_2', {}).get('text'),
- 'vod_remarks': tag.get('tag_4', {}).get('text')
- })
- return {'list': vlist}
-
- def categoryContent(self, tid, pg, filter, extend):
- result = {}
- params = {
- "sort": extend.get('sort', '75'),
- "attr": extend.get('attr', '-1'),
- "itype": extend.get('itype', '-1'),
- "ipay": extend.get('ipay', '-1'),
- "iarea": extend.get('iarea', '-1'),
- "iyear": extend.get('iyear', '-1'),
- "theater": extend.get('theater', '-1'),
- "award": extend.get('award', '-1'),
- "recommend": extend.get('recommend', '-1')
- }
- if pg == '1':
- self.body = self.dbody.copy()
- self.body['page_params']['channel_id'] = tid
- self.body['page_params']['filter_params'] = self.josn_to_params(params)
- data = self.post(
- f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=1000005&vplatform=2&vversion_name=8.9.10&new_mark_label_enabled=1',
- json=self.body, headers=self.headers).json()
- ndata = data['data']
- if ndata['has_next_page']:
- result['pagecount'] = 9999
- self.body['page_context'] = ndata['next_page_context']
- else:
- result['pagecount'] = int(pg)
- vlist = []
- for its in ndata['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas']:
- id = its.get('item_params', {}).get('cid')
- if id:
- p = its['item_params']
- tag = json.loads(p.get('uni_imgtag', '{}') or p.get('imgtag', '{}') or '{}')
- name = p.get('mz_title') or p.get('title')
- pic = p.get('new_pic_hz') or p.get('new_pic_vt')
- vlist.append({
- 'vod_id': id,
- 'vod_name': name,
- 'vod_pic': pic,
- 'vod_year': tag.get('tag_2', {}).get('text'),
- 'vod_remarks': tag.get('tag_4', {}).get('text')
- })
- result['list'] = vlist
- result['page'] = pg
- result['limit'] = 90
- result['total'] = 999999
- return result
-
- def detailContent(self, ids):
- vbody = {"page_params":{"req_from":"web","cid":ids[0],"vid":"","lid":"","page_type":"detail_operation","page_id":"detail_page_introduction"},"has_cache":1}
- body = {"page_params":{"req_from":"web_vsite","page_id":"vsite_episode_list","page_type":"detail_operation","id_type":"1","page_size":"","cid":ids[0],"vid":"","lid":"","page_num":"","page_context":"","detail_page_type":"1"},"has_cache":1}
- with ThreadPoolExecutor(max_workers=2) as executor:
- future_detail = executor.submit(self.get_vdata, vbody)
- future_episodes = executor.submit(self.get_vdata, body)
- vdata = future_detail.result()
- data = future_episodes.result()
-
- pdata = self.process_tabs(data, body, ids)
- if not pdata:
- return self.handle_exception(None, "No pdata available")
-
- try:
- star_list = vdata['data']['module_list_datas'][0]['module_datas'][0]['item_data_lists']['item_datas'][
- 0].get('sub_items', {}).get('star_list', {}).get('item_datas', [])
- actors = [star['item_params']['name'] for star in star_list]
- names = ['腾讯视频', '预告片']
- plist, ylist = self.process_pdata(pdata, ids)
- if not plist:
- del names[0]
- if not ylist:
- del names[1]
- vod = self.build_vod(vdata, actors, plist, ylist, names)
- return {'list': [vod]}
- except Exception as e:
- return self.handle_exception(e, "Error processing detail")
-
- def searchContent(self, key, quick, pg="1"):
- headers = self.headers.copy()
- headers.update({'Content-Type': 'application/json'})
- body = {'version':'25021101','clientType':1,'filterValue':'','uuid':str(uuid.uuid4()),'retry':0,'query':key,'pagenum':int(pg)-1,'pagesize':30,'queryFrom':0,'searchDatakey':'','transInfo':'','isneedQc':True,'preQid':'','adClientInfo':'','extraInfo':{'isNewMarkLabel':'1','multi_terminal_pc':'1','themeType':'1',},}
- data = self.post(f'{self.apihost}/trpc.videosearch.mobile_search.MultiTerminalSearch/MbSearch?vplatform=2',
- json=body, headers=headers).json()
- vlist = []
- vname=["电视剧", "电影", "综艺", "纪录片", "动漫", "少儿", "短剧"]
- v=data['data']['normalList']['itemList']
- d=data['data']['areaBoxList'][0]['itemList']
- q=v+d
- if v[0].get('doc') and v[0]['doc'].get('id') =='MainNeed':q=d+v
- for k in q:
- if k.get('doc') and k.get('videoInfo') and k['doc'].get('id') and '外站' not in k['videoInfo'].get('subTitle') and k['videoInfo'].get('title') and k['videoInfo'].get('typeName') in vname:
- img_tag = k.get('videoInfo', {}).get('imgTag')
- if img_tag is not None and isinstance(img_tag, str):
- try:
- tag = json.loads(img_tag)
- except json.JSONDecodeError as e:
- tag = {}
- else:
- tag = {}
- pic = k.get('videoInfo', {}).get('imgUrl')
- vlist.append({
- 'vod_id': k['doc']['id'],
- 'vod_name': self.removeHtmlTags(k['videoInfo']['title']),
- 'vod_pic': pic,
- 'vod_year': k['videoInfo'].get('typeName') +' '+ tag.get('tag_2', {}).get('text', ''),
- 'vod_remarks': tag.get('tag_4', {}).get('text', '')
- })
- return {'list': vlist, 'page': pg}
-
- def playerContent(self, flag, id, vipFlags):
- ids = id.split('@')
- url = f"{self.host}/x/cover/{ids[0]}/{ids[1]}.html"
- return {'jx':1,'parse': 1, 'url': url, 'header': ''}
-
- def localProxy(self, param):
- pass
-
- def get_filter_data(self, cid):
- hbody = self.dbody.copy()
- hbody['page_params']['channel_id'] = cid
- data = self.post(
- f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=1000005&vplatform=2&vversion_name=8.9.10&new_mark_label_enabled=1',
- json=hbody, headers=self.headers).json()
- return cid, data
-
- def get_vdata(self, body):
- try:
- vdata = self.post(
- f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=3000010&vplatform=2&vversion_name=8.2.96',
- json=body, headers=self.headers
- ).json()
- return vdata
- except Exception as e:
- print(f"Error in get_vdata: {str(e)}")
- return {'data': {'module_list_datas': []}}
-
- def process_pdata(self, pdata, ids):
- plist = []
- ylist = []
- for k in pdata:
- if k.get('item_id'):
- pid = f"{k['item_params']['union_title']}${ids[0]}@{k['item_id']}"
- if '预告' in k['item_params']['union_title']:
- ylist.append(pid)
- else:
- plist.append(pid)
- return plist, ylist
-
- def build_vod(self, vdata, actors, plist, ylist, names):
- d = vdata['data']['module_list_datas'][0]['module_datas'][0]['item_data_lists']['item_datas'][0]['item_params']
- urls = []
- if plist:
- urls.append('#'.join(plist))
- if ylist:
- urls.append('#'.join(ylist))
- vod = {
- 'type_name': d.get('sub_genre', ''),
- 'vod_name': d.get('title', ''),
- 'vod_year': d.get('year', ''),
- 'vod_area': d.get('area_name', ''),
- 'vod_remarks': d.get('holly_online_time', '') or d.get('hotval', ''),
- 'vod_actor': ','.join(actors),
- 'vod_content': d.get('cover_description', ''),
- 'vod_play_from': '$$$'.join(names),
- 'vod_play_url': '$$$'.join(urls)
- }
- return vod
-
- def handle_exception(self, e, message):
- print(f"{message}: {str(e)}")
- return {'list': [{'vod_play_from': '哎呀翻车啦', 'vod_play_url': '翻车啦#555'}]}
-
- def process_tabs(self, data, body, ids):
- try:
- pdata = data['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas']
- tabs = data['data']['module_list_datas'][-1]['module_datas'][-1]['module_params'].get('tabs')
- if tabs and len(json.loads(tabs)):
- tabs = json.loads(tabs)
- remaining_tabs = tabs[1:]
- task_queue = []
- for tab in remaining_tabs:
- nbody = copy.deepcopy(body)
- nbody['page_params']['page_context'] = tab['page_context']
- task_queue.append(nbody)
- with ThreadPoolExecutor(max_workers=10) as executor:
- future_map = {executor.submit(self.get_vdata, task): idx for idx, task in enumerate(task_queue)}
- results = [None] * len(task_queue)
- for future in as_completed(future_map.keys()):
- idx = future_map[future]
- results[idx] = future.result()
- for result in results:
- if result:
- page_data = result['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists'][
- 'item_datas']
- pdata.extend(page_data)
- return pdata
- except Exception as e:
- print(f"Error processing episodes: {str(e)}")
- return []
-
- def josn_to_params(self, params, skip_empty=False):
- query = []
- for k, v in params.items():
- if skip_empty and not v:
- continue
- query.append(f"{k}={v}")
- return "&".join(query)
-
-
diff --git a/潇洒/py/芒果视频.py b/潇洒/py/芒果视频.py
deleted file mode 100644
index 6ba8e34..0000000
--- a/潇洒/py/芒果视频.py
+++ /dev/null
@@ -1,205 +0,0 @@
-# -*- coding: utf-8 -*-
-# by @嗷呜
-import sys
-import time
-from concurrent.futures import ThreadPoolExecutor, as_completed
-sys.path.append('..')
-from base.spider import Spider
-
-class Spider(Spider):
-
- def init(self, extend=""):
- pass
-
- def getName(self):
- pass
-
- def isVideoFormat(self, url):
- pass
-
- def manualVideoCheck(self):
- pass
-
- def destroy(self):
- pass
-
- rhost='https://www.mgtv.com'
-
- host='https://pianku.api.mgtv.com'
-
- vhost='https://pcweb.api.mgtv.com'
-
- mhost='https://dc.bz.mgtv.com'
-
- shost='https://mobileso.bz.mgtv.com'
-
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.61 Chrome/126.0.6478.61 Not/A)Brand/8 Safari/537.36',
- 'origin': rhost,
- 'referer': f'{rhost}/'
- }
-
- def homeContent(self, filter):
- result = {}
- cateManual = {
- "电影": "3",
- "电视剧": "2",
- "综艺": "1",
- "动画": "50",
- "少儿": "10",
- "纪录片": "51",
- "教育": "115"
- }
- classes = []
- filters = {}
- for k in cateManual:
- classes.append({
- 'type_name': k,
- 'type_id': cateManual[k]
- })
- with ThreadPoolExecutor(max_workers=len(classes)) as executor:
- results = executor.map(self.getf, classes)
- for id, ft in results:
- if len(ft):filters[id] = ft
- result['class'] = classes
- result['filters'] = filters
- return result
-
- def homeVideoContent(self):
- data=self.fetch(f'{self.mhost}/dynamic/v1/channel/index/0/0/0/1000000/0/0/17/1354?type=17&version=5.0&t={str(int(time.time()*1000))}&_support=10000000', headers=self.headers).json()
- videoList = []
- for i in data['data']:
- if i.get('DSLList') and len(i['DSLList']):
- for j in i['DSLList']:
- if j.get('data') and j['data'].get('items') and len(j['data']['items']):
- for k in j['data']['items']:
- videoList.append({
- 'vod_id': k["videoId"],
- 'vod_name': k['videoName'],
- 'vod_pic': k['img'],
- 'vod_year': k.get('cornerTitle'),
- 'vod_remarks': k.get('time') or k.get('desc'),
- })
- return {'list':videoList}
-
- def categoryContent(self, tid, pg, filter, extend):
- body={
- 'allowedRC': '1',
- 'platform': 'pcweb',
- 'channelId': tid,
- 'pn': pg,
- 'pc': '80',
- 'hudong': '1',
- '_support': '10000000'
- }
- body.update(extend)
- data=self.fetch(f'{self.host}/rider/list/pcweb/v3', params=body, headers=self.headers).json()
- videoList = []
- for i in data['data']['hitDocs']:
- videoList.append({
- 'vod_id': i["playPartId"],
- 'vod_name': i['title'],
- 'vod_pic': i['img'],
- 'vod_year': (i.get('rightCorner',{}) or {}).get('text') or i.get('year'),
- 'vod_remarks': i['updateInfo']
- })
- result = {}
- result['list'] = videoList
- result['page'] = pg
- result['pagecount'] = 9999
- result['limit'] = 90
- result['total'] = 999999
- return result
-
- def detailContent(self, ids):
- vbody={'allowedRC': '1', 'vid': ids[0], 'type': 'b', '_support': '10000000'}
- vdata=self.fetch(f'{self.vhost}/video/info', params=vbody, headers=self.headers).json()
- d=vdata['data']['info']['detail']
- vod = {
- 'vod_name': vdata['data']['info']['title'],
- 'type_name': d.get('kind'),
- 'vod_year': d.get('releaseTime'),
- 'vod_area': d.get('area'),
- 'vod_lang': d.get('language'),
- 'vod_remarks': d.get('updateInfo'),
- 'vod_actor': d.get('leader'),
- 'vod_director': d.get('director'),
- 'vod_content': d.get('story'),
- 'vod_play_from': '芒果TV',
- 'vod_play_url': ''
- }
- data,pdata=self.fetch_page_data('1', ids[0],True)
- pagecount=data['data'].get('total_page') or 1
- if int(pagecount)>1:
- pages = list(range(2, pagecount+1))
- page_results = {}
- with ThreadPoolExecutor(max_workers=10) as executor:
- future_to_page = {
- executor.submit(self.fetch_page_data, page, ids[0]): page
- for page in pages
- }
- for future in as_completed(future_to_page):
- page = future_to_page[future]
- try:
- result = future.result()
- page_results[page] = result
- except Exception as e:
- print(f"Error fetching page {page}: {e}")
- for page in sorted(page_results.keys()):
- pdata.extend(page_results[page])
- vod['vod_play_url'] = '#'.join(pdata)
- return {'list':[vod]}
-
- def searchContent(self, key, quick, pg="1"):
- data=self.fetch(f'{self.shost}/applet/search/v1?channelCode=mobile-wxap&q={key}&pn={pg}&pc=10&_support=10000000', headers=self.headers).json()
- videoList = []
- for i in data['data']['contents']:
- if i.get('data') and len(i['data']):
- k = i['data'][0]
- if k.get('vid') and k.get('img'):
- try:
- videoList.append({
- 'vod_id': k['vid'],
- 'vod_name': k['title'],
- 'vod_pic': k['img'],
- 'vod_year': (i.get('rightTopCorner',{}) or {}).get('text') or i.get('year'),
- 'vod_remarks': '/'.join(i.get('desc',[])),
- })
- except:
- print(k)
- return {'list':videoList,'page':pg}
-
- def playerContent(self, flag, id, vipFlags):
- id=f'{self.rhost}{id}'
- return {'jx':1,'parse': 1, 'url': id, 'header': ''}
-
- def localProxy(self, param):
- pass
-
- def getf(self, body):
- params = {
- 'allowedRC': '1',
- 'channelId': body['type_id'],
- 'platform': 'pcweb',
- '_support': '10000000',
- }
- data = self.fetch(f'{self.host}/rider/config/channel/v1', params=params, headers=self.headers).json()
- ft = []
- for i in data['data']['listItems']:
- try:
- value_array = [{"n": value['tagName'], "v": value['tagId']} for value in i['items'] if
- value.get('tagName')]
- ft.append({"key": i['eName'], "name": i['typeName'], "value": value_array})
- except:
- print(i)
- return body['type_id'], ft
-
- def fetch_page_data(self, page, id, b=False):
- body = {'version': '5.5.35', 'video_id': id, 'page': page, 'size': '30',
- 'platform': '4', 'src': 'mgtv', 'allowedRC': '1', '_support': '10000000'}
- data = self.fetch(f'{self.vhost}/episode/list', params=body, headers=self.headers).json()
- ldata = [f'{i["t3"]}${i["url"]}' for i in data['data']['list']]
- if b:
- return data, ldata
- else:
- return ldata
diff --git a/潇洒/spider.jar b/潇洒/spider.jar
index 23f969b..fc9e591 100644
Binary files a/潇洒/spider.jar and b/潇洒/spider.jar differ
diff --git a/潇洒/txt/2.txt b/潇洒/txt/2.txt
new file mode 100644
index 0000000..338c4e7
--- /dev/null
+++ b/潇洒/txt/2.txt
@@ -0,0 +1 @@
+http://160.202.244.9:2489
\ No newline at end of file
diff --git a/潇洒/txt/89.txt b/潇洒/txt/89.txt
new file mode 100644
index 0000000..fd0a371
--- /dev/null
+++ b/潇洒/txt/89.txt
@@ -0,0 +1 @@
+http://app.555618.xyz:1766
\ No newline at end of file
diff --git a/潇洒/txt/lanyingxmy.txt b/潇洒/txt/lanyingxmy.txt
new file mode 100644
index 0000000..c15318f
--- /dev/null
+++ b/潇洒/txt/lanyingxmy.txt
@@ -0,0 +1 @@
+http://122.228.193.2:9988
\ No newline at end of file
diff --git a/潇洒/txt/xfdd.txt b/潇洒/txt/xfdd.txt
new file mode 100644
index 0000000..695b3d5
--- /dev/null
+++ b/潇洒/txt/xfdd.txt
@@ -0,0 +1 @@
+http://110.42.7.59:9066
\ No newline at end of file
diff --git a/王二小/spider.jar b/王二小/spider.jar
index d172d2b..53187a1 100644
Binary files a/王二小/spider.jar and b/王二小/spider.jar differ
diff --git a/肥猫/spider.jar b/肥猫/spider.jar
index 8f469b8..848ce4c 100644
Binary files a/肥猫/spider.jar and b/肥猫/spider.jar differ
diff --git a/饭太硬/api.json b/饭太硬/api.json
index 7afde7c..37b0ac2 100644
--- a/饭太硬/api.json
+++ b/饭太硬/api.json
@@ -137,17 +137,6 @@
"quickSearch": 1,
"changeable": 1
},
- {
- "key": "溢彩",
- "name": "💡溢彩┃秒播",
- "type": 3,
- "api": "csp_AppSxGuard",
- "timeout": 15,
- "searchable": 1,
- "quickSearch": 1,
- "changeable": 1,
- "ext": "rfOb1uAWbkRHp7hdxprG9un3+TfN183v1zIyaYDoDAIaLw5L8Dp8+v88LrEL3dBzrmWbdMBX0WNm7HtkQuw0AIzUurGBVyPqCKzDmbriATuukhctJlsLo8KxCw=="
- },
{
"key": "Lib",
"name": "🌟立播┃秒播",
@@ -218,28 +207,6 @@
"changeable": 1,
"ext": "uqGL1bNENExT7/hGxpSE5qU="
},
- {
- "key": "兄弟",
- "name": "🍊水星┃多线",
- "type": 3,
- "api": "csp_AppSxGuard",
- "timeout": 15,
- "searchable": 1,
- "quickSearch": 1,
- "filterable": 1,
- "ext": "rfOb1uAWbkRHp7hdxprG9un3+SLP183q3ik3cJDiAwlFdF8L6SIvrvc9LrpTyIg76T7QJZdEkWNj43wiSaA0TJyQpu2IF2jsSLWFx7WkAmG40hFxJ1tI+Jf+EVG8DtoDRcNi+TtVGULnWrSz3EWnVcxR3EJhXnrwYWe1kJtNW5txuHAO"
- },
- {
- "key": "即看",
- "name": "🐻即看┃多线",
- "type": 3,
- "api": "csp_AppSxGuard",
- "timeout": 15,
- "searchable": 1,
- "quickSearch": 0,
- "changeable": 0,
- "ext": "rfOX1voDIQhH8epBwtCFsub1+2maloq8lmJuL821WUsZJAZft2UtrrwhKK5Zxt1toWyFctBUmThhuDAjVuU="
- },
{
"key": "欢视",
"name": "👓欢视┃多线",
diff --git a/饭太硬/spider.jar b/饭太硬/spider.jar
index e6ae663..a9bf5eb 100644
Binary files a/饭太硬/spider.jar and b/饭太硬/spider.jar differ
diff --git a/香雅情/lives/Tianmu.txt b/香雅情/lives/Tianmu.txt
index 934691b..c1f37d0 100644
--- a/香雅情/lives/Tianmu.txt
+++ b/香雅情/lives/Tianmu.txt
@@ -4,102 +4,97 @@ CCTV1,http://58.57.40.22:9901/tsfile/live/0001_1.m3u8
CCTV1,http://112.123.206.32:808/hls/1/index.m3u8
CCTV1,http://8.138.7.223/【公众号:榴芒电视】/cctv1.m3u8
CCTV1,http://60.29.124.66:6080/hls/12/index.m3u8
-CCTV10,http://36.105.100.208:35455/gaoma/cctv10.m3u8
-CCTV10,http://60.29.124.66:6080/hls/21/index.m3u8
-CCTV10,http://120.76.248.139/live/bfgd/4200000129.m3u8
-CCTV10,http://182.150.23.74:808/hls/10/index.m3u8
-CCTV10,http://123.130.84.106:8154/tsfile/live/0010_1.m3u8
+CCTV10,http://39.164.160.249:9901/tsfile/live/0010_1.m3u8
+CCTV10,http://58.57.40.22:9901/tsfile/live/1010_1.m3u8
+CCTV10,http://58.17.48.228:808/hls/10/index.m3u8
CCTV11,http://39.164.160.249:9901/tsfile/live/0011_1.m3u8
CCTV11,http://58.57.40.22:9901/tsfile/live/1011_1.m3u8
-CCTV11,http://36.105.100.208:35455/gaoma/cctv11.m3u8
CCTV11,http://60.29.124.66:6080/hls/22/index.m3u8
+CCTV11,http://120.76.248.139/live/bfgd/4200000130.m3u8
CCTV12,http://39.164.160.249:9901/tsfile/live/0012_1.m3u8
CCTV12,http://36.105.100.208:35455/gaoma/cctv12.m3u8
CCTV12,http://183.11.239.36:808/hls/30/index.m3u8
CCTV12,http://120.76.248.139/live/bfgd/4200000131.m3u8
CCTV13,http://8.138.7.223/【公众号:榴芒电视】/cctv13.m3u8
CCTV14,http://36.105.100.208:35455/gaoma/cctv14.m3u8
-CCTV14,http://58.17.48.228:808/hls/14/index.m3u8
-CCTV14,http://60.29.124.66:6080/hls/25/index.m3u8
-CCTV14,http://58.19.43.46:9901/tsfile/live/1033_1.m3u8
+CCTV14,http://1.24.190.98:10080/hls/14/index.m3u8
+CCTV14,http://182.150.23.74:808/hls/14/index.m3u8
+CCTV15,http://39.164.160.249:9901/tsfile/live/0015_1.m3u8
CCTV15,http://58.57.40.22:9901/tsfile/live/1015_1.m3u8
+CCTV15,http://36.105.100.208:35455/gaoma/cctv15.m3u8
CCTV15,http://60.29.124.66:6080/hls/26/index.m3u8
-CCTV15,http://58.19.43.46:9901/tsfile/live/1034_1.m3u8
-CCTV15,http://116.9.204.242:9901/tsfile/live/0015_1.m3u8
-CCTV15,http://218.89.240.144:59901/tsfile/live/0015_1.m3u8
+CCTV16,http://36.105.100.208:35455/gaoma/cctv16.m3u8
CCTV16,http://58.17.48.228:808/hls/25/index.m3u8
+CCTV16,http://183.11.239.36:808/hls/169/index.m3u8
CCTV164K25PHLG源,http://113.62.253.22/live.aishang.ctlcdn.com/00000110240389_1/playlist.m3u8?CONTENTID=00000110240389_1&AUTHINFO=FABqh274XDn8fkurD5614t%2B1RvYajgx%2Ba3PxUJe1SMO4OjrtFitM6ZQbSJEFffaD35hOAhZdTXOrK0W8QvBRom%2BXaXZYzB%2FQfYjeYzGgKhP%2Fdo%2BXpr4quVxlkA%2BubKvbU1XwJFRgrbX%2BnTs60JauQUrav8kLj%2FPH8LxkDFpzvkq75UfeY%2FVNDZygRZLw4j%2BXtwhj%2FIuXf1hJAU0X%2BheT7g%3D%3D&USERTOKEN=eHKuwve%2F35NVIR5qsO5XsuB0O2BhR0KR
CCTV17,http://58.57.40.22:9901/tsfile/live/0019_1.m3u8
CCTV17,http://36.105.100.208:35455/gaoma/cctv17.m3u8
-CCTV17,http://183.11.239.36:808/hls/35/index.m3u8
+CCTV17,http://120.238.94.10:9901/tsfile/live/1048_1.m3u8
CCTV17,http://120.76.248.139/live/bfgd/4200000204.m3u8
-CCTV17,http://58.221.214.82:9901/tsfile/live/0003_2.m3u8
CCTV2,http://39.164.160.249:9901/tsfile/live/0002_1.m3u8
CCTV2,http://58.57.40.22:9901/tsfile/live/1001_1.m3u8
CCTV2,http://36.105.100.208:35455/gaoma/cctv2.m3u8
CCTV2,http://112.123.206.32:808/hls/2/index.m3u8
-CCTV2,http://60.29.124.66:6080/hls/13/index.m3u8
CCTV3,http://36.105.100.208:35455/gaoma/cctv3.m3u8
CCTV3,http://58.17.48.228:808/hls/3/index.m3u8
CCTV3,http://60.29.124.66:6080/hls/14/index.m3u8
CCTV3,http://183.11.239.36:808/hls/91/index.m3u8
-CCTV4,http://58.57.40.22:9901/tsfile/live/1003_1.m3u8
-CCTV4,http://120.76.248.139/live/bfgd/4200000063.m3u8
-CCTV4,http://112.46.85.60:8009/hls/4/index.m3u8
-CCTV4,http://182.150.23.74:808/hls/4/index.m3u8
-CCTV5,http://58.17.48.228:808/hls/5/index.m3u8
+CCTV4,http://58.19.43.46:9901/tsfile/live/1023_1.m3u8
+CCTV4,http://111.9.163.109:9901/tsfile/live/0004_1.m3u8
+CCTV4,http://223.241.247.214:9901/tsfile/live/0004_1.m3u8
+CCTV4,http://120.238.94.10:9901/tsfile/live/1021_1.m3u8
+CCTV4,http://124.128.73.58:9901/tsfile/live/0004_1.m3u8
+CCTV5,http://58.57.40.22:9901/tsfile/live/1004_1.m3u8
CCTV5,http://60.29.124.66:6080/hls/16/index.m3u8
-CCTV5,http://183.11.239.36:808/hls/93/index.m3u8
+CCTV5,http://112.46.85.60:8009/hls/503/index.m3u8
+CCTV5+,http://58.57.40.22:9901/tsfile/live/1005_1.m3u8
CCTV5+,http://36.105.100.208:35455/gaoma/cctv5p.m3u8
CCTV5+,http://120.76.248.139/live/bfgd/4200000246.m3u8
-CCTV5+,http://182.150.23.74:808/hls/16/index.m3u8
CCTV5+,http://218.89.240.144:59901/tsfile/live/0016_1.m3u8
-CCTV6,http://58.57.40.22:9901/tsfile/live/1006_1.m3u8
CCTV6,http://36.105.100.208:35455/gaoma/cctv6.m3u8
CCTV6,http://58.17.48.228:808/hls/6/index.m3u8
CCTV6,http://60.29.124.66:6080/hls/17/index.m3u8
+CCTV6,http://183.11.239.36:808/hls/94/index.m3u8
+CCTV6,http://120.76.248.139/live/bfgd/4200000065.m3u8
+CCTV7,http://58.57.40.22:9901/tsfile/live/1007_1.m3u8
CCTV7,http://8.138.7.223/tv/cctv7.m3u8
CCTV7,http://8.138.7.223/【公众号:榴芒电视】/cctv7.m3u8
CCTV7,http://60.29.124.66:6080/hls/18/index.m3u8
CCTV7,http://183.11.239.36:808/hls/25/index.m3u8
-CCTV7,http://120.76.248.139/live/bfgd/4200000127.m3u8
-CCTV8,http://58.17.48.228:808/hls/8/index.m3u8
-CCTV8,http://113.57.111.4:1111/tsfile/live/1007_1.m3u8
-CCTV8,http://123.130.84.106:8154/tsfile/live/0008_1.m3u8
-CCTV8,http://123.129.70.178:9901/tsfile/live/0008_1.m3u8
-CCTV8,http://113.57.93.165:9900/tsfile/live/0008_1.m3u8
-CCTV9,http://39.164.160.249:9901/tsfile/live/0009_1.m3u8
-CCTV9,http://58.57.40.22:9901/tsfile/live/1009_1.m3u8
-CCTV9,http://60.29.124.66:6080/hls/20/index.m3u8
+CCTV8,http://218.3.138.25:1111/tsfile/live/1007_1.m3u8
+CCTV8,http://111.9.163.109:9901/tsfile/live/0008_1.m3u8
+CCTV8,http://36.105.100.208:35455/gaoma/cctv8k_36m.m3u8
+CCTV8,http://183.215.134.239:19901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0
+CCTV8,http://223.241.247.214:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV9,http://183.11.239.36:808/hls/27/index.m3u8
-CCTV9,http://182.150.23.74:808/hls/9/index.m3u8
+CCTV9,http://120.238.94.10:9901/tsfile/live/1027_1.m3u8
+CCTV9,http://222.169.85.8:9901/tsfile/live/0009_1.m3u8
+CCTV9,http://113.25.252.226:9901/tsfile/live/0009_1.m3u8
+CCTV9,http://112.123.243.37:50085/tsfile/live/0010_1.m3u8?key=txiptv&playlive=0&authid=0
CHC动作电影,http://113.195.172.192:808/hls/114/index.m3u8
CHC华诚影视,http://120.76.248.139/live/bfgd/4200000289.m3u8
CHC家庭影院,http://113.195.172.192:808/hls/113/index.m3u8
CHC家庭影院,http://61.162.52.6:8088/newlive/live/hls/60/live.m3u8
CHC影迷电影,http://113.195.172.192:808/hls/112/index.m3u8
万荣综合,http://60.222.246.220:19433/hls1.m3u8
-三沙卫视,http://61.138.128.226:19901/tsfile/live/1020_1.m3u8
-三沙卫视,http://36.105.100.208:35455/itv/5000000011000288016.m3u8?cdn=bestzb
-三沙卫视,http://61.138.128.226:19901/tsfile/live/1020_1.m3u8?key=txiptv&playlive=1&authid=0
东北热剧,http://39.134.65.175/PLTV/88888888/224/3221225679/1.m3u8
东南卫视,http://36.32.174.67:60080/newlive/live/hls/33/live.m3u8
-东南卫视,http://58.19.43.46:9901/tsfile/live/1046_1.m3u8
-东南卫视,http://61.138.128.226:19901/tsfile/live/1014_1.m3u8
-东南卫视,http://123.129.70.178:9901/tsfile/live/0137_1.m3u8
-东方卫视,http://36.32.174.67:60080/newlive/live/hls/24/live.m3u8
-东方卫视,http://112.46.85.60:8009/hls/31/index.m3u8
+东南卫视,http://61.136.172.236:9901/tsfile/live/0137_1.m3u8
+东南卫视,http://58.57.40.22:9901/tsfile/live/1037_1.m3u8
+东方卫视,http://124.116.183.146:9901/tsfile/live/0107_1.m3u8
+东方卫视,http://183.11.239.36:808/hls/114/index.m3u8
东方卫视,http://58.19.43.46:9901/tsfile/live/1035_1.m3u8
-东方卫视,http://61.138.128.226:19901/tsfile/live/0107_1.m3u8
+东方卫视,http://58.221.214.82:9901/tsfile/live/0107_1.m3u8
中华特产,http://120.76.248.139/live/bfgd/4200000158.m3u8
乐家购物,http://112.46.105.20:8009/hls/23/index.m3u8
乐游,http://112.46.105.20:8009/hls/75/index.m3u8
乐至综合,http://175.155.106.72:89/live1/live1.m3u8?zsicd
-云南卫视,http://39.164.160.249:9901/tsfile/live/0119_1.m3u8
-云南卫视,http://36.32.174.67:60080/newlive/live/hls/45/live.m3u8
+云南卫视,http://111.61.236.247:9081/hls/32/index.m3u8
+云南卫视,http://120.76.248.139/live/bfgd/4200000482.m3u8
云南卫视,http://222.169.85.8:9901/tsfile/live/0119_1.m3u8
-云南卫视,http://58.57.40.22:9901/tsfile/live/1047_1.m3u8
+云南卫视,http://182.150.23.74:808/hls/29/index.m3u8
伊犁哈萨克,http://110.153.180.106:55555/out_3/index.m3u8
+伊犁哈萨克,http://110.153.180.106:55555/out_3/index.m3u8?zxinjd
伊犁汉语综合,http://110.153.180.106:55555/out_1/index.m3u8
伊犁经济法制,http://110.153.180.106:55555/out_4/index.m3u8
伊犁经济法制,http://110.153.180.106:55555/out_4/index.m3u8?zxinjd
@@ -109,15 +104,15 @@ CHC影迷电影,http://113.195.172.192:808/hls/112/index.m3u8
优漫卡通,http://58.221.214.82:9901/tsfile/live/0008_2.m3u8
优漫卡通,http://36.105.100.208:35455/itv/1000000002000010063.m3u8?cdn=ystenlive
兵团八师石河子教育,http://124.88.144.73:1935/live/jiaoyu/playlist.m3u8
-兵团八师石河子教育,http://124.88.144.73:1935/live/jiaoyu/playlist.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
兵团八师石河子新闻综合,http://124.88.144.73:1935/live/xwzh/playlist.m3u8?zxinjd
兵团八师石河子经济生活,http://124.88.144.73:1935/live/dywt/playlist.m3u8?zxinjd
+兵团卫视,http://183.11.239.36:808/hls/7/index.m3u8
兵团卫视,http://120.76.248.139/live/bfgd/4200000124.m3u8
兵团卫视,http://218.89.240.144:59901/tsfile/live/0115_1.m3u8
-兵团卫视,http://61.138.128.226:19901/tsfile/live/0115_1.m3u8
+兵团卫视,http://218.13.170.98:9901/tsfile/live/0115_1.m3u8
内蒙古卫视,http://111.61.236.247:9081/hls/48/index.m3u8
+内蒙古卫视,http://124.128.73.58:9901/tsfile/live/0109_1.m3u8
内蒙古卫视,http://61.156.228.12:8154/tsfile/live/0109_1.m3u8
-内蒙古卫视,http://182.150.23.74:808/hls/37/index.m3u8
农林卫视,http://112.46.105.20:8009/hls/27/index.m3u8
农林卫视,http://8.138.7.223/【公众号:榴芒电视】/农林卫视.m3u8
农林卫视,http://120.76.248.139/live/bfgd/4200000122.m3u8
@@ -125,15 +120,15 @@ CHC影迷电影,http://113.195.172.192:808/hls/112/index.m3u8
农林卫视,http://124.116.183.146:9901/tsfile/live/1004_1.m3u8
动漫秀场,http://36.105.100.208:35455/itv/5000000011000031113.m3u8?cdn=bestzb
北京卫视,http://39.164.160.249:9901/tsfile/live/0122_1.m3u8
+北京卫视,http://183.11.239.36:808/hls/41/index.m3u8
北京卫视,http://61.156.228.12:8154/tsfile/live/0122_1.m3u8
-北京卫视,http://116.9.204.242:9901/tsfile/live/0122_1.m3u8
卡酷少儿,http://58.57.40.22:9901/tsfile/live/1060_1.m3u8
卡酷少儿,http://61.138.128.226:19901/tsfile/live/1017_1.m3u8
+卡酷少儿,http://218.13.170.98:9901/tsfile/live/1021_1.m3u8
卡酷少儿,http://60.29.124.66:6080/hls/58/index.m3u8
-双流综合,http://171.221.250.130:18888/27e684978eb642eeb90ab815f6cc51bf/c41893de5e8645b3b43aef1640859b0d.m3u8?zsicd,
-吉林卫视,http://58.57.40.22:9901/tsfile/live/1050_1.m3u8
-吉林卫视,http://58.19.43.46:9901/tsfile/live/1007_1.m3u8
+双流综合,http://171.221.250.130:18888/27e684978eb642eeb90ab815f6cc51bf/c41893de5e8645b3b43aef1640859b0d.m3u8?zsicd
吉林卫视,http://111.61.236.247:9081/hls/45/index.m3u8
+吉林卫视,http://61.156.228.12:8154/tsfile/live/0116_1.m3u8
哈哈炫动,http://58.57.40.22:9901/tsfile/live/1061_1.m3u8
哈哈炫动,http://120.238.94.10:9901/tsfile/live/1037_1.m3u8
哈哈炫动,http://61.138.128.226:19901/tsfile/live/1016_1.m3u8
@@ -141,30 +136,27 @@ CHC影迷电影,http://113.195.172.192:808/hls/112/index.m3u8
哈哈炫动,http://36.105.100.208:35455/itv/5000000011000031123.m3u8?cdn=bestzb
哈尔滨影视,http://111.43.126.240:9003/hls/5/index.m3u8
哈尔滨生活,http://111.43.126.240:9003/hls/3/index.m3u8
-四川卫视,http://183.11.239.36:808/hls/50/index.m3u8
-四川卫视,http://113.57.111.4:1111/tsfile/live/1032_1.m3u8
-四川卫视,http://113.25.252.226:9901/tsfile/live/0123_1.m3u8
-四川卫视,http://1.24.190.98:10080/hls/86/index.m3u8
+四川卫视,http://58.57.40.22:9901/tsfile/live/1046_1.m3u8
+四川卫视,http://58.19.43.46:9901/tsfile/live/1043_1.m3u8
+四川卫视,http://120.76.248.139/live/bfgd/4200000103.m3u8
+四川卫视,http://61.156.228.12:8154/tsfile/live/0123_1.m3u8
四川科教,http://182.150.115.21:8030/pcgacg/pcgacg_0.m3u8
四海钓鱼,http://120.76.248.139/live/bfgd/4200000229.m3u8
大湾区卫视,http://222.128.55.152:9080/live/dwq.m3u8
-大湾区卫视,http://183.11.239.36:808/hls/132/index.m3u8
-天津卫视,http://1.24.190.98:10080/hls/69/index.m3u8
-天津卫视,http://112.123.243.37:50085/tsfile/live/0128_1.m3u8?key=txiptv&playlive=0&authid=0
-天津卫视,http://110.7.131.79:9901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0
-天津卫视,http://110.7.131.40:9901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0
-宁夏卫视,http://58.57.40.22:9901/tsfile/live/1054_1.m3u8
-宁夏卫视,http://120.238.94.10:9901/tsfile/live/1076_1.m3u8
+大湾区卫视,http://36.105.100.208:35455/itv/1000000002000011619.m3u8?cdn=ystenlive
+天津卫视,http://112.46.85.60:8009/hls/44/index.m3u8
+天津卫视,http://182.150.23.74:808/hls/27/index.m3u8
+天津卫视,http://111.61.236.247:9081/hls/29/index.m3u8
+奎屯哈萨克语,http://218.84.12.186:8002/hls/main/playlist.m3u8
+奎屯哈萨克语,http://218.84.12.186:8002/hls/main/playlist.m3u8?zxinjd
宁夏卫视,http://36.32.174.67:60080/newlive/live/hls/49/live.m3u8
宁夏卫视,http://58.19.43.46:9901/tsfile/live/1003_1.m3u8
安多卫视,http://39.134.65.166/PLTV/88888888/224/3221225531/1.m3u8
安多卫视,http://39.134.66.66/PLTV/88888888/224/3221225531/1.m3u8
-安多卫视,http://36.105.100.208:35455/itv/1000000005000266001.m3u8?cdn=ystenlive
安徽卫视,http://58.57.40.22:9901/tsfile/live/1033_1.m3u8
-安徽卫视,http://58.19.43.46:9901/tsfile/live/1040_1.m3u8
-安徽卫视,http://123.130.84.106:8154/tsfile/live/0130_1.m3u8
-安徽卫视,http://111.61.236.247:9081/hls/27/index.m3u8
-少儿动画,http://218.15.183.23:9901/tsfile/live/23045_1.m3u8
+安徽卫视,http://113.57.111.4:1111/tsfile/live/1021_1.m3u8
+安徽卫视,http://223.241.247.214:9901/tsfile/live/0019_1.m3u8
+安徽卫视,http://113.57.93.165:9900/tsfile/live/0130_1.m3u8
少儿动画,http://61.138.128.226:19901/tsfile/live/1017_1.m3u8?key=txiptv&playlive=1&authid=0
山东卫视,http://39.164.160.249:9901/tsfile/live/0131_1.m3u8
山东卫视,http://183.11.239.36:808/hls/43/index.m3u8
@@ -175,22 +167,23 @@ CHC影迷电影,http://113.195.172.192:808/hls/112/index.m3u8
广东卫视,http://39.164.160.249:9901/tsfile/live/0125_1.m3u8
广东卫视,http://58.57.40.22:9901/tsfile/live/1039_1.m3u8
广东卫视,http://120.238.94.10:9901/tsfile/live/1008_1.m3u8
-广东卫视,http://124.116.183.146:9901/tsfile/live/0125_1.m3u8
-广东民生,http://183.11.239.36:808/hls/18/index.m3u8
+广东卫视,http://183.11.239.36:808/hls/80/index.m3u8
广东珠江,http://120.238.94.10:9901/tsfile/live/1009_1.m3u8
广州竞赛,http://8.138.7.223/tv/gzjs.m3u8
+广西卫视,http://36.32.174.67:60080/newlive/live/hls/38/live.m3u8
+广西卫视,http://58.19.43.46:9901/tsfile/live/1004_1.m3u8
康巴卫视,http://218.89.240.144:59901/tsfile/live/1010_1.m3u8
康巴卫视,http://111.202.12.159:8080/kYGHWzA/1000/live.m3u8
康巴卫视,http://111.202.12.159:8080/3zvkK28/1000/live.m3u8
康巴卫视,http://39.134.66.66/PLTV/88888888/224/3221225527/1.m3u8
康巴卫视,http://39.134.65.166/PLTV/88888888/224/3221225527/1.m3u8
延边卫视,http://120.76.248.139/live/bfgd/4200000117.m3u8
-延边卫视,http://61.138.128.226:19901/tsfile/live/1008_1.m3u8
+延边卫视,http://36.105.100.208:35455/itv/1000000005000266008.m3u8?cdn=ystenlive
延边卫视,http://61.138.128.226:19901/tsfile/live/1008_1.m3u8?key=txiptv&playlive=1&authid=0
新疆卫视,http://111.61.236.247:9081/hls/53/index.m3u8
-新疆卫视,http://120.76.248.139/live/bfgd/4200000150.m3u8
-新疆卫视,http://61.156.228.12:8154/tsfile/live/0110_1.m3u8
新疆卫视,http://113.25.252.226:9901/tsfile/live/0110_1.m3u8
+新疆卫视,http://218.84.12.186:8001/hls/main/playlist.m3u8
+新疆卫视,http://112.123.243.37:50085/tsfile/live/0143_1.m3u8?key=txiptv&playlive=0&authid=0
新视觉,http://120.76.248.139/live/bfgd/4200000249.m3u8
朝阳新闻综合,http://120.76.248.139/live/bfgd/4200000282.m3u8
末日电影合集,http://43.138.0.72:35455/yy/1354889019
@@ -198,59 +191,68 @@ CHC影迷电影,http://113.195.172.192:808/hls/112/index.m3u8
江夏新闻综合,http://59.175.226.142:280/gb28181/xwzh.m3u8?zhubd
江苏卫视,http://39.164.160.249:9901/tsfile/live/0127_1.m3u8
江苏卫视,http://58.57.40.22:9901/tsfile/live/1031_1.m3u8
+江苏卫视,http://183.11.239.36:808/hls/38/index.m3u8
江苏卫视,http://120.76.248.139/live/bfgd/4200000085.m3u8
-江苏卫视,http://112.46.85.60:8009/hls/33/index.m3u8
+江西卫视,http://39.164.160.249:9901/tsfile/live/0138_1.m3u8
江西卫视,http://58.57.40.22:9901/tsfile/live/1043_1.m3u8
江西卫视,http://36.32.174.67:60080/newlive/live/hls/22/live.m3u8
江西卫视,http://58.17.48.228:808/hls/17/index.m3u8
-江西卫视,http://36.32.174.67:60080/newlive/live/hls/31/live.m3u8
+河北卫视,http://39.164.160.249:9901/tsfile/live/0117_1.m3u8
河北卫视,http://36.32.174.67:60080/newlive/live/hls/36/live.m3u8
-河北卫视,http://111.14.181.15:9901/tsfile/live/0117_1.m3u8
+河北卫视,http://120.76.248.139/live/bfgd/4200000108.m3u8
河南卫视,http://39.164.160.249:9901/tsfile/live/0139_1.m3u8
河南卫视,http://120.238.94.10:9901/tsfile/live/1068_1.m3u8
+河南卫视,http://58.19.43.46:9901/tsfile/live/1006_1.m3u8
津南一套,http://61.147.106.103/play.jinnantv.top/live/JNTV1.m3u8?ztianjd&wsSession=4e59297ef5846f4a7cf02eb3-172672213891355&wsIPSercert=6d426cba8b106cdec9147b1e2a9ace7c&wsiphost=local&wsBindIP=1
-津南一套,http://61.147.106.103/play.jinnantv.top/live/JNTV1.m3u8?ztianjd&wsSession=4e59297ef5846f4a7cf02eb3-172672213891355&wsIPSercert=6d426cba8b106cdec9147b1e2a9ace7c&wsiphost=local&wsBindIP=1
津南一套,http://61.147.106.103/play.jinnantv.top/live/JNTV1.m3u8?ztianjd&wsSession=4e59297ef5846f4a7cf02eb3-172672213891355&wsIPSercert=6d426cba8b106cdec9147b1e2a9ace7c&wsiphost=local&wsBindIP=1
-浙江卫视,http://112.46.85.60:8009/hls/34/index.m3u8
-浙江卫视,http://113.57.111.4:1111/tsfile/live/1020_1.m3u8
-海南卫视,http://113.57.111.4:1111/tsfile/live/1031_1.m3u8
-海南卫视,http://58.57.40.22:9901/tsfile/live/1000_1.m3u8
+津南一套,http://61.147.106.103/play.jinnantv.top/live/JNTV1.m3u8?ztianjd&wsSession=4e59297ef5846f4a7cf02eb3-172672213891355&wsIPSercert=6d426cba8b106cdec9147b1e2a9ace7c&wsiphost=local&wsBindIP=1
+浙江卫视,http://183.11.239.36:808/hls/37/index.m3u8
+海南卫视,http://58.221.214.82:9901/tsfile/live/0016_2.m3u8?key=txiptv&playlive=1&authid=0
+海南卫视,http://36.105.100.208:35455/itv/5000000004000006211.m3u8?cdn=bestzb
海峡卫视,http://38.64.72.148:80/hls/modn/list/4009/playlist.m3u8
涡阳新闻综合,http://220.180.124.18:888/live/ch0.m3u8
-深圳卫视,http://58.57.40.22:9901/tsfile/live/1036_1.m3u8
深圳卫视,http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8
-深圳卫视,http://124.116.183.146:9901/tsfile/live/0126_1.m3u8
-深圳卫视,http://182.150.23.74:808/hls/20/index.m3u8
+深圳卫视,http://183.11.239.36:808/hls/45/index.m3u8
+深圳卫视,http://222.169.85.8:9901/tsfile/live/0126_1.m3u8
深圳卫视,http://113.57.111.4:1111/tsfile/live/1023_1.m3u8
-湖北卫视,http://183.11.239.36:808/hls/46/index.m3u8
-湖北卫视,http://113.57.111.4:1111/tsfile/live/1015_1.m3u8
-湖北卫视,http://223.241.247.214:9901/tsfile/live/0132_1.m3u8
-湖北卫视,http://218.89.240.144:59901/tsfile/live/0132_1.m3u8
+深圳卫视,http://223.241.247.214:9901/tsfile/live/1012_1.m3u8
+湖北卫视,http://58.57.40.22:9901/tsfile/live/1038_1.m3u8
+湖北卫视,http://120.238.94.10:9901/tsfile/live/1055_1.m3u8
+湖北卫视,http://124.116.183.146:9901/tsfile/live/0132_1.m3u8
+湖北卫视,http://120.76.248.139/live/bfgd/4200000102.m3u8
湖南卫视,http://39.164.160.249:9901/tsfile/live/0128_1.m3u8
湖南卫视,http://58.17.48.228:808/hls/31/index.m3u8
湖南卫视,http://124.116.183.146:9901/tsfile/live/0128_1.m3u8
玛纳斯综合,http://218.84.127.245:1026/hls/main1/playlist.m3u8
环球旅游,http://120.76.248.139/live/bfgd/4200000147.m3u8
+甘肃卫视,http://58.57.40.22:9901/tsfile/live/1056_1.m3u8
甘肃卫视,http://120.238.94.10:9901/tsfile/live/1079_1.m3u8
+甘肃卫视,http://223.241.247.214:9901/tsfile/live/0141_1.m3u8
生态环境,http://120.76.248.139/live/bfgd/4200000149.m3u8
石河子影视文体,http://124.88.144.73:1935/live/jjsh/playlist.m3u8
纪实科教,http://120.76.248.139/live/bfgd/4200000113.m3u8
纪实科教8K,http://111.31.106.140/downflv.brtvcloud.com/8klive/8kliveok.m3u8
西安新闻,http://112.46.105.20:8009/hls/28/index.m3u8
西安都市,http://112.46.105.20:8009/hls/29/index.m3u8
+西藏卫视,http://120.238.94.10:9901/tsfile/live/1077_1.m3u8
西藏卫视,http://36.32.174.67:60080/newlive/live/hls/48/live.m3u8
-西藏卫视,http://111.61.236.247:9081/hls/52/index.m3u8
西藏卫视,http://183.11.239.36:808/hls/64/index.m3u8
+西藏卫视,http://124.128.73.58:9901/tsfile/live/0111_1.m3u8
+西藏卫视,http://218.89.240.144:59901/tsfile/live/0111_1.m3u8
谈判专家,http://43.138.0.72:35455/yy/1382735560
-贵州卫视,http://110.7.131.40:9901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=1&authid=0
+贵州卫视,http://39.164.160.249:9901/tsfile/live/0120_1.m3u8
+贵州卫视,http://183.11.239.36:808/hls/49/index.m3u8
+贵州卫视,http://222.169.85.8:9901/tsfile/live/0120_1.m3u8
+贵州卫视,http://113.57.111.4:1111/tsfile/live/1029_1.m3u8
车迷频道,http://120.76.248.139/live/bfgd/4200000146.m3u8
辽宁公共,http://120.76.248.139/live/bfgd/4200000077.m3u8
辽宁公共,http://120.76.248.139/live/bfgd/4200000481.m3u8
辽宁北方,http://120.76.248.139/live/bfgd/4200000071.m3u8
辽宁卫视,http://39.164.160.249:9901/tsfile/live/0121_1.m3u8
-辽宁卫视,http://58.57.40.22:9901/tsfile/live/1035_1.m3u8
辽宁卫视,http://58.19.43.46:9901/tsfile/live/1041_1.m3u8
-辽宁卫视,http://183.11.239.36:808/hls/47/index.m3u8
+辽宁卫视,http://120.76.248.139/live/bfgd/4200000141.m3u8
+辽宁卫视,http://120.76.248.139/live/bfgd/4200000185.m3u8
+辽宁卫视,http://120.76.248.139/live/bfgd/4200000058.m3u8
辽宁影视剧,http://120.76.248.139/live/bfgd/4200000070.m3u8
辽宁教育青少,http://120.76.248.139/live/bfgd/4200000075.m3u8
辽宁生活,http://120.76.248.139/live/bfgd/4200000073.m3u8
@@ -261,14 +263,13 @@ CHC影迷电影,http://113.195.172.192:808/hls/112/index.m3u8
都市剧场,http://112.46.105.20:8009/hls/72/index.m3u8
鄂托克旗电视台,http://110.19.181.138:10080/hls/F509Rh7GR/F509Rh7GR_live.m3u8?zneimd
重庆卫视,http://36.32.174.67:60080/newlive/live/hls/34/live.m3u8
-重庆卫视,http://120.76.248.139/live/bfgd/4200000107.m3u8
-重庆卫视,http://123.130.84.106:8154/tsfile/live/0142_1.m3u8
+重庆卫视,http://124.116.183.146:9901/tsfile/live/0142_1.m3u8
重庆卫视,http://111.61.236.247:9081/hls/41/index.m3u8
-金鹰卡通,http://58.57.40.22:9901/tsfile/live/1059_1.m3u8
+重庆卫视,http://101.66.198.77:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=0&authid=0
金鹰卡通,http://58.19.43.46:9901/tsfile/live/1000_1.m3u8
金鹰卡通,http://116.128.242.83:9901/tsfile/live/1002_1.m3u8
+金鹰卡通,http://58.57.40.22:9901/tsfile/live/1059_1.m3u8
金鹰卡通,http://218.89.240.144:59901/tsfile/live/1002_1.m3u8
-金鹰卡通,http://61.138.128.226:19901/tsfile/live/1018_1.m3u8
陕西体育休闲,http://112.46.105.20:8009/hls/24/index.m3u8
陕西卫视,http://61.138.128.226:19901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0
陕西新闻咨询,http://112.46.105.20:8009/hls/18/index.m3u8
@@ -280,18 +281,18 @@ CHC影迷电影,http://113.195.172.192:808/hls/112/index.m3u8
青海卫视,http://120.238.94.10:9901/tsfile/live/1073_1.m3u8
青海卫视,http://58.19.43.46:9901/tsfile/live/1014_1.m3u8
青海卫视,http://120.76.248.139/live/bfgd/4200000111.m3u8
+青海卫视,http://123.130.84.106:8154/tsfile/live/0140_1.m3u8
黎城综合,http://111.53.96.67:8081/live/1/index.m3u8
黎城综合,http://111.53.96.67:8081/live/1/index.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
黑莓动画,http://39.134.65.106/PLTV/88888888/224/3221225529/1.m3u8
-黑莓动画,http://36.105.100.208:35455/itv/1000000004000021734.m3u8?cdn=ystenlive
黑莓电影,http://36.105.100.208:35455/itv/1000000004000019624.m3u8?cdn=ystenlive
黑龙江卫视,http://39.164.160.249:9901/tsfile/live/0143_1.m3u8
黑龙江卫视,http://58.57.40.22:9901/tsfile/live/1040_1.m3u8
-黑龙江卫视,http://58.19.43.46:9901/tsfile/live/1008_1.m3u8
-黑龙江卫视,http://120.76.248.139/live/bfgd/4200000095.m3u8
+黑龙江卫视,http://124.116.183.146:9901/tsfile/live/0143_1.m3u8
# IPv6 Streams
CCTV-1 综合,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226559/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
@@ -308,31 +309,35 @@ CCTV-7 国防军事,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.co
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
CCTV1,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8?
-CCTV10,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?
-CCTV11,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?
-CCTV12,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226942/1.m3u8?
-CCTV13,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226316/1.m3u8?
+CCTV10,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226449/1.m3u8
+CCTV11,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8
+CCTV11,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226448/1.m3u8
+CCTV12,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8
CCTV14,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226229/1.m3u8
+CCTV14,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226445/1.m3u8
CCTV14,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8?
CCTV15,http://[2409:8087:1a01:df::4033]:80/TVOD/88888888/224/3221226127/main.m3u8
CCTV15,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8
CCTV15,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226444/1.m3u8
-CCTV15,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8?
CCTV16,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226887/1.m3u8
CCTV16,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226888/1.m3u8
+CCTV16,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227002/1.m3u8?
CCTV17,http://[2409:8087:1a01:df::4025]:80/TVOD/88888888/224/3221225708/main.m3u8
CCTV17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8
CCTV17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226442/1.m3u8
-CCTV17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?
-CCTV2,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226893/1.m3u8?
+CCTV2,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226230/1.m3u8
+CCTV2,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226371/1.m3u8
CCTV3,http://[2409:8087:1a01:df::4041]:80/TVOD/88888888/224/3221225799/main.m3u8
-CCTV3,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226471/1.m3u8?
-CCTV4,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?
+CCTV3,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226456/1.m3u8
+CCTV3,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226471/1.m3u8
+CCTV5,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8?
CCTV5,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226894/1.m3u8?
-CCTV6,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226468/1.m3u8?
-CCTV7,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226946/1.m3u8?
+CCTV7,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226234/1.m3u8
CCTV8,http://[2409:8087:1a01:df::4051]:80/TVOD/88888888/224/3221225795/main.m3u8
-CCTV9,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8?
+CCTV8,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226451/1.m3u8
+CCTV8,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226485/1.m3u8?
+CCTV9,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226236/1.m3u8
+CCTV9,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226450/1.m3u8
CETV1,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226494/1.m3u8
CHC动作电影,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226329/1.m3u8
三沙卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226544/1.m3u8
@@ -380,9 +385,9 @@ CHC动作电影,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/8
江西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8
江西卫视,http://[2409:8087:1a01:df::4027]:80/TVOD/88888888/224/3221225935/main.m3u8
河北卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8
+河北卫视,http://[2409:8087:1a01:df::4035]:80/TVOD/88888888/224/3221225961/main.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::4043]:80/TVOD/88888888/224/3221225959/main.m3u8
海南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8
海南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226574/1.m3u8
海南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226922/1.m3u8
@@ -392,6 +397,7 @@ CHC动作电影,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/8
湖南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226493/1.m3u8
湖南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226509/1.m3u8
甘肃卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226545/1.m3u8
+甘肃卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226913/1.m3u8
睛彩篮球,http://[2409:8087:1a01:df::4055]:80/TVOD/88888888/224/3221225901/main.m3u8
精品体育,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226328/1.m3u8
精品萌宠,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226505/index.m3u8
@@ -418,8 +424,10 @@ CHC动作电影,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/8
陕西卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226926/1.m3u8
青海卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226529/1.m3u8
青海卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226916/1.m3u8
+鹤岗新闻综合,http://[2409:8087:1a01:df::4059]:80/TVOD/88888888/224/3221226073/main.m3u8
黑莓动画,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226935/1.m3u8
黑莓电影,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8
黑龙江卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8
黑龙江卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226239/1.m3u8
-黑龙江文体,http://[2409:8087:1a01:df::4025]:80/TVOD/88888888/224/3221225965/main.m3u8
\ No newline at end of file
+黑龙江文体,http://[2409:8087:1a01:df::4025]:80/TVOD/88888888/224/3221225965/main.m3u8
+黑龙江都市,http://[2409:8087:1a01:df::4055]:80/TVOD/88888888/224/3221225969/main.m3u8
\ No newline at end of file