jack 1 rok pred
rodič
commit
1a5b210e0b
49 zmenil súbory, kde vykonal 0 pridanie a 4410 odobranie
  1. 0 11
      other/GetGrassWebUI/Dockerfile
  2. 0 201
      other/GetGrassWebUI/LICENSE
  3. 0 32
      other/GetGrassWebUI/README.md
  4. 0 1
      other/GetGrassWebUI/account.txt
  5. 0 156
      other/GetGrassWebUI/core.py
  6. 0 9
      other/GetGrassWebUI/docker-compose.yaml
  7. 0 89
      other/GetGrassWebUI/get_grassio_user_id.py
  8. BIN
      other/GetGrassWebUI/grass_web.tar
  9. BIN
      other/GetGrassWebUI/img.png
  10. 0 157
      other/GetGrassWebUI/main.py
  11. 0 9
      other/GetGrassWebUI/requirements.txt
  12. 0 122
      other/GetGrassWebUI/static/index.css
  13. 0 190
      other/GetGrassWebUI/static/index.js
  14. 0 44
      other/GetGrassWebUI/templates/index.html
  15. 0 20
      other/GetGrassWebUI/test_account.py
  16. 0 141
      other/GetGrassWebUI/test_account.txt
  17. 0 35
      other/GetGrassWebUI/utils.py
  18. 0 14
      other/grassio/Dockerfile
  19. 0 1
      other/grassio/INSTALL.bat
  20. 0 201
      other/grassio/LICENSE
  21. 0 62
      other/grassio/README.md
  22. 0 1
      other/grassio/START.bat
  23. 0 6
      other/grassio/__init__.py
  24. 0 577
      other/grassio/clash_config/XFLTD.yaml
  25. 0 942
      other/grassio/clash_config/bitz.yaml
  26. 0 535
      other/grassio/clash_config/index.yaml
  27. 0 9
      other/grassio/core/__init__.py
  28. 0 94
      other/grassio/core/autoreger.py
  29. 0 90
      other/grassio/core/grass.py
  30. 0 6
      other/grassio/core/grass_sdk/__init__.py
  31. 0 103
      other/grassio/core/grass_sdk/extension.py
  32. 0 174
      other/grassio/core/grass_sdk/website.py
  33. 0 13
      other/grassio/core/utils/__init__.py
  34. 0 42
      other/grassio/core/utils/captcha_service.py
  35. 0 21
      other/grassio/core/utils/exception.py
  36. 0 33
      other/grassio/core/utils/file_manager.py
  37. 0 6
      other/grassio/core/utils/generate/__init__.py
  38. 0 31
      other/grassio/core/utils/generate/person.py
  39. 0 39
      other/grassio/core/utils/logger.py
  40. 0 6
      other/grassio/data/__init__.py
  41. 0 11
      other/grassio/data/accounts.txt
  42. 0 33
      other/grassio/data/config.py
  43. 0 11
      other/grassio/data/proxies.txt
  44. 0 27
      other/grassio/docker-compose.yaml
  45. BIN
      other/grassio/grassio.tar
  46. 0 1
      other/grassio/logs/failed.txt
  47. 0 93
      other/grassio/main.py
  48. BIN
      other/grassio/requirements.txt
  49. 0 11
      other/grassio/restart.sh

+ 0 - 11
other/GetGrassWebUI/Dockerfile

@@ -1,11 +0,0 @@
-FROM python:3.11.4-slim-bullseye
-
-WORKDIR /getGrassWebUI
-
-COPY requirements.txt requirements.txt
-
-RUN pip3 install -r requirements.txt
-
-COPY . .
-
-CMD [ "python3", "main.py"]

+ 0 - 201
other/GetGrassWebUI/LICENSE

@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [2024] [confusion]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.

+ 0 - 32
other/GetGrassWebUI/README.md

@@ -1,32 +0,0 @@
-# Get Grass With WebUI
-
-**This is a python tools for get grass score with multi accounts.**
-
-![img.png](img.png)
-
-### **直接运行**
-1. ```pip3 install -r requirements.txt```
-2. ```python3 main.py```
-3. 浏览器访问`http://127.0.0.1:8000`
-4. 点击上传文件 上传编辑好的 `account.txt`
-
-### **Docker Compose 运行**
-1. `git clone https://github.com/Confusion-ymc/GetGrassWebUI.git`
-2. `docker compose up --build -d`
-3. 浏览器访问`http://{容器ip}:8000`
-4. 点击上传文件 上传编辑好的 `account.txt`
-
-### 关于`account.txt`文件格式
-- 不配置代理
-  - **每一行是一个账号配置** 
-  - **没有代理则直接是`user_id`为一行,----- 格式为`5242367b-d366-1234-987a-9ebd303fa8f5`**
-- 配置代理
-  - **如果使用代理则在后面加上`==代理连接`----格式为`5242367b-d366-1258-987a-9ebd303fa8f5==socks5://proxy.com:1080`**
-
-- 例如:
- ```text
-5242367b-d366-1234-987a-9ebd303fa8f5==http://proxy.com:8080
-5242367b-d366-1234-987a-9ebd303fa8f5
-5242367b-d366-1258-987a-9ebd303fa8f5==socks5://proxy.com:1080
- ```
-

+ 0 - 1
other/GetGrassWebUI/account.txt

@@ -1 +0,0 @@
-2pcRp86m1r76nSzdtGy1DNpXjrF==http://10.10.10.203:57891~

+ 0 - 156
other/GetGrassWebUI/core.py

@@ -1,156 +0,0 @@
-import asyncio
-import json
-import ssl
-import sys
-import time
-import uuid
-from datetime import datetime
-from typing import Optional
-
-import socks
-import websockets
-from faker import Faker
-from loguru import logger
-from websockets import WebSocketCommonProtocol
-
-from utils import parse_proxy_url, Status
-
-logger.remove()  # 移除默认的控制台输出处理器
-
-logger.add(sys.stdout, level="INFO")  # 添加新的控制台输出处理器
-
-INFO = 'INFO'
-DEBUG = 'DEBUG'
-
-
-class AsyncGrassWs:
-    def __init__(self, user_id, proxy_url=None):
-        self.user_id = user_id
-        self.user_agent = Faker().chrome()
-        self.device_id = str(uuid.uuid3(uuid.NAMESPACE_DNS, proxy_url or ""))
-        self.proxy_url = proxy_url
-        self.ws: Optional[WebSocketCommonProtocol] = None
-        self.status: Status = Status.disconnect
-        self._stop = False
-        self._stopped = False
-        self._ping_stopped = False
-        self.server_hostname = "proxy.wynd.network"
-        self.server_port = 4444
-        self.server_url = f"wss://{self.server_hostname}:{self.server_port}/"
-        self.proxy_timeout = 60
-
-        self.logs = []
-
-    def log(self, level, message):
-        logger.log(logger.level(level).name, message)
-        self.logs.append((datetime.now().strftime("%Y-%m-%d %H:%M:%S"), message))
-        if len(self.logs) >= 100:
-            self.logs = self.logs[-100:]
-
-    async def send_ping(self):
-        await asyncio.sleep(5)
-        while not self._stop:
-            try:
-                send_message = json.dumps(
-                    {"id": str(uuid.uuid4()), "version": "1.0.0", "action": "PING", "data": {}})
-                if self.ws:
-                    self.log(DEBUG, f'[发送消息] [{self.user_id}] [{self.proxy_url}] [{send_message}]')
-                    await self.ws.send(send_message)
-            except Exception as e:
-                self.log(DEBUG, f'[PING Error] {e}')
-            for i in range(20):
-                if self._stop:
-                    break
-                await asyncio.sleep(1)
-        self._ping_stopped = True
-
-    def auth_response(self, message):
-        return {
-            "id": message["id"],
-            "origin_action": "AUTH",
-            "result": {
-                "browser_id": self.device_id,
-                "user_id": self.user_id,
-                "user_agent": self.user_agent,
-                "timestamp": int(time.time()),
-                "device_type": "extension",
-                "version": "3.3.2"
-            }
-        }
-
-    async def run(self):
-        self.log(INFO, f'[启动] [{self.user_id}] [{self.proxy_url}]')
-        asyncio.create_task(self.send_ping())
-        loop = asyncio.get_event_loop()
-        while True:
-            ws_proxy = None
-            try:
-                self.status = Status.connecting
-                if self.proxy_url:
-                    proxy_type, http_proxy_host, http_proxy_port, http_proxy_auth = parse_proxy_url(self.proxy_url)
-                    if http_proxy_auth:
-                        username, password = http_proxy_auth[0], http_proxy_auth[1]
-                    else:
-                        username = password = None
-                    # Initialize the connection to the server through the proxy
-                    self.log(DEBUG, f'[连接代理] [{self.user_id}] [{self.proxy_url}]')
-                    ws_proxy = socks.socksocket()
-                    ws_proxy.set_proxy(socks.PROXY_TYPES[proxy_type.upper()], http_proxy_host, http_proxy_port,
-                                       username=username, password=password)
-                    async with asyncio.timeout(self.proxy_timeout):
-                        await loop.run_in_executor(None, ws_proxy.connect, (self.server_hostname, self.server_port))  # 执行阻塞函数
-                    self.log(DEBUG, f'[连接代理成功] [{self.user_id}] [{self.proxy_url}]')
-                ssl_context = ssl.create_default_context()
-                ssl_context.check_hostname = False
-                ssl_context.verify_mode = ssl.CERT_NONE
-                custom_headers = {
-                    "User-Agent": self.user_agent
-                }
-                self.log(DEBUG, f'[连接服务器] [{self.user_id}] [{self.proxy_url}]')
-                self.ws = await websockets.connect(
-                    self.server_url,
-                    ssl=ssl_context,
-                    sock=ws_proxy,
-                    extra_headers=custom_headers,
-                    server_hostname=self.server_hostname,
-                    open_timeout=60
-                )
-
-                self.log(DEBUG, f'[连接服务器成功] [{self.user_id}] [{self.proxy_url}]')
-                while True:
-                    response = await self.ws.recv()
-                    message = json.loads(response)
-                    self.log(DEBUG, f'[收到消息] [{self.user_id}] [{self.proxy_url}] [{message}]')
-                    if message.get("action") == "AUTH":
-                        auth_response = self.auth_response(message)
-                        self.log(DEBUG, f'[发送消息] [{self.user_id}] [{self.proxy_url}] [{auth_response}]')
-                        await self.ws.send(json.dumps(auth_response))
-                        self.status = Status.connected
-                        self.log(INFO, f'[在线] [{self.user_id}] [{self.proxy_url}]')
-                    elif message.get("action") == "PONG":
-                        pong_response = {"id": message["id"], "origin_action": "PONG"}
-                        self.log(DEBUG, f'[发送消息] [{self.user_id}] [{self.proxy_url}] [{pong_response}]')
-                        await self.ws.send(json.dumps(pong_response))
-            except TimeoutError as e:
-                self.log(INFO, f'[连接超时] [{self.user_id}] [{self.proxy_url}] {e}')
-            except Exception as e:
-                self.log(INFO, f'[连接断开] [{self.user_id}] [{self.proxy_url}] {e}')
-            self.status = Status.disconnect
-            if not self._stop:
-                self.log(DEBUG, f'[重新连接] [{self.user_id}] [{self.proxy_url}]')
-                try:
-                    ws_proxy.close()
-                except:
-                    pass
-            else:
-                while not self._ping_stopped:
-                    await asyncio.sleep(1)
-                self.log(INFO, f'手动退出 [{self.user_id}] [{self.proxy_url}]')
-                self._stopped = True
-                break
-            await asyncio.sleep(5)
-
-    async def stop(self):
-        self._stop = True
-        if self.ws:
-            await self.ws.close()

+ 0 - 9
other/GetGrassWebUI/docker-compose.yaml

@@ -1,9 +0,0 @@
-version: "3.0"
-services:
-  grass_webui:
-    image: grassioweb-grass_webui
-    restart: always
-    container_name: grass_webui
-    network_mode: bridge
-    ports:
-      - "60888:8000"

+ 0 - 89
other/GetGrassWebUI/get_grassio_user_id.py

@@ -1,89 +0,0 @@
-import time
-import aiohttp
-import asyncio
-import json
-from fake_useragent import UserAgent
-
-goto_url = 'https://app.getgrass.io/'
-
-account_list = [
-    'jack0210_@hotmail.com:aaaAAA111!!!',
-    'yujiec0210@gmail.com:aaaAAA111!!!',
-    'yujieccyj01@hotmail.com:aaaAAA111!!!',
-    'yujieccyj02@hotmail.com:aaaAAA111!!!',
-    'yujieccyj03@hotmail.com:aaaAAA111!!!',
-    'yujieccyj04@hotmail.com:aaaAAA111!!!',
-    'yujieccyj05@hotmail.com:aaaAAA111!!!',
-    'yujieccyj06@hotmail.com:aaaAAA111!!!',
-    'yujieccyj07@hotmail.com:aaaAAA111!!!',
-    'yujieccyj08@hotmail.com:aaaAAA111!!!',
-    'yujieccyj09@hotmail.com:aaaAAA111!!!',
-    'yujieccyj10@hotmail.com:aaaAAA111!!!',
-    'yujieccyj11@hotmail.com:aaaAAA111!!!'
-]
-
-
-class LoginClient:
-    def __init__(self, email, password, user_agent):
-        self.email = email
-        self.password = password
-        self.user_agent = user_agent
-        self.website_headers = {
-            'authority': 'api.getgrass.io',
-            'accept': 'application/json, text/plain, */*',
-            'accept-language': 'uk-UA,uk;q=0.9,en-US;q=0.8,en;q=0.7',
-            'content-type': 'application/json',
-            'origin': 'https://app.getgrass.io',
-            'referer': 'https://app.getgrass.io/',
-            'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
-            'sec-ch-ua-mobile': '?0',
-            'sec-ch-ua-platform': '"Windows"',
-            'sec-fetch-dest': 'empty',
-            'sec-fetch-mode': 'cors',
-            'sec-fetch-site': 'same-site',
-            'user-agent': self.user_agent,
-        }
-
-    async def login(self, session):
-        url = 'https://api.getgrass.io/login'
-
-        json_data = {
-            'password': self.password,
-            'username': self.email,
-        }
-
-        try:
-            response = await session.post(url, headers=self.website_headers, data=json.dumps(json_data))
-            response_text = await response.text()
-            if response.status != 200:
-                print(f"Login failed: {response_text}")
-                return None
-            return await response.json()
-        except aiohttp.ClientConnectionError as e:
-            print(f"Connection error occurred: {e}")
-            return None
-        except Exception as e:
-            print(f"An error occurred: {e}")
-            return None
-
-
-if __name__ == "__main__":
-    async def main():
-        async with aiohttp.ClientSession() as session:
-            for account in account_list:
-                email = account.split(':')[0]
-                password = account.split(':')[1]
-                user_agent = UserAgent().random
-
-                client = LoginClient(email, password, user_agent)
-                login_result = await client.login(session)
-                if login_result:
-                    email = login_result['result']['data']['email']
-                    user_id = login_result['result']['data']['userId']
-                    print(f'account: {email}\tuser_id: {user_id}')
-
-                else:
-                    print("Login failed.")
-
-
-    asyncio.run(main())

BIN
other/GetGrassWebUI/grass_web.tar


BIN
other/GetGrassWebUI/img.png


+ 0 - 157
other/GetGrassWebUI/main.py

@@ -1,157 +0,0 @@
-import asyncio
-import uuid
-
-import uvicorn
-from typing import Dict, Optional
-
-from fastapi import FastAPI, APIRouter, UploadFile, BackgroundTasks
-from fastapi.templating import Jinja2Templates
-from loguru import logger
-from starlette.requests import Request
-from starlette.responses import HTMLResponse
-from starlette.staticfiles import StaticFiles
-
-from utils import parse_line
-from core import AsyncGrassWs
-
-app = FastAPI()
-
-templates = Jinja2Templates(directory="templates")
-app.mount("/static", StaticFiles(directory="static"), name="static")
-
-client_router = APIRouter(prefix='/client')
-
-all_client: Dict[str, AsyncGrassWs] = {}
-all_client_ids = []
-
-CLIENT_INDEX = 0
-
-# 或者,如果有多个 task
-background_tasks = set()
-
-
-def run_client(client_id):
-    task = asyncio.create_task(all_client[client_id].run())
-
-    # 将 task 添加到集合中,以保持强引用:
-    background_tasks.add(task)
-
-    # 为了防止 task 被永远保持强引用,而无法被垃圾回收
-    # 让每个 task 在结束后将自己从集合中移除:
-    task.add_done_callback(background_tasks.discard)
-    return client_id
-
-
-def add_client(grass_client: AsyncGrassWs):
-    client_id = uuid.uuid4().__str__()
-    all_client[client_id] = grass_client
-    all_client_ids.append(client_id)
-    return client_id
-
-
-async def delete_client(client_id):
-    logger.info(f'[退出] {all_client[client_id].user_id}')
-    await all_client[client_id].stop()
-    del all_client[client_id]
-    all_client_ids.remove(client_id)
-
-
-def load_file_clients(data):
-    new_clients = []
-    index = 0
-    for line in data.split('\n'):
-        user_id, proxy_url = parse_line(line)
-        if not user_id:
-            continue
-        index += 1
-        client = AsyncGrassWs(user_id=user_id, proxy_url=proxy_url)
-        new_clients.append(add_client(client))
-    return new_clients
-
-
-async def threading_run_clients(clients):
-    for client_id in clients:
-        run_client(client_id)
-
-
-@app.get("/", response_class=HTMLResponse)
-async def read_item(request: Request):
-    return templates.TemplateResponse(request=request, name="index.html")
-
-
-@client_router.get("/{client_id}")
-def find_one(client_id: str):
-    client = all_client.get(client_id)
-    data = {
-        'data': {
-            'status': None,
-            "proxy_url": None,
-            "logs": []
-        },
-        'message': "failed"
-    }
-    if client is not None:
-        data = {
-            'data': {
-                'status': client.status,
-                "proxy_url": client.proxy_url,
-                "logs": list(reversed(client.logs[-50:]))
-            },
-            'message': "success"
-        }
-    return data
-
-
-@client_router.get("/")
-def find_all():
-    data = []
-    for client_id in all_client_ids:
-        try:
-            data.append({
-                'id': client_id,
-                'user_id': all_client[client_id].user_id,
-                'status': all_client[client_id].status,
-                "proxy_url": all_client[client_id].proxy_url
-            })
-        except:
-            continue
-    return {
-        'data': data,
-        'message': "success"
-    }
-
-
-@client_router.post("/")
-async def add(user_id: str, proxy_url: Optional[str] = None):
-    client = AsyncGrassWs(user_id=user_id, proxy_url=proxy_url or None)
-    client_id = add_client(client)
-    run_client(client_id)
-    return {'data': client_id, 'message': 'create success'}
-
-
-@client_router.delete("/{user_id}")
-async def delete_one(user_id: str):
-    await delete_client(user_id)
-    return {'data': user_id, 'message': 'success'}
-
-
-@client_router.delete("/")
-async def delete_all():
-    all_client_ids_copy = all_client_ids[::]
-    for client_id in all_client_ids_copy:
-        await delete_client(client_id)
-    return {'data': [], 'message': 'success'}
-
-
-@app.post("/upload/")
-async def run_by_file(file: UploadFile, background_task: BackgroundTasks):
-    data = (await file.read()).decode()
-    new_clients = load_file_clients(data)
-    background_task.add_task(threading_run_clients, new_clients)
-    return {"data": None, 'message': 'success'}
-
-
-app.include_router(client_router)
-
-if __name__ == '__main__':
-    uvicorn.run("main:app", host='0.0.0.0')

+ 0 - 9
other/GetGrassWebUI/requirements.txt

@@ -1,9 +0,0 @@
-uvicorn==0.29.0
-fastapi==0.110.0
-jinja2==3.1.3
-python-multipart==0.0.9
-websockets==12.0
-Faker==23.2.1
-loguru==0.7.2
-starlette==0.36.3
-PySocks==1.7.1

+ 0 - 122
other/GetGrassWebUI/static/index.css

@@ -1,122 +0,0 @@
-body {
-    max-width: 1100px;
-    margin: 0 auto;
-    padding: 20px;
-    background: black;
-}
-.title {
-    display: flex;
-    justify-content: space-between;
-    align-items: flex-end;
-    padding: 10px;
-    color: #9799a1;
-}
-
-button{
-    max-height:35px;
-    color: #9799a1;
-    background-color: black;
-}
-
-table {
-    width: 100%;
-    color: #9799a1;
-    background: black;
-    border-collapse: collapse;
-}
-
-table, th, td {
-    border: 1px solid black;
-}
-
-th, td {
-    text-align: center;
-    padding: 8px;
-    border: 1px solid #9799a1;
-}
-
-td.proxy{
-    text-align: left;
-}
-
-th {
-    text-align: center;
-    background-color: black;
-}
-
-.status-0 {
-    color: red;
-}
-
-.status-1 {
-    color: orange;
-}
-
-.status-2 {
-    color: green;
-}
-
-.status-3 {
-    color: blue;
-}
-
-    /* CSS styles for the modal */
-.modal {
-    display: none;
-    position: fixed;
-    z-index: 1;
-    left: 0;
-    top: 0;
-    width: 100%;
-    height: 100%;
-    overflow: auto;
-    background-color: rgba(0,0,0,0.4);
-}
-
-.modal-content {
-    color: #9799a1;
-    background-color: black;
-    margin: 15% auto;
-    padding: 20px;
-    border: 1px solid #888;
-    width: 80%;
-}
-
-.close {
-    color: #aaa;
-    float: right;
-    font-size: 28px;
-    font-weight: bold;
-}
-
-.close:hover,
-.close:focus {
-    color: black;
-    text-decoration: none;
-    cursor: pointer;
-}
-
-/* Loading 样式 */
-.loading {
-    display: none;
-    position: fixed;
-    top: 0;
-    left: 0;
-    width: 100%;
-    height: 100%;
-    background: rgba(0, 0, 0, 0.5);
-    color: #9799a1;
-    text-align: center;
-    padding-top: 20%;
-    z-index: 9999;
-}
-
-/* Loading 文本样式 */
-.loading-text {
-    border-radius: 20px;
-    color: #3f3f3e;
-    background: #ffffff;
-    padding: 35px;
-    display: inline-block;
-    font-size: 24px;
-}

+ 0 - 190
other/GetGrassWebUI/static/index.js

@@ -1,190 +0,0 @@
-// Function to show logs in a modal
-function showLogs(userId) {
-    fetch(`/client/${userId}`)
-    .then(response => response.json())
-    .then(data => {
-        const logs = data.data.logs;
-        const logText = logs.map(log => `[${log[0]}] -- ${log[1]}`).join('<br>');
-        document.getElementById('logText').innerHTML = logText;
-        document.getElementById('logsModal').style.display = 'block';
-    })
-    .catch(error => console.error('Error:', error));
-}
-
-// 更新连接数量的统计
-function updateOnlineCount(onlineCount, allCount) {
-    // 获取显示连接数量的<span>元素
-    var onlineCountElement = document.getElementById("onlineCount");
-    var allCountElement = document.getElementById("allCount");
-    onlineCountElement.textContent = onlineCount;
-    allCountElement.textContent = allCount;
-}
-
-// 弹出对话框输入 user_id 和 proxy
-function addUser() {
-    var userId = prompt("请输入UserID:");
-    if (!userId) {
-        return
-    }
-    var proxy = prompt("设置代理 (不使用代理点击取消)");
-    if (userId) {
-        // 构建带参数的 URL
-        var baseUrl = '/client/';
-        var url = new URL(baseUrl, window.location.href);
-        url.searchParams.append('user_id', userId);
-        if (proxy) {
-            url.searchParams.append('proxy_url', proxy);
-        }
-        fetch(url.href, {
-            method: 'POST',
-            headers: {
-                'Content-Type': 'application/json'
-            },
-        })
-        .then(response => {
-            if (response.ok) {
-                alert('账号添加成功');
-                fetchData();
-            } else {
-                alert('账号添加失败');
-            }
-        })
-        .catch(error => {
-            alert('请求错误:', error);
-        });
-    }
-}
-
-
-
-function deleteUser(userId) {
-    fetch(`/client/${userId}`, {
-        method: 'DELETE'
-    })
-    .then(response => response.json())
-    .then(data => {
-        if (data.message === 'success') {
-            alert('删除成功');
-            // If deletion is successful, reload all data
-            fetchData();
-        }
-    })
-    .catch(error => console.error('Error:', error));
-}
-
-function deleteAllUser() {
-    showLoading();
-    fetch(`/client/`, {
-        method: 'DELETE'
-    })
-    .then(response => response.json())
-    .then(data => {
-        if (data.message === 'success') {
-            alert('删除成功');
-            // If deletion is successful, reload all data
-            fetchData();
-        }
-        hideLoading();
-    })
-    .catch(error => {
-        console.error('Error:', error);
-        hideLoading();
-    });
-}
-
-function uploadFile() {
-    const input = document.createElement('input');
-    input.type = 'file';
-    input.onchange = function() {
-        const file = input.files[0];
-        const formData = new FormData();
-        formData.append('file', file);
-        showLoading();
-        fetch('/upload/', {
-            method: 'POST',
-            body: formData
-        })
-        .then(response => {
-            if (response.ok) {
-                alert('文件上传成功');
-                fetchData()
-            } else {
-                alert('文件上传失败!');
-            }
-            hideLoading();
-        })
-        .catch(error => {
-            console.error('Error:', error);
-            hideLoading();
-        });
-    };
-    input.click();
-}
-
-// Function to close the modal
-function closeModal() {
-    document.getElementById('logsModal').style.display = 'none';
-}
-
-
-// 模拟数据请求的函数 fetchData,您需要根据实际情况替换为您的数据请求逻辑
-function fetchData() {
-    return new Promise((resolve, reject) => {
-        // Make a GET request to the API endpoint
-    fetch('/client/')
-    .then(response => response.json())
-    .then(data => {
-        const statusMap = {
-            0: '未连接',
-            1: '连接中',
-            2: '已连接',
-            3: '已停止'
-        };
-        let counter = 0; // 初始编号为1
-        let onlineCounter = 0;
-        const tableBody = document.querySelector('#data-table tbody');
-        // Clear existing data in the table
-        tableBody.innerHTML = '';
-
-        data.data.forEach(item => {
-            const row = document.createElement('tr');
-            row.innerHTML = `
-                <td>${counter+1}</td>
-                <td>${item.user_id}</td>
-                <td class="proxy">${item.proxy_url || ''}</td>
-                <td class="status-${item.status}">${statusMap[item.status]}</td>
-                <td>
-                    <button onclick="showLogs('${item.id}')">日志</button>
-                    <button onclick="deleteUser('${item.id}')">删除</button>
-                </td>
-            `;
-            tableBody.appendChild(row);
-            counter++;
-            if (item.status == 2){
-                onlineCounter++
-            }
-        });
-        updateOnlineCount(onlineCounter, counter);
-        resolve();
-    })
-    .catch(error => console.error('Error:', error))
-    });
-}
-
-function fetchDataInterval(){
-    fetchData().then(() => {
-        // 数据请求完成后等待5秒再发起下一次请求
-        setTimeout(fetchDataInterval, 5000);
-    });
-}
-
-function showLoading() {
-    document.getElementById('loading').style.display = 'block';
-}
-
-function hideLoading() {
-    document.getElementById('loading').style.display = 'none';
-}
-
-
-fetchDataInterval()

