```
├── .github/
├── ISSUE_TEMPLATE/
├── bug_report.yml
├── .gitignore
├── .service/
├── version.txt
├── LICENSE.txt
├── README.md
├── bin/
├── WinDivert.dll
├── WinDivert64.sys
├── cygwin1.dll
├── quic_initial_www_google_com.bin
├── tls_clienthello_www_google_com.bin
├── winws.exe
├── check_updates.bat
├── cloudflare_switch.bat
├── discord.bat
├── general (ALT).bat
├── general (ALT2).bat
├── general (ALT3).bat
├── general (ALT4).bat
├── general (ALT5).bat
├── general (FAKE TLS MOD ALT).bat
├── general (FAKE TLS MOD AUTO).bat
├── general (FAKE TLS MOD).bat
├── general (ÃÂÃÂâá).bat
├── general (ÃÂÃÂâá2).bat
├── general.bat
├── lists/
├── ipset-cloudflare.txt
├── list-discord.txt
├── list-general.txt
├── service_diagnostics.bat
├── service_install.bat
├── service_remove.bat
├── service_status.bat
```
## /.github/ISSUE_TEMPLATE/bug_report.yml
```yml path="/.github/ISSUE_TEMPLATE/bug_report.yml"
name: 🐛 Проблема
title: '[Проблема] '
description: Сообщить о проблеме
labels: ['type: проблема', 'status: нуждается в сортировке']
body:
- type: checkboxes
id: checklist
attributes:
label: ⚠️ Чеклист
description: Перед созданием нового Issue, удостоверьтесь что выполнили следующие пункты
options:
- label: Я искал решение проблемы в [README](https://github.com/Flowseal/zapret-discord-youtube/blob/main/README.md) и среди [Issues](https://github.com/Flowseal/zapret-discord-youtube/issues)
- label: Я скачал ``zapret-discord-youtube`` из [релизов официального репозитория](https://github.com/Flowseal/zapret-discord-youtube/releases)
- type: textarea
id: description
attributes:
label: Опишите вашу проблему
description: Чётко опишите проблему с которой вы столкнулись
placeholder: Описание проблемы
validations:
required: true
- type: textarea
id: version
attributes:
label: Версия zapret-discord-youtube
description: Версия zapret-discord-youtube на которой вы словили проблему
placeholder: Версия
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Шаги воспроизведения проблемы
description: Шаги по воспроизведению поведения (вашей проблемы).
placeholder: |
Напишите здесь шаги, с помощью которых можно повторить вашу проблему
на других компьютерах
- type: textarea
id: bat-name
attributes:
label: Какой .bat файл вы используете?
validations:
required: true
- type: textarea
id: other-bat
attributes:
label: Использовали ли вы другие .bat?
description: Пробовали ли вы использовать другой .bat для устранения проблемы? Если использовали, то какие?
- type: textarea
id: additions
attributes:
label: Дополнительные детали
description: Дополнительные детали о которых нам нужно знать
```
## /.gitignore
```gitignore path="/.gitignore"
```
## /.service/version.txt
1.7.0
## /LICENSE.txt
MIT License
Copyright (c) 2016-2025 bol-van
Copyright (c) 2024-2025 Flowseal
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
---
This repository contains binary files originating from the project by bol-van,
available at: https://github.com/bol-van/zapret/ (licensed under the MIT License).
This repository also includes and depends on WinDivert
(https://github.com/basil00/WinDivert), which is licensed under your choice of:
1. The GNU Lesser General Public License (LGPL) Version 3, or
2. The GNU General Public License (GPL) Version 2.
Binary distributions of WinDivert are included in this project as-is, without modification.
The corresponding source code and license terms for WinDivert are available at
https://github.com/basil00/WinDivert.
---
To comply with the licenses of these projects:
1. The original copyright notices and licenses (above) are retained.
2. The use of WinDivert in this project is governed by its licensing terms (LGPLv3/GPLv2).
3. This repository provides only binary files and does not include the source code of
the project by bol-van or modifications to WinDivert.
## /README.md
# Flowseal/zapret-discord-youtube
*"Plug & Play"* обход блокировок Discord и YouTube для Windows
Альтернатива https://github.com/bol-van/zapret-win-bundle
> [!CAUTION]
>
> ### АНТИВИРУСЫ
> WinDivert может вызвать реакцию антивируса.
> WinDivert - это инструмент для перехвата и фильтрации трафика, необходимый для работы zapret.
> Замена iptables и NFQUEUE в Linux, которых нет под Windows.
> Он может использоваться как хорошими, так и плохими программами, но сам по себе не является вирусом.
> Драйвер WinDivert64.sys подписан для возможности загрузки в 64-битное ядро Windows.
> Но антивирусы склонны относить подобное к классам повышенного риска или хакерским инструментам.
> В случае проблем используйте исключения или выключайте антивирус совсем.
>
> **Выдержка из [`readme.md`](https://github.com/bol-van/zapret-win-bundle/blob/master/readme.md#%D0%B0%D0%BD%D1%82%D0%B8%D0%B2%D0%B8%D1%80%D1%83%D1%81%D1%8B) репозитория [bol-van/zapret-win-bundle](https://github.com/bol-van/zapret-win-bundle)*
> [!IMPORTANT]
> Все файлы в папке [`bin`](./bin) взяты из [zapret-win-bundle/zapret-winws](https://github.com/bol-van/zapret-win-bundle/tree/master/zapret-winws). Вы можете это проверить с помощью хэшей/контрольных сумм.
## ⚙️Использование
1. Загрузите архив (zip/rar) со [страницы последнего релиза](https://github.com/Flowseal/zapret-discord-youtube/releases/latest)
2. Распакуйте содержимое архива по пути, который не содержит кириллицу/спец. символы
3. Запустите нужный файл
## ℹ️Краткие описания файлов
- [**`discord.bat`**](./discord.bat) - запуск со стратегией для обхода блокировки Discord
- [**`general.bat`**](./general.bat) - запуск со стратегией для обхода блокировок Discord и YouTube
- [**`cloudflare_switch.bat`**](./cloudflare_switch.bat) - включение/выключение обхода Cloudflare *(на деле перетирает список `ipset-cloudflare`, перезапуск после изменения не нужен)*
- [**`service_install.bat`**](./service_install.bat) - установка на автозапуск (как службы Windows: `zapret`, `WinDivert`), можно выбрать любую стратегию (название файла стратегии **НЕ** должно начинаться со слова `service`)
- [**`service_remove.bat`**](./service_remove.bat) - остановка и удаление служб `zapret` и `WinDivert`
- [**`service_status.bat`**](./service_status.bat) - проверка состояния служб `zapret` и `WinDivert`
- [**`check_updates.bat`**](./check_updates.bat) - проверка обновлений
## ☑️Распространенные проблемы
### Не работает Discord
- См. [#252](https://github.com/Flowseal/zapret-discord-youtube/discussions/252)
### Не работает YouTube
- См. [#251](https://github.com/Flowseal/zapret-discord-youtube/discussions/251)
### Обход не работает
> [!IMPORTANT]
> **Стратегии блокировок со временем изменяются.**
> Определенная стратегия обхода zapret может работать какое-то время, но если меняется способ блокировки или обнаружения обхода блокировки, то она перестанет работать.
> В репозитории представлены множество различных стратегий для обхода. Если ни одна из них вам не помогает, то вам необходимо создать новую, взяв за основу одну из представленных здесь и изменив её параметры.
> Информацию про параметры стратегий вы можете найти [тут](https://github.com/bol-van/zapret/blob/master/docs/readme.md#nfqws).
- Проверьте другие стратегии (**`ALT`**/**`МГТС`**)
- Обновите файлы в папке [`bin`](./bin), взяв новые из [zapret-win-bundle/zapret-winws](https://github.com/bol-van/zapret-win-bundle/tree/master/zapret-winws)
- См. [#765](https://github.com/Flowseal/zapret-discord-youtube/issues/765)
### Файлы не запускаются
- См. [#522](https://github.com/Flowseal/zapret-discord-youtube/issues/522)
### Требуется цифровая подпись драйвера WinDivert (Windows 7)
- Замените файлы `WinDivert.dll` и `WinDivert64.sys` в папке [`bin`](./bin) на одноименные из [zapret-win-bundle/win7](https://github.com/bol-van/zapret-win-bundle/tree/master/win7)
### Не работает вместе с VPN
- Отключите функцию **TUN** (Tunneling) в настройках вашего VPN
### При удалении с помощью [**`service_remove.bat`**](./service_remove.bat), WinDivert остается в службах
1. Узнайте название службы с помощью команды, в командной строке Windows (Win+R, `cmd`):
```cmd
driverquery | find "Divert"
```
2. Остановите и удалите службу командами:
```cmd
sc stop {название, которые вы узнали в шаге 1}
sc delete {название, которые вы узнали в шаге 1}
```
### Не нашли своей проблемы
* Создайте её [тут](https://github.com/Flowseal/zapret-discord-youtube/issues)
## 🗒️Добавление адресов прочих заблокированных ресурсов
Список блокирующихся адресов для обхода можно расширить, добавляя их в:
- [`list-general.txt`](./list-general.txt) для файлов `general *.bat`
- [`list-discord.txt`](./list-discord.txt) для файла [`discord.bat`](./discord.bat)
> [!IMPORTANT]
> После обновления списка адресов zapret необходимо перезапустить.
## ⭐Поддержка проекта
Вы можете поддержать проект, поставив :star: этому репозиторию (сверху справа этой страницы)
Также, вы можете материально поддержать разработчика zapret [тут](https://github.com/bol-van/zapret/issues/590#issuecomment-2408866758)
## ⚖️Лицензирование
Проект распространяется на условиях лицензии [MIT](https://github.com/Flowseal/zapret-discord-youtube/blob/main/LICENSE.txt)
## 🩷Благодарность участникам проекта
[](https://github.com/Flowseal/zapret-discord-youtube/graphs/contributors)
💖 Отдельная благодарность разработчику [zapret](https://github.com/bol-van/zapret) - [bol-van](https://github.com/bol-van)
## /bin/WinDivert.dll
Binary file available at https://raw.githubusercontent.com/Flowseal/zapret-discord-youtube/refs/heads/main/bin/WinDivert.dll
## /bin/WinDivert64.sys
Binary file available at https://raw.githubusercontent.com/Flowseal/zapret-discord-youtube/refs/heads/main/bin/WinDivert64.sys
## /bin/cygwin1.dll
Binary file available at https://raw.githubusercontent.com/Flowseal/zapret-discord-youtube/refs/heads/main/bin/cygwin1.dll
## /bin/quic_initial_www_google_com.bin
Binary file available at https://raw.githubusercontent.com/Flowseal/zapret-discord-youtube/refs/heads/main/bin/quic_initial_www_google_com.bin
## /bin/tls_clienthello_www_google_com.bin
Binary file available at https://raw.githubusercontent.com/Flowseal/zapret-discord-youtube/refs/heads/main/bin/tls_clienthello_www_google_com.bin
## /bin/winws.exe
Binary file available at https://raw.githubusercontent.com/Flowseal/zapret-discord-youtube/refs/heads/main/bin/winws.exe
## /check_updates.bat
```bat path="/check_updates.bat"
@echo off
setlocal EnableDelayedExpansion
chcp 437 > nul
:: Set current version and URLs
set "LOCAL_VERSION=1.7.0"
set "GITHUB_VERSION_URL=https://raw.githubusercontent.com/Flowseal/zapret-discord-youtube/main/.service/version.txt"
set "GITHUB_RELEASE_URL=https://github.com/Flowseal/zapret-discord-youtube/releases/tag/"
set "GITHUB_DOWNLOAD_URL=https://github.com/Flowseal/zapret-discord-youtube/releases/latest/download/zapret-discord-youtube-"
:: Get the latest version from GitHub
for /f "delims=" %%A in ('powershell -command "(Invoke-WebRequest -Uri \"%GITHUB_VERSION_URL%\" -Headers @{\"Cache-Control\"=\"no-cache\"} -TimeoutSec 5).Content.Trim()" 2^>nul') do set "GITHUB_VERSION=%%A"
:: Error handling
if not defined GITHUB_VERSION (
echo Error: Failed to fetch the latest version. Check your internet connection
goto :EOF
)
:: Version comparison
if "%LOCAL_VERSION%"=="%GITHUB_VERSION%" (
echo Latest version installed: %LOCAL_VERSION%
) else (
echo New version available: %GITHUB_VERSION%
echo Release page: %GITHUB_RELEASE_URL%%GITHUB_VERSION%
set /p "CHOICE=Do you want to automatically download the new version? (y/n, default: y): "
if "!CHOICE!"=="" set "CHOICE=y"
if /i "!CHOICE!"=="y" (
echo Opening the download page...
start "" "%GITHUB_DOWNLOAD_URL%%GITHUB_VERSION%.rar"
)
)
if not "%1"=="soft" pause
endlocal
```
## /cloudflare_switch.bat
```bat path="/cloudflare_switch.bat"
@echo off
chcp 65001 > nul
:: 65001 - UTF-8
:: Admin rights check
if "%1"=="admin" (
echo Started with admin rights
) else (
echo Requesting admin rights...
powershell -Command "Start-Process 'cmd.exe' -ArgumentList '/c \"\"%~f0\" admin\"' -Verb RunAs"
exit /b
)
set "LISTS=%~dp0lists\"
set "FILE=%LISTS%ipset-cloudflare.txt"
if not exist "%FILE%" (
echo Error! ipset-cloudflare.txt not found, path: %FILE%
goto :eof
)
findstr /C:"0.0.0.0" "%FILE%" >nul
if %ERRORLEVEL%==0 (
echo Enabling cloudflare bypass...
>"%FILE%" (
echo 173.245.48.0/20
echo 103.21.244.0/22
echo 103.22.200.0/22
echo 103.31.4.0/22
echo 141.101.64.0/18
echo 108.162.192.0/18
echo 190.93.240.0/20
echo 188.114.96.0/20
echo 197.234.240.0/22
echo 198.41.128.0/17
echo 162.158.0.0/15
echo 104.16.0.0/13
echo 104.24.0.0/14
echo 172.64.0.0/13
echo 131.0.72.0/22
)
) else (
echo Disabling cloudflare bypass...
>"%FILE%" (
echo 0.0.0.0/32
)
)
echo Done.
pause
```
## /discord.bat
```bat path="/discord.bat"
@echo off
chcp 65001 > nul
:: 65001 - UTF-8
cd /d "%~dp0"
call service_status.bat zapret
call check_updates.bat soft
echo:
set "BIN=%~dp0bin\"
set "LISTS=%~dp0lists\"
start "zapret: discord" /min "%BIN%winws.exe" --wf-tcp=443 --wf-udp=443,50000-50100 ^
--filter-udp=443 --hostlist="%LISTS%list-discord.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-udp=50000-50100 --filter-l7=discord,stun --dpi-desync=fake --dpi-desync-repeats=6 --new ^
--filter-tcp=443 --hostlist="%LISTS%list-discord.txt" --dpi-desync=split --dpi-desync-split-pos=1 --dpi-desync-autottl --dpi-desync-fooling=badseq --dpi-desync-repeats=8
```
## /general (ALT).bat
```bat path="/general (ALT).bat"
@echo off
chcp 65001 > nul
:: 65001 - UTF-8
cd /d "%~dp0"
call service_status.bat zapret
call check_updates.bat soft
echo:
set "BIN=%~dp0bin\"
set "LISTS=%~dp0lists\"
start "zapret: general (ALT)" /min "%BIN%winws.exe" --wf-tcp=80,443 --wf-udp=443,50000-50100 ^
--filter-udp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-udp=50000-50100 --filter-l7=discord,stun --dpi-desync=fake --dpi-desync-repeats=6 --new ^
--filter-tcp=80 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake,split --dpi-desync-autottl=5 --dpi-desync-repeats=6 --dpi-desync-fooling=badseq --dpi-desync-fake-tls="%BIN%tls_clienthello_www_google_com.bin" --new ^
--filter-udp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-tcp=80 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake,split --dpi-desync-autottl=5 --dpi-desync-repeats=6 --dpi-desync-fooling=badseq --dpi-desync-fake-tls="%BIN%tls_clienthello_www_google_com.bin"
```
## /general (ALT2).bat
```bat path="/general (ALT2).bat"
@echo off
chcp 65001 > nul
:: 65001 - UTF-8
cd /d "%~dp0"
call service_status.bat zapret
call check_updates.bat soft
echo:
set "BIN=%~dp0bin\"
set "LISTS=%~dp0lists\"
start "zapret: general (ALT2)" /min "%BIN%winws.exe" --wf-tcp=80,443 --wf-udp=443,50000-50100 ^
--filter-udp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-udp=50000-50100 --filter-l7=discord,stun --dpi-desync=fake --dpi-desync-repeats=6 --new ^
--filter-tcp=80 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=split2 --dpi-desync-split-seqovl=652 --dpi-desync-split-pos=2 --dpi-desync-split-seqovl-pattern="%BIN%tls_clienthello_www_google_com.bin" --new ^
--filter-udp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-tcp=80 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=split2 --dpi-desync-split-seqovl=652 --dpi-desync-split-pos=2 --dpi-desync-split-seqovl-pattern="%BIN%tls_clienthello_www_google_com.bin"
```
## /general (ALT3).bat
```bat path="/general (ALT3).bat"
@echo off
chcp 65001 > nul
:: 65001 - UTF-8
cd /d "%~dp0"
call service_status.bat zapret
call check_updates.bat soft
echo:
set "BIN=%~dp0bin\"
set "LISTS=%~dp0lists\"
start "zapret: general (ALT3)" /min "%BIN%winws.exe" --wf-tcp=80,443 --wf-udp=443,50000-50100 ^
--filter-udp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-udp=50000-50100 --filter-l7=discord,stun --dpi-desync=fake --dpi-desync-repeats=6 --new ^
--filter-tcp=80 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=split --dpi-desync-split-pos=1 --dpi-desync-autottl --dpi-desync-fooling=badseq --dpi-desync-repeats=8 --new ^
--filter-udp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-tcp=80 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=split --dpi-desync-split-pos=1 --dpi-desync-autottl --dpi-desync-fooling=badseq --dpi-desync-repeats=8
```
## /general (ALT4).bat
```bat path="/general (ALT4).bat"
@echo off
chcp 65001 > nul
:: 65001 - UTF-8
cd /d "%~dp0"
call service_status.bat zapret
call check_updates.bat soft
echo:
set "BIN=%~dp0bin\"
set "LISTS=%~dp0lists\"
start "zapret: general (ALT4)" /min "%BIN%winws.exe" --wf-tcp=80,443 --wf-udp=443,50000-50100 ^
--filter-udp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-udp=50000-50100 --filter-l7=discord,stun --dpi-desync=fake --dpi-desync-repeats=6 --new ^
--filter-tcp=80 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake,split2 --dpi-desync-repeats=6 --dpi-desync-fooling=md5sig --dpi-desync-fake-tls="%BIN%tls_clienthello_www_google_com.bin" --new ^
--filter-udp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-tcp=80 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake,split2 --dpi-desync-repeats=6 --dpi-desync-fooling=md5sig --dpi-desync-fake-tls="%BIN%tls_clienthello_www_google_com.bin"
```
## /general (ALT5).bat
```bat path="/general (ALT5).bat"
@echo off
chcp 65001 > nul
:: 65001 - UTF-8
:: NOT RECOMMENDED
cd /d "%~dp0"
call service_status.bat zapret
call check_updates.bat soft
echo:
set "BIN=%~dp0bin\"
set "LISTS=%~dp0lists\"
start "zapret: general (ALT5)" /min "%BIN%winws.exe" --wf-tcp=80,443 --wf-udp=443,50000-50100 ^
--filter-udp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-udp=50000-50100 --filter-l7=discord,stun --dpi-desync=fake --dpi-desync-repeats=6 --new ^
--filter-tcp=80 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-l3=ipv4 --filter-tcp=443 --dpi-desync=syndata --new ^
--filter-tcp=80 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-udp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
```
## /general (FAKE TLS MOD ALT).bat
```bat path="/general (FAKE TLS MOD ALT).bat"
@echo off
chcp 65001 > nul
:: 65001 - UTF-8
cd /d "%~dp0"
call service_status.bat zapret
call check_updates.bat soft
echo:
set "BIN=%~dp0bin\"
set "LISTS=%~dp0lists\"
start "zapret: general (FAKE TLS MOD ALT)" /min "%BIN%winws.exe" --wf-tcp=80,443 --wf-udp=443,50000-50100 ^
--filter-udp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-udp=50000-50100 --filter-l7=discord,stun --dpi-desync=fake --dpi-desync-repeats=6 --new ^
--filter-tcp=80 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake --dpi-desync-fooling=md5sig --dpi-desync-fake-tls-mod=rnd,rndsni,padencap --new ^
--filter-udp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-tcp=80 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake --dpi-desync-fooling=md5sig --dpi-desync-fake-tls-mod=rnd,rndsni,padencap
```
## /general (FAKE TLS MOD AUTO).bat
```bat path="/general (FAKE TLS MOD AUTO).bat"
@echo off
chcp 65001 > nul
:: 65001 - UTF-8
cd /d "%~dp0"
call service_status.bat zapret
call check_updates.bat soft
echo:
set "BIN=%~dp0bin\"
set "LISTS=%~dp0lists\"
start "zapret: general (FAKE TLS MOD AUTO)" /min "%BIN%winws.exe" --wf-tcp=80,443 --wf-udp=443,50000-50100 ^
--filter-udp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake --dpi-desync-repeats=11 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-udp=50000-50100 --filter-l7=discord,stun --dpi-desync=fake --dpi-desync-repeats=6 --new ^
--filter-tcp=80 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake,fakedsplit --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake,multidisorder --dpi-desync-split-pos=1,midsld --dpi-desync-repeats=11 --dpi-desync-fooling=md5sig --dpi-desync-fake-tls-mod=rnd,dupsid,sni=www.google.com --new ^
--filter-udp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake --dpi-desync-repeats=11 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-tcp=80 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake,fakedsplit --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake,multidisorder --dpi-desync-split-pos=1,midsld --dpi-desync-repeats=11 --dpi-desync-fooling=md5sig
```
## /general (FAKE TLS MOD).bat
```bat path="/general (FAKE TLS MOD).bat"
@echo off
chcp 65001 > nul
:: 65001 - UTF-8
cd /d "%~dp0"
call service_status.bat zapret
call check_updates.bat soft
echo:
set "BIN=%~dp0bin\"
set "LISTS=%~dp0lists\"
start "zapret: general (FAKE TLS MOD)" /min "%BIN%winws.exe" --wf-tcp=80,443 --wf-udp=443,50000-50100 ^
--filter-udp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake --dpi-desync-repeats=8 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-udp=50000-50100 --filter-l7=discord,stun --dpi-desync=fake --dpi-desync-repeats=6 --new ^
--filter-tcp=80 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=3 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake --dpi-desync-ttl=4 --dpi-desync-fake-tls-mod=rnd,rndsni,padencap --new ^
--filter-udp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake --dpi-desync-repeats=8 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-tcp=80 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=3 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake --dpi-desync-ttl=4 --dpi-desync-fake-tls-mod=rnd,rndsni,padencap
```
## /general (ÃÂÃÂâá).bat
```bat path="/general (ÃÂÃÂâá).bat"
@echo off
chcp 65001 > nul
:: 65001 - UTF-8
cd /d "%~dp0"
call service_status.bat zapret
call check_updates.bat soft
echo:
set "BIN=%~dp0bin\"
set "LISTS=%~dp0lists\"
start "zapret: general (MGTS)" /min "%BIN%winws.exe" --wf-tcp=80,443 --wf-udp=443,50000-50100 ^
--filter-udp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-udp=50000-50100 --filter-l7=discord,stun --dpi-desync=fake --dpi-desync-repeats=6 --new ^
--filter-tcp=80 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake --dpi-desync-autottl=2 --dpi-desync-repeats=6 --dpi-desync-fooling=badseq --dpi-desync-fake-tls="%BIN%tls_clienthello_www_google_com.bin" --new ^
--filter-udp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-tcp=80 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake --dpi-desync-autottl=2 --dpi-desync-repeats=6 --dpi-desync-fooling=badseq --dpi-desync-fake-tls="%BIN%tls_clienthello_www_google_com.bin"
```
## /general (ÃÂÃÂâá2).bat
```bat path="/general (ÃÂÃÂâá2).bat"
@echo off
chcp 65001 > nul
:: 65001 - UTF-8
cd /d "%~dp0"
call service_status.bat zapret
call check_updates.bat soft
echo:
set "BIN=%~dp0bin\"
set "LISTS=%~dp0lists\"
start "zapret: general (MGTS2)" /min "%BIN%winws.exe" --wf-tcp=80,443 --wf-udp=443,50000-50100 ^
--filter-udp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-udp=50000-50100 --filter-l7=discord,stun --dpi-desync=fake --dpi-desync-repeats=6 --new ^
--filter-tcp=80 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fooling=md5sig --dpi-desync-fake-tls="%BIN%tls_clienthello_www_google_com.bin" --new ^
--filter-udp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-tcp=80 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fooling=md5sig --dpi-desync-fake-tls="%BIN%tls_clienthello_www_google_com.bin"
```
## /general.bat
```bat path="/general.bat"
@echo off
chcp 65001 > nul
:: 65001 - UTF-8
cd /d "%~dp0"
call service_status.bat zapret
call check_updates.bat soft
echo:
set "BIN=%~dp0bin\"
set "LISTS=%~dp0lists\"
start "zapret: general" /min "%BIN%winws.exe" --wf-tcp=80,443 --wf-udp=443,50000-50100 ^
--filter-udp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-udp=50000-50100 --filter-l7=discord,stun --dpi-desync=fake --dpi-desync-repeats=6 --new ^
--filter-tcp=80 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --hostlist="%LISTS%list-general.txt" --dpi-desync=fake,multidisorder --dpi-desync-split-pos=midsld --dpi-desync-repeats=8 --dpi-desync-fooling=md5sig,badseq --new ^
--filter-udp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic="%BIN%quic_initial_www_google_com.bin" --new ^
--filter-tcp=80 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new ^
--filter-tcp=443 --ipset="%LISTS%ipset-cloudflare.txt" --dpi-desync=fake,multidisorder --dpi-desync-split-pos=midsld --dpi-desync-repeats=6 --dpi-desync-fooling=md5sig,badseq
```
## /lists/ipset-cloudflare.txt
173.245.48.0/20
103.21.244.0/22
103.22.200.0/22
103.31.4.0/22
141.101.64.0/18
108.162.192.0/18
190.93.240.0/20
188.114.96.0/20
197.234.240.0/22
198.41.128.0/17
162.158.0.0/15
104.16.0.0/13
104.24.0.0/14
172.64.0.0/13
131.0.72.0/22
## /lists/list-discord.txt
cloudflare-ech.com
dis.gd
discord-attachments-uploads-prd.storage.googleapis.com
discord.app
discord.co
discord.com
discord.design
discord.dev
discord.gift
discord.gifts
discord.gg
discord.media
discord.new
discord.status
discord.store
discordapp.com
discordapp.net
discordcdn.com
discordmerch.com
discordpartygames.com
discordsays.com
discordsez.com
discord-activities.com
discordactivities.com
stable.dl2.discordapp.net
## /lists/list-general.txt
cloudflare-ech.com
dis.gd
discord-attachments-uploads-prd.storage.googleapis.com
discord.app
discord.co
discord.com
discord.design
discord.dev
discord.gift
discord.gifts
discord.gg
discord.media
discord.new
discord.store
discord.status
discord-activities.com
discordactivities.com
discordapp.com
discordapp.net
discordcdn.com
discordmerch.com
discordpartygames.com
discordsays.com
discordsez.com
ggpht.com
googlevideo.com
jnn-pa.googleapis.com
stable.dl2.discordapp.net
wide-youtube.l.google.com
youtube-nocookie.com
youtube-ui.l.google.com
youtube.com
youtubeembeddedplayer.googleapis.com
youtubekids.com
youtubei.googleapis.com
youtu.be
yt-video-upload.l.google.com
ytimg.com
ytimg.l.google.com
frankerfacez.com
ffzap.com
betterttv.net
7tv.app
7tv.io
## /service_diagnostics.bat
```bat path="/service_diagnostics.bat"
@echo off
setlocal EnableDelayedExpansion
:: Admin rights check
if "%1"=="admin" (
echo Started with admin rights
cls
) else (
echo Requesting admin rights...
powershell -Command "Start-Process 'cmd.exe' -ArgumentList '/c \"\"%~f0\" admin\"' -Verb RunAs"
exit /b
)
:: AdguardSvc.exe
tasklist /FI "IMAGENAME eq AdguardSvc.exe" | find /I "AdguardSvc.exe" > nul
if !errorlevel!==0 (
call :PrintRed "[X] Adguard process found. Adguard may cause problems with Discord"
call :PrintRed "https://github.com/Flowseal/zapret-discord-youtube/issues/417"
) else (
call :PrintGreen "Adguard check passed"
)
echo:
:: Killer
sc query | findstr /I "Killer" > nul
if !errorlevel!==0 (
call :PrintRed "[X] Killer services found. Killer conflicts with zapret"
call :PrintRed "https://github.com/Flowseal/zapret-discord-youtube/issues/2512#issuecomment-2821119513"
) else (
call :PrintGreen "Killer check passed"
)
echo:
:: Check Point
sc query | findstr /I "Check" | findstr /I "Point" > nul
if !errorlevel!==0 (
call :PrintRed "[X] Check Point services found. Check Point conflicts with zapret"
call :PrintRed "Try to uninstall Check Point"
) else (
call :PrintGreen "Check Point check passed"
)
echo:
:: SmartByte
sc query | findstr /I "SmartByte" > nul
if !errorlevel!==0 (
call :PrintRed "[X] SmartByte services found. SmartByte conflicts with zapret"
call :PrintRed "Try to uninstall or disable SmartByte through services.msc"
) else (
call :PrintGreen "SmartByte check passed"
)
echo:
:: VPN
sc query | findstr /I "VPN" > nul
if !errorlevel!==0 (
call :PrintYellow "[?] Some VPN services found. Some VPNs can conflict with zapret"
call :PrintYellow "Make sure that all VPNs are disabled"
) else (
call :PrintGreen "VPN check passed"
)
echo:
:: DNS
set "dnsfound=0"
for /f "skip=1 tokens=*" %%a in ('wmic nicconfig where "IPEnabled=true" get DNSServerSearchOrder /format:table') do (
echo %%a | findstr /i "192.168." >nul
if !errorlevel!==0 (
set "dnsfound=1"
)
)
if !dnsfound!==1 (
call :PrintYellow "[?] DNS servers are probably not specified."
call :PrintYellow "Provider's DNS servers are automatically used, which may affect zapret. It is recommended to install well-known DNS servers and setup DoH"
) else (
call :PrintGreen "DNS check passed"
)
echo:
:: Discord cache clearing
echo Do you want to clear the Discord cache? (Y/N) (default: Y)
set /p answer=
if "%answer%"=="" set answer=Y
if "%answer%"=="y" set answer=Y
if /i "%answer%"=="Y" (
tasklist /FI "IMAGENAME eq Discord.exe" | findstr /I "Discord.exe" > nul
if !errorlevel!==0 (
echo Discord is running, closing...
taskkill /IM Discord.exe /F > nul
if !errorlevel! == 0 (
call :PrintGreen "Discord was successfully closed"
) else (
call :PrintRed "Unable to close Discord"
)
)
set "discordCacheDir=%appdata%\discord"
for %%d in ("Cache" "Code Cache" "GPUCache") do (
set "dirPath=!discordCacheDir!\%%~d"
if exist "!dirPath!" (
rd /s /q "!dirPath!"
if !errorlevel!==0 (
call :PrintGreen "Successfully deleted !dirPath!"
) else (
call :PrintRed "Failed to delete !dirPath!"
)
) else (
call :PrintRed "!dirPath! does not exist"
)
)
)
echo:
pause
exit /b
:: Utility functions
:PrintGreen
powershell -Command "Write-Host \"%~1\" -ForegroundColor Green"
exit /b
:PrintRed
powershell -Command "Write-Host \"%~1\" -ForegroundColor Red"
exit /b
:PrintYellow
powershell -Command "Write-Host \"%~1\" -ForegroundColor Yellow"
exit /b
```
## /service_install.bat
```bat path="/service_install.bat"
@echo off
setlocal EnableDelayedExpansion
chcp 65001 > nul
:: 65001 - UTF-8
:: Admin rights check
if "%1"=="admin" (
echo Started with admin rights
) else (
echo Requesting admin rights...
powershell -Command "Start-Process 'cmd.exe' -ArgumentList '/c \"\"%~f0\" admin\"' -Verb RunAs"
exit /b
)
:: Main
cd /d "%~dp0"
set "BIN_PATH=%~dp0bin\"
set "LISTS_PATH=%~dp0lists\"
:: Checking for updates
call check_updates.bat soft
echo:
:: Searching for .bat files in current folder, except files that start with "service"
echo Pick one of the options:
set "count=0"
for %%f in (*.bat) do (
set "filename=%%~nxf"
if /i not "!filename:~0,7!"=="service" if /i not "!filename:~0,13!"=="check_updates" if /i not "!filename:~0,17!"=="cloudflare_switch" (
set /a count+=1
echo !count!. %%f
set "file!count!=%%f"
)
)
:: Choosing file
set "choice="
set /p "choice=Input file index (number): "
if "!choice!"=="" goto :eof
set "selectedFile=!file%choice%!"
if not defined selectedFile (
echo Wrong choice, exiting...
pause
goto :eof
)
:: Args that should be followed by value
set "args_with_value=sni"
:: Parsing args (mergeargs: 2=start param|3=arg with value|1=params args|0=default)
set "args="
set "capture=0"
set "mergeargs=0"
set QUOTE="
for /f "tokens=*" %%a in ('type "!selectedFile!"') do (
set "line=%%a"
echo !line! | findstr /i "%BIN%winws.exe" >nul
if not errorlevel 1 (
set "capture=1"
)
if !capture!==1 (
if not defined args (
set "line=!line:*%BIN%winws.exe"=!"
)
set "temp_args="
for %%i in (!line!) do (
set "arg=%%i"
if not "!arg!"=="^" (
if "!arg:~0,2!" EQU "--" if not !mergeargs!==0 (
set "mergeargs=0"
)
if "!arg:~0,1!" EQU "!QUOTE!" (
set "arg=!arg:~1,-1!"
echo !arg! | findstr ":" >nul
if !errorlevel!==0 (
set "arg=\!QUOTE!!arg!\!QUOTE!"
) else if "!arg:~0,1!"=="@" (
set "arg=\!QUOTE!@%~dp0!arg:~1!\!QUOTE!"
) else if "!arg:~0,5!"=="%%BIN%%" (
set "arg=\!QUOTE!!BIN_PATH!!arg:~5!\!QUOTE!"
) else if "!arg:~0,7!"=="%%LISTS%%" (
set "arg=\!QUOTE!!LISTS_PATH!!arg:~7!\!QUOTE!"
) else (
set "arg=\!QUOTE!%~dp0!arg!\!QUOTE!"
)
)
if !mergeargs!==1 (
set "temp_args=!temp_args!,!arg!"
) else if !mergeargs!==3 (
set "temp_args=!temp_args!=!arg!"
set "mergeargs=1"
) else (
set "temp_args=!temp_args! !arg!"
)
if "!arg:~0,2!" EQU "--" (
set "mergeargs=2"
) else if !mergeargs!==2 (
set "mergeargs=1"
) else if !mergeargs!==1 (
for %%x in (!args_with_value!) do (
if /i "%%x"=="!arg!" (
set "mergeargs=3"
)
)
)
)
)
if not "!temp_args!"=="" (
set "args=!args! !temp_args!"
)
)
)
:: Creating service with parsed args
set ARGS=%args%
echo Final args: !ARGS!
set SRVCNAME=zapret
net stop %SRVCNAME% >nul 2>&1
sc delete %SRVCNAME% >nul 2>&1
sc create %SRVCNAME% binPath= "\"%BIN_PATH%winws.exe\" %ARGS%" DisplayName= "zapret" start= auto
sc description %SRVCNAME% "Zapret DPI bypass software"
sc start %SRVCNAME%
pause
endlocal
```
## /service_remove.bat
```bat path="/service_remove.bat"
@echo off
chcp 65001 > nul
:: 65001 - UTF-8
if "%1"=="admin" (
echo Started with admin rights
) else (
echo Requesting admin rights...
powershell -Command "Start-Process 'cmd.exe' -ArgumentList '/c \"\"%~f0\" admin\"' -Verb RunAs"
exit /b
)
set SRVCNAME=zapret
net stop %SRVCNAME%
sc delete %SRVCNAME%
net stop "WinDivert"
sc delete "WinDivert"
net stop "WinDivert14"
sc delete "WinDivert14"
pause
endlocal
```
## /service_status.bat
```bat path="/service_status.bat"
@echo off
setlocal EnableDelayedExpansion
chcp 65001 > nul
:: 65001 - UTF-8
if "%~1"=="" (
echo Checking services and tasks...
call :test_service zapret
call :test_service WinDivert
tasklist /FI "IMAGENAME eq winws.exe" | find /I "winws.exe" > nul
if !errorlevel!==0 (
echo Bypass is ACTIVE
) else (
echo Bypass NOT FOUND
)
pause
) else (
call :test_service "%~1" "soft"
)
exit /b
:test_service
set "ServiceName=%~1"
set "ServiceStatus="
for /f "tokens=3 delims=: " %%A in ('sc query "%ServiceName%" ^| findstr /i "STATE"') do set "ServiceStatus=%%A"
set "ServiceStatus=%ServiceStatus: =%"
if "%ServiceStatus%"=="RUNNING" (
if "%~2"=="soft" (
echo "%ServiceName%" is ALREADY RUNNING as service, use "service_remove.bat" first if you want to run standalone bat.
pause
) else (
echo "%ServiceName%" service is RUNNING.
)
) else if not "%~2"=="soft" (
echo "%ServiceName%" is NOT running.
)
exit /b
```
The better and more specific the context, the better the LLM can follow instructions. If the context seems verbose, the user can refine the filter using uithub. Thank you for using https://uithub.com - Perfect LLM context for any GitHub repo.