gitextract_4uyv479r/ ├── .clang-format ├── .clang-tidy ├── .cmake-format ├── .conan/ │ └── recipes/ │ └── boringssl/ │ └── conanfile.py ├── .dockerignore ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── custom.md │ │ └── feature_request.md │ └── workflows/ │ └── main.yml ├── .gitignore ├── CLAUDE.md ├── CMakeLists.txt ├── LICENSE ├── README.md ├── README_RU.md ├── conanfile.py ├── cpplint.py ├── depends/ │ └── cmake/ │ ├── CamouflageTLS.cmake │ ├── FetchBase64.cmake │ ├── FetchLibTunTap.cmake │ ├── FetchWintun.cmake │ └── NtpClient.cmake ├── deploy/ │ ├── docker/ │ │ ├── Dockerfile │ │ ├── config/ │ │ │ ├── supervisor/ │ │ │ │ ├── dns-server.conf │ │ │ │ └── fptn-server.conf │ │ │ └── supervisord.conf │ │ └── scripts/ │ │ ├── start-dns-server.sh │ │ ├── start-fptn.sh │ │ └── token-generator.py │ ├── linux/ │ │ ├── deb/ │ │ │ ├── README.md │ │ │ ├── create-client-cli-deb-package.sh │ │ │ ├── create-client-gui-deb-package.sh │ │ │ └── create-server-deb-package.sh │ │ └── wifi/ │ │ ├── README.md │ │ ├── README.ru.md │ │ ├── dnsmasq/ │ │ │ ├── fptn-dnsmasq.conf │ │ │ └── fptn-dnsmasq.service │ │ ├── fptn-setup-network/ │ │ │ ├── fptn-setup-network.service │ │ │ └── fptn-setup-network.sh │ │ └── hostapd/ │ │ ├── fptn-hostapd.conf │ │ └── fptn-hostapd.service │ ├── macos/ │ │ ├── README.md │ │ ├── assets/ │ │ │ └── FptnClient.icns │ │ ├── create-pkg.py │ │ └── scripts/ │ │ ├── fptn-client-cli-wrapper.sh │ │ ├── fptn-client-gui-wrapper.sh │ │ ├── post_install.sh │ │ └── uninstall.sh │ ├── sni/ │ │ ├── global.sni │ │ └── russia.sni │ └── windows/ │ ├── .gitignore │ ├── README.md │ ├── conan-replace-version.py │ ├── create-installer.py │ └── installer/ │ ├── app.manifest │ └── fptn-installer.iss ├── docker-compose/ │ ├── .gitignore │ ├── README.md │ └── docker-compose.yml ├── docs/ │ ├── CNAME │ ├── index-ru.html │ └── index.html ├── pyproject.toml ├── renovate.json ├── src/ │ ├── common/ │ │ ├── client_id.h │ │ ├── data/ │ │ │ ├── channel.h │ │ │ └── channel_async.h │ │ ├── jwt_token/ │ │ │ └── token_manager.h │ │ ├── logger/ │ │ │ └── logger.h │ │ ├── network/ │ │ │ ├── ip_address.h │ │ │ ├── ip_packet.h │ │ │ ├── ipv4_generator.h │ │ │ ├── ipv6_generator.h │ │ │ ├── ipv6_utils.h │ │ │ ├── net_interface.h │ │ │ ├── resolv.h │ │ │ ├── tun/ │ │ │ │ ├── darwin_tun_device.h │ │ │ │ ├── linux_tun_device.h │ │ │ │ └── win_tun_device.h │ │ │ └── utils.h │ │ ├── system/ │ │ │ └── command.h │ │ ├── user/ │ │ │ └── common_user_manager.h │ │ └── utils/ │ │ ├── base64.h │ │ └── utils.h │ ├── fptn-client/ │ │ ├── CMakeLists.txt │ │ ├── config/ │ │ │ ├── config_file.cpp │ │ │ └── config_file.h │ │ ├── fptn-client-cli.cpp │ │ ├── fptn-client-gui.cpp │ │ ├── gui/ │ │ │ ├── autostart/ │ │ │ │ └── autostart.h │ │ │ ├── autoupdate/ │ │ │ │ └── autoupdate.h │ │ │ ├── resources/ │ │ │ │ ├── resources.qrc │ │ │ │ └── translations/ │ │ │ │ ├── .gitignore │ │ │ │ ├── fptn_en.ts │ │ │ │ └── fptn_ru.ts │ │ │ ├── server_menu_item_widget/ │ │ │ │ ├── server_menu_item_widget.cpp │ │ │ │ └── server_menu_item_widget.h │ │ │ ├── settingsmodel/ │ │ │ │ ├── settingsmodel.cpp │ │ │ │ └── settingsmodel.h │ │ │ ├── settingswidget/ │ │ │ │ ├── settings.cpp │ │ │ │ └── settings.h │ │ │ ├── sni_autoscan_dialog/ │ │ │ │ ├── sni_autoscan_dialog.cpp │ │ │ │ └── sni_autoscan_dialog.h │ │ │ ├── sni_manager/ │ │ │ │ ├── sni_manager.cpp │ │ │ │ └── sni_manager.h │ │ │ ├── speedwidget/ │ │ │ │ ├── speedwidget.cpp │ │ │ │ └── speedwidget.h │ │ │ ├── style/ │ │ │ │ ├── style.cpp │ │ │ │ └── style.h │ │ │ ├── tokendialog/ │ │ │ │ ├── tokendialog.cpp │ │ │ │ └── tokendialog.h │ │ │ ├── translations/ │ │ │ │ ├── translations.cpp │ │ │ │ └── translations.h │ │ │ └── tray/ │ │ │ ├── tray.cpp │ │ │ └── tray.h │ │ ├── plugins/ │ │ │ ├── base_plugin.h │ │ │ ├── blacklist/ │ │ │ │ ├── domain_blacklist.cpp │ │ │ │ └── domain_blacklist.h │ │ │ └── split/ │ │ │ ├── tunneling.cpp │ │ │ └── tunneling.h │ │ ├── routing/ │ │ │ ├── route_manager.cpp │ │ │ └── route_manager.h │ │ ├── utils/ │ │ │ ├── brotli/ │ │ │ │ └── brotli.h │ │ │ ├── macos/ │ │ │ │ └── admin.h │ │ │ ├── signal/ │ │ │ │ └── main_loop.h │ │ │ ├── speed_estimator/ │ │ │ │ ├── server_info.h │ │ │ │ ├── speed_estimator.cpp │ │ │ │ └── speed_estimator.h │ │ │ ├── utils.h │ │ │ └── windows/ │ │ │ └── vpn_conflict.h │ │ └── vpn/ │ │ ├── http/ │ │ │ ├── client.cpp │ │ │ └── client.h │ │ ├── vpn_client.cpp │ │ └── vpn_client.h │ ├── fptn-passwd/ │ │ ├── CMakeLists.txt │ │ └── fptn-passwd.cpp │ ├── fptn-protocol-lib/ │ │ ├── CMakeLists.txt │ │ ├── https/ │ │ │ ├── api_client/ │ │ │ │ ├── api_client.cpp │ │ │ │ └── api_client.h │ │ │ ├── censorship_strategy.h │ │ │ ├── obfuscator/ │ │ │ │ ├── methods/ │ │ │ │ │ ├── detector.h │ │ │ │ │ ├── obfuscator_interface.h │ │ │ │ │ ├── tls/ │ │ │ │ │ │ ├── tls_obfuscator.cpp │ │ │ │ │ │ └── tls_obfuscator.h │ │ │ │ │ └── tls2/ │ │ │ │ │ ├── tls_obfuscator2.cpp │ │ │ │ │ └── tls_obfuscator2.h │ │ │ │ └── tcp_stream/ │ │ │ │ └── tcp_stream.h │ │ │ ├── utils/ │ │ │ │ ├── change_cipher_spec.h │ │ │ │ └── tls/ │ │ │ │ ├── tls.cpp │ │ │ │ └── tls.h │ │ │ └── websocket_client/ │ │ │ ├── websocket_client.cpp │ │ │ └── websocket_client.h │ │ ├── protobuf/ │ │ │ ├── protocol.cpp │ │ │ ├── protocol.h │ │ │ └── protocol.proto │ │ └── time/ │ │ ├── time_provider.cpp │ │ └── time_provider.h │ └── fptn-server/ │ ├── .gitignore │ ├── CMakeLists.txt │ ├── client/ │ │ ├── session.cpp │ │ └── session.h │ ├── config/ │ │ ├── command_line_config.cpp │ │ └── command_line_config.h │ ├── filter/ │ │ ├── filters/ │ │ │ ├── antiscan/ │ │ │ │ ├── antiscan.cpp │ │ │ │ └── antiscan.h │ │ │ ├── base_filter.h │ │ │ └── bittorrent/ │ │ │ ├── bittorrent.cpp │ │ │ └── bittorrent.h │ │ ├── manager.cpp │ │ └── manager.h │ ├── fptn-server.cpp │ ├── nat/ │ │ ├── table.cpp │ │ └── table.h │ ├── network/ │ │ ├── virtual_interface.cpp │ │ └── virtual_interface.h │ ├── routing/ │ │ ├── iptables.cpp │ │ └── iptables.h │ ├── statistic/ │ │ ├── metrics.cpp │ │ └── metrics.h │ ├── traffic_shaper/ │ │ ├── leaky_bucket.cpp │ │ └── leaky_bucket.h │ ├── user/ │ │ ├── user_manager.cpp │ │ └── user_manager.h │ ├── vpn/ │ │ ├── manager.cpp │ │ └── manager.h │ └── web/ │ ├── api/ │ │ └── handle.h │ ├── handshake/ │ │ ├── handshake_cache_manager.cpp │ │ └── handshake_cache_manager.h │ ├── listener/ │ │ ├── listener.cpp │ │ └── listener.h │ ├── server.cpp │ ├── server.h │ └── session/ │ ├── session.cpp │ └── session.h ├── sysadmin-tools/ │ ├── grafana/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── configs/ │ │ │ ├── grafana/ │ │ │ │ ├── dashboards/ │ │ │ │ │ ├── dashboards.yaml │ │ │ │ │ ├── fptn_dashboard.json │ │ │ │ │ └── node-exporter-full.json │ │ │ │ └── datasources/ │ │ │ │ └── datasources.yaml │ │ │ ├── nginx/ │ │ │ │ └── nginx.conf.template │ │ │ └── prometheus/ │ │ │ └── prometheus.yaml.template │ │ ├── docker-compose.build.yml │ │ ├── docker-compose.yml │ │ └── proxy-server/ │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── CMakeLists.txt │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── conanfile.py │ │ └── src/ │ │ └── proxy-server.cpp │ └── telegram-bot/ │ ├── .gitignore │ ├── Dockerfile │ ├── README.md │ ├── configs/ │ │ ├── premium_servers.json.demo │ │ ├── servers.json.demo │ │ └── servers_censored_zone.json.demo │ ├── docker-compose.yml │ └── src/ │ ├── bot.py │ └── requirements.txt └── tests/ ├── CMakeLists.txt ├── common/ │ ├── CMakeLists.txt │ ├── data/ │ │ └── ChannelTest.cpp │ └── network/ │ ├── ClientStopRaceTest.cpp │ ├── IPv4GeneratorTest.cpp │ ├── IPv6GeneratorTest.cpp │ ├── IPv6UtilsTest.cpp │ └── TunDeviceTest.cpp ├── fptnlib/ │ ├── CMakeLists.txt │ └── api_client/ │ └── ApiClientTest.cpp └── server/ ├── CMakeLists.txt ├── filter/ │ └── antiscan/ │ └── AntiScanTest.cpp └── statistic/ └── MetricTest.cpp