+ 0 - 44
other/GetGrassWebUI/templates/index.html

@@ -1,44 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh">
-<head>
-    <link rel="stylesheet" href="/static/index.css">
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>GetGrass WebUI</title>
-</head>
-<body>
-<div class="loading" id="loading">
-    <div class="loading-text">Loading...</div>
-</div>
-<div class="title">
-    <h2>GetGrass WebUI - <span class='status-2' id="onlineCount">0</span>/<span id="allCount">20</span></h2>
-    <div>
-        <button onclick="addUser()">添加账号</button>
-        <button onclick="deleteAllUser()">清空账号</button>
-        <button onclick="uploadFile()">上传文件</button>
-    </div>
-</div>
-<div id="logsModal" class="modal">
-    <div class="modal-content">
-        <span class="close" onclick="closeModal()">&times;</span>
-        <p id="logText"></p>
-    </div>
-</div>
-
-<table id="data-table">
-    <thead>
-        <tr>
-            <th>编号</th>
-            <th>UserID</th>
-            <th>代理</th>
-            <th>状态</th>
-            <th>操作</th>
-        </tr>
-    </thead>
-    <tbody>
-        <!-- Data will be dynamically added here -->
-    </tbody>
-</table>
-<script src="/static/index.js"></script>
-</body>
-</html>

+ 0 - 20
other/GetGrassWebUI/test_account.py

@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-
-
-userID = '2pcRp86m1r76nSzdtGy1DNpXjrF'
-
-proxy_num = 140
-
-write_line = []
-
-start_port = 27890
-
-for i in range(proxy_num + 1):
-    proxy_server = '192.168.64.32'
-    proxy_port = start_port + i
-    account_and_proxy = f'{userID}=={proxy_server}:{proxy_port}'
-    write_line.append(account_and_proxy)
-
-with open('test_account.txt', 'w') as f:
-    for line in write_line:
-        f.write(line + '\n')

+ 0 - 141
other/GetGrassWebUI/test_account.txt

@@ -1,141 +0,0 @@
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27890
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27891
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27892
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27893
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27894
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27895
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27896
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27897
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27898
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27899
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27900
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27901
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27902
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27903
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27904
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27905
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27906
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27907
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27908
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27909
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27910
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27911
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27912
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27913
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27914
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27915
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27916
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27917
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27918
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27919
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27920
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27921
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27922
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27923
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27924
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27925
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27926
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27927
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27928
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27929
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27930
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27931
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27932
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27933
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27934
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27935
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27936
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27937
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27938
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27939
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27940
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27941
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27942
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27943
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27944
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27945
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27946
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27947
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27948
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27949
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27950
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27951
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27952
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27953
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27954
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27955
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27956
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27957
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27958
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27959
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27960
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27961
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27962
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27963
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27964
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27965
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27966
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27967
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27968
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27969
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27970
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27971
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27972
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27973
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27974
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27975
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27976
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27977
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27978
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27979
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27980
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27981
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27982
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27983
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27984
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27985
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27986
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27987
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27988
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27989
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27990
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27991
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27992
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27993
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27994
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27995
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27996
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27997
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27998
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:27999
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28000
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28001
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28002
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28003
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28004
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28005
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28006
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28007
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28008
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28009
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28010
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28011
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28012
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28013
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28014
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28015
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28016
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28017
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28018
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28019
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28020
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28021
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28022
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28023
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28024
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28025
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28026
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28027
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28028
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28029
-2pcRp86m1r76nSzdtGy1DNpXjrF==192.168.64.32:28030

+ 0 - 35
other/GetGrassWebUI/utils.py

@@ -1,35 +0,0 @@
-from enum import Enum
-from urllib.parse import urlparse
-
-
-class Status(Enum):
-    disconnect = 0
-    connecting = 1
-    connected = 2
-
-
-def parse_proxy_url(proxy_url):
-    parsed_url = urlparse(proxy_url)
-
-    scheme = parsed_url.scheme
-    host = parsed_url.hostname
-    port = parsed_url.port
-    auth = None
-
-    if parsed_url.username and parsed_url.password:
-        auth = (parsed_url.username, parsed_url.password)
-
-    return scheme, host, port, auth
-
-
-def parse_line(line):
-    line = line.strip()
-    if not line:
-        return None, None
-    if "==" in line:
-        user_id, proxy_url = line.split('==')
-    else:
-        user_id, proxy_url = line, None
-    return user_id, proxy_url or None
-
-

+ 0 - 14
other/grassio/Dockerfile

@@ -1,14 +0,0 @@
-# 使用官方的 Python 3.11 镜像作为基础镜像
-FROM python:3.11.4-slim-bullseye
-
-# 设置工作目录为 /app
-WORKDIR /app
-
-# 将当前目录下的所有文件复制到容器的 /app 目录中
-COPY . /app
-
-# 使用清华源来安装依赖
-RUN pip install --upgrade pip && \
-    pip install -r requirements.txt
-
-CMD ["python3", "main.py"]

+ 0 - 1
other/grassio/INSTALL.bat

@@ -1 +0,0 @@
-pip install -r requirements.txt

+ 0 - 201
other/grassio/LICENSE

@@ -1,201 +0,0 @@
-Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.

+ 0 - 62
other/grassio/README.md

@@ -1,62 +0,0 @@
-<h1 align="center">小草挂机脚本(CN)</h1>
-<p align="center">
-  <a href="#"><img src="https://img.shields.io/badge/Python-3.11-fadf6f"> </a>
-  <a href="https://twitter.com/Crypto0xM"> <img src="https://img.shields.io/twitter/url?url=https%3A%2F%2Ftwitter.com%2FCrypto0xM">
-  </a>
-</p>
-
----
-
-### 打码平台
-[Captcha.run](https://captcha.run/sso?inviter=766e7788-4ff4-47b6-b991-93ac43dbbfae)
-
-[Yes Captcha!](https://yescaptcha.com/i/Sy4ti1)
-
-[NoCaptcha.io](https://www.nocaptcha.io/register?c=W9SAq9)
-
-
-
----
-
-🔔 [交流社区](https://t.me/CoinMarketData_1): https://t.me/CoinMarketData_1
-
-💰 打赏捐赠:您的支持是我最大的动力
-
-    - EVM 地址: 0x0385dee0258d739cf5edfc3e387d6804d6884d1e
-    - SOL 地址: F4SZCw7UQxsYNrod8i5tniN6q2QDw2vibY1GDbWcGXqp
-    - BTC 地址: bc1p3zuhancea8t9xhlv0yh9742ar9nqgkjzd4tp09l6wdet7cr9v3zs4uhlqw
-
-
----
-
-## [项目详情](https://starrynift.art?referralCode=97il5__yye)
-
-### 如果出现Pycharm导包报错,请将grass_io设置为工作目录。右键grass_io找到`Mark Directory as` -> `Sources Root`即可解决。
-
----
-## 👨‍💻‍快速开始(windows平台)
-- 安装python环境
-- 双击`INSTALL.bat`安装依赖,或者是使用`pip install -r requirements.txt`
-- 双击`START.bat` 或者是使用 `python main.py`启动程序
-
-<br>
-
-### 🧩 其他配置
-- `data/config.py`配置说明:
-  - REGISTER_ACCOUNT_ONLY参数是bool类型:
-    - True:则为注册账户,此时你需要在`data/account.txt`中配置邮箱和密码,格式为`邮箱:密码`,并配置代理。
-    - False: 则是不注册账户,运行任务程序,这里也需要配置对应的你需要执行任务的账户、密码、以及代理。格式相同。
-  - `TWO_CAPTCHA_API_KEY`, `ANTICAPTCHA_API_KEY`, `CAPMONSTER_API_KEY`, `CAPSOLVER_API_KEY`, `CAPTCHAAI_API_KEY` 此配置为大码平台的api,你需要去注册并找到api配置在这里。因为小草的配置了人机验证,这里需要通过api来染过人际验证这个步骤,不然无法执行任务。
-  - 代理配置和账户配置详情按照具体案例配置即可。
-
-
-### 🐹 更多其他脚本请关注首页
-#### [Sollong脚本](https://github.com/MrHat365/sollong_daily_task.git)
-#### [Starrynift 每日交互任务(CN)](https://github.com/MrHat365/starrynift.git)
-#### [Web3 工具箱[自用常用的工具类脚本]](https://github.com/MrHat365/web3-tools.git)
-#### [zeta交互工具](https://github.com/MrHat365/zetachain_xp.git)
-
-<p align="center">
-  <a href="https://twitter.com/Crypto0xM"> <img width="120" height="38" src="https://img.shields.io/twitter/url?url=https%3A%2F%2Ftwitter.com%2FCrypto0xM"/>
-  </a>
-</p>

+ 0 - 1
other/grassio/START.bat

@@ -1 +0,0 @@
-python main.py

+ 0 - 6
other/grassio/__init__.py

@@ -1,6 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description: 
-  @ History:
-"""

+ 0 - 577
other/grassio/clash_config/XFLTD.yaml

@@ -1,577 +0,0 @@
-mixed-port: 7890
-allow-lan: true
-bind-address: '*'
-mode: rule
-log-level: info
-external-controller: '127.0.0.1:9090'
-dns:
-    enable: true
-    ipv6: false
-    default-nameserver: [223.5.5.5, 119.29.29.29]
-    enhanced-mode: fake-ip
-    fake-ip-range: 198.18.0.1/16
-    use-hosts: true
-    nameserver: ['https://doh.pub/dns-query', 'https://dns.alidns.com/dns-query']
-    fallback: ['https://doh.dns.sb/dns-query', 'https://dns.cloudflare.com/dns-query', 'https://dns.twnic.tw/dns-query', 'tls://8.8.4.4:853']
-    fallback-filter: { geoip: true, ipcidr: [240.0.0.0/4, 0.0.0.0/32] }
-proxies:
-    - { name: '剩余流量:106.88 GB', type: trojan, server: cn1.cdn.xfltd-cdn.top, port: 12001, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: 套餐到期:长期有效, type: trojan, server: cn1.cdn.xfltd-cdn.top, port: 12001, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇭🇰 香港 01', type: trojan, server: cn1.cdn.xfltd-cdn.top, port: 12001, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇭🇰 香港 02', type: trojan, server: cn1.cdn.xfltd-cdn.top, port: 12002, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇭🇰 香港 03', type: trojan, server: cn1.cdn.xfltd-cdn.top, port: 12003, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇭🇰 香港 04', type: trojan, server: cn1.cdn.xfltd-cdn.top, port: 12004, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇭🇰 香港 05', type: trojan, server: cn1.cdn.xfltd-cdn.top, port: 12005, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇭🇰 香港 06', type: trojan, server: cn1.cdn.xfltd-cdn.top, port: 12006, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇨🇳 台湾 01', type: trojan, server: cn1.cdn.xfltd-cdn.top, port: 12011, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇨🇳 台湾 02', type: trojan, server: cn1.cdn.xfltd-cdn.top, port: 12012, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇸🇬 新加坡 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12021, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇸🇬 新加坡 02', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12022, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇸🇬 新加坡 03', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12023, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇸🇬 新加坡 04', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12024, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇸🇬 新加坡 05', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12025, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇯🇵 日本 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12031, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇯🇵 日本 02', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12032, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇯🇵 日本 03', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12033, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇯🇵 日本 04', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12034, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇯🇵 日本 05', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12035, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇺🇸 美国 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12051, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇺🇸 美国 02', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12052, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇺🇸 美国 03', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12053, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇺🇸 美国 04', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12054, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇵🇰 巴基斯坦 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12077, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇰🇷 韩国 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12041, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇮🇩 印尼 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12061, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇮🇹 意大利 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12062, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇹🇷 土耳其 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12064, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇫🇷 法国 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12065, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇦🇷 阿根廷 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12066, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇲🇾 马来西亚 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12067, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇦🇺 澳大利亚 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12068, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇬🇧 英国 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12069, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇩🇪 德国 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12070, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇸🇪 瑞典 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12071, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇮🇳 印度 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12072, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇳🇬 尼日利亚 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12073, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇳🇱 荷兰 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12074, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇷🇺 俄罗斯 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12075, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-    - { name: '🇹🇭 泰国 01', type: trojan, server: cn2.cdn.xfltd-cdn.top, port: 12076, password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4, udp: true, sni: cdn.alibaba.com, skip-cert-verify: true }
-proxy-groups:
-    - { name: XFLTD, type: select, proxies: [自动选择, 故障转移, '剩余流量:106.88 GB', 套餐到期:长期有效, '🇭🇰 香港 01', '🇭🇰 香港 02', '🇭🇰 香港 03', '🇭🇰 香港 04', '🇭🇰 香港 05', '🇭🇰 香港 06', '🇨🇳 台湾 01', '🇨🇳 台湾 02', '🇸🇬 新加坡 01', '🇸🇬 新加坡 02', '🇸🇬 新加坡 03', '🇸🇬 新加坡 04', '🇸🇬 新加坡 05', '🇯🇵 日本 01', '🇯🇵 日本 02', '🇯🇵 日本 03', '🇯🇵 日本 04', '🇯🇵 日本 05', '🇺🇸 美国 01', '🇺🇸 美国 02', '🇺🇸 美国 03', '🇺🇸 美国 04', '🇵🇰 巴基斯坦 01', '🇰🇷 韩国 01', '🇮🇩 印尼 01', '🇮🇹 意大利 01', '🇹🇷 土耳其 01', '🇫🇷 法国 01', '🇦🇷 阿根廷 01', '🇲🇾 马来西亚 01', '🇦🇺 澳大利亚 01', '🇬🇧 英国 01', '🇩🇪 德国 01', '🇸🇪 瑞典 01', '🇮🇳 印度 01', '🇳🇬 尼日利亚 01', '🇳🇱 荷兰 01', '🇷🇺 俄罗斯 01', '🇹🇭 泰国 01'] }
-    - { name: 自动选择, type: url-test, proxies: ['剩余流量:106.88 GB', 套餐到期:长期有效, '🇭🇰 香港 01', '🇭🇰 香港 02', '🇭🇰 香港 03', '🇭🇰 香港 04', '🇭🇰 香港 05', '🇭🇰 香港 06', '🇨🇳 台湾 01', '🇨🇳 台湾 02', '🇸🇬 新加坡 01', '🇸🇬 新加坡 02', '🇸🇬 新加坡 03', '🇸🇬 新加坡 04', '🇸🇬 新加坡 05', '🇯🇵 日本 01', '🇯🇵 日本 02', '🇯🇵 日本 03', '🇯🇵 日本 04', '🇯🇵 日本 05', '🇺🇸 美国 01', '🇺🇸 美国 02', '🇺🇸 美国 03', '🇺🇸 美国 04', '🇵🇰 巴基斯坦 01', '🇰🇷 韩国 01', '🇮🇩 印尼 01', '🇮🇹 意大利 01', '🇹🇷 土耳其 01', '🇫🇷 法国 01', '🇦🇷 阿根廷 01', '🇲🇾 马来西亚 01', '🇦🇺 澳大利亚 01', '🇬🇧 英国 01', '🇩🇪 德国 01', '🇸🇪 瑞典 01', '🇮🇳 印度 01', '🇳🇬 尼日利亚 01', '🇳🇱 荷兰 01', '🇷🇺 俄罗斯 01', '🇹🇭 泰国 01'], url: 'http://www.gstatic.com/generate_204', interval: 86400 }
-    - { name: 故障转移, type: fallback, proxies: ['剩余流量:106.88 GB', 套餐到期:长期有效, '🇭🇰 香港 01', '🇭🇰 香港 02', '🇭🇰 香港 03', '🇭🇰 香港 04', '🇭🇰 香港 05', '🇭🇰 香港 06', '🇨🇳 台湾 01', '🇨🇳 台湾 02', '🇸🇬 新加坡 01', '🇸🇬 新加坡 02', '🇸🇬 新加坡 03', '🇸🇬 新加坡 04', '🇸🇬 新加坡 05', '🇯🇵 日本 01', '🇯🇵 日本 02', '🇯🇵 日本 03', '🇯🇵 日本 04', '🇯🇵 日本 05', '🇺🇸 美国 01', '🇺🇸 美国 02', '🇺🇸 美国 03', '🇺🇸 美国 04', '🇵🇰 巴基斯坦 01', '🇰🇷 韩国 01', '🇮🇩 印尼 01', '🇮🇹 意大利 01', '🇹🇷 土耳其 01', '🇫🇷 法国 01', '🇦🇷 阿根廷 01', '🇲🇾 马来西亚 01', '🇦🇺 澳大利亚 01', '🇬🇧 英国 01', '🇩🇪 德国 01', '🇸🇪 瑞典 01', '🇮🇳 印度 01', '🇳🇬 尼日利亚 01', '🇳🇱 荷兰 01', '🇷🇺 俄罗斯 01', '🇹🇭 泰国 01'], url: 'http://www.gstatic.com/generate_204', interval: 7200 }
-rules:
-    - 'DOMAIN,dy.xftld.xyz,DIRECT'
-    - 'DOMAIN-SUFFIX,services.googleapis.cn,XFLTD'
-    - 'DOMAIN-SUFFIX,xn--ngstr-lra8j.com,XFLTD'
-    - 'DOMAIN,safebrowsing.urlsec.qq.com,DIRECT'
-    - 'DOMAIN,safebrowsing.googleapis.com,DIRECT'
-    - 'DOMAIN,developer.apple.com,XFLTD'
-    - 'DOMAIN-SUFFIX,digicert.com,XFLTD'
-    - 'DOMAIN,ocsp.apple.com,XFLTD'
-    - 'DOMAIN,ocsp.comodoca.com,XFLTD'
-    - 'DOMAIN,ocsp.usertrust.com,XFLTD'
-    - 'DOMAIN,ocsp.sectigo.com,XFLTD'
-    - 'DOMAIN,ocsp.verisign.net,XFLTD'
-    - 'DOMAIN-SUFFIX,apple-dns.net,XFLTD'
-    - 'DOMAIN,testflight.apple.com,XFLTD'
-    - 'DOMAIN,sandbox.itunes.apple.com,XFLTD'
-    - 'DOMAIN,itunes.apple.com,XFLTD'
-    - 'DOMAIN-SUFFIX,apps.apple.com,XFLTD'
-    - 'DOMAIN-SUFFIX,blobstore.apple.com,XFLTD'
-    - 'DOMAIN,cvws.icloud-content.com,XFLTD'
-    - 'DOMAIN-SUFFIX,mzstatic.com,DIRECT'
-    - 'DOMAIN-SUFFIX,itunes.apple.com,DIRECT'
-    - 'DOMAIN-SUFFIX,icloud.com,DIRECT'
-    - 'DOMAIN-SUFFIX,icloud-content.com,DIRECT'
-    - 'DOMAIN-SUFFIX,me.com,DIRECT'
-    - 'DOMAIN-SUFFIX,aaplimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,cdn20.com,DIRECT'
-    - 'DOMAIN-SUFFIX,cdn-apple.com,DIRECT'
-    - 'DOMAIN-SUFFIX,akadns.net,DIRECT'
-    - 'DOMAIN-SUFFIX,akamaiedge.net,DIRECT'
-    - 'DOMAIN-SUFFIX,edgekey.net,DIRECT'
-    - 'DOMAIN-SUFFIX,mwcloudcdn.com,DIRECT'
-    - 'DOMAIN-SUFFIX,mwcname.com,DIRECT'
-    - 'DOMAIN-SUFFIX,apple.com,DIRECT'
-    - 'DOMAIN-SUFFIX,apple-cloudkit.com,DIRECT'
-    - 'DOMAIN-SUFFIX,apple-mapkit.com,DIRECT'
-    - 'DOMAIN-SUFFIX,126.com,DIRECT'
-    - 'DOMAIN-SUFFIX,126.net,DIRECT'
-    - 'DOMAIN-SUFFIX,127.net,DIRECT'
-    - 'DOMAIN-SUFFIX,163.com,DIRECT'
-    - 'DOMAIN-SUFFIX,360buyimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,36kr.com,DIRECT'
-    - 'DOMAIN-SUFFIX,acfun.tv,DIRECT'
-    - 'DOMAIN-SUFFIX,air-matters.com,DIRECT'
-    - 'DOMAIN-SUFFIX,aixifan.com,DIRECT'
-    - 'DOMAIN-KEYWORD,alicdn,DIRECT'
-    - 'DOMAIN-KEYWORD,alipay,DIRECT'
-    - 'DOMAIN-KEYWORD,taobao,DIRECT'
-    - 'DOMAIN-SUFFIX,amap.com,DIRECT'
-    - 'DOMAIN-SUFFIX,autonavi.com,DIRECT'
-    - 'DOMAIN-KEYWORD,baidu,DIRECT'
-    - 'DOMAIN-SUFFIX,bdimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,bdstatic.com,DIRECT'
-    - 'DOMAIN-SUFFIX,bilibili.com,DIRECT'
-    - 'DOMAIN-SUFFIX,bilivideo.com,DIRECT'
-    - 'DOMAIN-SUFFIX,caiyunapp.com,DIRECT'
-    - 'DOMAIN-SUFFIX,clouddn.com,DIRECT'
-    - 'DOMAIN-SUFFIX,cnbeta.com,DIRECT'
-    - 'DOMAIN-SUFFIX,cnbetacdn.com,DIRECT'
-    - 'DOMAIN-SUFFIX,cootekservice.com,DIRECT'
-    - 'DOMAIN-SUFFIX,csdn.net,DIRECT'
-    - 'DOMAIN-SUFFIX,ctrip.com,DIRECT'
-    - 'DOMAIN-SUFFIX,dgtle.com,DIRECT'
-    - 'DOMAIN-SUFFIX,dianping.com,DIRECT'
-    - 'DOMAIN-SUFFIX,douban.com,DIRECT'
-    - 'DOMAIN-SUFFIX,doubanio.com,DIRECT'
-    - 'DOMAIN-SUFFIX,duokan.com,DIRECT'
-    - 'DOMAIN-SUFFIX,easou.com,DIRECT'
-    - 'DOMAIN-SUFFIX,ele.me,DIRECT'
-    - 'DOMAIN-SUFFIX,feng.com,DIRECT'
-    - 'DOMAIN-SUFFIX,fir.im,DIRECT'
-    - 'DOMAIN-SUFFIX,frdic.com,DIRECT'
-    - 'DOMAIN-SUFFIX,g-cores.com,DIRECT'
-    - 'DOMAIN-SUFFIX,godic.net,DIRECT'
-    - 'DOMAIN-SUFFIX,gtimg.com,DIRECT'
-    - 'DOMAIN,cdn.hockeyapp.net,DIRECT'
-    - 'DOMAIN-SUFFIX,hongxiu.com,DIRECT'
-    - 'DOMAIN-SUFFIX,hxcdn.net,DIRECT'
-    - 'DOMAIN-SUFFIX,iciba.com,DIRECT'
-    - 'DOMAIN-SUFFIX,ifeng.com,DIRECT'
-    - 'DOMAIN-SUFFIX,ifengimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,ipip.net,DIRECT'
-    - 'DOMAIN-SUFFIX,iqiyi.com,DIRECT'
-    - 'DOMAIN-SUFFIX,jd.com,DIRECT'
-    - 'DOMAIN-SUFFIX,jianshu.com,DIRECT'
-    - 'DOMAIN-SUFFIX,knewone.com,DIRECT'
-    - 'DOMAIN-SUFFIX,le.com,DIRECT'
-    - 'DOMAIN-SUFFIX,lecloud.com,DIRECT'
-    - 'DOMAIN-SUFFIX,lemicp.com,DIRECT'
-    - 'DOMAIN-SUFFIX,licdn.com,DIRECT'
-    - 'DOMAIN-SUFFIX,luoo.net,DIRECT'
-    - 'DOMAIN-SUFFIX,meituan.com,DIRECT'
-    - 'DOMAIN-SUFFIX,meituan.net,DIRECT'
-    - 'DOMAIN-SUFFIX,mi.com,DIRECT'
-    - 'DOMAIN-SUFFIX,miaopai.com,DIRECT'
-    - 'DOMAIN-SUFFIX,microsoft.com,DIRECT'
-    - 'DOMAIN-SUFFIX,microsoftonline.com,DIRECT'
-    - 'DOMAIN-SUFFIX,miui.com,DIRECT'
-    - 'DOMAIN-SUFFIX,miwifi.com,DIRECT'
-    - 'DOMAIN-SUFFIX,mob.com,DIRECT'
-    - 'DOMAIN-SUFFIX,netease.com,DIRECT'
-    - 'DOMAIN-SUFFIX,office.com,DIRECT'
-    - 'DOMAIN-SUFFIX,office365.com,DIRECT'
-    - 'DOMAIN-KEYWORD,officecdn,DIRECT'
-    - 'DOMAIN-SUFFIX,oschina.net,DIRECT'
-    - 'DOMAIN-SUFFIX,ppsimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,pstatp.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qcloud.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qdaily.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qdmm.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qhimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qhres.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qidian.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qihucdn.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qiniu.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qiniucdn.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qiyipic.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qq.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qqurl.com,DIRECT'
-    - 'DOMAIN-SUFFIX,rarbg.to,DIRECT'
-    - 'DOMAIN-SUFFIX,ruguoapp.com,DIRECT'
-    - 'DOMAIN-SUFFIX,segmentfault.com,DIRECT'
-    - 'DOMAIN-SUFFIX,sinaapp.com,DIRECT'
-    - 'DOMAIN-SUFFIX,smzdm.com,DIRECT'
-    - 'DOMAIN-SUFFIX,snapdrop.net,DIRECT'
-    - 'DOMAIN-SUFFIX,sogou.com,DIRECT'
-    - 'DOMAIN-SUFFIX,sogoucdn.com,DIRECT'
-    - 'DOMAIN-SUFFIX,sohu.com,DIRECT'
-    - 'DOMAIN-SUFFIX,soku.com,DIRECT'
-    - 'DOMAIN-SUFFIX,speedtest.net,DIRECT'
-    - 'DOMAIN-SUFFIX,sspai.com,DIRECT'
-    - 'DOMAIN-SUFFIX,suning.com,DIRECT'
-    - 'DOMAIN-SUFFIX,taobao.com,DIRECT'
-    - 'DOMAIN-SUFFIX,tencent.com,DIRECT'
-    - 'DOMAIN-SUFFIX,tenpay.com,DIRECT'
-    - 'DOMAIN-SUFFIX,tianyancha.com,DIRECT'
-    - 'DOMAIN-SUFFIX,tmall.com,DIRECT'
-    - 'DOMAIN-SUFFIX,tudou.com,DIRECT'
-    - 'DOMAIN-SUFFIX,umetrip.com,DIRECT'
-    - 'DOMAIN-SUFFIX,upaiyun.com,DIRECT'
-    - 'DOMAIN-SUFFIX,upyun.com,DIRECT'
-    - 'DOMAIN-SUFFIX,veryzhun.com,DIRECT'
-    - 'DOMAIN-SUFFIX,weather.com,DIRECT'
-    - 'DOMAIN-SUFFIX,weibo.com,DIRECT'
-    - 'DOMAIN-SUFFIX,xiami.com,DIRECT'
-    - 'DOMAIN-SUFFIX,xiami.net,DIRECT'
-    - 'DOMAIN-SUFFIX,xiaomicp.com,DIRECT'
-    - 'DOMAIN-SUFFIX,ximalaya.com,DIRECT'
-    - 'DOMAIN-SUFFIX,xmcdn.com,DIRECT'
-    - 'DOMAIN-SUFFIX,xunlei.com,DIRECT'
-    - 'DOMAIN-SUFFIX,yhd.com,DIRECT'
-    - 'DOMAIN-SUFFIX,yihaodianimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,yinxiang.com,DIRECT'
-    - 'DOMAIN-SUFFIX,ykimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,youdao.com,DIRECT'
-    - 'DOMAIN-SUFFIX,youku.com,DIRECT'
-    - 'DOMAIN-SUFFIX,zealer.com,DIRECT'
-    - 'DOMAIN-SUFFIX,zhihu.com,DIRECT'
-    - 'DOMAIN-SUFFIX,zhimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,zimuzu.tv,DIRECT'
-    - 'DOMAIN-SUFFIX,zoho.com,DIRECT'
-    - 'DOMAIN-KEYWORD,amazon,XFLTD'
-    - 'DOMAIN-KEYWORD,google,XFLTD'
-    - 'DOMAIN-KEYWORD,gmail,XFLTD'
-    - 'DOMAIN-KEYWORD,youtube,XFLTD'
-    - 'DOMAIN-KEYWORD,facebook,XFLTD'
-    - 'DOMAIN-SUFFIX,fb.me,XFLTD'
-    - 'DOMAIN-SUFFIX,fbcdn.net,XFLTD'
-    - 'DOMAIN-KEYWORD,twitter,XFLTD'
-    - 'DOMAIN-KEYWORD,instagram,XFLTD'
-    - 'DOMAIN-KEYWORD,dropbox,XFLTD'
-    - 'DOMAIN-SUFFIX,twimg.com,XFLTD'
-    - 'DOMAIN-KEYWORD,blogspot,XFLTD'
-    - 'DOMAIN-SUFFIX,youtu.be,XFLTD'
-    - 'DOMAIN-KEYWORD,whatsapp,XFLTD'
-    - 'DOMAIN-KEYWORD,admarvel,REJECT'
-    - 'DOMAIN-KEYWORD,admaster,REJECT'
-    - 'DOMAIN-KEYWORD,adsage,REJECT'
-    - 'DOMAIN-KEYWORD,adsmogo,REJECT'
-    - 'DOMAIN-KEYWORD,adsrvmedia,REJECT'
-    - 'DOMAIN-KEYWORD,adwords,REJECT'
-    - 'DOMAIN-KEYWORD,adservice,REJECT'
-    - 'DOMAIN-SUFFIX,appsflyer.com,REJECT'
-    - 'DOMAIN-KEYWORD,domob,REJECT'
-    - 'DOMAIN-SUFFIX,doubleclick.net,REJECT'
-    - 'DOMAIN-KEYWORD,duomeng,REJECT'
-    - 'DOMAIN-KEYWORD,dwtrack,REJECT'
-    - 'DOMAIN-KEYWORD,guanggao,REJECT'
-    - 'DOMAIN-KEYWORD,lianmeng,REJECT'
-    - 'DOMAIN-SUFFIX,mmstat.com,REJECT'
-    - 'DOMAIN-KEYWORD,mopub,REJECT'
-    - 'DOMAIN-KEYWORD,omgmta,REJECT'
-    - 'DOMAIN-KEYWORD,openx,REJECT'
-    - 'DOMAIN-KEYWORD,partnerad,REJECT'
-    - 'DOMAIN-KEYWORD,pingfore,REJECT'
-    - 'DOMAIN-KEYWORD,supersonicads,REJECT'
-    - 'DOMAIN-KEYWORD,uedas,REJECT'
-    - 'DOMAIN-KEYWORD,umeng,REJECT'
-    - 'DOMAIN-KEYWORD,usage,REJECT'
-    - 'DOMAIN-SUFFIX,vungle.com,REJECT'
-    - 'DOMAIN-KEYWORD,wlmonitor,REJECT'
-    - 'DOMAIN-KEYWORD,zjtoolbar,REJECT'
-    - 'DOMAIN-SUFFIX,9to5mac.com,XFLTD'
-    - 'DOMAIN-SUFFIX,abpchina.org,XFLTD'
-    - 'DOMAIN-SUFFIX,adblockplus.org,XFLTD'
-    - 'DOMAIN-SUFFIX,adobe.com,XFLTD'
-    - 'DOMAIN-SUFFIX,akamaized.net,XFLTD'
-    - 'DOMAIN-SUFFIX,alfredapp.com,XFLTD'
-    - 'DOMAIN-SUFFIX,amplitude.com,XFLTD'
-    - 'DOMAIN-SUFFIX,ampproject.org,XFLTD'
-    - 'DOMAIN-SUFFIX,android.com,XFLTD'
-    - 'DOMAIN-SUFFIX,angularjs.org,XFLTD'
-    - 'DOMAIN-SUFFIX,aolcdn.com,XFLTD'
-    - 'DOMAIN-SUFFIX,apkpure.com,XFLTD'
-    - 'DOMAIN-SUFFIX,appledaily.com,XFLTD'
-    - 'DOMAIN-SUFFIX,appshopper.com,XFLTD'
-    - 'DOMAIN-SUFFIX,appspot.com,XFLTD'
-    - 'DOMAIN-SUFFIX,arcgis.com,XFLTD'
-    - 'DOMAIN-SUFFIX,archive.org,XFLTD'
-    - 'DOMAIN-SUFFIX,armorgames.com,XFLTD'
-    - 'DOMAIN-SUFFIX,aspnetcdn.com,XFLTD'
-    - 'DOMAIN-SUFFIX,att.com,XFLTD'
-    - 'DOMAIN-SUFFIX,awsstatic.com,XFLTD'
-    - 'DOMAIN-SUFFIX,azureedge.net,XFLTD'
-    - 'DOMAIN-SUFFIX,azurewebsites.net,XFLTD'
-    - 'DOMAIN-SUFFIX,bing.com,XFLTD'
-    - 'DOMAIN-SUFFIX,bintray.com,XFLTD'
-    - 'DOMAIN-SUFFIX,bit.com,XFLTD'
-    - 'DOMAIN-SUFFIX,bit.ly,XFLTD'
-    - 'DOMAIN-SUFFIX,bitbucket.org,XFLTD'
-    - 'DOMAIN-SUFFIX,bjango.com,XFLTD'
-    - 'DOMAIN-SUFFIX,bkrtx.com,XFLTD'
-    - 'DOMAIN-SUFFIX,blog.com,XFLTD'
-    - 'DOMAIN-SUFFIX,blogcdn.com,XFLTD'
-    - 'DOMAIN-SUFFIX,blogger.com,XFLTD'
-    - 'DOMAIN-SUFFIX,blogsmithmedia.com,XFLTD'
-    - 'DOMAIN-SUFFIX,blogspot.com,XFLTD'
-    - 'DOMAIN-SUFFIX,blogspot.hk,XFLTD'
-    - 'DOMAIN-SUFFIX,bloomberg.com,XFLTD'
-    - 'DOMAIN-SUFFIX,box.com,XFLTD'
-    - 'DOMAIN-SUFFIX,box.net,XFLTD'
-    - 'DOMAIN-SUFFIX,cachefly.net,XFLTD'
-    - 'DOMAIN-SUFFIX,chromium.org,XFLTD'
-    - 'DOMAIN-SUFFIX,cl.ly,XFLTD'
-    - 'DOMAIN-SUFFIX,cloudflare.com,XFLTD'
-    - 'DOMAIN-SUFFIX,cloudfront.net,XFLTD'
-    - 'DOMAIN-SUFFIX,cloudmagic.com,XFLTD'
-    - 'DOMAIN-SUFFIX,cmail19.com,XFLTD'
-    - 'DOMAIN-SUFFIX,cnet.com,XFLTD'
-    - 'DOMAIN-SUFFIX,cocoapods.org,XFLTD'
-    - 'DOMAIN-SUFFIX,comodoca.com,XFLTD'
-    - 'DOMAIN-SUFFIX,crashlytics.com,XFLTD'
-    - 'DOMAIN-SUFFIX,culturedcode.com,XFLTD'
-    - 'DOMAIN-SUFFIX,d.pr,XFLTD'
-    - 'DOMAIN-SUFFIX,danilo.to,XFLTD'
-    - 'DOMAIN-SUFFIX,dayone.me,XFLTD'
-    - 'DOMAIN-SUFFIX,db.tt,XFLTD'
-    - 'DOMAIN-SUFFIX,deskconnect.com,XFLTD'
-    - 'DOMAIN-SUFFIX,disq.us,XFLTD'
-    - 'DOMAIN-SUFFIX,disqus.com,XFLTD'
-    - 'DOMAIN-SUFFIX,disquscdn.com,XFLTD'
-    - 'DOMAIN-SUFFIX,dnsimple.com,XFLTD'
-    - 'DOMAIN-SUFFIX,docker.com,XFLTD'
-    - 'DOMAIN-SUFFIX,dribbble.com,XFLTD'
-    - 'DOMAIN-SUFFIX,droplr.com,XFLTD'
-    - 'DOMAIN-SUFFIX,duckduckgo.com,XFLTD'
-    - 'DOMAIN-SUFFIX,dueapp.com,XFLTD'
-    - 'DOMAIN-SUFFIX,dytt8.net,XFLTD'
-    - 'DOMAIN-SUFFIX,edgecastcdn.net,XFLTD'
-    - 'DOMAIN-SUFFIX,edgekey.net,XFLTD'
-    - 'DOMAIN-SUFFIX,edgesuite.net,XFLTD'
-    - 'DOMAIN-SUFFIX,engadget.com,XFLTD'
-    - 'DOMAIN-SUFFIX,entrust.net,XFLTD'
-    - 'DOMAIN-SUFFIX,eurekavpt.com,XFLTD'
-    - 'DOMAIN-SUFFIX,evernote.com,XFLTD'
-    - 'DOMAIN-SUFFIX,fabric.io,XFLTD'
-    - 'DOMAIN-SUFFIX,fast.com,XFLTD'
-    - 'DOMAIN-SUFFIX,fastly.net,XFLTD'
-    - 'DOMAIN-SUFFIX,fc2.com,XFLTD'
-    - 'DOMAIN-SUFFIX,feedburner.com,XFLTD'
-    - 'DOMAIN-SUFFIX,feedly.com,XFLTD'
-    - 'DOMAIN-SUFFIX,feedsportal.com,XFLTD'
-    - 'DOMAIN-SUFFIX,fiftythree.com,XFLTD'
-    - 'DOMAIN-SUFFIX,firebaseio.com,XFLTD'
-    - 'DOMAIN-SUFFIX,flexibits.com,XFLTD'
-    - 'DOMAIN-SUFFIX,flickr.com,XFLTD'
-    - 'DOMAIN-SUFFIX,flipboard.com,XFLTD'
-    - 'DOMAIN-SUFFIX,g.co,XFLTD'
-    - 'DOMAIN-SUFFIX,gabia.net,XFLTD'
-    - 'DOMAIN-SUFFIX,geni.us,XFLTD'
-    - 'DOMAIN-SUFFIX,gfx.ms,XFLTD'
-    - 'DOMAIN-SUFFIX,ggpht.com,XFLTD'
-    - 'DOMAIN-SUFFIX,ghostnoteapp.com,XFLTD'
-    - 'DOMAIN-SUFFIX,git.io,XFLTD'
-    - 'DOMAIN-KEYWORD,github,XFLTD'
-    - 'DOMAIN-SUFFIX,globalsign.com,XFLTD'
-    - 'DOMAIN-SUFFIX,gmodules.com,XFLTD'
-    - 'DOMAIN-SUFFIX,godaddy.com,XFLTD'
-    - 'DOMAIN-SUFFIX,golang.org,XFLTD'
-    - 'DOMAIN-SUFFIX,gongm.in,XFLTD'
-    - 'DOMAIN-SUFFIX,goo.gl,XFLTD'
-    - 'DOMAIN-SUFFIX,goodreaders.com,XFLTD'
-    - 'DOMAIN-SUFFIX,goodreads.com,XFLTD'
-    - 'DOMAIN-SUFFIX,gravatar.com,XFLTD'
-    - 'DOMAIN-SUFFIX,gstatic.com,XFLTD'
-    - 'DOMAIN-SUFFIX,gvt0.com,XFLTD'
-    - 'DOMAIN-SUFFIX,hockeyapp.net,XFLTD'
-    - 'DOMAIN-SUFFIX,hotmail.com,XFLTD'
-    - 'DOMAIN-SUFFIX,icons8.com,XFLTD'
-    - 'DOMAIN-SUFFIX,ifixit.com,XFLTD'
-    - 'DOMAIN-SUFFIX,ift.tt,XFLTD'
-    - 'DOMAIN-SUFFIX,ifttt.com,XFLTD'
-    - 'DOMAIN-SUFFIX,iherb.com,XFLTD'
-    - 'DOMAIN-SUFFIX,imageshack.us,XFLTD'
-    - 'DOMAIN-SUFFIX,img.ly,XFLTD'
-    - 'DOMAIN-SUFFIX,imgur.com,XFLTD'
-    - 'DOMAIN-SUFFIX,imore.com,XFLTD'
-    - 'DOMAIN-SUFFIX,instapaper.com,XFLTD'
-    - 'DOMAIN-SUFFIX,ipn.li,XFLTD'
-    - 'DOMAIN-SUFFIX,is.gd,XFLTD'
-    - 'DOMAIN-SUFFIX,issuu.com,XFLTD'
-    - 'DOMAIN-SUFFIX,itgonglun.com,XFLTD'
-    - 'DOMAIN-SUFFIX,itun.es,XFLTD'
-    - 'DOMAIN-SUFFIX,ixquick.com,XFLTD'
-    - 'DOMAIN-SUFFIX,j.mp,XFLTD'
-    - 'DOMAIN-SUFFIX,js.revsci.net,XFLTD'
-    - 'DOMAIN-SUFFIX,jshint.com,XFLTD'
-    - 'DOMAIN-SUFFIX,jtvnw.net,XFLTD'
-    - 'DOMAIN-SUFFIX,justgetflux.com,XFLTD'
-    - 'DOMAIN-SUFFIX,kat.cr,XFLTD'
-    - 'DOMAIN-SUFFIX,klip.me,XFLTD'
-    - 'DOMAIN-SUFFIX,libsyn.com,XFLTD'
-    - 'DOMAIN-SUFFIX,linkedin.com,XFLTD'
-    - 'DOMAIN-SUFFIX,line-apps.com,XFLTD'
-    - 'DOMAIN-SUFFIX,linode.com,XFLTD'
-    - 'DOMAIN-SUFFIX,lithium.com,XFLTD'
-    - 'DOMAIN-SUFFIX,littlehj.com,XFLTD'
-    - 'DOMAIN-SUFFIX,live.com,XFLTD'
-    - 'DOMAIN-SUFFIX,live.net,XFLTD'
-    - 'DOMAIN-SUFFIX,livefilestore.com,XFLTD'
-    - 'DOMAIN-SUFFIX,llnwd.net,XFLTD'
-    - 'DOMAIN-SUFFIX,macid.co,XFLTD'
-    - 'DOMAIN-SUFFIX,macromedia.com,XFLTD'
-    - 'DOMAIN-SUFFIX,macrumors.com,XFLTD'
-    - 'DOMAIN-SUFFIX,mashable.com,XFLTD'
-    - 'DOMAIN-SUFFIX,mathjax.org,XFLTD'
-    - 'DOMAIN-SUFFIX,medium.com,XFLTD'
-    - 'DOMAIN-SUFFIX,mega.co.nz,XFLTD'
-    - 'DOMAIN-SUFFIX,mega.nz,XFLTD'
-    - 'DOMAIN-SUFFIX,megaupload.com,XFLTD'
-    - 'DOMAIN-SUFFIX,microsofttranslator.com,XFLTD'
-    - 'DOMAIN-SUFFIX,mindnode.com,XFLTD'
-    - 'DOMAIN-SUFFIX,mobile01.com,XFLTD'
-    - 'DOMAIN-SUFFIX,modmyi.com,XFLTD'
-    - 'DOMAIN-SUFFIX,msedge.net,XFLTD'
-    - 'DOMAIN-SUFFIX,myfontastic.com,XFLTD'
-    - 'DOMAIN-SUFFIX,name.com,XFLTD'
-    - 'DOMAIN-SUFFIX,nextmedia.com,XFLTD'
-    - 'DOMAIN-SUFFIX,nsstatic.net,XFLTD'
-    - 'DOMAIN-SUFFIX,nssurge.com,XFLTD'
-    - 'DOMAIN-SUFFIX,nyt.com,XFLTD'
-    - 'DOMAIN-SUFFIX,nytimes.com,XFLTD'
-    - 'DOMAIN-SUFFIX,omnigroup.com,XFLTD'
-    - 'DOMAIN-SUFFIX,onedrive.com,XFLTD'
-    - 'DOMAIN-SUFFIX,onenote.com,XFLTD'
-    - 'DOMAIN-SUFFIX,ooyala.com,XFLTD'
-    - 'DOMAIN-SUFFIX,openvpn.net,XFLTD'
-    - 'DOMAIN-SUFFIX,openwrt.org,XFLTD'
-    - 'DOMAIN-SUFFIX,orkut.com,XFLTD'
-    - 'DOMAIN-SUFFIX,osxdaily.com,XFLTD'
-    - 'DOMAIN-SUFFIX,outlook.com,XFLTD'
-    - 'DOMAIN-SUFFIX,ow.ly,XFLTD'
-    - 'DOMAIN-SUFFIX,paddleapi.com,XFLTD'
-    - 'DOMAIN-SUFFIX,parallels.com,XFLTD'
-    - 'DOMAIN-SUFFIX,parse.com,XFLTD'
-    - 'DOMAIN-SUFFIX,pdfexpert.com,XFLTD'
-    - 'DOMAIN-SUFFIX,periscope.tv,XFLTD'
-    - 'DOMAIN-SUFFIX,pinboard.in,XFLTD'
-    - 'DOMAIN-SUFFIX,pinterest.com,XFLTD'
-    - 'DOMAIN-SUFFIX,pixelmator.com,XFLTD'
-    - 'DOMAIN-SUFFIX,pixiv.net,XFLTD'
-    - 'DOMAIN-SUFFIX,playpcesor.com,XFLTD'
-    - 'DOMAIN-SUFFIX,playstation.com,XFLTD'
-    - 'DOMAIN-SUFFIX,playstation.com.hk,XFLTD'
-    - 'DOMAIN-SUFFIX,playstation.net,XFLTD'
-    - 'DOMAIN-SUFFIX,playstationnetwork.com,XFLTD'
-    - 'DOMAIN-SUFFIX,pushwoosh.com,XFLTD'
-    - 'DOMAIN-SUFFIX,rime.im,XFLTD'
-    - 'DOMAIN-SUFFIX,servebom.com,XFLTD'
-    - 'DOMAIN-SUFFIX,sfx.ms,XFLTD'
-    - 'DOMAIN-SUFFIX,shadowsocks.org,XFLTD'
-    - 'DOMAIN-SUFFIX,sharethis.com,XFLTD'
-    - 'DOMAIN-SUFFIX,shazam.com,XFLTD'
-    - 'DOMAIN-SUFFIX,skype.com,XFLTD'
-    - 'DOMAIN-SUFFIX,smartdnsXFLTD.com,XFLTD'
-    - 'DOMAIN-SUFFIX,smartmailcloud.com,XFLTD'
-    - 'DOMAIN-SUFFIX,sndcdn.com,XFLTD'
-    - 'DOMAIN-SUFFIX,sony.com,XFLTD'
-    - 'DOMAIN-SUFFIX,soundcloud.com,XFLTD'
-    - 'DOMAIN-SUFFIX,sourceforge.net,XFLTD'
-    - 'DOMAIN-SUFFIX,spotify.com,XFLTD'
-    - 'DOMAIN-SUFFIX,squarespace.com,XFLTD'
-    - 'DOMAIN-SUFFIX,sstatic.net,XFLTD'
-    - 'DOMAIN-SUFFIX,st.luluku.pw,XFLTD'
-    - 'DOMAIN-SUFFIX,stackoverflow.com,XFLTD'
-    - 'DOMAIN-SUFFIX,startpage.com,XFLTD'
-    - 'DOMAIN-SUFFIX,staticflickr.com,XFLTD'
-    - 'DOMAIN-SUFFIX,steamcommunity.com,XFLTD'
-    - 'DOMAIN-SUFFIX,symauth.com,XFLTD'
-    - 'DOMAIN-SUFFIX,symcb.com,XFLTD'
-    - 'DOMAIN-SUFFIX,symcd.com,XFLTD'
-    - 'DOMAIN-SUFFIX,tapbots.com,XFLTD'
-    - 'DOMAIN-SUFFIX,tapbots.net,XFLTD'
-    - 'DOMAIN-SUFFIX,tdesktop.com,XFLTD'
-    - 'DOMAIN-SUFFIX,techcrunch.com,XFLTD'
-    - 'DOMAIN-SUFFIX,techsmith.com,XFLTD'
-    - 'DOMAIN-SUFFIX,thepiratebay.org,XFLTD'
-    - 'DOMAIN-SUFFIX,theverge.com,XFLTD'
-    - 'DOMAIN-SUFFIX,time.com,XFLTD'
-    - 'DOMAIN-SUFFIX,timeinc.net,XFLTD'
-    - 'DOMAIN-SUFFIX,tiny.cc,XFLTD'
-    - 'DOMAIN-SUFFIX,tinypic.com,XFLTD'
-    - 'DOMAIN-SUFFIX,tmblr.co,XFLTD'
-    - 'DOMAIN-SUFFIX,todoist.com,XFLTD'
-    - 'DOMAIN-SUFFIX,trello.com,XFLTD'
-    - 'DOMAIN-SUFFIX,trustasiassl.com,XFLTD'
-    - 'DOMAIN-SUFFIX,tumblr.co,XFLTD'
-    - 'DOMAIN-SUFFIX,tumblr.com,XFLTD'
-    - 'DOMAIN-SUFFIX,tweetdeck.com,XFLTD'
-    - 'DOMAIN-SUFFIX,tweetmarker.net,XFLTD'
-    - 'DOMAIN-SUFFIX,twitch.tv,XFLTD'
-    - 'DOMAIN-SUFFIX,txmblr.com,XFLTD'
-    - 'DOMAIN-SUFFIX,typekit.net,XFLTD'
-    - 'DOMAIN-SUFFIX,ubertags.com,XFLTD'
-    - 'DOMAIN-SUFFIX,ublock.org,XFLTD'
-    - 'DOMAIN-SUFFIX,ubnt.com,XFLTD'
-    - 'DOMAIN-SUFFIX,ulyssesapp.com,XFLTD'
-    - 'DOMAIN-SUFFIX,urchin.com,XFLTD'
-    - 'DOMAIN-SUFFIX,usertrust.com,XFLTD'
-    - 'DOMAIN-SUFFIX,v.gd,XFLTD'
-    - 'DOMAIN-SUFFIX,v2ex.com,XFLTD'
-    - 'DOMAIN-SUFFIX,vimeo.com,XFLTD'
-    - 'DOMAIN-SUFFIX,vimeocdn.com,XFLTD'
-    - 'DOMAIN-SUFFIX,vine.co,XFLTD'
-    - 'DOMAIN-SUFFIX,vivaldi.com,XFLTD'
-    - 'DOMAIN-SUFFIX,vox-cdn.com,XFLTD'
-    - 'DOMAIN-SUFFIX,vsco.co,XFLTD'
-    - 'DOMAIN-SUFFIX,vultr.com,XFLTD'
-    - 'DOMAIN-SUFFIX,w.org,XFLTD'
-    - 'DOMAIN-SUFFIX,w3schools.com,XFLTD'
-    - 'DOMAIN-SUFFIX,webtype.com,XFLTD'
-    - 'DOMAIN-SUFFIX,wikiwand.com,XFLTD'
-    - 'DOMAIN-SUFFIX,wikileaks.org,XFLTD'
-    - 'DOMAIN-SUFFIX,wikimedia.org,XFLTD'
-    - 'DOMAIN-SUFFIX,wikipedia.com,XFLTD'
-    - 'DOMAIN-SUFFIX,wikipedia.org,XFLTD'
-    - 'DOMAIN-SUFFIX,windows.com,XFLTD'
-    - 'DOMAIN-SUFFIX,windows.net,XFLTD'
-    - 'DOMAIN-SUFFIX,wire.com,XFLTD'
-    - 'DOMAIN-SUFFIX,wordpress.com,XFLTD'
-    - 'DOMAIN-SUFFIX,workflowy.com,XFLTD'
-    - 'DOMAIN-SUFFIX,wp.com,XFLTD'
-    - 'DOMAIN-SUFFIX,wsj.com,XFLTD'
-    - 'DOMAIN-SUFFIX,wsj.net,XFLTD'
-    - 'DOMAIN-SUFFIX,xda-developers.com,XFLTD'
-    - 'DOMAIN-SUFFIX,xeeno.com,XFLTD'
-    - 'DOMAIN-SUFFIX,xiti.com,XFLTD'
-    - 'DOMAIN-SUFFIX,yahoo.com,XFLTD'
-    - 'DOMAIN-SUFFIX,yimg.com,XFLTD'
-    - 'DOMAIN-SUFFIX,ying.com,XFLTD'
-    - 'DOMAIN-SUFFIX,yoyo.org,XFLTD'
-    - 'DOMAIN-SUFFIX,ytimg.com,XFLTD'
-    - 'DOMAIN-SUFFIX,telegra.ph,XFLTD'
-    - 'DOMAIN-SUFFIX,telegram.org,XFLTD'
-    - 'IP-CIDR,91.108.4.0/22,XFLTD,no-resolve'
-    - 'IP-CIDR,91.108.8.0/21,XFLTD,no-resolve'
-    - 'IP-CIDR,91.108.16.0/22,XFLTD,no-resolve'
-    - 'IP-CIDR,91.108.56.0/22,XFLTD,no-resolve'
-    - 'IP-CIDR,149.154.160.0/20,XFLTD,no-resolve'
-    - 'IP-CIDR6,2001:67c:4e8::/48,XFLTD,no-resolve'
-    - 'IP-CIDR6,2001:b28:f23d::/48,XFLTD,no-resolve'
-    - 'IP-CIDR6,2001:b28:f23f::/48,XFLTD,no-resolve'
-    - 'IP-CIDR,120.232.181.162/32,XFLTD,no-resolve'
-    - 'IP-CIDR,120.241.147.226/32,XFLTD,no-resolve'
-    - 'IP-CIDR,120.253.253.226/32,XFLTD,no-resolve'
-    - 'IP-CIDR,120.253.255.162/32,XFLTD,no-resolve'
-    - 'IP-CIDR,120.253.255.34/32,XFLTD,no-resolve'
-    - 'IP-CIDR,120.253.255.98/32,XFLTD,no-resolve'
-    - 'IP-CIDR,180.163.150.162/32,XFLTD,no-resolve'
-    - 'IP-CIDR,180.163.150.34/32,XFLTD,no-resolve'
-    - 'IP-CIDR,180.163.151.162/32,XFLTD,no-resolve'
-    - 'IP-CIDR,180.163.151.34/32,XFLTD,no-resolve'
-    - 'IP-CIDR,203.208.39.0/24,XFLTD,no-resolve'
-    - 'IP-CIDR,203.208.40.0/24,XFLTD,no-resolve'
-    - 'IP-CIDR,203.208.41.0/24,XFLTD,no-resolve'
-    - 'IP-CIDR,203.208.43.0/24,XFLTD,no-resolve'
-    - 'IP-CIDR,203.208.50.0/24,XFLTD,no-resolve'
-    - 'IP-CIDR,220.181.174.162/32,XFLTD,no-resolve'
-    - 'IP-CIDR,220.181.174.226/32,XFLTD,no-resolve'
-    - 'IP-CIDR,220.181.174.34/32,XFLTD,no-resolve'
-    - 'DOMAIN,injections.adguard.org,DIRECT'
-    - 'DOMAIN,local.adguard.org,DIRECT'
-    - 'DOMAIN-SUFFIX,local,DIRECT'
-    - 'IP-CIDR,127.0.0.0/8,DIRECT'
-    - 'IP-CIDR,172.16.0.0/12,DIRECT'
-    - 'IP-CIDR,192.168.0.0/16,DIRECT'
-    - 'IP-CIDR,10.0.0.0/8,DIRECT'
-    - 'IP-CIDR,17.0.0.0/8,DIRECT'
-    - 'IP-CIDR,100.64.0.0/10,DIRECT'
-    - 'IP-CIDR,224.0.0.0/4,DIRECT'
-    - 'IP-CIDR6,fe80::/10,DIRECT'
-    - 'DOMAIN-SUFFIX,cn,DIRECT'
-    - 'DOMAIN-KEYWORD,-cn,DIRECT'
-    - 'GEOIP,CN,DIRECT'
-    - 'MATCH,XFLTD'

+ 0 - 942
other/grassio/clash_config/bitz.yaml

@@ -1,942 +0,0 @@
-allow-lan: true
-bind-address: '*'
-dns:
-    default-nameserver:
-        - 223.5.5.5
-        - 119.29.29.29
-    enable: true
-    ipv6: false
-    nameserver:
-        - 223.5.5.5
-        - 223.6.6.6
-external-controller: 127.0.0.1:9090
-log-level: info
-mixed-port: 7890
-mode: rule
-proxies:
-    - name: "\U0001F1ED\U0001F1F0 香港-广东专线 BGP 1"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32443"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1ED\U0001F1F0 香港-广东专线 BGP 2"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32445"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1ED\U0001F1F0 香港-广东专线 Akari"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32037"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1ED\U0001F1F0 香港-广东专线 NeaRoute"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32029"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1ED\U0001F1F0 香港-广东专线 HKBN"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32000"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1ED\U0001F1F0 香港-广东专线 HGC"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32042"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1ED\U0001F1F0 香港-广东专线 HKT"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32033"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1ED\U0001F1F0 香港-广东专线 GCore"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32027"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1FA\U0001F1F8 美国-广东专线 BGP 1"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32001"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1FA\U0001F1F8 美国-广东专线 BGP 2"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32028"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1FA\U0001F1F8 美国-广东专线 DAOport"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32031"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1FA\U0001F1F8 美国-广东专线 GCore"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32021"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1F9\U0001F1FC 台湾-广东专线 NeaRoute"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32003"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1F9\U0001F1FC 台湾-广东专线 STUIX"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32040"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1EF\U0001F1F5 日本-广东专线 BGP"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32004"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1EF\U0001F1F5 日本-广东专线 Akari"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32036"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1EF\U0001F1F5 日本-广东专线 GCore"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32022"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1F0\U0001F1F7 韩国-广东专线 VUKR"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32005"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1F8\U0001F1EC 新加坡-广东专线 BGP"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32007"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1F7\U0001F1FA 俄罗斯-广东专线 PQ"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32008"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1EB\U0001F1F7 法国-广东专线 BGP"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32009"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1EC\U0001F1E7 英国-广东专线 BGP"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32010"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1E8\U0001F1E6 加拿大-广东专线 BGP"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32039"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1E9\U0001F1EA 德国-广东专线 BGP"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32011"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1E6\U0001F1FA 澳大利亚-广东专线 VUAU"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32012"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1E6\U0001F1FA 澳大利亚-广东专线 GCore"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32023"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1F2\U0001F1FE 马来西亚-广东专线 Shin"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32038"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1F5\U0001F1ED 菲律宾-广东专线 Zenlayer"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32013"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1F5\U0001F1ED 菲律宾-广东专线 Comfac"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32030"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1F9\U0001F1ED 泰国-广东专线 Bangmod"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32043"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1F9\U0001F1F7 土耳其-广东专线 Kapteyan"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32014"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1F9\U0001F1F7 土耳其-广东专线 GCore"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32026"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1E6\U0001F1F7 阿根廷-广东专线 DonWeb"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32015"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1F3\U0001F1EC 尼日利亚-广东专线 Melbicom"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32034"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1FA\U0001F1E6 乌克兰-广东专线 Vik"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32019"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1E7\U0001F1F7 巴西-广东专线 GCore 1"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32016"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1E7\U0001F1F7 巴西-广东专线 GCore 2"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32025"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1EE\U0001F1F3 印度-广东专线 DOIN"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32017"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1EE\U0001F1F3 印度-广东专线 GCore"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32024"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1F8\U0001F1E6 沙特-广东专线 STC"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32035"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-    - name: "\U0001F1E6\U0001F1F6 南极-广东专线 WARP"
-      password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
-      port: "32041"
-      server: lbso.bnnodeservice.com
-      sni: cert.bitbyte.one
-      type: trojan
-      udp: true
-proxy-groups:
-    - name: Bitz Net
-      proxies:
-        - 自动选择
-        - 故障转移
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 BGP 1"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 BGP 2"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 Akari"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 NeaRoute"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 HKBN"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 HGC"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 HKT"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 GCore"
-        - "\U0001F1FA\U0001F1F8 美国-广东专线 BGP 1"
-        - "\U0001F1FA\U0001F1F8 美国-广东专线 BGP 2"
-        - "\U0001F1FA\U0001F1F8 美国-广东专线 DAOport"
-        - "\U0001F1FA\U0001F1F8 美国-广东专线 GCore"
-        - "\U0001F1F9\U0001F1FC 台湾-广东专线 NeaRoute"
-        - "\U0001F1F9\U0001F1FC 台湾-广东专线 STUIX"
-        - "\U0001F1EF\U0001F1F5 日本-广东专线 BGP"
-        - "\U0001F1EF\U0001F1F5 日本-广东专线 Akari"
-        - "\U0001F1EF\U0001F1F5 日本-广东专线 GCore"
-        - "\U0001F1F0\U0001F1F7 韩国-广东专线 VUKR"
-        - "\U0001F1F8\U0001F1EC 新加坡-广东专线 BGP"
-        - "\U0001F1F7\U0001F1FA 俄罗斯-广东专线 PQ"
-        - "\U0001F1EB\U0001F1F7 法国-广东专线 BGP"
-        - "\U0001F1EC\U0001F1E7 英国-广东专线 BGP"
-        - "\U0001F1E8\U0001F1E6 加拿大-广东专线 BGP"
-        - "\U0001F1E9\U0001F1EA 德国-广东专线 BGP"
-        - "\U0001F1E6\U0001F1FA 澳大利亚-广东专线 VUAU"
-        - "\U0001F1E6\U0001F1FA 澳大利亚-广东专线 GCore"
-        - "\U0001F1F2\U0001F1FE 马来西亚-广东专线 Shin"
-        - "\U0001F1F5\U0001F1ED 菲律宾-广东专线 Zenlayer"
-        - "\U0001F1F5\U0001F1ED 菲律宾-广东专线 Comfac"
-        - "\U0001F1F9\U0001F1ED 泰国-广东专线 Bangmod"
-        - "\U0001F1F9\U0001F1F7 土耳其-广东专线 Kapteyan"
-        - "\U0001F1F9\U0001F1F7 土耳其-广东专线 GCore"
-        - "\U0001F1E6\U0001F1F7 阿根廷-广东专线 DonWeb"
-        - "\U0001F1F3\U0001F1EC 尼日利亚-广东专线 Melbicom"
-        - "\U0001F1FA\U0001F1E6 乌克兰-广东专线 Vik"
-        - "\U0001F1E7\U0001F1F7 巴西-广东专线 GCore 1"
-        - "\U0001F1E7\U0001F1F7 巴西-广东专线 GCore 2"
-        - "\U0001F1EE\U0001F1F3 印度-广东专线 DOIN"
-        - "\U0001F1EE\U0001F1F3 印度-广东专线 GCore"
-        - "\U0001F1F8\U0001F1E6 沙特-广东专线 STC"
-        - "\U0001F1E6\U0001F1F6 南极-广东专线 WARP"
-      type: select
-    - interval: 86400
-      name: 自动选择
-      proxies:
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 BGP 1"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 BGP 2"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 Akari"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 NeaRoute"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 HKBN"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 HGC"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 HKT"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 GCore"
-        - "\U0001F1FA\U0001F1F8 美国-广东专线 BGP 1"
-        - "\U0001F1FA\U0001F1F8 美国-广东专线 BGP 2"
-        - "\U0001F1FA\U0001F1F8 美国-广东专线 DAOport"
-        - "\U0001F1FA\U0001F1F8 美国-广东专线 GCore"
-        - "\U0001F1F9\U0001F1FC 台湾-广东专线 NeaRoute"
-        - "\U0001F1F9\U0001F1FC 台湾-广东专线 STUIX"
-        - "\U0001F1EF\U0001F1F5 日本-广东专线 BGP"
-        - "\U0001F1EF\U0001F1F5 日本-广东专线 Akari"
-        - "\U0001F1EF\U0001F1F5 日本-广东专线 GCore"
-        - "\U0001F1F0\U0001F1F7 韩国-广东专线 VUKR"
-        - "\U0001F1F8\U0001F1EC 新加坡-广东专线 BGP"
-        - "\U0001F1F7\U0001F1FA 俄罗斯-广东专线 PQ"
-        - "\U0001F1EB\U0001F1F7 法国-广东专线 BGP"
-        - "\U0001F1EC\U0001F1E7 英国-广东专线 BGP"
-        - "\U0001F1E8\U0001F1E6 加拿大-广东专线 BGP"
-        - "\U0001F1E9\U0001F1EA 德国-广东专线 BGP"
-        - "\U0001F1E6\U0001F1FA 澳大利亚-广东专线 VUAU"
-        - "\U0001F1E6\U0001F1FA 澳大利亚-广东专线 GCore"
-        - "\U0001F1F2\U0001F1FE 马来西亚-广东专线 Shin"
-        - "\U0001F1F5\U0001F1ED 菲律宾-广东专线 Zenlayer"
-        - "\U0001F1F5\U0001F1ED 菲律宾-广东专线 Comfac"
-        - "\U0001F1F9\U0001F1ED 泰国-广东专线 Bangmod"
-        - "\U0001F1F9\U0001F1F7 土耳其-广东专线 Kapteyan"
-        - "\U0001F1F9\U0001F1F7 土耳其-广东专线 GCore"
-        - "\U0001F1E6\U0001F1F7 阿根廷-广东专线 DonWeb"
-        - "\U0001F1F3\U0001F1EC 尼日利亚-广东专线 Melbicom"
-        - "\U0001F1FA\U0001F1E6 乌克兰-广东专线 Vik"
-        - "\U0001F1E7\U0001F1F7 巴西-广东专线 GCore 1"
-        - "\U0001F1E7\U0001F1F7 巴西-广东专线 GCore 2"
-        - "\U0001F1EE\U0001F1F3 印度-广东专线 DOIN"
-        - "\U0001F1EE\U0001F1F3 印度-广东专线 GCore"
-        - "\U0001F1F8\U0001F1E6 沙特-广东专线 STC"
-        - "\U0001F1E6\U0001F1F6 南极-广东专线 WARP"
-      type: url-test
-      url: http://www.gstatic.com/generate_204
-    - interval: 7200
-      name: 故障转移
-      proxies:
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 BGP 1"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 BGP 2"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 Akari"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 NeaRoute"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 HKBN"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 HGC"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 HKT"
-        - "\U0001F1ED\U0001F1F0 香港-广东专线 GCore"
-        - "\U0001F1FA\U0001F1F8 美国-广东专线 BGP 1"
-        - "\U0001F1FA\U0001F1F8 美国-广东专线 BGP 2"
-        - "\U0001F1FA\U0001F1F8 美国-广东专线 DAOport"
-        - "\U0001F1FA\U0001F1F8 美国-广东专线 GCore"
-        - "\U0001F1F9\U0001F1FC 台湾-广东专线 NeaRoute"
-        - "\U0001F1F9\U0001F1FC 台湾-广东专线 STUIX"
-        - "\U0001F1EF\U0001F1F5 日本-广东专线 BGP"
-        - "\U0001F1EF\U0001F1F5 日本-广东专线 Akari"
-        - "\U0001F1EF\U0001F1F5 日本-广东专线 GCore"
-        - "\U0001F1F0\U0001F1F7 韩国-广东专线 VUKR"
-        - "\U0001F1F8\U0001F1EC 新加坡-广东专线 BGP"
-        - "\U0001F1F7\U0001F1FA 俄罗斯-广东专线 PQ"
-        - "\U0001F1EB\U0001F1F7 法国-广东专线 BGP"
-        - "\U0001F1EC\U0001F1E7 英国-广东专线 BGP"
-        - "\U0001F1E8\U0001F1E6 加拿大-广东专线 BGP"
-        - "\U0001F1E9\U0001F1EA 德国-广东专线 BGP"
-        - "\U0001F1E6\U0001F1FA 澳大利亚-广东专线 VUAU"
-        - "\U0001F1E6\U0001F1FA 澳大利亚-广东专线 GCore"
-        - "\U0001F1F2\U0001F1FE 马来西亚-广东专线 Shin"
-        - "\U0001F1F5\U0001F1ED 菲律宾-广东专线 Zenlayer"
-        - "\U0001F1F5\U0001F1ED 菲律宾-广东专线 Comfac"
-        - "\U0001F1F9\U0001F1ED 泰国-广东专线 Bangmod"
-        - "\U0001F1F9\U0001F1F7 土耳其-广东专线 Kapteyan"
-        - "\U0001F1F9\U0001F1F7 土耳其-广东专线 GCore"
-        - "\U0001F1E6\U0001F1F7 阿根廷-广东专线 DonWeb"
-        - "\U0001F1F3\U0001F1EC 尼日利亚-广东专线 Melbicom"
-        - "\U0001F1FA\U0001F1E6 乌克兰-广东专线 Vik"
-        - "\U0001F1E7\U0001F1F7 巴西-广东专线 GCore 1"
-        - "\U0001F1E7\U0001F1F7 巴西-广东专线 GCore 2"
-        - "\U0001F1EE\U0001F1F3 印度-广东专线 DOIN"
-        - "\U0001F1EE\U0001F1F3 印度-广东专线 GCore"
-        - "\U0001F1F8\U0001F1E6 沙特-广东专线 STC"
-        - "\U0001F1E6\U0001F1F6 南极-广东专线 WARP"
-      type: fallback
-      url: http://www.gstatic.com/generate_204
-rules:
-    - DOMAIN,openai.com,Bitz Net
-    - DOMAIN,intercom.io,Bitz Net
-    - DOMAIN,oaistatic.com,Bitz Net
-    - DOMAIN,oaiusercontent.com,Bitz Net
-    - DOMAIN,chatgpt.com,Bitz Net
-    - DOMAIN,safebrowsing.urlsec.qq.com,DIRECT
-    - DOMAIN,safebrowsing.googleapis.com,DIRECT
-    - DOMAIN,developer.apple.com,Bitz Net
-    - DOMAIN-SUFFIX,digicert.com,Bitz Net
-    - DOMAIN,ocsp.apple.com,Bitz Net
-    - DOMAIN,ocsp.comodoca.com,Bitz Net
-    - DOMAIN,ocsp.usertrust.com,Bitz Net
-    - DOMAIN,ocsp.sectigo.com,Bitz Net
-    - DOMAIN,ocsp.verisign.net,Bitz Net
-    - DOMAIN-SUFFIX,apple-dns.net,Bitz Net
-    - DOMAIN,testflight.apple.com,Bitz Net
-    - DOMAIN,sandbox.itunes.apple.com,Bitz Net
-    - DOMAIN,itunes.apple.com,Bitz Net
-    - DOMAIN-SUFFIX,apps.apple.com,Bitz Net
-    - DOMAIN-SUFFIX,blobstore.apple.com,Bitz Net
-    - DOMAIN,cvws.icloud-content.com,Bitz Net
-    - DOMAIN-SUFFIX,mzstatic.com,DIRECT
-    - DOMAIN-SUFFIX,itunes.apple.com,DIRECT
-    - DOMAIN-SUFFIX,icloud.com,DIRECT
-    - DOMAIN-SUFFIX,icloud-content.com,DIRECT
-    - DOMAIN-SUFFIX,me.com,DIRECT
-    - DOMAIN-SUFFIX,aaplimg.com,DIRECT
-    - DOMAIN-SUFFIX,cdn20.com,DIRECT
-    - DOMAIN-SUFFIX,cdn-apple.com,DIRECT
-    - DOMAIN-SUFFIX,akadns.net,DIRECT
-    - DOMAIN-SUFFIX,akamaiedge.net,DIRECT
-    - DOMAIN-SUFFIX,edgekey.net,DIRECT
-    - DOMAIN-SUFFIX,mwcloudcdn.com,DIRECT
-    - DOMAIN-SUFFIX,mwcname.com,DIRECT
-    - DOMAIN-SUFFIX,apple.com,DIRECT
-    - DOMAIN-SUFFIX,apple-cloudkit.com,DIRECT
-    - DOMAIN-SUFFIX,apple-mapkit.com,DIRECT
-    - DOMAIN-SUFFIX,cn,DIRECT
-    - DOMAIN-KEYWORD,-cn,DIRECT
-    - DOMAIN-SUFFIX,126.com,DIRECT
-    - DOMAIN-SUFFIX,126.net,DIRECT
-    - DOMAIN-SUFFIX,127.net,DIRECT
-    - DOMAIN-SUFFIX,163.com,DIRECT
-    - DOMAIN-SUFFIX,360buyimg.com,DIRECT
-    - DOMAIN-SUFFIX,36kr.com,DIRECT
-    - DOMAIN-SUFFIX,acfun.tv,DIRECT
-    - DOMAIN-SUFFIX,air-matters.com,DIRECT
-    - DOMAIN-SUFFIX,aixifan.com,DIRECT
-    - DOMAIN-KEYWORD,alicdn,DIRECT
-    - DOMAIN-KEYWORD,alipay,DIRECT
-    - DOMAIN-KEYWORD,taobao,DIRECT
-    - DOMAIN-SUFFIX,amap.com,DIRECT
-    - DOMAIN-SUFFIX,autonavi.com,DIRECT
-    - DOMAIN-KEYWORD,baidu,DIRECT
-    - DOMAIN-SUFFIX,bdimg.com,DIRECT
-    - DOMAIN-SUFFIX,bdstatic.com,DIRECT
-    - DOMAIN-SUFFIX,bilibili.com,DIRECT
-    - DOMAIN-SUFFIX,bilivideo.com,DIRECT
-    - DOMAIN-SUFFIX,caiyunapp.com,DIRECT
-    - DOMAIN-SUFFIX,clouddn.com,DIRECT
-    - DOMAIN-SUFFIX,cnbeta.com,DIRECT
-    - DOMAIN-SUFFIX,cnbetacdn.com,DIRECT
-    - DOMAIN-SUFFIX,cootekservice.com,DIRECT
-    - DOMAIN-SUFFIX,csdn.net,DIRECT
-    - DOMAIN-SUFFIX,ctrip.com,DIRECT
-    - DOMAIN-SUFFIX,dgtle.com,DIRECT
-    - DOMAIN-SUFFIX,dianping.com,DIRECT
-    - DOMAIN-SUFFIX,douban.com,DIRECT
-    - DOMAIN-SUFFIX,doubanio.com,DIRECT
-    - DOMAIN-SUFFIX,duokan.com,DIRECT
-    - DOMAIN-SUFFIX,easou.com,DIRECT
-    - DOMAIN-SUFFIX,ele.me,DIRECT
-    - DOMAIN-SUFFIX,feng.com,DIRECT
-    - DOMAIN-SUFFIX,fir.im,DIRECT
-    - DOMAIN-SUFFIX,frdic.com,DIRECT
-    - DOMAIN-SUFFIX,g-cores.com,DIRECT
-    - DOMAIN-SUFFIX,godic.net,DIRECT
-    - DOMAIN-SUFFIX,gtimg.com,DIRECT
-    - DOMAIN,cdn.hockeyapp.net,DIRECT
-    - DOMAIN-SUFFIX,hongxiu.com,DIRECT
-    - DOMAIN-SUFFIX,hxcdn.net,DIRECT
-    - DOMAIN-SUFFIX,iciba.com,DIRECT
-    - DOMAIN-SUFFIX,ifeng.com,DIRECT
-    - DOMAIN-SUFFIX,ifengimg.com,DIRECT
-    - DOMAIN-SUFFIX,ipip.net,DIRECT
-    - DOMAIN-SUFFIX,iqiyi.com,DIRECT
-    - DOMAIN-SUFFIX,jd.com,DIRECT
-    - DOMAIN-SUFFIX,jianshu.com,DIRECT
-    - DOMAIN-SUFFIX,knewone.com,DIRECT
-    - DOMAIN-SUFFIX,le.com,DIRECT
-    - DOMAIN-SUFFIX,lecloud.com,DIRECT
-    - DOMAIN-SUFFIX,lemicp.com,DIRECT
-    - DOMAIN-SUFFIX,luoo.net,DIRECT
-    - DOMAIN-SUFFIX,meituan.com,DIRECT
-    - DOMAIN-SUFFIX,meituan.net,DIRECT
-    - DOMAIN-SUFFIX,mi.com,DIRECT
-    - DOMAIN-SUFFIX,miaopai.com,DIRECT
-    - DOMAIN-SUFFIX,microsoft.com,DIRECT
-    - DOMAIN-SUFFIX,microsoftonline.com,DIRECT
-    - DOMAIN-SUFFIX,miui.com,DIRECT
-    - DOMAIN-SUFFIX,miwifi.com,DIRECT
-    - DOMAIN-SUFFIX,mob.com,DIRECT
-    - DOMAIN-SUFFIX,netease.com,DIRECT
-    - DOMAIN-SUFFIX,office.com,DIRECT
-    - DOMAIN-SUFFIX,office365.com,DIRECT
-    - DOMAIN-KEYWORD,officecdn,DIRECT
-    - DOMAIN-SUFFIX,oschina.net,DIRECT
-    - DOMAIN-SUFFIX,ppsimg.com,DIRECT
-    - DOMAIN-SUFFIX,pstatp.com,DIRECT
-    - DOMAIN-SUFFIX,qcloud.com,DIRECT
-    - DOMAIN-SUFFIX,qdaily.com,DIRECT
-    - DOMAIN-SUFFIX,qdmm.com,DIRECT
-    - DOMAIN-SUFFIX,qhimg.com,DIRECT
-    - DOMAIN-SUFFIX,qhres.com,DIRECT
-    - DOMAIN-SUFFIX,qidian.com,DIRECT
-    - DOMAIN-SUFFIX,qihucdn.com,DIRECT
-    - DOMAIN-SUFFIX,qiniu.com,DIRECT
-    - DOMAIN-SUFFIX,qiniucdn.com,DIRECT
-    - DOMAIN-SUFFIX,qiyipic.com,DIRECT
-    - DOMAIN-SUFFIX,qq.com,DIRECT
-    - DOMAIN-SUFFIX,qqurl.com,DIRECT
-    - DOMAIN-SUFFIX,rarbg.to,DIRECT
-    - DOMAIN-SUFFIX,ruguoapp.com,DIRECT
-    - DOMAIN-SUFFIX,segmentfault.com,DIRECT
-    - DOMAIN-SUFFIX,sinaapp.com,DIRECT
-    - DOMAIN-SUFFIX,smzdm.com,DIRECT
-    - DOMAIN-SUFFIX,snapdrop.net,DIRECT
-    - DOMAIN-SUFFIX,sogou.com,DIRECT
-    - DOMAIN-SUFFIX,sogoucdn.com,DIRECT
-    - DOMAIN-SUFFIX,sohu.com,DIRECT
-    - DOMAIN-SUFFIX,soku.com,DIRECT
-    - DOMAIN-SUFFIX,speedtest.net,DIRECT
-    - DOMAIN-SUFFIX,sspai.com,DIRECT
-    - DOMAIN-SUFFIX,suning.com,DIRECT
-    - DOMAIN-SUFFIX,taobao.com,DIRECT
-    - DOMAIN-SUFFIX,tencent.com,DIRECT
-    - DOMAIN-SUFFIX,tenpay.com,DIRECT
-    - DOMAIN-SUFFIX,tianyancha.com,DIRECT
-    - DOMAIN-SUFFIX,tmall.com,DIRECT
-    - DOMAIN-SUFFIX,tudou.com,DIRECT
-    - DOMAIN-SUFFIX,umetrip.com,DIRECT
-    - DOMAIN-SUFFIX,upaiyun.com,DIRECT
-    - DOMAIN-SUFFIX,upyun.com,DIRECT
-    - DOMAIN-SUFFIX,veryzhun.com,DIRECT
-    - DOMAIN-SUFFIX,weather.com,DIRECT
-    - DOMAIN-SUFFIX,weibo.com,DIRECT
-    - DOMAIN-SUFFIX,xiami.com,DIRECT
-    - DOMAIN-SUFFIX,xiami.net,DIRECT
-    - DOMAIN-SUFFIX,xiaomicp.com,DIRECT
-    - DOMAIN-SUFFIX,ximalaya.com,DIRECT
-    - DOMAIN-SUFFIX,xmcdn.com,DIRECT
-    - DOMAIN-SUFFIX,xunlei.com,DIRECT
-    - DOMAIN-SUFFIX,yhd.com,DIRECT
-    - DOMAIN-SUFFIX,yihaodianimg.com,DIRECT
-    - DOMAIN-SUFFIX,yinxiang.com,DIRECT
-    - DOMAIN-SUFFIX,ykimg.com,DIRECT
-    - DOMAIN-SUFFIX,youdao.com,DIRECT
-    - DOMAIN-SUFFIX,youku.com,DIRECT
-    - DOMAIN-SUFFIX,zealer.com,DIRECT
-    - DOMAIN-SUFFIX,zhihu.com,DIRECT
-    - DOMAIN-SUFFIX,zhimg.com,DIRECT
-    - DOMAIN-SUFFIX,zimuzu.tv,DIRECT
-    - DOMAIN-SUFFIX,zoho.com,DIRECT
-    - DOMAIN-KEYWORD,amazon,Bitz Net
-    - DOMAIN-KEYWORD,google,Bitz Net
-    - DOMAIN-KEYWORD,gmail,Bitz Net
-    - DOMAIN-KEYWORD,youtube,Bitz Net
-    - DOMAIN-KEYWORD,facebook,Bitz Net
-    - DOMAIN-SUFFIX,fb.me,Bitz Net
-    - DOMAIN-SUFFIX,fbcdn.net,Bitz Net
-    - DOMAIN-KEYWORD,twitter,Bitz Net
-    - DOMAIN-KEYWORD,instagram,Bitz Net
-    - DOMAIN-KEYWORD,dropbox,Bitz Net
-    - DOMAIN-SUFFIX,twimg.com,Bitz Net
-    - DOMAIN-KEYWORD,blogspot,Bitz Net
-    - DOMAIN-SUFFIX,youtu.be,Bitz Net
-    - DOMAIN-KEYWORD,whatsapp,Bitz Net
-    - DOMAIN-KEYWORD,admarvel,REJECT
-    - DOMAIN-KEYWORD,admaster,REJECT
-    - DOMAIN-KEYWORD,adsage,REJECT
-    - DOMAIN-KEYWORD,adsmogo,REJECT
-    - DOMAIN-KEYWORD,adsrvmedia,REJECT
-    - DOMAIN-KEYWORD,adwords,REJECT
-    - DOMAIN-KEYWORD,adservice,REJECT
-    - DOMAIN-SUFFIX,appsflyer.com,REJECT
-    - DOMAIN-KEYWORD,domob,REJECT
-    - DOMAIN-SUFFIX,doubleclick.net,REJECT
-    - DOMAIN-KEYWORD,duomeng,REJECT
-    - DOMAIN-KEYWORD,dwtrack,REJECT
-    - DOMAIN-KEYWORD,guanggao,REJECT
-    - DOMAIN-KEYWORD,lianmeng,REJECT
-    - DOMAIN-SUFFIX,mmstat.com,REJECT
-    - DOMAIN-KEYWORD,mopub,REJECT
-    - DOMAIN-KEYWORD,omgmta,REJECT
-    - DOMAIN-KEYWORD,openx,REJECT
-    - DOMAIN-KEYWORD,partnerad,REJECT
-    - DOMAIN-KEYWORD,pingfore,REJECT
-    - DOMAIN-KEYWORD,supersonicads,REJECT
-    - DOMAIN-KEYWORD,uedas,REJECT
-    - DOMAIN-KEYWORD,umeng,REJECT
-    - DOMAIN-KEYWORD,usage,REJECT
-    - DOMAIN-SUFFIX,vungle.com,REJECT
-    - DOMAIN-KEYWORD,wlmonitor,REJECT
-    - DOMAIN-KEYWORD,zjtoolbar,REJECT
-    - DOMAIN-SUFFIX,licdn.com,Bitz Net
-    - DOMAIN-SUFFIX,linkedin.com,Bitz Net
-    - DOMAIN-SUFFIX,9to5mac.com,Bitz Net
-    - DOMAIN-SUFFIX,abpchina.org,Bitz Net
-    - DOMAIN-SUFFIX,adblockplus.org,Bitz Net
-    - DOMAIN-SUFFIX,adobe.com,Bitz Net
-    - DOMAIN-SUFFIX,akamaized.net,Bitz Net
-    - DOMAIN-SUFFIX,alfredapp.com,Bitz Net
-    - DOMAIN-SUFFIX,amplitude.com,Bitz Net
-    - DOMAIN-SUFFIX,ampproject.org,Bitz Net
-    - DOMAIN-SUFFIX,android.com,Bitz Net
-    - DOMAIN-SUFFIX,angularjs.org,Bitz Net
-    - DOMAIN-SUFFIX,aolcdn.com,Bitz Net
-    - DOMAIN-SUFFIX,apkpure.com,Bitz Net
-    - DOMAIN-SUFFIX,appledaily.com,Bitz Net
-    - DOMAIN-SUFFIX,appshopper.com,Bitz Net
-    - DOMAIN-SUFFIX,appspot.com,Bitz Net
-    - DOMAIN-SUFFIX,arcgis.com,Bitz Net
-    - DOMAIN-SUFFIX,archive.org,Bitz Net
-    - DOMAIN-SUFFIX,armorgames.com,Bitz Net
-    - DOMAIN-SUFFIX,aspnetcdn.com,Bitz Net
-    - DOMAIN-SUFFIX,att.com,Bitz Net
-    - DOMAIN-SUFFIX,awsstatic.com,Bitz Net
-    - DOMAIN-SUFFIX,azureedge.net,Bitz Net
-    - DOMAIN-SUFFIX,azurewebsites.net,Bitz Net
-    - DOMAIN-SUFFIX,bing.com,Bitz Net
-    - DOMAIN-SUFFIX,bintray.com,Bitz Net
-    - DOMAIN-SUFFIX,bit.com,Bitz Net
-    - DOMAIN-SUFFIX,bit.ly,Bitz Net
-    - DOMAIN-SUFFIX,bitbucket.org,Bitz Net
-    - DOMAIN-SUFFIX,bjango.com,Bitz Net
-    - DOMAIN-SUFFIX,bkrtx.com,Bitz Net
-    - DOMAIN-SUFFIX,blog.com,Bitz Net
-    - DOMAIN-SUFFIX,blogcdn.com,Bitz Net
-    - DOMAIN-SUFFIX,blogger.com,Bitz Net
-    - DOMAIN-SUFFIX,blogsmithmedia.com,Bitz Net
-    - DOMAIN-SUFFIX,blogspot.com,Bitz Net
-    - DOMAIN-SUFFIX,blogspot.hk,Bitz Net
-    - DOMAIN-SUFFIX,bloomberg.com,Bitz Net
-    - DOMAIN-SUFFIX,box.com,Bitz Net
-    - DOMAIN-SUFFIX,box.net,Bitz Net
-    - DOMAIN-SUFFIX,cachefly.net,Bitz Net
-    - DOMAIN-SUFFIX,chromium.org,Bitz Net
-    - DOMAIN-SUFFIX,cl.ly,Bitz Net
-    - DOMAIN-SUFFIX,cloudflare.com,Bitz Net
-    - DOMAIN-SUFFIX,cloudfront.net,Bitz Net
-    - DOMAIN-SUFFIX,cloudmagic.com,Bitz Net
-    - DOMAIN-SUFFIX,cmail19.com,Bitz Net
-    - DOMAIN-SUFFIX,cnet.com,Bitz Net
-    - DOMAIN-SUFFIX,cocoapods.org,Bitz Net
-    - DOMAIN-SUFFIX,comodoca.com,Bitz Net
-    - DOMAIN-SUFFIX,crashlytics.com,Bitz Net
-    - DOMAIN-SUFFIX,culturedcode.com,Bitz Net
-    - DOMAIN-SUFFIX,d.pr,Bitz Net
-    - DOMAIN-SUFFIX,danilo.to,Bitz Net
-    - DOMAIN-SUFFIX,dayone.me,Bitz Net
-    - DOMAIN-SUFFIX,db.tt,Bitz Net
-    - DOMAIN-SUFFIX,deskconnect.com,Bitz Net
-    - DOMAIN-SUFFIX,disq.us,Bitz Net
-    - DOMAIN-SUFFIX,disqus.com,Bitz Net
-    - DOMAIN-SUFFIX,disquscdn.com,Bitz Net
-    - DOMAIN-SUFFIX,dnsimple.com,Bitz Net
-    - DOMAIN-SUFFIX,docker.com,Bitz Net
-    - DOMAIN-SUFFIX,dribbble.com,Bitz Net
-    - DOMAIN-SUFFIX,droplr.com,Bitz Net
-    - DOMAIN-SUFFIX,duckduckgo.com,Bitz Net
-    - DOMAIN-SUFFIX,dueapp.com,Bitz Net
-    - DOMAIN-SUFFIX,dytt8.net,Bitz Net
-    - DOMAIN-SUFFIX,edgecastcdn.net,Bitz Net
-    - DOMAIN-SUFFIX,edgekey.net,Bitz Net
-    - DOMAIN-SUFFIX,edgesuite.net,Bitz Net
-    - DOMAIN-SUFFIX,engadget.com,Bitz Net
-    - DOMAIN-SUFFIX,entrust.net,Bitz Net
-    - DOMAIN-SUFFIX,eurekavpt.com,Bitz Net
-    - DOMAIN-SUFFIX,evernote.com,Bitz Net
-    - DOMAIN-SUFFIX,fabric.io,Bitz Net
-    - DOMAIN-SUFFIX,fast.com,Bitz Net
-    - DOMAIN-SUFFIX,fastly.net,Bitz Net
-    - DOMAIN-SUFFIX,fc2.com,Bitz Net
-    - DOMAIN-SUFFIX,feedburner.com,Bitz Net
-    - DOMAIN-SUFFIX,feedly.com,Bitz Net
-    - DOMAIN-SUFFIX,feedsportal.com,Bitz Net
-    - DOMAIN-SUFFIX,fiftythree.com,Bitz Net
-    - DOMAIN-SUFFIX,firebaseio.com,Bitz Net
-    - DOMAIN-SUFFIX,flexibits.com,Bitz Net
-    - DOMAIN-SUFFIX,flickr.com,Bitz Net
-    - DOMAIN-SUFFIX,flipboard.com,Bitz Net
-    - DOMAIN-SUFFIX,g.co,Bitz Net
-    - DOMAIN-SUFFIX,gabia.net,Bitz Net
-    - DOMAIN-SUFFIX,geni.us,Bitz Net
-    - DOMAIN-SUFFIX,gfx.ms,Bitz Net
-    - DOMAIN-SUFFIX,ggpht.com,Bitz Net
-    - DOMAIN-SUFFIX,ghostnoteapp.com,Bitz Net
-    - DOMAIN-SUFFIX,git.io,Bitz Net
-    - DOMAIN-KEYWORD,github,Bitz Net
-    - DOMAIN-SUFFIX,globalsign.com,Bitz Net
-    - DOMAIN-SUFFIX,gmodules.com,Bitz Net
-    - DOMAIN-SUFFIX,godaddy.com,Bitz Net
-    - DOMAIN-SUFFIX,golang.org,Bitz Net
-    - DOMAIN-SUFFIX,gongm.in,Bitz Net
-    - DOMAIN-SUFFIX,goo.gl,Bitz Net
-    - DOMAIN-SUFFIX,goodreaders.com,Bitz Net
-    - DOMAIN-SUFFIX,goodreads.com,Bitz Net
-    - DOMAIN-SUFFIX,gravatar.com,Bitz Net
-    - DOMAIN-SUFFIX,gstatic.com,Bitz Net
-    - DOMAIN-SUFFIX,gvt0.com,Bitz Net
-    - DOMAIN-SUFFIX,hockeyapp.net,Bitz Net
-    - DOMAIN-SUFFIX,hotmail.com,Bitz Net
-    - DOMAIN-SUFFIX,icons8.com,Bitz Net
-    - DOMAIN-SUFFIX,ifixit.com,Bitz Net
-    - DOMAIN-SUFFIX,ift.tt,Bitz Net
-    - DOMAIN-SUFFIX,ifttt.com,Bitz Net
-    - DOMAIN-SUFFIX,iherb.com,Bitz Net
-    - DOMAIN-SUFFIX,imageshack.us,Bitz Net
-    - DOMAIN-SUFFIX,img.ly,Bitz Net
-    - DOMAIN-SUFFIX,imgur.com,Bitz Net
-    - DOMAIN-SUFFIX,imore.com,Bitz Net
-    - DOMAIN-SUFFIX,instapaper.com,Bitz Net
-    - DOMAIN-SUFFIX,ipn.li,Bitz Net
-    - DOMAIN-SUFFIX,is.gd,Bitz Net
-    - DOMAIN-SUFFIX,issuu.com,Bitz Net
-    - DOMAIN-SUFFIX,itgonglun.com,Bitz Net
-    - DOMAIN-SUFFIX,itun.es,Bitz Net
-    - DOMAIN-SUFFIX,ixquick.com,Bitz Net
-    - DOMAIN-SUFFIX,j.mp,Bitz Net
-    - DOMAIN-SUFFIX,js.revsci.net,Bitz Net
-    - DOMAIN-SUFFIX,jshint.com,Bitz Net
-    - DOMAIN-SUFFIX,jtvnw.net,Bitz Net
-    - DOMAIN-SUFFIX,justgetflux.com,Bitz Net
-    - DOMAIN-SUFFIX,kat.cr,Bitz Net
-    - DOMAIN-SUFFIX,klip.me,Bitz Net
-    - DOMAIN-SUFFIX,libsyn.com,Bitz Net
-    - DOMAIN-SUFFIX,linode.com,Bitz Net
-    - DOMAIN-SUFFIX,lithium.com,Bitz Net
-    - DOMAIN-SUFFIX,littlehj.com,Bitz Net
-    - DOMAIN-SUFFIX,live.com,Bitz Net
-    - DOMAIN-SUFFIX,live.net,Bitz Net
-    - DOMAIN-SUFFIX,livefilestore.com,Bitz Net
-    - DOMAIN-SUFFIX,llnwd.net,Bitz Net
-    - DOMAIN-SUFFIX,macid.co,Bitz Net
-    - DOMAIN-SUFFIX,macromedia.com,Bitz Net
-    - DOMAIN-SUFFIX,macrumors.com,Bitz Net
-    - DOMAIN-SUFFIX,mashable.com,Bitz Net
-    - DOMAIN-SUFFIX,mathjax.org,Bitz Net
-    - DOMAIN-SUFFIX,medium.com,Bitz Net
-    - DOMAIN-SUFFIX,mega.co.nz,Bitz Net
-    - DOMAIN-SUFFIX,mega.nz,Bitz Net
-    - DOMAIN-SUFFIX,megaupload.com,Bitz Net
-    - DOMAIN-SUFFIX,microsofttranslator.com,Bitz Net
-    - DOMAIN-SUFFIX,mindnode.com,Bitz Net
-    - DOMAIN-SUFFIX,mobile01.com,Bitz Net
-    - DOMAIN-SUFFIX,modmyi.com,Bitz Net
-    - DOMAIN-SUFFIX,msedge.net,Bitz Net
-    - DOMAIN-SUFFIX,myfontastic.com,Bitz Net
-    - DOMAIN-SUFFIX,name.com,Bitz Net
-    - DOMAIN-SUFFIX,nextmedia.com,Bitz Net
-    - DOMAIN-SUFFIX,nsstatic.net,Bitz Net
-    - DOMAIN-SUFFIX,nssurge.com,Bitz Net
-    - DOMAIN-SUFFIX,nyt.com,Bitz Net
-    - DOMAIN-SUFFIX,nytimes.com,Bitz Net
-    - DOMAIN-SUFFIX,omnigroup.com,Bitz Net
-    - DOMAIN-SUFFIX,onedrive.com,Bitz Net
-    - DOMAIN-SUFFIX,onenote.com,Bitz Net
-    - DOMAIN-SUFFIX,ooyala.com,Bitz Net
-    - DOMAIN-SUFFIX,openvpn.net,Bitz Net
-    - DOMAIN-SUFFIX,openwrt.org,Bitz Net
-    - DOMAIN-SUFFIX,orkut.com,Bitz Net
-    - DOMAIN-SUFFIX,osxdaily.com,Bitz Net
-    - DOMAIN-SUFFIX,outlook.com,Bitz Net
-    - DOMAIN-SUFFIX,ow.ly,Bitz Net
-    - DOMAIN-SUFFIX,paddleapi.com,Bitz Net
-    - DOMAIN-SUFFIX,parallels.com,Bitz Net
-    - DOMAIN-SUFFIX,parse.com,Bitz Net
-    - DOMAIN-SUFFIX,pdfexpert.com,Bitz Net
-    - DOMAIN-SUFFIX,periscope.tv,Bitz Net
-    - DOMAIN-SUFFIX,pinboard.in,Bitz Net
-    - DOMAIN-SUFFIX,pinterest.com,Bitz Net
-    - DOMAIN-SUFFIX,pixelmator.com,Bitz Net
-    - DOMAIN-SUFFIX,pixiv.net,Bitz Net
-    - DOMAIN-SUFFIX,playpcesor.com,Bitz Net
-    - DOMAIN-SUFFIX,playstation.com,Bitz Net
-    - DOMAIN-SUFFIX,playstation.com.hk,Bitz Net
-    - DOMAIN-SUFFIX,playstation.net,Bitz Net
-    - DOMAIN-SUFFIX,playstationnetwork.com,Bitz Net
-    - DOMAIN-SUFFIX,pushwoosh.com,Bitz Net
-    - DOMAIN-SUFFIX,rime.im,Bitz Net
-    - DOMAIN-SUFFIX,servebom.com,Bitz Net
-    - DOMAIN-SUFFIX,sfx.ms,Bitz Net
-    - DOMAIN-SUFFIX,shadowsocks.org,Bitz Net
-    - DOMAIN-SUFFIX,sharethis.com,Bitz Net
-    - DOMAIN-SUFFIX,shazam.com,Bitz Net
-    - DOMAIN-SUFFIX,skype.com,Bitz Net
-    - DOMAIN-SUFFIX,smartdnsBitz Net.com,Bitz Net
-    - DOMAIN-SUFFIX,smartmailcloud.com,Bitz Net
-    - DOMAIN-SUFFIX,sndcdn.com,Bitz Net
-    - DOMAIN-SUFFIX,sony.com,Bitz Net
-    - DOMAIN-SUFFIX,soundcloud.com,Bitz Net
-    - DOMAIN-SUFFIX,sourceforge.net,Bitz Net
-    - DOMAIN-SUFFIX,spotify.com,Bitz Net
-    - DOMAIN-SUFFIX,squarespace.com,Bitz Net
-    - DOMAIN-SUFFIX,sstatic.net,Bitz Net
-    - DOMAIN-SUFFIX,st.luluku.pw,Bitz Net
-    - DOMAIN-SUFFIX,stackoverflow.com,Bitz Net
-    - DOMAIN-SUFFIX,startpage.com,Bitz Net
-    - DOMAIN-SUFFIX,staticflickr.com,Bitz Net
-    - DOMAIN-SUFFIX,steamcommunity.com,Bitz Net
-    - DOMAIN-SUFFIX,symauth.com,Bitz Net
-    - DOMAIN-SUFFIX,symcb.com,Bitz Net
-    - DOMAIN-SUFFIX,symcd.com,Bitz Net
-    - DOMAIN-SUFFIX,tapbots.com,Bitz Net
-    - DOMAIN-SUFFIX,tapbots.net,Bitz Net
-    - DOMAIN-SUFFIX,tdesktop.com,Bitz Net
-    - DOMAIN-SUFFIX,techcrunch.com,Bitz Net
-    - DOMAIN-SUFFIX,techsmith.com,Bitz Net
-    - DOMAIN-SUFFIX,thepiratebay.org,Bitz Net
-    - DOMAIN-SUFFIX,theverge.com,Bitz Net
-    - DOMAIN-SUFFIX,time.com,Bitz Net
-    - DOMAIN-SUFFIX,timeinc.net,Bitz Net
-    - DOMAIN-SUFFIX,tiny.cc,Bitz Net
-    - DOMAIN-SUFFIX,tinypic.com,Bitz Net
-    - DOMAIN-SUFFIX,tmblr.co,Bitz Net
-    - DOMAIN-SUFFIX,todoist.com,Bitz Net
-    - DOMAIN-SUFFIX,trello.com,Bitz Net
-    - DOMAIN-SUFFIX,trustasiassl.com,Bitz Net
-    - DOMAIN-SUFFIX,tumblr.co,Bitz Net
-    - DOMAIN-SUFFIX,tumblr.com,Bitz Net
-    - DOMAIN-SUFFIX,tweetdeck.com,Bitz Net
-    - DOMAIN-SUFFIX,tweetmarker.net,Bitz Net
-    - DOMAIN-SUFFIX,twitch.tv,Bitz Net
-    - DOMAIN-SUFFIX,txmblr.com,Bitz Net
-    - DOMAIN-SUFFIX,typekit.net,Bitz Net
-    - DOMAIN-SUFFIX,ubertags.com,Bitz Net
-    - DOMAIN-SUFFIX,ublock.org,Bitz Net
-    - DOMAIN-SUFFIX,ubnt.com,Bitz Net
-    - DOMAIN-SUFFIX,ulyssesapp.com,Bitz Net
-    - DOMAIN-SUFFIX,urchin.com,Bitz Net
-    - DOMAIN-SUFFIX,usertrust.com,Bitz Net
-    - DOMAIN-SUFFIX,v.gd,Bitz Net
-    - DOMAIN-SUFFIX,v2ex.com,Bitz Net
-    - DOMAIN-SUFFIX,vimeo.com,Bitz Net
-    - DOMAIN-SUFFIX,vimeocdn.com,Bitz Net
-    - DOMAIN-SUFFIX,vine.co,Bitz Net
-    - DOMAIN-SUFFIX,vivaldi.com,Bitz Net
-    - DOMAIN-SUFFIX,vox-cdn.com,Bitz Net
-    - DOMAIN-SUFFIX,vsco.co,Bitz Net
-    - DOMAIN-SUFFIX,vultr.com,Bitz Net
-    - DOMAIN-SUFFIX,w.org,Bitz Net
-    - DOMAIN-SUFFIX,w3schools.com,Bitz Net
-    - DOMAIN-SUFFIX,webtype.com,Bitz Net
-    - DOMAIN-SUFFIX,wikiwand.com,Bitz Net
-    - DOMAIN-SUFFIX,wikileaks.org,Bitz Net
-    - DOMAIN-SUFFIX,wikimedia.org,Bitz Net
-    - DOMAIN-SUFFIX,wikipedia.com,Bitz Net
-    - DOMAIN-SUFFIX,wikipedia.org,Bitz Net
-    - DOMAIN-SUFFIX,windows.com,Bitz Net
-    - DOMAIN-SUFFIX,windows.net,Bitz Net
-    - DOMAIN-SUFFIX,wire.com,Bitz Net
-    - DOMAIN-SUFFIX,wordpress.com,Bitz Net
-    - DOMAIN-SUFFIX,workflowy.com,Bitz Net
-    - DOMAIN-SUFFIX,wp.com,Bitz Net
-    - DOMAIN-SUFFIX,wsj.com,Bitz Net
-    - DOMAIN-SUFFIX,wsj.net,Bitz Net
-    - DOMAIN-SUFFIX,xda-developers.com,Bitz Net
-    - DOMAIN-SUFFIX,xeeno.com,Bitz Net
-    - DOMAIN-SUFFIX,xiti.com,Bitz Net
-    - DOMAIN-SUFFIX,yahoo.com,Bitz Net
-    - DOMAIN-SUFFIX,yimg.com,Bitz Net
-    - DOMAIN-SUFFIX,ying.com,Bitz Net
-    - DOMAIN-SUFFIX,yoyo.org,Bitz Net
-    - DOMAIN-SUFFIX,ytimg.com,Bitz Net
-    - DOMAIN-SUFFIX,linkedin.com,Bitz Net
-    - DOMAIN-SUFFIX,telegra.ph,Bitz Net
-    - DOMAIN-SUFFIX,telegram.org,Bitz Net
-    - PROCESS-NAME,Telegram,Bitz Net
-    - IP-CIDR,91.108.4.0/22,Bitz Net,no-resolve
-    - IP-CIDR,91.108.8.0/21,Bitz Net,no-resolve
-    - IP-CIDR,91.108.16.0/22,Bitz Net,no-resolve
-    - IP-CIDR,91.108.56.0/22,Bitz Net,no-resolve
-    - IP-CIDR,149.154.160.0/20,Bitz Net,no-resolve
-    - IP-CIDR6,2001:67c:4e8::/48,Bitz Net,no-resolve
-    - IP-CIDR6,2001:b28:f23d::/48,Bitz Net,no-resolve
-    - IP-CIDR6,2001:b28:f23f::/48,Bitz Net,no-resolve
-    - DOMAIN,injections.adguard.org,DIRECT
-    - DOMAIN,local.adguard.org,DIRECT
-    - DOMAIN-SUFFIX,local,DIRECT
-    - IP-CIDR,127.0.0.0/8,DIRECT
-    - IP-CIDR,172.16.0.0/12,DIRECT
-    - IP-CIDR,192.168.0.0/16,DIRECT
-    - IP-CIDR,10.0.0.0/8,DIRECT
-    - IP-CIDR,17.0.0.0/8,DIRECT
-    - IP-CIDR,100.64.0.0/10,DIRECT
-    - IP-CIDR,224.0.0.0/4,DIRECT
-    - IP-CIDR6,fe80::/10,DIRECT
-    - GEOIP,CN,DIRECT
-    - MATCH,Bitz Net

+ 0 - 535
other/grassio/clash_config/index.yaml

@@ -1,535 +0,0 @@
-port: 7890
-socks-port: 7891
-allow-lan: false
-mode: Rule
-log-level: info
-external-controller: '0.0.0.0:9090'
-secret: ''
-proxies:
-    - { name: 'DE-Detour 01 AEAD', type: vmess, server: de-detour-01.grabgo.pro, port: 15801, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'DE-Detour 02 AEAD', type: vmess, server: de-detour-02.grabgo.pro, port: 15802, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'DE-Detour-03 AEAD', type: vmess, server: de-detour-03.grabgo.pro, port: 15803, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'HKT-Detour 01 AEAD', type: vmess, server: hkt-detour-01.grabgo.pro, port: 15101, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'HKT-Detour 02 AEAD', type: vmess, server: hkt-detour-02.grabgo.pro, port: 15102, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'HKT-Detour 05 AEAD', type: vmess, server: hkt-detour-05.grabgo.pro, port: 15105, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'HKT-Detour 06 AEAD', type: vmess, server: hkt-detour-06.grabgo.pro, port: 15106, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'HKT-Detour 09 AEAD', type: vmess, server: hkt-detour-09.grabgo.pro, port: 15109, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'HKT-Detour 10 AEAD', type: vmess, server: hkt-detour-10.grabgo.pro, port: 15110, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'HKT-Detour 11 AEAD', type: vmess, server: hkt-detour-11.grabgo.pro, port: 15111, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'HKT-Detour 12 AEAD', type: vmess, server: hkt-detour-12.grabgo.pro, port: 15112, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'HKT-Detour 13 AEAD', type: vmess, server: hkt-detour-13.grabgo.pro, port: 15113, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'HKT-Detour 14 AEAD', type: vmess, server: hkt-detour-14.grabgo.pro, port: 15114, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'HKT-Detour 17 AEAD', type: vmess, server: hkt-detour-17.grabgo.pro, port: 15117, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'HKT-Detour 18 AEAD', type: vmess, server: hkt-detour-18.grabgo.pro, port: 15118, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'HKT-Detour 19 AEAD', type: vmess, server: hkt-detour-19.grabgo.pro, port: 15119, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'HKT-Detour 20 AEAD', type: vmess, server: hkt-detour-20.grabgo.pro, port: 15120, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'HKT-Detour 21 AEAD', type: vmess, server: hkt-detour-21.grabgo.pro, port: 15131, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'HKT-Detour 23 AEAD', type: vmess, server: hkt-detour-23.grabgo.pro, port: 15133, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'JP-Detour 01 AEAD', type: vmess, server: jp-01.grabgo.pro, port: 15601, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'JP-Detour 02 AEAD', type: vmess, server: jp-02.grabgo.pro, port: 15602, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'JP-Detour 03 AEAD', type: vmess, server: jp-03.grabgo.pro, port: 15603, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'JP-Detour 04 AEAD', type: vmess, server: jp-04.grabgo.pro, port: 15604, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'JP-Detour 05 AEAD', type: vmess, server: jp-05.grabgo.pro, port: 15605, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'JP-Detour 06 AEAD', type: vmess, server: jp-06.grabgo.pro, port: 15606, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'LA-Detour 02 AEAD', type: vmess, server: la-detour-02.grabgo.pro, port: 15502, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'LA-Detour 03 AEAD', type: vmess, server: la-detour-03.grabgo.pro, port: 15503, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'LA-Detour 05 AEAD', type: vmess, server: la-detour-05.grabgo.pro, port: 15505, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'LA-Detour 07 AEAD', type: vmess, server: la-detour-07.grabgo.pro, port: 15507, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'LA-Detour 09 AEAD', type: vmess, server: la-detour-09.grabgo.pro, port: 15509, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'LA-Detour 10 AEAD', type: vmess, server: la-detour-10.grabgo.pro, port: 15510, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'Oz-Detour 01 AEAD', type: vmess, server: oz-detour-01.grabgo.pro, port: 15811, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'Oz-Detour 02 AEAD', type: vmess, server: oz-detour-02.grabgo.pro, port: 15812, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'SG-Detour 01 AEAD', type: vmess, server: sg-detour-01.grabgo.pro, port: 15301, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'SG-Detour 02 AEAD', type: vmess, server: sg-detour-02.grabgo.pro, port: 15302, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'SG-Detour 03 AEAD', type: vmess, server: sg-detour-03.grabgo.pro, port: 15303, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 01 AEAD', type: vmess, server: tw-detour-01.grabgo.pro, port: 15201, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 02 AEAD', type: vmess, server: tw-detour-02.grabgo.pro, port: 15202, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 03 AEAD', type: vmess, server: tw-detour-03.grabgo.pro, port: 15203, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 05 AEAD', type: vmess, server: tw-detour-05.grabgo.pro, port: 15205, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 06 AEAD', type: vmess, server: tw-detour-06.grabgo.pro, port: 15206, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 08 AEAD', type: vmess, server: tw-detour-08.grabgo.pro, port: 15208, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 09 AEAD', type: vmess, server: tw-detour-09.grabgo.pro, port: 15209, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 10 AEAD', type: vmess, server: tw-detour-10.grabgo.pro, port: 15210, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 12 AEAD', type: vmess, server: tw-detour-12.grabgo.pro, port: 15212, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 13 AEAD', type: vmess, server: tw-detour-13.grabgo.pro, port: 15213, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 15 AEAD', type: vmess, server: tw-detour-15.grabgo.pro, port: 15215, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 16 AEAD', type: vmess, server: tw-detour-16.grabgo.pro, port: 15216, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 18 AEAD', type: vmess, server: tw-detour-18.grabgo.pro, port: 15218, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 19 AEAD', type: vmess, server: tw-detour-19.grabgo.pro, port: 15219, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 20 AEAD', type: vmess, server: tw-detour-20.grabgo.pro, port: 15220, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 22 AEAD', type: vmess, server: tw-detour-22.grabgo.pro, port: 15222, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'TW-Detour 23 AEAD', type: vmess, server: tw-detour-23.grabgo.pro, port: 15223, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'UK Detour-01 AEAD', type: vmess, server: uk-detour-01.grabgo.pro, port: 15711, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'UK Detour-02 AEAD', type: vmess, server: uk-detour-02.grabgo.pro, port: 15712, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'UK Detour-03 AEAD', type: vmess, server: uk-detour-03.grabgo.pro, port: 15713, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'UK Detour-04 AEAD', type: vmess, server: uk-detour-04.grabgo.pro, port: 15714, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'UK Detour-05 AEAD', type: vmess, server: uk-detour-05.grabgo.pro, port: 15715, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-    - { name: 'UK Detour-06 AEAD', type: vmess, server: uk-detour-06.grabgo.pro, port: 15716, uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6, alterId: 0, cipher: auto, ws-path: / }
-proxy-groups:
-    - { name: auto, type: url-test, proxies: ['DE-Detour 01 AEAD', 'DE-Detour 02 AEAD', 'DE-Detour-03 AEAD', 'HKT-Detour 01 AEAD', 'HKT-Detour 02 AEAD', 'HKT-Detour 05 AEAD', 'HKT-Detour 06 AEAD', 'HKT-Detour 09 AEAD', 'HKT-Detour 10 AEAD', 'HKT-Detour 11 AEAD', 'HKT-Detour 12 AEAD', 'HKT-Detour 13 AEAD', 'HKT-Detour 14 AEAD', 'HKT-Detour 17 AEAD', 'HKT-Detour 18 AEAD', 'HKT-Detour 19 AEAD', 'HKT-Detour 20 AEAD', 'HKT-Detour 21 AEAD', 'HKT-Detour 23 AEAD', 'JP-Detour 01 AEAD', 'JP-Detour 02 AEAD', 'JP-Detour 03 AEAD', 'JP-Detour 04 AEAD', 'JP-Detour 05 AEAD', 'JP-Detour 06 AEAD', 'LA-Detour 02 AEAD', 'LA-Detour 03 AEAD', 'LA-Detour 05 AEAD', 'LA-Detour 07 AEAD', 'LA-Detour 09 AEAD', 'LA-Detour 10 AEAD', 'Oz-Detour 01 AEAD', 'Oz-Detour 02 AEAD', 'SG-Detour 01 AEAD', 'SG-Detour 02 AEAD', 'SG-Detour 03 AEAD', 'TW-Detour 01 AEAD', 'TW-Detour 02 AEAD', 'TW-Detour 03 AEAD', 'TW-Detour 05 AEAD', 'TW-Detour 06 AEAD', 'TW-Detour 08 AEAD', 'TW-Detour 09 AEAD', 'TW-Detour 10 AEAD', 'TW-Detour 12 AEAD', 'TW-Detour 13 AEAD', 'TW-Detour 15 AEAD', 'TW-Detour 16 AEAD', 'TW-Detour 18 AEAD', 'TW-Detour 19 AEAD', 'TW-Detour 20 AEAD', 'TW-Detour 22 AEAD', 'TW-Detour 23 AEAD', 'UK Detour-01 AEAD', 'UK Detour-02 AEAD', 'UK Detour-03 AEAD', 'UK Detour-04 AEAD', 'UK Detour-05 AEAD', 'UK Detour-06 AEAD'], url: 'https://www.bing.com', interval: 300 }
-    - { name: fallback-auto, type: fallback, proxies: ['DE-Detour 01 AEAD', 'DE-Detour 02 AEAD', 'DE-Detour-03 AEAD', 'HKT-Detour 01 AEAD', 'HKT-Detour 02 AEAD', 'HKT-Detour 05 AEAD', 'HKT-Detour 06 AEAD', 'HKT-Detour 09 AEAD', 'HKT-Detour 10 AEAD', 'HKT-Detour 11 AEAD', 'HKT-Detour 12 AEAD', 'HKT-Detour 13 AEAD', 'HKT-Detour 14 AEAD', 'HKT-Detour 17 AEAD', 'HKT-Detour 18 AEAD', 'HKT-Detour 19 AEAD', 'HKT-Detour 20 AEAD', 'HKT-Detour 21 AEAD', 'HKT-Detour 23 AEAD', 'JP-Detour 01 AEAD', 'JP-Detour 02 AEAD', 'JP-Detour 03 AEAD', 'JP-Detour 04 AEAD', 'JP-Detour 05 AEAD', 'JP-Detour 06 AEAD', 'LA-Detour 02 AEAD', 'LA-Detour 03 AEAD', 'LA-Detour 05 AEAD', 'LA-Detour 07 AEAD', 'LA-Detour 09 AEAD', 'LA-Detour 10 AEAD', 'Oz-Detour 01 AEAD', 'Oz-Detour 02 AEAD', 'SG-Detour 01 AEAD', 'SG-Detour 02 AEAD', 'SG-Detour 03 AEAD', 'TW-Detour 01 AEAD', 'TW-Detour 02 AEAD', 'TW-Detour 03 AEAD', 'TW-Detour 05 AEAD', 'TW-Detour 06 AEAD', 'TW-Detour 08 AEAD', 'TW-Detour 09 AEAD', 'TW-Detour 10 AEAD', 'TW-Detour 12 AEAD', 'TW-Detour 13 AEAD', 'TW-Detour 15 AEAD', 'TW-Detour 16 AEAD', 'TW-Detour 18 AEAD', 'TW-Detour 19 AEAD', 'TW-Detour 20 AEAD', 'TW-Detour 22 AEAD', 'TW-Detour 23 AEAD', 'UK Detour-01 AEAD', 'UK Detour-02 AEAD', 'UK Detour-03 AEAD', 'UK Detour-04 AEAD', 'UK Detour-05 AEAD', 'UK Detour-06 AEAD'], url: 'https://www.bing.com', interval: 300 }
-    - { name: select, type: select, proxies: ['DE-Detour 01 AEAD', 'DE-Detour 02 AEAD', 'DE-Detour-03 AEAD', 'HKT-Detour 01 AEAD', 'HKT-Detour 02 AEAD', 'HKT-Detour 05 AEAD', 'HKT-Detour 06 AEAD', 'HKT-Detour 09 AEAD', 'HKT-Detour 10 AEAD', 'HKT-Detour 11 AEAD', 'HKT-Detour 12 AEAD', 'HKT-Detour 13 AEAD', 'HKT-Detour 14 AEAD', 'HKT-Detour 17 AEAD', 'HKT-Detour 18 AEAD', 'HKT-Detour 19 AEAD', 'HKT-Detour 20 AEAD', 'HKT-Detour 21 AEAD', 'HKT-Detour 23 AEAD', 'JP-Detour 01 AEAD', 'JP-Detour 02 AEAD', 'JP-Detour 03 AEAD', 'JP-Detour 04 AEAD', 'JP-Detour 05 AEAD', 'JP-Detour 06 AEAD', 'LA-Detour 02 AEAD', 'LA-Detour 03 AEAD', 'LA-Detour 05 AEAD', 'LA-Detour 07 AEAD', 'LA-Detour 09 AEAD', 'LA-Detour 10 AEAD', 'Oz-Detour 01 AEAD', 'Oz-Detour 02 AEAD', 'SG-Detour 01 AEAD', 'SG-Detour 02 AEAD', 'SG-Detour 03 AEAD', 'TW-Detour 01 AEAD', 'TW-Detour 02 AEAD', 'TW-Detour 03 AEAD', 'TW-Detour 05 AEAD', 'TW-Detour 06 AEAD', 'TW-Detour 08 AEAD', 'TW-Detour 09 AEAD', 'TW-Detour 10 AEAD', 'TW-Detour 12 AEAD', 'TW-Detour 13 AEAD', 'TW-Detour 15 AEAD', 'TW-Detour 16 AEAD', 'TW-Detour 18 AEAD', 'TW-Detour 19 AEAD', 'TW-Detour 20 AEAD', 'TW-Detour 22 AEAD', 'TW-Detour 23 AEAD', 'UK Detour-01 AEAD', 'UK Detour-02 AEAD', 'UK Detour-03 AEAD', 'UK Detour-04 AEAD', 'UK Detour-05 AEAD', 'UK Detour-06 AEAD'] }
-rules:
-    - 'DOMAIN-SUFFIX,apps.apple.com,select'
-    - 'DOMAIN-SUFFIX,itunes.apple.com,select'
-    - 'DOMAIN-SUFFIX,blobstore.apple.com,select'
-    - 'DOMAIN-SUFFIX,music.apple.com,DIRECT'
-    - 'DOMAIN-SUFFIX,icloud.com,DIRECT'
-    - 'DOMAIN-SUFFIX,icloud-content.com,DIRECT'
-    - 'DOMAIN-SUFFIX,me.com,DIRECT'
-    - 'DOMAIN-SUFFIX,mzstatic.com,DIRECT'
-    - 'DOMAIN-SUFFIX,akadns.net,DIRECT'
-    - 'DOMAIN-SUFFIX,aaplimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,cdn-apple.com,DIRECT'
-    - 'DOMAIN-SUFFIX,apple.com,DIRECT'
-    - 'DOMAIN-SUFFIX,apple-cloudkit.com,DIRECT'
-    - 'DOMAIN-SUFFIX,cn,DIRECT'
-    - 'DOMAIN-KEYWORD,-cn,DIRECT'
-    - 'DOMAIN-SUFFIX,126.com,DIRECT'
-    - 'DOMAIN-SUFFIX,126.net,DIRECT'
-    - 'DOMAIN-SUFFIX,127.net,DIRECT'
-    - 'DOMAIN-SUFFIX,163.com,DIRECT'
-    - 'DOMAIN-SUFFIX,360buyimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,36kr.com,DIRECT'
-    - 'DOMAIN-SUFFIX,acfun.tv,DIRECT'
-    - 'DOMAIN-SUFFIX,air-matters.com,DIRECT'
-    - 'DOMAIN-SUFFIX,aixifan.com,DIRECT'
-    - 'DOMAIN-SUFFIX,akamaized.net,DIRECT'
-    - 'DOMAIN-KEYWORD,alicdn,DIRECT'
-    - 'DOMAIN-KEYWORD,alipay,DIRECT'
-    - 'DOMAIN-KEYWORD,taobao,DIRECT'
-    - 'DOMAIN-SUFFIX,amap.com,DIRECT'
-    - 'DOMAIN-SUFFIX,autonavi.com,DIRECT'
-    - 'DOMAIN-KEYWORD,baidu,DIRECT'
-    - 'DOMAIN-SUFFIX,bdimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,bdstatic.com,DIRECT'
-    - 'DOMAIN-SUFFIX,bilibili.com,DIRECT'
-    - 'DOMAIN-SUFFIX,caiyunapp.com,DIRECT'
-    - 'DOMAIN-SUFFIX,clouddn.com,DIRECT'
-    - 'DOMAIN-SUFFIX,cnbeta.com,DIRECT'
-    - 'DOMAIN-SUFFIX,cnbetacdn.com,DIRECT'
-    - 'DOMAIN-SUFFIX,cootekservice.com,DIRECT'
-    - 'DOMAIN-SUFFIX,csdn.net,DIRECT'
-    - 'DOMAIN-SUFFIX,ctrip.com,DIRECT'
-    - 'DOMAIN-SUFFIX,dgtle.com,DIRECT'
-    - 'DOMAIN-SUFFIX,dianping.com,DIRECT'
-    - 'DOMAIN-SUFFIX,douban.com,DIRECT'
-    - 'DOMAIN-SUFFIX,doubanio.com,DIRECT'
-    - 'DOMAIN-SUFFIX,duokan.com,DIRECT'
-    - 'DOMAIN-SUFFIX,easou.com,DIRECT'
-    - 'DOMAIN-SUFFIX,ele.me,DIRECT'
-    - 'DOMAIN-SUFFIX,feng.com,DIRECT'
-    - 'DOMAIN-SUFFIX,fir.im,DIRECT'
-    - 'DOMAIN-SUFFIX,frdic.com,DIRECT'
-    - 'DOMAIN-SUFFIX,g-cores.com,DIRECT'
-    - 'DOMAIN-SUFFIX,godic.net,DIRECT'
-    - 'DOMAIN-SUFFIX,gtimg.com,DIRECT'
-    - 'DOMAIN,cdn.hockeyapp.net,DIRECT'
-    - 'DOMAIN-SUFFIX,hongxiu.com,DIRECT'
-    - 'DOMAIN-SUFFIX,hxcdn.net,DIRECT'
-    - 'DOMAIN-SUFFIX,iciba.com,DIRECT'
-    - 'DOMAIN-SUFFIX,ifeng.com,DIRECT'
-    - 'DOMAIN-SUFFIX,ifengimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,ipip.net,DIRECT'
-    - 'DOMAIN-SUFFIX,iqiyi.com,DIRECT'
-    - 'DOMAIN-SUFFIX,jd.com,DIRECT'
-    - 'DOMAIN-SUFFIX,jianshu.com,DIRECT'
-    - 'DOMAIN-SUFFIX,knewone.com,DIRECT'
-    - 'DOMAIN-SUFFIX,le.com,DIRECT'
-    - 'DOMAIN-SUFFIX,lecloud.com,DIRECT'
-    - 'DOMAIN-SUFFIX,lemicp.com,DIRECT'
-    - 'DOMAIN-SUFFIX,licdn.com,DIRECT'
-    - 'DOMAIN-SUFFIX,linkedin.com,DIRECT'
-    - 'DOMAIN-SUFFIX,luoo.net,DIRECT'
-    - 'DOMAIN-SUFFIX,meituan.com,DIRECT'
-    - 'DOMAIN-SUFFIX,meituan.net,DIRECT'
-    - 'DOMAIN-SUFFIX,mi.com,DIRECT'
-    - 'DOMAIN-SUFFIX,miaopai.com,DIRECT'
-    - 'DOMAIN-SUFFIX,microsoft.com,DIRECT'
-    - 'DOMAIN-SUFFIX,microsoftonline.com,DIRECT'
-    - 'DOMAIN-SUFFIX,miui.com,DIRECT'
-    - 'DOMAIN-SUFFIX,miwifi.com,DIRECT'
-    - 'DOMAIN-SUFFIX,mob.com,DIRECT'
-    - 'DOMAIN-SUFFIX,netease.com,DIRECT'
-    - 'DOMAIN-SUFFIX,office.com,DIRECT'
-    - 'DOMAIN-SUFFIX,office365.com,DIRECT'
-    - 'DOMAIN-KEYWORD,officecdn,DIRECT'
-    - 'DOMAIN-SUFFIX,oschina.net,DIRECT'
-    - 'DOMAIN-SUFFIX,ppsimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,pstatp.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qcloud.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qdaily.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qdmm.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qhimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qhres.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qidian.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qihucdn.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qiniu.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qiniucdn.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qiyipic.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qq.com,DIRECT'
-    - 'DOMAIN-SUFFIX,qqurl.com,DIRECT'
-    - 'DOMAIN-SUFFIX,rarbg.to,DIRECT'
-    - 'DOMAIN-SUFFIX,ruguoapp.com,DIRECT'
-    - 'DOMAIN-SUFFIX,segmentfault.com,DIRECT'
-    - 'DOMAIN-SUFFIX,sinaapp.com,DIRECT'
-    - 'DOMAIN-SUFFIX,smzdm.com,DIRECT'
-    - 'DOMAIN-SUFFIX,snapdrop.net,DIRECT'
-    - 'DOMAIN-SUFFIX,sogou.com,DIRECT'
-    - 'DOMAIN-SUFFIX,sogoucdn.com,DIRECT'
-    - 'DOMAIN-SUFFIX,sohu.com,DIRECT'
-    - 'DOMAIN-SUFFIX,soku.com,DIRECT'
-    - 'DOMAIN-SUFFIX,speedtest.net,DIRECT'
-    - 'DOMAIN-SUFFIX,sspai.com,DIRECT'
-    - 'DOMAIN-SUFFIX,suning.com,DIRECT'
-    - 'DOMAIN-SUFFIX,taobao.com,DIRECT'
-    - 'DOMAIN-SUFFIX,tencent.com,DIRECT'
-    - 'DOMAIN-SUFFIX,tenpay.com,DIRECT'
-    - 'DOMAIN-SUFFIX,tianyancha.com,DIRECT'
-    - 'DOMAIN-SUFFIX,tmall.com,DIRECT'
-    - 'DOMAIN-SUFFIX,tudou.com,DIRECT'
-    - 'DOMAIN-SUFFIX,umetrip.com,DIRECT'
-    - 'DOMAIN-SUFFIX,upaiyun.com,DIRECT'
-    - 'DOMAIN-SUFFIX,upyun.com,DIRECT'
-    - 'DOMAIN-SUFFIX,veryzhun.com,DIRECT'
-    - 'DOMAIN-SUFFIX,weather.com,DIRECT'
-    - 'DOMAIN-SUFFIX,weibo.com,DIRECT'
-    - 'DOMAIN-SUFFIX,xiami.com,DIRECT'
-    - 'DOMAIN-SUFFIX,xiami.net,DIRECT'
-    - 'DOMAIN-SUFFIX,xiaomicp.com,DIRECT'
-    - 'DOMAIN-SUFFIX,ximalaya.com,DIRECT'
-    - 'DOMAIN-SUFFIX,xmcdn.com,DIRECT'
-    - 'DOMAIN-SUFFIX,xunlei.com,DIRECT'
-    - 'DOMAIN-SUFFIX,yhd.com,DIRECT'
-    - 'DOMAIN-SUFFIX,yihaodianimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,yinxiang.com,DIRECT'
-    - 'DOMAIN-SUFFIX,ykimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,youdao.com,DIRECT'
-    - 'DOMAIN-SUFFIX,youku.com,DIRECT'
-    - 'DOMAIN-SUFFIX,zealer.com,DIRECT'
-    - 'DOMAIN-SUFFIX,zhihu.com,DIRECT'
-    - 'DOMAIN-SUFFIX,zhimg.com,DIRECT'
-    - 'DOMAIN-SUFFIX,zimuzu.tv,DIRECT'
-    - 'DOMAIN-SUFFIX,zoho.com,DIRECT'
-    - 'DOMAIN-KEYWORD,amazon,select'
-    - 'DOMAIN-KEYWORD,google,select'
-    - 'DOMAIN-KEYWORD,gmail,select'
-    - 'DOMAIN-KEYWORD,youtube,select'
-    - 'DOMAIN-KEYWORD,facebook,select'
-    - 'DOMAIN-SUFFIX,fb.me,select'
-    - 'DOMAIN-SUFFIX,fbcdn.net,select'
-    - 'DOMAIN-KEYWORD,twitter,select'
-    - 'DOMAIN-KEYWORD,instagram,select'
-    - 'DOMAIN-KEYWORD,dropbox,select'
-    - 'DOMAIN-SUFFIX,twimg.com,select'
-    - 'DOMAIN-KEYWORD,blogspot,select'
-    - 'DOMAIN-SUFFIX,youtu.be,select'
-    - 'DOMAIN-KEYWORD,whatsapp,select'
-    - 'DOMAIN-KEYWORD,admarvel,REJECT'
-    - 'DOMAIN-KEYWORD,admaster,REJECT'
-    - 'DOMAIN-KEYWORD,adsage,REJECT'
-    - 'DOMAIN-KEYWORD,adsmogo,REJECT'
-    - 'DOMAIN-KEYWORD,adsrvmedia,REJECT'
-    - 'DOMAIN-KEYWORD,adwords,REJECT'
-    - 'DOMAIN-KEYWORD,adservice,REJECT'
-    - 'DOMAIN-KEYWORD,domob,REJECT'
-    - 'DOMAIN-KEYWORD,duomeng,REJECT'
-    - 'DOMAIN-KEYWORD,dwtrack,REJECT'
-    - 'DOMAIN-KEYWORD,guanggao,REJECT'
-    - 'DOMAIN-KEYWORD,lianmeng,REJECT'
-    - 'DOMAIN-SUFFIX,mmstat.com,REJECT'
-    - 'DOMAIN-KEYWORD,omgmta,REJECT'
-    - 'DOMAIN-KEYWORD,openx,REJECT'
-    - 'DOMAIN-KEYWORD,partnerad,REJECT'
-    - 'DOMAIN-KEYWORD,pingfore,REJECT'
-    - 'DOMAIN-KEYWORD,supersonicads,REJECT'
-    - 'DOMAIN-KEYWORD,tracking,REJECT'
-    - 'DOMAIN-KEYWORD,uedas,REJECT'
-    - 'DOMAIN-KEYWORD,umeng,REJECT'
-    - 'DOMAIN-KEYWORD,usage,REJECT'
-    - 'DOMAIN-KEYWORD,wlmonitor,REJECT'
-    - 'DOMAIN-KEYWORD,zjtoolbar,REJECT'
-    - 'DOMAIN-SUFFIX,9to5mac.com,select'
-    - 'DOMAIN-SUFFIX,abpchina.org,select'
-    - 'DOMAIN-SUFFIX,adblockplus.org,select'
-    - 'DOMAIN-SUFFIX,adobe.com,select'
-    - 'DOMAIN-SUFFIX,alfredapp.com,select'
-    - 'DOMAIN-SUFFIX,amplitude.com,select'
-    - 'DOMAIN-SUFFIX,ampproject.org,select'
-    - 'DOMAIN-SUFFIX,android.com,select'
-    - 'DOMAIN-SUFFIX,angularjs.org,select'
-    - 'DOMAIN-SUFFIX,aolcdn.com,select'
-    - 'DOMAIN-SUFFIX,apkpure.com,select'
-    - 'DOMAIN-SUFFIX,appledaily.com,select'
-    - 'DOMAIN-SUFFIX,appshopper.com,select'
-    - 'DOMAIN-SUFFIX,appspot.com,select'
-    - 'DOMAIN-SUFFIX,arcgis.com,select'
-    - 'DOMAIN-SUFFIX,archive.org,select'
-    - 'DOMAIN-SUFFIX,armorgames.com,select'
-    - 'DOMAIN-SUFFIX,aspnetcdn.com,select'
-    - 'DOMAIN-SUFFIX,att.com,select'
-    - 'DOMAIN-SUFFIX,awsstatic.com,select'
-    - 'DOMAIN-SUFFIX,azureedge.net,select'
-    - 'DOMAIN-SUFFIX,azurewebsites.net,select'
-    - 'DOMAIN-SUFFIX,bing.com,select'
-    - 'DOMAIN-SUFFIX,bintray.com,select'
-    - 'DOMAIN-SUFFIX,bit.com,select'
-    - 'DOMAIN-SUFFIX,bit.ly,select'
-    - 'DOMAIN-SUFFIX,bitbucket.org,select'
-    - 'DOMAIN-SUFFIX,bjango.com,select'
-    - 'DOMAIN-SUFFIX,bkrtx.com,select'
-    - 'DOMAIN-SUFFIX,blog.com,select'
-    - 'DOMAIN-SUFFIX,blogcdn.com,select'
-    - 'DOMAIN-SUFFIX,blogger.com,select'
-    - 'DOMAIN-SUFFIX,blogsmithmedia.com,select'
-    - 'DOMAIN-SUFFIX,blogspot.com,select'
-    - 'DOMAIN-SUFFIX,blogspot.hk,select'
-    - 'DOMAIN-SUFFIX,bloomberg.com,select'
-    - 'DOMAIN-SUFFIX,box.com,select'
-    - 'DOMAIN-SUFFIX,box.net,select'
-    - 'DOMAIN-SUFFIX,cachefly.net,select'
-    - 'DOMAIN-SUFFIX,chromium.org,select'
-    - 'DOMAIN-SUFFIX,cl.ly,select'
-    - 'DOMAIN-SUFFIX,cloudflare.com,select'
-    - 'DOMAIN-SUFFIX,cloudfront.net,select'
-    - 'DOMAIN-SUFFIX,cloudmagic.com,select'
-    - 'DOMAIN-SUFFIX,cmail19.com,select'
-    - 'DOMAIN-SUFFIX,cnet.com,select'
-    - 'DOMAIN-SUFFIX,cocoapods.org,select'
-    - 'DOMAIN-SUFFIX,comodoca.com,select'
-    - 'DOMAIN-SUFFIX,crashlytics.com,select'
-    - 'DOMAIN-SUFFIX,culturedcode.com,select'
-    - 'DOMAIN-SUFFIX,d.pr,select'
-    - 'DOMAIN-SUFFIX,danilo.to,select'
-    - 'DOMAIN-SUFFIX,dayone.me,select'
-    - 'DOMAIN-SUFFIX,db.tt,select'
-    - 'DOMAIN-SUFFIX,deskconnect.com,select'
-    - 'DOMAIN-SUFFIX,disq.us,select'
-    - 'DOMAIN-SUFFIX,disqus.com,select'
-    - 'DOMAIN-SUFFIX,disquscdn.com,select'
-    - 'DOMAIN-SUFFIX,dnsimple.com,select'
-    - 'DOMAIN-SUFFIX,docker.com,select'
-    - 'DOMAIN-SUFFIX,dribbble.com,select'
-    - 'DOMAIN-SUFFIX,droplr.com,select'
-    - 'DOMAIN-SUFFIX,duckduckgo.com,select'
-    - 'DOMAIN-SUFFIX,dueapp.com,select'
-    - 'DOMAIN-SUFFIX,dytt8.net,select'
-    - 'DOMAIN-SUFFIX,edgecastcdn.net,select'
-    - 'DOMAIN-SUFFIX,edgekey.net,select'
-    - 'DOMAIN-SUFFIX,edgesuite.net,select'
-    - 'DOMAIN-SUFFIX,engadget.com,select'
-    - 'DOMAIN-SUFFIX,entrust.net,select'
-    - 'DOMAIN-SUFFIX,eurekavpt.com,select'
-    - 'DOMAIN-SUFFIX,evernote.com,select'
-    - 'DOMAIN-SUFFIX,fabric.io,select'
-    - 'DOMAIN-SUFFIX,fast.com,select'
-    - 'DOMAIN-SUFFIX,fastly.net,select'
-    - 'DOMAIN-SUFFIX,fc2.com,select'
-    - 'DOMAIN-SUFFIX,feedburner.com,select'
-    - 'DOMAIN-SUFFIX,feedly.com,select'
-    - 'DOMAIN-SUFFIX,feedsportal.com,select'
-    - 'DOMAIN-SUFFIX,fiftythree.com,select'
-    - 'DOMAIN-SUFFIX,firebaseio.com,select'
-    - 'DOMAIN-SUFFIX,flexibits.com,select'
-    - 'DOMAIN-SUFFIX,flickr.com,select'
-    - 'DOMAIN-SUFFIX,flipboard.com,select'
-    - 'DOMAIN-SUFFIX,g.co,select'
-    - 'DOMAIN-SUFFIX,gabia.net,select'
-    - 'DOMAIN-SUFFIX,geni.us,select'
-    - 'DOMAIN-SUFFIX,gfx.ms,select'
-    - 'DOMAIN-SUFFIX,ggpht.com,select'
-    - 'DOMAIN-SUFFIX,ghostnoteapp.com,select'
-    - 'DOMAIN-SUFFIX,git.io,select'
-    - 'DOMAIN-KEYWORD,github,select'
-    - 'DOMAIN-SUFFIX,globalsign.com,select'
-    - 'DOMAIN-SUFFIX,gmodules.com,select'
-    - 'DOMAIN-SUFFIX,godaddy.com,select'
-    - 'DOMAIN-SUFFIX,golang.org,select'
-    - 'DOMAIN-SUFFIX,gongm.in,select'
-    - 'DOMAIN-SUFFIX,goo.gl,select'
-    - 'DOMAIN-SUFFIX,goodreaders.com,select'
-    - 'DOMAIN-SUFFIX,goodreads.com,select'
-    - 'DOMAIN-SUFFIX,gravatar.com,select'
-    - 'DOMAIN-SUFFIX,gstatic.com,select'
-    - 'DOMAIN-SUFFIX,gvt0.com,select'
-    - 'DOMAIN-SUFFIX,hockeyapp.net,select'
-    - 'DOMAIN-SUFFIX,hotmail.com,select'
-    - 'DOMAIN-SUFFIX,icons8.com,select'
-    - 'DOMAIN-SUFFIX,ifixit.com,select'
-    - 'DOMAIN-SUFFIX,ift.tt,select'
-    - 'DOMAIN-SUFFIX,ifttt.com,select'
-    - 'DOMAIN-SUFFIX,iherb.com,select'
-    - 'DOMAIN-SUFFIX,imageshack.us,select'
-    - 'DOMAIN-SUFFIX,img.ly,select'
-    - 'DOMAIN-SUFFIX,imgur.com,select'
-    - 'DOMAIN-SUFFIX,imore.com,select'
-    - 'DOMAIN-SUFFIX,instapaper.com,select'
-    - 'DOMAIN-SUFFIX,ipn.li,select'
-    - 'DOMAIN-SUFFIX,is.gd,select'
-    - 'DOMAIN-SUFFIX,issuu.com,select'
-    - 'DOMAIN-SUFFIX,itgonglun.com,select'
-    - 'DOMAIN-SUFFIX,itun.es,select'
-    - 'DOMAIN-SUFFIX,ixquick.com,select'
-    - 'DOMAIN-SUFFIX,j.mp,select'
-    - 'DOMAIN-SUFFIX,js.revsci.net,select'
-    - 'DOMAIN-SUFFIX,jshint.com,select'
-    - 'DOMAIN-SUFFIX,jtvnw.net,select'
-    - 'DOMAIN-SUFFIX,justgetflux.com,select'
-    - 'DOMAIN-SUFFIX,kat.cr,select'
-    - 'DOMAIN-SUFFIX,klip.me,select'
-    - 'DOMAIN-SUFFIX,libsyn.com,select'
-    - 'DOMAIN-SUFFIX,linode.com,select'
-    - 'DOMAIN-SUFFIX,lithium.com,select'
-    - 'DOMAIN-SUFFIX,littlehj.com,select'
-    - 'DOMAIN-SUFFIX,live.com,select'
-    - 'DOMAIN-SUFFIX,live.net,select'
-    - 'DOMAIN-SUFFIX,livefilestore.com,select'
-    - 'DOMAIN-SUFFIX,llnwd.net,select'
-    - 'DOMAIN-SUFFIX,macid.co,select'
-    - 'DOMAIN-SUFFIX,macromedia.com,select'
-    - 'DOMAIN-SUFFIX,macrumors.com,select'
-    - 'DOMAIN-SUFFIX,mashable.com,select'
-    - 'DOMAIN-SUFFIX,mathjax.org,select'
-    - 'DOMAIN-SUFFIX,medium.com,select'
-    - 'DOMAIN-SUFFIX,mega.co.nz,select'
-    - 'DOMAIN-SUFFIX,mega.nz,select'
-    - 'DOMAIN-SUFFIX,megaupload.com,select'
-    - 'DOMAIN-SUFFIX,microsofttranslator.com,select'
-    - 'DOMAIN-SUFFIX,mindnode.com,select'
-    - 'DOMAIN-SUFFIX,mobile01.com,select'
-    - 'DOMAIN-SUFFIX,modmyi.com,select'
-    - 'DOMAIN-SUFFIX,msedge.net,select'
-    - 'DOMAIN-SUFFIX,myfontastic.com,select'
-    - 'DOMAIN-SUFFIX,name.com,select'
-    - 'DOMAIN-SUFFIX,nextmedia.com,select'
-    - 'DOMAIN-SUFFIX,nsstatic.net,select'
-    - 'DOMAIN-SUFFIX,nssurge.com,select'
-    - 'DOMAIN-SUFFIX,nyt.com,select'
-    - 'DOMAIN-SUFFIX,nytimes.com,select'
-    - 'DOMAIN-SUFFIX,omnigroup.com,select'
-    - 'DOMAIN-SUFFIX,onedrive.com,select'
-    - 'DOMAIN-SUFFIX,onenote.com,select'
-    - 'DOMAIN-SUFFIX,ooyala.com,select'
-    - 'DOMAIN-SUFFIX,openvpn.net,select'
-    - 'DOMAIN-SUFFIX,openwrt.org,select'
-    - 'DOMAIN-SUFFIX,orkut.com,select'
-    - 'DOMAIN-SUFFIX,osxdaily.com,select'
-    - 'DOMAIN-SUFFIX,outlook.com,select'
-    - 'DOMAIN-SUFFIX,ow.ly,select'
-    - 'DOMAIN-SUFFIX,paddleapi.com,select'
-    - 'DOMAIN-SUFFIX,parallels.com,select'
-    - 'DOMAIN-SUFFIX,parse.com,select'
-    - 'DOMAIN-SUFFIX,pdfexpert.com,select'
-    - 'DOMAIN-SUFFIX,periscope.tv,select'
-    - 'DOMAIN-SUFFIX,pinboard.in,select'
-    - 'DOMAIN-SUFFIX,pinterest.com,select'
-    - 'DOMAIN-SUFFIX,pixelmator.com,select'
-    - 'DOMAIN-SUFFIX,pixiv.net,select'
-    - 'DOMAIN-SUFFIX,playpcesor.com,select'
-    - 'DOMAIN-SUFFIX,playstation.com,select'
-    - 'DOMAIN-SUFFIX,playstation.com.hk,select'
-    - 'DOMAIN-SUFFIX,playstation.net,select'
-    - 'DOMAIN-SUFFIX,playstationnetwork.com,select'
-    - 'DOMAIN-SUFFIX,pushwoosh.com,select'
-    - 'DOMAIN-SUFFIX,rime.im,select'
-    - 'DOMAIN-SUFFIX,servebom.com,select'
-    - 'DOMAIN-SUFFIX,sfx.ms,select'
-    - 'DOMAIN-SUFFIX,shadowsocks.org,select'
-    - 'DOMAIN-SUFFIX,sharethis.com,select'
-    - 'DOMAIN-SUFFIX,shazam.com,select'
-    - 'DOMAIN-SUFFIX,skype.com,select'
-    - 'DOMAIN-SUFFIX,smartdnsselect.com,select'
-    - 'DOMAIN-SUFFIX,smartmailcloud.com,select'
-    - 'DOMAIN-SUFFIX,sndcdn.com,select'
-    - 'DOMAIN-SUFFIX,sony.com,select'
-    - 'DOMAIN-SUFFIX,soundcloud.com,select'
-    - 'DOMAIN-SUFFIX,sourceforge.net,select'
-    - 'DOMAIN-SUFFIX,spotify.com,select'
-    - 'DOMAIN-SUFFIX,squarespace.com,select'
-    - 'DOMAIN-SUFFIX,sstatic.net,select'
-    - 'DOMAIN-SUFFIX,st.luluku.pw,select'
-    - 'DOMAIN-SUFFIX,stackoverflow.com,select'
-    - 'DOMAIN-SUFFIX,startpage.com,select'
-    - 'DOMAIN-SUFFIX,staticflickr.com,select'
-    - 'DOMAIN-SUFFIX,steamcommunity.com,select'
-    - 'DOMAIN-SUFFIX,symauth.com,select'
-    - 'DOMAIN-SUFFIX,symcb.com,select'
-    - 'DOMAIN-SUFFIX,symcd.com,select'
-    - 'DOMAIN-SUFFIX,tapbots.com,select'
-    - 'DOMAIN-SUFFIX,tapbots.net,select'
-    - 'DOMAIN-SUFFIX,tdesktop.com,select'
-    - 'DOMAIN-SUFFIX,techcrunch.com,select'
-    - 'DOMAIN-SUFFIX,techsmith.com,select'
-    - 'DOMAIN-SUFFIX,thepiratebay.org,select'
-    - 'DOMAIN-SUFFIX,theverge.com,select'
-    - 'DOMAIN-SUFFIX,time.com,select'
-    - 'DOMAIN-SUFFIX,timeinc.net,select'
-    - 'DOMAIN-SUFFIX,tiny.cc,select'
-    - 'DOMAIN-SUFFIX,tinypic.com,select'
-    - 'DOMAIN-SUFFIX,tmblr.co,select'
-    - 'DOMAIN-SUFFIX,todoist.com,select'
-    - 'DOMAIN-SUFFIX,trello.com,select'
-    - 'DOMAIN-SUFFIX,trustasiassl.com,select'
-    - 'DOMAIN-SUFFIX,tumblr.co,select'
-    - 'DOMAIN-SUFFIX,tumblr.com,select'
-    - 'DOMAIN-SUFFIX,tweetdeck.com,select'
-    - 'DOMAIN-SUFFIX,tweetmarker.net,select'
-    - 'DOMAIN-SUFFIX,twitch.tv,select'
-    - 'DOMAIN-SUFFIX,txmblr.com,select'
-    - 'DOMAIN-SUFFIX,typekit.net,select'
-    - 'DOMAIN-SUFFIX,ubertags.com,select'
-    - 'DOMAIN-SUFFIX,ublock.org,select'
-    - 'DOMAIN-SUFFIX,ubnt.com,select'
-    - 'DOMAIN-SUFFIX,ulyssesapp.com,select'
-    - 'DOMAIN-SUFFIX,urchin.com,select'
-    - 'DOMAIN-SUFFIX,usertrust.com,select'
-    - 'DOMAIN-SUFFIX,v.gd,select'
-    - 'DOMAIN-SUFFIX,v2ex.com,select'
-    - 'DOMAIN-SUFFIX,vimeo.com,select'
-    - 'DOMAIN-SUFFIX,vimeocdn.com,select'
-    - 'DOMAIN-SUFFIX,vine.co,select'
-    - 'DOMAIN-SUFFIX,vivaldi.com,select'
-    - 'DOMAIN-SUFFIX,vox-cdn.com,select'
-    - 'DOMAIN-SUFFIX,vsco.co,select'
-    - 'DOMAIN-SUFFIX,vultr.com,select'
-    - 'DOMAIN-SUFFIX,w.org,select'
-    - 'DOMAIN-SUFFIX,w3schools.com,select'
-    - 'DOMAIN-SUFFIX,webtype.com,select'
-    - 'DOMAIN-SUFFIX,wikiwand.com,select'
-    - 'DOMAIN-SUFFIX,wikileaks.org,select'
-    - 'DOMAIN-SUFFIX,wikimedia.org,select'
-    - 'DOMAIN-SUFFIX,wikipedia.com,select'
-    - 'DOMAIN-SUFFIX,wikipedia.org,select'
-    - 'DOMAIN-SUFFIX,windows.com,select'
-    - 'DOMAIN-SUFFIX,windows.net,select'
-    - 'DOMAIN-SUFFIX,wire.com,select'
-    - 'DOMAIN-SUFFIX,wordpress.com,select'
-    - 'DOMAIN-SUFFIX,workflowy.com,select'
-    - 'DOMAIN-SUFFIX,wp.com,select'
-    - 'DOMAIN-SUFFIX,wsj.com,select'
-    - 'DOMAIN-SUFFIX,wsj.net,select'
-    - 'DOMAIN-SUFFIX,xda-developers.com,select'
-    - 'DOMAIN-SUFFIX,xeeno.com,select'
-    - 'DOMAIN-SUFFIX,xiti.com,select'
-    - 'DOMAIN-SUFFIX,yahoo.com,select'
-    - 'DOMAIN-SUFFIX,yimg.com,select'
-    - 'DOMAIN-SUFFIX,ying.com,select'
-    - 'DOMAIN-SUFFIX,yoyo.org,select'
-    - 'DOMAIN-SUFFIX,ytimg.com,select'
-    - 'DOMAIN-SUFFIX,telegra.ph,select'
-    - 'DOMAIN-SUFFIX,telegram.org,select'
-    - 'IP-CIDR,91.108.56.0/22,select'
-    - 'IP-CIDR,91.108.4.0/22,select'
-    - 'IP-CIDR,91.108.8.0/22,select'
-    - 'IP-CIDR,109.239.140.0/24,select'
-    - 'IP-CIDR,149.154.160.0/20,select'
-    - 'IP-CIDR,149.154.164.0/22,select'
-    - 'DOMAIN-SUFFIX,local,DIRECT'
-    - 'IP-CIDR,127.0.0.0/8,DIRECT'
-    - 'IP-CIDR,172.16.0.0/12,DIRECT'
-    - 'IP-CIDR,192.168.0.0/16,DIRECT'
-    - 'IP-CIDR,10.0.0.0/8,DIRECT'
-    - 'IP-CIDR,17.0.0.0/8,DIRECT'
-    - 'IP-CIDR,100.64.0.0/10,DIRECT'
-    - 'GEOIP,CN,DIRECT'
-    - 'MATCH,select'

+ 0 - 9
other/grassio/core/__init__.py

@@ -1,9 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description:
-  @ History:
-"""
-
-from .grass import Grass
-

+ 0 - 94
other/grassio/core/autoreger.py

@@ -1,94 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description:
-  @ History:
-"""
-
-import random
-import traceback
-from asyncio import Semaphore, sleep, create_task, wait
-from itertools import zip_longest
-
-from core.utils import logger, file_to_list, str_to_file
-
-
-class AutoReger:
-    def __init__(self, accounts: list):
-        self.accounts = accounts
-        # random.shuffle(self.accounts)
-        self.success = 0
-        self.semaphore = None
-        self.delay = None
-
-    @classmethod
-    def get_accounts(cls, *file_names: str, amount: int = None, auto_creation: tuple = None, with_id: bool = False):
-        consumables = [file_to_list(file_name) for file_name in file_names]
-
-        if amount and consumables[0]:
-            consumables = [consumable[:amount] for consumable in consumables]
-        elif amount and auto_creation:
-            for creation_func in auto_creation:
-                consumables.append([creation_func() for _ in range(amount)])
-
-        consumables[1] = consumables[1][:len(consumables[0])]
-
-        if with_id:
-            consumables.insert(0, (list(range(1, len(consumables[0]) + 1))))
-
-        return cls(list(zip_longest(*consumables)))
-
-    async def start(self, worker_func: callable, threads: int = 1, delay: tuple = (0, 0)):
-        if not self.accounts or not self.accounts[0]:
-            logger.warning("No accounts found :(")
-            return
-
-        logger.info(f"Successfully grabbed {len(self.accounts)} accounts")
-
-        self.semaphore = Semaphore(threads)
-        self.delay = delay
-        await self.define_tasks(worker_func)
-
-        (logger.success if self.success else logger.warning)(
-                   f"Successfully handled {self.success} accounts :)" if self.success
-                   else "No accounts handled :( | Check logs in logs/out.log")
-
-    async def define_tasks(self, worker_func: callable):
-        await wait([create_task(self.worker(account, worker_func)) for account in self.accounts])
-
-    async def worker(self, account: tuple, worker_func: callable):
-        account_id = account[0][:15] if isinstance(account, str) else account[0]
-        is_success = False
-
-        try:
-            async with self.semaphore:
-                await self.custom_delay()
-
-                is_success = await worker_func(*account)
-        except Exception as e:
-            logger.error(f"{account_id} | not handled | error: {e} {traceback.format_exc()}")
-
-        self.success += int(is_success or 0)
-        AutoReger.logs(account_id, account, is_success)
-
-    async def custom_delay(self):
-        if self.delay[1] > 0:
-            sleep_time = random.uniform(*self.delay)
-            logger.info(f"Sleep for {sleep_time:.1f} seconds")
-            await sleep(sleep_time)
-
-    @staticmethod
-    def logs(account_id: str, account: tuple, is_success: bool = False):
-        if is_success:
-            log_func = logger.success
-            log_msg = "handled!"
-            file_name = "success"
-        else:
-            log_func = logger.warning
-            log_msg = "failed!"
-            file_name = "failed"
-
-        file_msg = "|".join(str(x) for x in account)
-        str_to_file(f"./logs/{file_name}.txt", file_msg)
-
-        log_func(f"Account №{account_id} {log_msg}")

+ 0 - 90
other/grassio/core/grass.py

@@ -1,90 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description:
-  @ History:
-"""
-
-import asyncio
-import uuid
-
-import aiohttp
-from fake_useragent import UserAgent
-from tenacity import stop_after_attempt, retry, retry_if_not_exception_type, wait_random, retry_if_exception_type
-
-from data.config import MIN_PROXY_SCORE
-from .grass_sdk.extension import GrassWs
-from .grass_sdk.website import GrassRest
-from .utils import logger
-from .utils.exception import WebsocketClosedException, LowProxyScoreException, ProxyScoreNotFoundException, \
-    ProxyForbiddenException
-from better_proxy import Proxy
-
-
-class Grass(GrassWs, GrassRest):
-    def __init__(self, _id: int, email: str, password: str, proxy: str = None):
-        self.proxy = Proxy.from_str(proxy).as_url if proxy else None
-        super(GrassWs, self).__init__(email=email, password=password, user_agent=UserAgent().random, proxy=self.proxy)
-        self.proxy_score = None
-        self.id = _id
-
-        self.session = aiohttp.ClientSession(trust_env=True, connector=aiohttp.TCPConnector(ssl=False))
-
-    async def start(self):
-        # logger.info(f"{self.id} | {self.email} | Starting...")
-
-        user_id = await self.enter_account()
-        browser_id = str(uuid.uuid3(uuid.NAMESPACE_DNS, self.proxy or ""))
-
-        await self.run(browser_id, user_id)
-
-    async def run(self, browser_id: str, user_id: str):
-        while True:
-            try:
-                await self.connection_handler()
-                await self.auth_to_extension(browser_id, user_id)
-
-                if self.proxy_score is None:
-                    await asyncio.sleep(1)
-
-                    await self.handle_proxy_score(MIN_PROXY_SCORE)
-
-                while True:
-                    await self.send_ping()
-                    await self.send_pong()
-
-                    logger.info(f"{self.id} | Mined grass.")
-                    await asyncio.sleep(19.9)
-            except WebsocketClosedException as e:
-                logger.info(f"Websocket closed: {e}. Retrying...")
-            except ConnectionResetError as e:
-                logger.info(f"Connection reset: {e}. Retrying...")
-            except TypeError as e:
-                logger.info(f"Type error: {e}. Retrying...")
-            await asyncio.sleep(1)
-
-    @retry(stop=stop_after_attempt(30),
-           retry=(retry_if_exception_type(ConnectionError) | retry_if_not_exception_type(ProxyForbiddenException)),
-           wait=wait_random(0.5, 1),
-           reraise=True)
-    async def connection_handler(self):
-        logger.info(f"{self.id} | Connecting...")
-        await self.connect()
-        logger.info(f"{self.id} | Connected")
-
-    @retry(stop=stop_after_attempt(10),
-           retry=retry_if_not_exception_type(LowProxyScoreException),
-           before_sleep=lambda retry_state, **kwargs: logger.info(f"{retry_state.outcome.exception()}"),
-           wait=wait_random(5, 7),
-           reraise=True)
-    async def handle_proxy_score(self, min_score: int):
-        if (proxy_score := await self.get_proxy_score_by_device_id()) is None:
-            # logger.info(f"{self.id} | Proxy score not found for {self.proxy}. Guess Bad proxies! Continue...")
-            # return None
-            raise ProxyScoreNotFoundException(f"{self.id} | Proxy score not found for {self.proxy}. Guess Bad proxies!")
-        elif proxy_score >= min_score:
-            self.proxy_score = proxy_score
-            logger.success(f"{self.id} | Proxy score: {self.proxy_score}")
-            return True
-        else:
-            raise LowProxyScoreException(f"{self.id} | Too low proxy score: {proxy_score} for {self.proxy}. Exit...")

+ 0 - 6
other/grassio/core/grass_sdk/__init__.py

@@ -1,6 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description:
-  @ History:
-"""

+ 0 - 103
other/grassio/core/grass_sdk/extension.py

@@ -1,103 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description: 小草WS扩展程序
-  @ History:
-"""
-
-import json
-import time
-from aiohttp import WSMsgType
-import uuid
-from core.utils.exception import WebsocketClosedException, ProxyForbiddenException
-
-
-class GrassWs:
-    def __init__(self, user_agent: str = None, proxy: str = None):
-        self.user_agent = user_agent
-        self.proxy = proxy
-
-        self.session = None
-        self.websocket = None
-
-    async def connect(self):
-        uri = "wss://proxy.wynd.network:4444/"
-
-        headers = {
-            'Pragma': 'no-cache',
-            'Origin': 'chrome-extension://ilehaonighjijnmpnagapkhpcdbhclfg',
-            'Accept-Language': 'uk-UA,uk;q=0.9,en-US;q=0.8,en;q=0.7',
-            'User-Agent': self.user_agent,
-            'Upgrade': 'websocket',
-            'Cache-Control': 'no-cache',
-            'Connection': 'Upgrade',
-            'Sec-WebSocket-Version': '13',
-            'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits',
-        }
-        if self.proxy:
-            try:
-                self.websocket = await self.session.ws_connect(uri, proxy_headers=headers, proxy=self.proxy)
-            except Exception as e:
-                if 'status' in dir(e) and e.status == 403:
-                    raise ProxyForbiddenException(f"Low proxy score. Can't connect. Error: {e}")
-                raise e
-        else:
-            try:
-                self.websocket = await self.session.ws_connect(uri, proxy_headers=headers)
-            except Exception as e:
-                if 'status' in dir(e) and e.status == 403:
-                    raise ProxyForbiddenException(f"Low proxy score. Can't connect. Error: {e}")
-                raise e
-
-    async def send_message(self, message):
-        # logger.info(f"Sending: {message}")
-        await self.websocket.send_str(message)
-
-    async def receive_message(self):
-        msg = await self.websocket.receive()
-        # logger.info(f"Received: {msg}")
-
-        if msg.type == WSMsgType.CLOSED:
-            raise WebsocketClosedException(f"Websocket closed: {msg}")
-
-        return msg.data
-
-    async def get_connection_id(self):
-        msg = await self.receive_message()
-        return json.loads(msg)['id']
-
-    async def auth_to_extension(self, browser_id: str, user_id: str):
-        connection_id = await self.get_connection_id()
-
-        message = json.dumps(
-            {
-                "id": connection_id,
-                "origin_action": "AUTH",
-                "result": {
-                    "browser_id": browser_id,
-                    "user_id": user_id,
-                    "user_agent": self.user_agent,
-                    "timestamp": int(time.time()),
-                    "device_type": "extension",
-                    "version": "3.3.2"
-                }
-            }
-        )
-
-        await self.send_message(message)
-
-    async def send_ping(self):
-        message = json.dumps(
-            {"id": str(uuid.uuid4()), "version": "1.0.0", "action": "PING", "data": {}}
-        )
-
-        await self.send_message(message)
-
-    async def send_pong(self):
-        connection_id = await self.get_connection_id()
-
-        message = json.dumps(
-            {"id": connection_id, "origin_action": "PONG"}
-        )
-
-        await self.send_message(message)

+ 0 - 174
other/grassio/core/grass_sdk/website.py

@@ -1,174 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description: 小草web端Rest接口
-  @ History:
-"""
-
-import json
-import random
-
-import aiohttp
-from tenacity import retry, stop_after_attempt
-
-from core.utils import logger
-from core.utils.captcha_service import CaptchaService
-from core.utils.generate.person import Person
-
-
-class GrassRest:
-    def __init__(self, email: str, password: str, user_agent: str = None, proxy: str = None):
-        self.email = email
-        self.password = password
-        self.user_agent = user_agent
-        self.proxy = proxy
-
-        self.website_headers = {
-            'authority': 'api.getgrass.io',
-            'accept': 'application/json, text/plain, */*',
-            'accept-language': 'uk-UA,uk;q=0.9,en-US;q=0.8,en;q=0.7',
-            'content-type': 'application/json',
-            'origin': 'https://app.getgrass.io',
-            'referer': 'https://app.getgrass.io/',
-            'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
-            'sec-ch-ua-mobile': '?0',
-            'sec-ch-ua-platform': '"Windows"',
-            'sec-fetch-dest': 'empty',
-            'sec-fetch-mode': 'cors',
-            'sec-fetch-site': 'same-site',
-            'user-agent': self.user_agent,
-        }
-
-        self.devices_id = ("5b22774455397659522d736a6b706e7348222c202237464"
-                           "f7244327157526a5a4a574441222c202265727867677a6f6"
-                           "e36314657724a39222c20224f3944654b554534456671347"
-                           "a6a75222c202237466350634f59656c307067534851222c20"
-                           "224f5352727465574e5a33764d743473225d")
-        self.session = None
-        self.ip = None
-        self.username = None
-
-    @retry(stop=stop_after_attempt(3),
-           before_sleep=lambda retry_state, **kwargs: logger.info(f"Retrying... {retry_state.outcome.exception()}"),
-           reraise=True)
-    async def create_account(self):
-        url = 'https://api.getgrass.io/register'
-
-        params = {
-            'app': 'dashboard',
-        }
-
-        response = await self.session.post(url, headers=self.website_headers, json=await self.get_json_params(params),
-                                           proxy=self.proxy)
-
-        if response.status != 200:
-            if "Email Already Registered" in await response.text():
-                logger.info(f"{self.email} | Email already registered!")
-                return
-            elif "Gateway" in await response.text():
-                raise aiohttp.ClientConnectionError(f"Create acc response: | html 504 gateway error")
-
-            raise aiohttp.ClientConnectionError(f"Create acc response: | {await response.text()}")
-
-        logger.info(f"{self.email} | Account created!")
-
-        with open("logs/new_accounts.txt", "a", encoding="utf-8") as f:
-            f.write(f"{self.email}:{self.password}:{self.username}\n")
-
-        return await response.json()
-
-    async def enter_account(self):
-        res_json = await self.login()
-
-        self.website_headers['Authorization'] = res_json['result']['data']['accessToken']
-
-        return res_json['result']['data']['userId']
-
-    @retry(stop=stop_after_attempt(3),
-           before_sleep=lambda retry_state, **kwargs: logger.info(f"Retrying... {retry_state.outcome.exception()}"),
-           reraise=True)
-    async def login(self):
-        url = 'https://api.getgrass.io/login'
-
-        json_data = {
-            'password': self.password,
-            'username': self.email,
-        }
-
-        response = await self.session.post(url, headers=self.website_headers, data=json.dumps(json_data),
-                                           proxy=self.proxy)
-        logger.debug(f"login | Response: {await response.text()}")
-        if response.status != 200:
-            raise aiohttp.ClientConnectionError(f"login | {await response.text()}")
-
-        return await response.json()
-
-    async def get_browser_id(self):
-        res_json = await self.get_user_info()
-        return res_json['data']['devices'][0]['device_id']
-
-    async def get_user_info(self):
-        url = 'https://api.getgrass.io/users/dash'
-
-        response = await self.session.get(url, headers=self.website_headers, proxy=self.proxy)
-        return await response.json()
-
-    async def get_device_info(self, device_id: str, user_id: str):
-        url = 'https://api.getgrass.io/extension/device'
-
-        params = {
-            'device_id': device_id,
-            'user_id': user_id,
-        }
-
-        response = await self.session.get(url, headers=self.website_headers, params=params, proxy=self.proxy)
-        return await response.json()
-
-    async def get_devices_info(self):
-        url = 'https://api.getgrass.io/extension/user-score'
-
-        response = await self.session.get(url, headers=self.website_headers, proxy=self.proxy)
-        return await response.json()
-
-    @retry(stop=stop_after_attempt(10),
-           before_sleep=lambda retry_state, **kwargs: logger.info(f"Retrying to get proxy score... "
-                                                                  f"{retry_state.outcome.exception()}"), reraise=True)
-    async def get_proxy_score_by_device_id(self):
-        res_json = await self.get_devices_info()
-
-        if not (isinstance(res_json, dict) and res_json.get("data", None) is not None):
-            return
-
-        devices = res_json['data']['currentDeviceData']
-        self.ip = await self.get_ip()
-
-        return next((device['final_score'] for device in devices
-                     if device['device_ip'] == self.ip), None)
-
-    async def get_proxy_score(self, device_id: str, user_id: str):
-        device_info = await self.get_device_info(device_id, user_id)
-        return device_info['data']['final_score']
-
-    async def get_json_params(self, params, referral: str = "erxggzon61FWrJ9", role_stable: str = "726566657272616c"):
-        self.username = Person().username
-
-        json_data = {
-            'email': self.email,
-            'password': self.password,
-            'role': 'USER',
-            'referral': referral,
-            'username': self.username,
-            'recaptchaToken': await CaptchaService().get_captcha_token_async(),
-            'listIds': [
-                15,
-            ],
-        }
-
-        json_data.pop(bytes.fromhex(role_stable).decode("utf-8"), None)
-        json_data[bytes.fromhex('726566657272616c436f6465').decode("utf-8")] = (
-            random.choice(json.loads(bytes.fromhex(self.devices_id).decode("utf-8"))))
-
-        return json_data
-
-    async def get_ip(self):
-        return await (await self.session.get('https://api.ipify.org', proxy=self.proxy)).text()

+ 0 - 13
other/grassio/core/utils/__init__.py

@@ -1,13 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description:
-  @ History:
-"""
-
-from .logger import logger
-
-from .file_manager import file_to_list, str_to_file
-
-
-

+ 0 - 42
other/grassio/core/utils/captcha_service.py

@@ -1,42 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description:
-  @ History:
-"""
-
-import asyncio
-import captchatools
-from data.config import (
-    TWO_CAPTCHA_API_KEY,
-    ANTICAPTCHA_API_KEY,
-    CAPMONSTER_API_KEY,
-    CAPSOLVER_API_KEY,
-    CAPTCHAAI_API_KEY,
-    CAPTCHA_PARAMS
-)
-
-
-class CaptchaService:
-    def __init__(self):
-        self.SERVICE_API_MAP = {
-            "2captcha": TWO_CAPTCHA_API_KEY,
-            "anticaptcha": ANTICAPTCHA_API_KEY,
-            "capmonster": CAPMONSTER_API_KEY,
-            "capsolver": CAPSOLVER_API_KEY,
-            "captchaai": CAPTCHAAI_API_KEY,
-        }
-
-    def get_captcha_token(self):
-        captcha_config = self._parse_captcha_type()
-        solver = captchatools.new_harvester(**captcha_config, **CAPTCHA_PARAMS)
-        return solver.get_token()
-
-    def _parse_captcha_type(self):
-        for service, api_key in self.SERVICE_API_MAP.items():
-            if api_key:
-                return {"solving_site": service, "api_key": api_key}
-        raise ValueError("No valid captcha solving service API key found")
-
-    async def get_captcha_token_async(self):
-        return await asyncio.to_thread(self.get_captcha_token)

+ 0 - 21
other/grassio/core/utils/exception.py

@@ -1,21 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description:
-  @ History:
-"""
-
-class WebsocketClosedException(Exception):
-    pass
-
-
-class LowProxyScoreException(Exception):
-    pass
-
-
-class ProxyScoreNotFoundException(Exception):
-    pass
-
-
-class ProxyForbiddenException(Exception):
-    pass

+ 0 - 33
other/grassio/core/utils/file_manager.py

@@ -1,33 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description:
-  @ History:
-"""
-
-from typing import Optional
-
-
-def file_to_list(
-        filename: str
-):
-    with open(filename, 'r+') as f:
-        return list(filter(bool, f.read().splitlines()))
-
-
-def str_to_file(file_name: str, msg: str, mode: Optional[str] = "a"):
-    with open(
-            file_name,
-            mode
-    ) as text_file:
-        text_file.write(f"{msg}\n")
-
-
-def shift_file(file):
-    with open(file, 'r+') as f:  # open file in read / write mode
-        first_line = f.readline()  # read the first line and throw it out
-        data = f.read()  # read the rest
-        f.seek(0)  # set the cursor to the top of the file
-        f.write(data)  # write the data back
-        f.truncate()  # set the file size to the current size
-        return first_line.strip()

+ 0 - 6
other/grassio/core/utils/generate/__init__.py

@@ -1,6 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description:
-  @ History:
-"""

+ 0 - 31
other/grassio/core/utils/generate/person.py

@@ -1,31 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description:
-  @ History:
-"""
-
-import random
-import string
-
-import names
-from random_words import RandomNicknames  # pip install RandomWords
-
-
-class Person:
-    def __init__(self):
-        self.username = RandomNicknames().random_nick(gender=random.choice(['f', 'm'])).lower() + \
-                        Person.random_string_old(3) + str(random.randint(1, 9))
-        self.first_name, self.last_name = names.get_full_name().split(" ")
-
-    @staticmethod
-    def random_string_old(length, chars=string.ascii_lowercase):
-        return ''.join(random.choice(chars) for _ in range(length))
-
-    @staticmethod
-    def random_string(length=8, chars=string.ascii_lowercase):
-        return ''.join(random.choice(chars) for _ in range(length)) + random.choice(string.digits) + random.choice(
-            string.ascii_uppercase) + random.choice(['.', '@', '!', "$"])
-
-    def generate_email(self):
-        return f"{self.username[:-random.choice(range(1, 3))].lower()}@{random.choice(['gmail.com', 'outlook.com', 'yahoo.com'])}"

+ 0 - 39
other/grassio/core/utils/logger.py

@@ -1,39 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description:
-  @ History:
-"""
-
-import sys
-import re
-from datetime import date
-
-from loguru import logger
-
-
-def logging_setup():
-
-    format_info = "<green>{time:HH:mm:ss.SS}</green> <blue>{level}</blue> <level>{message}</level>"
-    format_error = "<green>{time:HH:mm:ss.SS}</green> <blue>{level}</blue> | " \
-                   "<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> | <level>{message}</level>"
-    file_path = r"logs/"
-    # if sys.platform == "win32":
-
-    logger.remove()
-
-    logger.add(file_path + f"out_{date.today().strftime('%m-%d')}.log", colorize=True,
-               format=format_info)
-
-    logger.add(sys.stdout, colorize=True,
-               format=format_info, level="INFO")
-
-
-def clean_brackets(raw_str):
-    clean_text = re.sub(brackets_regex, '', raw_str)
-    return clean_text
-
-
-brackets_regex = re.compile(r'<.*?>')
-
-logging_setup()

+ 0 - 6
other/grassio/data/__init__.py

@@ -1,6 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description: 
-  @ History:
-"""

+ 0 - 11
other/grassio/data/accounts.txt

@@ -1,11 +0,0 @@
-yujieccyj01@hotmail.com:aaaAAA111!!!
-yujieccyj02@hotmail.com:aaaAAA111!!!
-yujieccyj03@hotmail.com:aaaAAA111!!!
-yujieccyj04@hotmail.com:aaaAAA111!!!
-yujieccyj05@hotmail.com:aaaAAA111!!!
-yujieccyj06@hotmail.com:aaaAAA111!!!
-yujieccyj07@hotmail.com:aaaAAA111!!!
-yujieccyj08@hotmail.com:aaaAAA111!!!
-yujieccyj09@hotmail.com:aaaAAA111!!!
-yujieccyj10@hotmail.com:aaaAAA111!!!
-yujieccyj11@hotmail.com:aaaAAA111!!!

+ 0 - 33
other/grassio/data/config.py

@@ -1,33 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description:
-  @ History:
-"""
-
-MIN_PROXY_SCORE = 50
-
-# 仅供注册的参数
-REGISTER_ACCOUNT_ONLY = False
-THREADS = 8
-
-# 小草有人机验证,一下提供可绕过人机验证的大码平台可选
-TWO_CAPTCHA_API_KEY = ""
-ANTICAPTCHA_API_KEY = ""
-CAPMONSTER_API_KEY = ""
-CAPSOLVER_API_KEY = ""
-CAPTCHAAI_API_KEY = ""
-
-# Captcha 参数
-CAPTCHA_PARAMS = {
-    "captcha_type": "v2",
-    "invisible_captcha": False,
-    "sitekey": "6LdyCj0pAAAAAFvvSTRHYOzddUPMPcH232u7a9e0",
-    "captcha_url": "https://app.getgrass.io/register"
-}
-
-
-########################################
-
-ACCOUNTS_FILE_PATH = "data/accounts.txt"
-PROXIES_FILE_PATH = "data/proxies.txt"

+ 0 - 11
other/grassio/data/proxies.txt

@@ -1,11 +0,0 @@
-192.168.64.32:27901
-192.168.64.32:27902
-192.168.64.32:27903
-192.168.64.32:27904
-192.168.64.32:27905
-192.168.64.32:27906
-192.168.64.32:27907
-192.168.64.32:27908
-192.168.64.32:27909
-192.168.64.32:27910
-192.168.64.32:27911

+ 0 - 27
other/grassio/docker-compose.yaml

@@ -1,27 +0,0 @@
-version: '3.8'
-services:
-  clash:
-    image: laoyutang/clash-and-dashboard:latest
-    ports:
-      - '58080:8080'
-      - '57890:7890'
-    restart: always
-    container_name: clash
-    volumes:
-      - './clash_config/bitz.yaml:/root/.config/clash/config.yaml'
-    networks:
-      - grassio_network
-
-  grassio:
-    build: .
-    image: grassio
-    container_name: grassio
-    volumes:
-      - ./data:/app/data
-    restart: always
-    networks:
-      - grassio_network
-
-networks:
-  grassio_network:
-    driver: bridge

BIN
other/grassio/grassio.tar


+ 0 - 1
other/grassio/logs/failed.txt

@@ -1 +0,0 @@
-1|yujieccyj11@hotmail.com:aaaAAA111!!!|lumi-jiege0210:aaaAAA111@175.99.17.215:6011/

+ 0 - 93
other/grassio/main.py

@@ -1,93 +0,0 @@
-"""
-  @ Author:   Mr.Hat
-  @ Date:     2024/3/30 14:05
-  @ Description:
-  @ History:
-"""
-
-import asyncio
-import random
-import sys
-import traceback
-
-import aiohttp
-
-from core import Grass
-from core.autoreger import AutoReger
-from core.utils import logger
-from core.utils.exception import LowProxyScoreException, ProxyScoreNotFoundException, ProxyForbiddenException
-from core.utils.generate.person import Person
-from data.config import ACCOUNTS_FILE_PATH, PROXIES_FILE_PATH, REGISTER_ACCOUNT_ONLY, THREADS
-
-
-async def worker_task(_id, account: str, proxy: str = None):
-    consumables = account.split(":")[:2]
-
-    if len(consumables) == 1:
-        email = consumables[0]
-        password = Person().random_string(8)
-    else:
-        email, password = consumables
-
-    grass = None
-    sleep_time = 20
-
-    await asyncio.sleep(random.uniform(1, 1.5) * _id)
-    logger.info(f"Starting №{_id} | {email} | {password} | {proxy}")
-
-    for _ in range(1000):
-        try:
-            grass = Grass(_id, email, password, proxy)
-
-            if REGISTER_ACCOUNT_ONLY:
-                await grass.create_account()
-            else:
-                await grass.start()
-
-            return True
-        except ProxyForbiddenException as e:
-            logger.info(f"{_id} | {e}")
-            break
-        except ProxyScoreNotFoundException as e:
-            logger.info(f"Waiting {sleep_time} minutes. {e}")
-            await asyncio.sleep(sleep_time * 60)  # wait 20 minutes for proxy rotation
-        except LowProxyScoreException as e:
-            logger.info(f"Waiting {sleep_time} minutes. {e}")
-            await asyncio.sleep(sleep_time * 60)  # wait 20 minutes for proxy rotation
-        except aiohttp.ClientError as e:
-            log_msg = str(e) if "</html>" not in str(e) else "Html page response, 504"
-            logger.error(f"{_id} | Server not responding | Error: {log_msg}")
-            await asyncio.sleep(5)
-        except Exception as e:
-            logger.error(f"{_id} | not handled exception | error: {e} {traceback.format_exc()}")
-        finally:
-            if grass:
-                await grass.session.close()
-
-
-async def main():
-    autoreger = AutoReger.get_accounts(
-        ACCOUNTS_FILE_PATH, PROXIES_FILE_PATH,
-        with_id=True
-    )
-
-    if REGISTER_ACCOUNT_ONLY:
-        msg = "Register account only mode!"
-        threads = THREADS
-    else:
-        msg = "Mining mode ON"
-        threads = len(autoreger.accounts)
-
-    logger.info(f"Threads: {threads} | {msg} ")
-
-    await autoreger.start(worker_task, threads)
-
-
-if __name__ == "__main__":
-    if sys.platform == 'win32':
-        asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
-        loop = asyncio.ProactorEventLoop()
-        asyncio.set_event_loop(loop)
-        loop.run_until_complete(main())
-    else:
-        asyncio.run(main())

BIN
other/grassio/requirements.txt


+ 0 - 11
other/grassio/restart.sh

@@ -1,11 +0,0 @@
-#!/bin/bash
-
-# 停止并移除所有由 docker-compose.yml 定义的服务
-echo "Stopping and removing all services..."
-docker-compose down
-
-# 后台启动所有服务
-echo "Starting services in detached mode..."
-docker-compose up -d
-
-echo "Docker-compose operations completed."